酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

録画サーバー構築② Raspberry Pi 4の設定

(2023/02/25追記)この記事の内容は古いです。本記事をリライトした「Raspberry Pi 4 と docker-mirakurun-epgstation で録画サーバーを構築する (2023年2月版)」をご覧ください。

(2021/04/06追記)この記事の内容は古いです。本記事をリライトした「Raspberry Pi 4とdocker-mirakurun-epgstationで録画サーバーを構築する (2021年4月版)」をご覧ください。

本記事は「2021年3月版録画サーバー構築シリーズ」の第2回目です。前の話は「録画サーバー構築① 先行例の調査と機材の購入」をご覧ください。次の話は「録画サーバー構築③ Dockerを利用してMirakurunとEPGStationをインストールする」をご覧ください。


Amazonにしては珍しく遅く発送まで2日かかった。ようやくRaspberry Pi 4 Model B 4GB(以下、ラズパイ)が届いたので、ラズパイの設定を進めていくことにした。

録画サーバーを構築するにあたり、基本的に以下の2記事を読みながらそのまま進めていった。

しかし、これらの記事の執筆時点とはソフトのバージョンなど環境が異なるためかそのまま適用できなかった箇所があった。

特にEPGStationは2021年1月にv2がリリースされて設定方法が変わっていたりする。本記事はさくさん自身のために書いた記事なので説明不足が多い点、また2021年3月に書かれたものであることに留意して欲しい。

Raspberry Pi OS Lite のインストール

ラズパイはmicroSDに書き込まれたOSで動く。このOSの構築がかなり面倒だった記憶があるが、現在ではボタンをクリックするだけで簡単に構築できるようになっている。少なくともこの時点で躓くことはない。

Raspberry Pi Imagerを公式ページからダウンロードする。2021年3月時点では v1.3 が最新となっている。

www.raspberrypi.org

Raspberry Pi Imagerを起動して[CHOOSE OS]ボタンをクリックする。

デスクトップ機能は不要なので「Raspberry Pi OS (other)」を選択する。

OSには「Raspberry Pi OS Lite (32bit)」を選択する。

あとは適切なmicroSDカードを選択して、[WRITE]ボタンをクリックするだけである。

[WRITE]ボタンをクリックすると書き込みが開始する。Lite版なので容量も少なく10分くらいで書き込みは完了する。

ラズパイの設定:sshの有効化

macOS側で対応。

boot直下にsshという名前の空ファイルがあると、起動後にssh接続できるようになる。

$ touch /Volumes/boot/ssh

ラズパイの設定:WiFiの有効化

macOS側で対応。

有線LANを接続するのが面倒くさいので最初から無線LANが使えるように「新規購入した Raspberry Pi をセットアップする - Hiroto's diary」を参考にして、ローカルPC側であらかじめ設定しておく。

$ touch /Volumes/boot/wpa_supplicant.conf
country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
    ssid="ルーターの SSID"
    psk="ルーターのパスワード"
}

macOS側から直接microSDを触るのはこれで終わり。

ローカルPCとラズパイの疎通確認

初回起動時は何か処理が動いているのかすごく時間がかかる。しばらくしたらWi-Fiルーター側から新規デバイスの接続通知がきた。

ラズパイが起動したのは確認したので、次はローカルPCからssh接続して繋がるか疎通確認をおこなう。ネットワーク内にラズパイが1台だけだった場合は raspberrypi.local で接続できる。超便利。

$ ssh pi@raspberrypi.local

ラズパイがWi-Fiに接続されていてもsshdが起動していなかったのか1回目は接続できなかった。

$ ssh pi@raspberrypi.local
ssh: connect to host raspberrypi.local port 22: Connection refused

さらに2分くらい経ったらアクセスできるようになった。途中パスワードを聞かれるので raspberry と入力したらログインできた。AWSのEC2に繋ぐ時よりも簡単で嬉しい。

$ ssh pi@raspberrypi.local
The authenticity of host 'raspberrypi.local' can't be established.

... (中略)

pi@raspberrypi:~ $ 

これでWi-Fi経由でラズパイにアクセスできるようになった。

ラズパイの設定:ライブラリのアップデート

すでにインストールされているライブラリ等が古くなっているのでまとめてアップデートする。

aptapt-get コマンドの違いがわからない。参考にした記事がバラバラなのでそれに追従してこの記事でもバラバラになっている。

sudo timedatectl set-timezone 'Asia/Tokyo'
sudo apt update && sudo apt upgrade -y
sudo apt install locales-all
sudo localectl set-locale 'LANG=ja_JP.UTF-8'

ロケールは日本語(日本)にしておいた。英語にする場合は

sudo localectl set-locale 'LANG=en_US.UTF-8'

ラズパイの設定:Vimのインストール

vim-tinyという謎なやつが入ってるので、vimを入れる。

dpkg -l | grep vi
sudo apt --purge remove vim-common vim-tiny
sudo apt autoremove
sudo apt install vim

さくさんはviの使い方がわからないのだ。

ラズパイの設定:ハードウェアエンコードの有効化

Raspberry Pi 4は、H.264のハードウェアエンコードを利用できるらしい。

echo 'SUBSYSTEM=="vchiq",GROUP="video",MODE="0666"' | sudo tee /etc/udev/rules.d/10-vchiq-permissions.rules

ラズパイの設定:スワップの無効化

