酢ろぐ!

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

録画サーバー構築③ Dockerを利用してMirakurunとEPGStationをインストールする

(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のインストール

ラズパイに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コンテナはふたつ用意されている。

当初はラズパイに特化している「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.4yobasystems/alpine-mariadb に書き換えた。
  • mysqlの command: mysqldmysqld を削除した。
  • 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 を書き換えれない
  • ✅ EPGStation上からh264_omxを使ったエンコード操作ができない (0バイトのファイルができる)
    • ❓ Dockerコンテナにログインするとh264_omxを使ったエンコードはできるがEPGStationからだと失敗してしまう
    • ❓ 両方ともrootユーザーだったもののコンテナにログインするとrootグループ所属だった。EPGStationの録画処理を実行しているのは videoグループだから失敗したのか?
    • 💯 動画データを保存するディレクトリの所有権を pi:pi にしたら h264_omx を使えるようになった
  • ✅ エンコードした動画をNASに転送したい
    • 💯 rsyncを使ってNASへ動画ファイルをコピーできるようにした -> この記事
    • 💯 未アクセス時にはNASとの接続を切るようにした
  • ✅ docker-mirakurun-epgstation の書き換え項目が多いので、この手順書では他人に気軽にオススメできない

これらの問題は今週末あたりに片付けられたら嬉しい。

関連記事