Raspberry PiにDockerでMirakurun/EPGStationを導入する
ずっとやろうと思っていたところ新年に時間が取れたので一気にやっつけた。 それほど目新しいものはないが自分用のメモを兼ねてまとめておく。
ハードウェア
ハードウェア自体は前から持っていたので新たに購入したものはない。
- Raspbery Pi 4B (RAM4GB版)
- 地デジチューナー PX-S1UD
- 適当なMicroSDカード (32GB)
- 適当な外付けHDD
構築の流れ
Raspberry Pi OSを導入
公式サイトからイメージをダウンロードする。
GUIは不要なのでRaspberry Pi OS Lite、メモリは4GBしかないので32bitを選択した。
メモリ8GBの場合は64bitを選択した方がいいが、64bitの場合は後ほど導入するハードウェアエンコードの設定方法が異なるようなので注意。
ディスプレイなしでセットアップするためイメージを焼いたあとにいくつか設定しておく。
-
SSHサーバを有効化
デフォルトではSSHサーバが有効になっていないため bootパーティション直下にssh
という空のファイルを作成する -
ユーザを作成
過去のRaspberry Pi OSではpiというユーザがデフォルトで作成されていたが、最近はそれがなくなったらしい。
ひとまず昔と同じようにpiユーザを作成する。方法はbootパーティション直下にuserconf.txt
を作成してユーザ名とパスワード(のハッシュ)を格納しておく。参照:Raspberry Pi Documentation - Configuration
いったん弱いパスワードで設定したがあとでパスワードは無効化するため問題ない。
touch /boot/ssh
echo pi:$(echo password | openssl passwd -6 -stdin) >/boot/userconf.txt
OS設定
以上の内容でSDカードをセットアップしたらSSHでログインできる状態でOSが起動してくる。 SSHでログインできるようになったら以下の設定を入れていく
アップデート
sudo rpi-update
sudo apt update
sudo apt upgrade
raspi-config
sudo raspi-config
- ホスト名を設定
- VNCを無効化
- locale -> en_US.UTF-8に設定
- Timezone -> Asia/Tokyo
- Expand filesystem
いったんここでrebootしておく
パスワード無効化
authorized_keys
に公開鍵を設定 (ssh-copy-idを使用)してから以下を実行
sudo passwd -d pi
sudo sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/g' /etc/ssh/sshd_config
sudo systemctl restart ssh
スワップを無効化
SDカードの書き込みを減らすために設定
sudo swapoff --all
sudo systemctl stop dphys-swapfile
sudo systemctl disable dphys-swapfile
時刻同期
$ sudo apt install -y chrony
$ sudo vi /etc/chrony/chrony.conf
// pool行を「pool time.google.com iburst」に変更
$ sudo systemctl restart chrony
Bluetoothを無効化
少しでも消費電力を少なくするために設定しておく
$ cat <<EOF | sudo tee -a /boot/config.txt
# Disable Bluetooth
dtoverlay=disable-bt
EOF
$ sudo systemctl disable hciuart.service
$ sudo systemctl disable bluealsa.service
$ sudo systemctl disable bluetooth.service
WiFi無効化
sudo iwconfig wlan0 txpower off
ハードウェアエンコード有効化
echo 'SUBSYSTEM=="vchiq",GROUP="video",MODE="0666"' | sudo tee /etc/udev/rules.d/10-vchiq-permissions.rules
外付けHDDをマウント
$ sudo apt install xfsprogs
$ sudo fdisk /dev/sda
// sda1を作成
$ sudo mkfs.xfs /dev/sda1
$ sudo mkdir /mnt/recorded
$ echo '/dev/sda1 /mnt/recorded xfs defaults 0 0' | sudo tee -a /etc/fstab
$ sudo mount -a
$ sudo chmod 777 /mnt/recorded
最後にパーミッションを777にしているのはEPGStationコンテナ内のプロセス(ffmpeg)から書き込みできるようにするため。
ネットではEPGStationのUIDを1000にするのがよく見つかるが、UIDを固定するのがしっくりこなかったため自分はこのようにした。
このあたりで一度rebootしておく。
チューナードライバをインストール
メジャーなチューナーなので方法は検索すればすぐ見つかる。
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/
カードリーダー
これは不要かもしれない
sudo apt install pcscd pcsc-tools libccid
sudo pcsc_scan
最後に「Japanese Chijou Digital B-CAS Card (pay TV)」という文字列が表示される。 Ctrl-Cで終了。
Docker
curl -sSL https://get.docker.com/ | CHANNEL=stable sh
sudo usermod -aG docker $USER
最後のusermod
はpiユーザでsudoなしでdocker
コマンドを実行できるようにするため。
変更を反映させるためにSSHで再ログインしておく。
Mirakurun/EPGStation
一式をDockerで動かすためのComposeファイルはすでに公開されているが、Raspberry Piではそのままでは動かないためいくつか変更する。
同様の試みをしている方もいたが、中身がやや古いので最新版をベースに自分でやり直した。
CH3COOH/docker-mirakurun-epgstation: Mirakurun + EPGStation on Docker
リポジトリはここで公開している。
uyorum/rpi-docker-mirakurun-epgstation: Mirakurun + EPGStation on Docker tuned for Raspberry Pi
curl -sf https://raw.githubusercontent.com/uyorum/rpi-docker-mirakurun-epgstation/v2/setup.sh | sh -s
cd rpi-docker-mirakurun-epgstation
mirakurun/conf/channels.yml
とdocker-compose.yml
を適宜編集する。
自分の場合、録画データは外付けHDDをマウントした/mnt/recorded
に保存したかったのでdocker-compose.yml
を以下のように変更した。
@@ -52,7 +52,7 @@ services:
- ./epgstation/data:/app/data
- ./epgstation/thumbnail:/app/thumbnail
- ./epgstation/logs:/app/logs
- - ./recorded:/app/recorded
+ - /mnt/recorded:/app/recorded
- /opt/vc/lib:/opt/vc/lib:ro
environment:
TZ: "Asia/Tokyo"
編集が終わったら以下のコマンドでコンテナを起動する。初回はイメージのビルドとともにffmpegをビルドするので数十分かかる。
docker compose up -d
コンテナが無事起動したらチャンネルスキャンを実行しておく。
curl -X PUT "http://localhost:40772/api/config/channels/scan"
これでhttp://IP:8888
にアクセスすればEPGStationのWebUIが表示される。
以上