microSDを保護するためにスワップによるアクセスを最小化させる。

sudo swapoff --all
sudo apt remove dphys-swapfile
sudo sed -i 's/$/ coherent_pool=4M dwc_otg.host_rx_fifo_size=2048/' /boot/cmdline.txt
sudo sed -i 's/^CONF_SWAPSIZE=100/CONF_SWAPSIZE=1024/' /etc/dphys-swapfile

ラズパイの設定:ログの最小化

microSDを保護するためにログによるアクセスを最小化させる。

sudo vim /etc/rsyslog.conf

rsyslog.conf を編集してコメントアウトする。

###############
#### RULES ####
###############

#
# First some standard log files.  Log by facility.
#
auth,authpriv.*                 /var/log/auth.log
*.*;auth,authpriv.none          -/var/log/syslog
#cron.*                         /var/log/cron.log
daemon.*                        -/var/log/daemon.log
kern.*                          -/var/log/kern.log
lpr.*                           -/var/log/lpr.log
mail.*                          -/var/log/mail.log
user.*                          -/var/log/user.log

###############
#### RULES ####
###############

#
# First some standard log files.  Log by facility.
#
auth,authpriv.*                 /var/log/auth.log
*.*;auth,authpriv.none          -/var/log/syslog
#cron.*                         /var/log/cron.log
#daemon.*                        -/var/log/daemon.log
#kern.*                          -/var/log/kern.log
#lpr.*                           -/var/log/lpr.log
#mail.*                          -/var/log/mail.log
#user.*                          -/var/log/user.log

PX-S1UD V2.0 チューナーのドライバのインストール

地上波チューナーとして「PX-S1UD」を採用している。

ドライバをインストールする。

wget http://plex-net.co.jp/plex/px-s1ud/PX-S1UD_driver_Ver.1.0.1.zip
unzip PX-S1UD_driver_Ver.1.0.1.zip
sudo cp PX-S1UD_driver_Ver.1.0.1/x64/amd64/isdbt_rio.inp /lib/firmware/
rm PX-S1UD_driver_Ver.1.0.1.zip
rm -rf PX-S1UD_driver_Ver.1.0.1

本来このタイミングで再起動して認識しているか確認するが、手間を省くために外付けHDDの設定と一緒に実施しよう。

再起動後に以下のコマンドを実行すれば、チューナーデバイスを正しく認識しているかどうか確認することができる。

$ dmesg | grep PX-S1UD
[    2.454637] usb 1-1.1: Product: PX-S1UD Digital TV Tuner

ラズパイの設定:外付けHDDの設定をマウントする

録画したデータを保存するため、ラズパイにはすでに外付けHDDをUSB接続している。ラズパイでHDDが接続されていることを認識しているか調べる。

$sudo fdisk -l

(中略)

Device      Start       End   Sectors   Size Type
/dev/sda1      40    409639    409600   200M EFI System
/dev/sda2  411648 250443775 250032128 119.2G Microsoft basic data

外付けHDDは /dev/sda2 として接続されていることがわかったのでマウントしておく。

sudo mkfs.ext4 /dev/sda2
sudo mkdir /data
sudo mount /dev/sda2 /data

これで /data で、外付けHDDにアクセスできる。録画サーバー構築の第3回ではgit cloneしたりdocker-composeでビルドしたりとファイルアクセス回数が増える。

(2021/03/21追記) 外付けHDDのパーティションをpi:piに変更する

/data で外付けHDDにアクセスできるようになったが、このままでは所有者が root:root となってしまう。第3回でh264_omxでビルドするにあたりffmpegを動かすようにするのに支障が出る。

ユーザーが/dataにアクセスできるように変更しておく。

sudo chown 1000:1000 /data

起動時に外付けHDDを自動マウントさせる

ラズパイの起動時に外付けHDDが自動でマウントさせるように設定する。まずは /dev/sda2 の UUID または PARTUUID を調べる。

$ sudo blkid /dev/sda2
/dev/sda2: UUID="xxxxxxx-xxxx-xxxx-xxxx-xxxxxxx" TYPE="ext4" PARTUUID="xxxxxxxx-xxxxx-xxxxx-xxxx-xxxxxx950"

PARTUUIDが xxxxxxxx-xxxxx-xxxxx-xxxx-xxxxxx950 であると判明した。これを自動でマウントさせる。

sudo vim /etc/fstab

すでにいくつかデバイスが登録されているかもしれないので一番下の方に追記しておく。

PARTUUID=xxxxxxxx-xxxxx-xxxxx-xxxx-xxxxxx950 /data           ext4    defaults,nofail 0 0

ラズパイを再起動して、再度きちんとマウントされるか確認する。

sudo reboot

カードリーダーのドライバは不要

録画サーバー構築の記事を読んでいると必ずカードリーダーのドライバをインストールしてから Japanese Chijou Digital B-CAS Card (pay TV) が表示されれば成功!と書いているが、Dockerを使ってMirakurun + EPGStationをインストールするのでカードリーダーのドライバはインストールしない。すでにインストールしていたらアンインストールしておく。

l3tnun/docker-mirakurun-epgstationを利用するためカードリーダーのドライバは不要だ。

次回予告

文量が多くなったのでMirakurun + EPGStationのインストールは別に書く。

Dockerを使ってMirakurun + EPGStationをインストールしていく。l3tnun/docker-mirakurun-epgstation を利用する予定だ。

関連記事