(2023/02/25追記)この記事の内容は古いです。本記事をリライトした「Raspberry Pi 4 と docker-mirakurun-epgstation で録画サーバーを構築する (2023年2月版)」をご覧ください。
(2021/04/06追記)この記事の内容は古いです。本記事をリライトした「Raspberry Pi 4とdocker-mirakurun-epgstationで録画サーバーを構築する (2021年4月版)」をご覧ください。
本記事は「2021年3月版録画サーバー構築シリーズ」の第3回目です。前の話は「録画サーバー構築② Raspberry Pi 4の設定」をご覧ください。次の話は「録画サーバー構築④ ラズパイからNASへファイルを転送する」をご覧ください。
録画サーバーを構築するため、Raspberry Pi 4 Model B 4GB(以下、ラズパイ)の本体側の設定を前回終わらせた。
調べていくうちにMirakurunとEPGStationは、Dockerを使ってインストールするのが主流のようだ。ラズパイでもDockerを使うのは一般的なようで、環境の差異による相性問題を抱えることを嫌ってラズパイで録画サーバーを構築している身としてはありがたい。
今回はラズパイでDockerイメージを使うためにDockerとdocekr-composeの導入、Dockerを使ったMirakurunとEPGStationの導入について記す。
- Dockerのインストール
- gitのインストール
- Docker Composeのインストール
- MirakurunとEPGStationのセットアップ
- Mirakurunのチャンネルスキャン
- ffmpegのインストールはしない
- まとめ
- 関連記事
Dockerのインストール
ラズパイにDockerをインストールする。
$ curl -sSL https://get.docker.com/ | CHANNEL=stable sh $ docker -v Docker version 20.10.5, build 55c4c88
特に問題なくDockerのインストールができた。
sudo systemctl enable docker
gitのインストール
ラズパイには git
が入っていないのでインストールしておく。
sudo apt install -y git
Docker Composeのインストール
Dockerの導入は前述したように簡単だが docker-compose
のインストールはなかなか骨が折れる。
aptコマンドでインストールする docker-compose はバージョンが古いので手元でビルドする必要が、ビルドには時間がかかるので余裕を持って挑みたい。「Dockerとdocker-composeを ラズパイ4 と Linux(Debian) と Windows10 にそれぞれインストールする - Qiita」を参考にしてビルドした。
docker-composeの最新版(masterブランチ)は v1.28.5 だが、ラズパイでうまくビルドできなかった。参考にした記事と同じ v1.27.4 をビルドすることにした。
cd ~ git clone https://github.com/docker/compose.git cd compose git checkout 1.27.4 sudo ./script/build/linux
ビルドには1時間くらいかかった。ビルドが終了したら docker-compose
をパスが通る場所に移動させる。
cd dist sudo cp docker-compose-Linux-armv7l /usr/local/bin/docker-compose sudo chown root:root /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose
インストールできたかどうか確認する。
$ docker-compose -v docker-compose version 1.27.4, build 40524192
MirakurunとEPGStationのセットアップ
MirakurunとEPGStationを利用できるDockerコンテナはふたつ用意されている。
- l3tnun/docker-mirakurun-epgstation
- 公式で動作環境に利用しているDockerコンテナ (今回紹介するのはこっち)
- ykym/docker-mirakurun-epgstation-rpi
- ラズパイ向けにカスタマイズされたDockerコンテナ
当初はラズパイに特化している「ykym/docker-mirakurun-epgstation-rpi」の方を試していたが、どうしてもdocker-composeのビルドを通すことができなくて諦めた。
ラズパイで録画サーバーを構築している有志の記事を読むと「l3tnun/docker-mirakurun-epgstation」を利用しているようなので「RaspberryPi4+docker-mirakurun-epgstationで録画鯖を建てる - りつくろいす」を参考に導入を進めた。
cd /data sudo mkdir docker-mirakurun-epgstation #sudo chown 1000:1000 docker-mirakurun-epgstation sudo chown pi:pi docker-mirakurun-epgstation git clone https://github.com/l3tnun/docker-mirakurun-epgstation.git # configファイルをコピーする cd docker-mirakurun-epgstation cp docker-compose-sample.yml docker-compose.yml cp epgstation/config/config.sample.yml epgstation/config/config.yml cp epgstation/config/operatorLogConfig.sample.yml epgstation/config/operatorLogConfig.yml cp epgstation/config/epgUpdaterLogConfig.sample.yml epgstation/config/epgUpdaterLogConfig.yml cp epgstation/config/serviceLogConfig.sample.yml epgstation/config/serviceLogConfig.yml
docker-compose.ymlの 書き換え
docker-composeのビルドに向けて、ラズパイで動く設定に変更する。
vim docker-compose.yml
- mysqlの
image: mariadb:10.4
をyobasystems/alpine-mariadb
に書き換えた。 - mysqlの
command: mysqld
のmysqld
を削除した。 - Docker内の
/app/recorded
をホスト側の/data/recorded
に割り当てた。
mysql: #image: mariadb:10.4 image: yobasystems/alpine-mariadb volumes: - mysql-db:/var/lib/mysql environment: MYSQL_USER: epgstation MYSQL_PASSWORD: epgstation MYSQL_ROOT_PASSWORD: epgstation MYSQL_DATABASE: epgstation TZ: "Asia/Tokyo" #command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci --performance-schema=false --expire_logs_days=1 command: --character-set-server=utf8 --collation-server=utf8_unicode_ci --performance-schema=false --expire_logs_days=1 restart: always (中略) epgstation: build: epgstation volumes: - /etc/localtime:/etc/localtime:ro - ./epgstation/config:/app/config - ./epgstation/data:/app/data - ./epgstation/thumbnail:/app/thumbnail - ./epgstation/logs:/app/logs #- ./recorded:/app/recorded - /data/recorded:/app/recorded environment: TZ: "Asia/Tokyo" depends_on: - mirakurun - mysql ports: - "8888:8888" - "8889:8889" #user: "1000:1000" user: "1000:1000" restart: always
docker-mirakurun-epgstationの起動
docker-mirakurun-epgstationを起動する。
cd /data/docker-mirakurun-epgstation sudo docker-compose up -d
初回起動時はffmpegのビルドが走るので30分ほど時間がかかる。 http://raspberrypi.local:8888/ にアクセスすることで、EPGStation が見られるようになった。
番組表に何も映っていないのはまだチャンネルスキャンが完了していないためだ。
Docker操作まとめ
Dockerを停止する。
cd /data/docker-mirakurun-epgstation sudo docker-compose down
Dockerを起動する。
cd /data/docker-mirakurun-epgstation sudo docker-compose up -d
Mirakurunのチャンネルスキャン
macOS側のターミナルで実行する。
curl -X PUT "http://raspberrypi.local:40772/api/config/channels/scan"
チャンネルスキャン自体は10〜15分ほどで終わるが、EPGの受信には数時間かかるので放置しておくとよい。
ffmpegのインストールはしない
docker-mirakurun-epgstation
ではDockerの起動時にffmpegのビルドをおこなうため、ラズパイのホストOS側でffmpegのインストールをする必要はない。
まとめ
ここまでの内容で、ラズパイでMirakurunとEPGStationを動かすことはできるようになった。
ラズパイというハードウェアレギュレーションが定まっているので、問題を解決するのも簡単なので(簡単とは言っていない)、問題をひとつひとつ解決して、本記事に書いた手順として整えることができて嬉しい。
ところで記述していなかったが解決していない問題も多く残っている。
- ✅ 公式のdcocker-compose.ymlでビルドしているffmpegでは h264_omx コーデックが使えない
- 💯 ffmpegのビルド設定を変更したので h264_omx が使えるようになった
- ✅ h264_omx用に enc.js を書き換えれない
- 書き換えた -> CH3COOH/docker-mirakurun-epgstation
- ✅ EPGStation上からh264_omxを使ったエンコード操作ができない (0バイトのファイルができる)
- ❓ Dockerコンテナにログインするとh264_omxを使ったエンコードはできるがEPGStationからだと失敗してしまう
- ❓ 両方ともrootユーザーだったもののコンテナにログインするとrootグループ所属だった。EPGStationの録画処理を実行しているのは videoグループだから失敗したのか?
- 💯 動画データを保存するディレクトリの所有権を pi:pi にしたら h264_omx を使えるようになった
- ✅ エンコードした動画をNASに転送したい
- 💯 rsyncを使ってNASへ動画ファイルをコピーできるようにした -> この記事
- 💯 未アクセス時にはNASとの接続を切るようにした
- ✅ docker-mirakurun-epgstation の書き換え項目が多いので、この手順書では他人に気軽にオススメできない
- 💯 元リポジトリをforkしてラズパイ向けに最小限だけ変更した CH3COOH/docker-mirakurun-epgstationを作成した
これらの問題は今週末あたりに片付けられたら嬉しい。