概要
この記事では、Rapberry Pi4内のDocker上に以下を設定するために必要なことを記載する。
- Samba
- Mirakurun
- EPGStation
全体の構成図
※ 赤枠部が本記事での対象
ソフトウェア一覧
- 録画コマンド: recpt1
- チューナー制御: Mirakurun
- 録画管理: EPG Station
データ復号: 何か + arib25ライブラリ
Docker Image:
- samba: dperson/samba:aarch64
- mirakurun: node:16-buster-slim
- epgstation: l3tnun/epgstation:master-debian
ディレクトリ構成
構成の概略
docker ├── 設定ファイル └── 各serviceごとのディレクトリ └── Dockerfile、アプリの設定ファイル、 イメージの作成に必要なファイルなど
ディレクトリ構成の取得方法
少なくともRaspberry Pi OSのLite版にはtreeコマンドが入っていなかったのでインストール。
$ sudo apt-get -y install --no-install-recommends tree
treeコマンドで表示
補足: オプションの-I以降はシングルクォーテーションの中に表示が不要なものを正規表現で記載。パイプで連結可能。
$ tree -aF -L 5 -I '.png|old'
ディレクトリ構成 〜詳細〜
docker ├── .env # composeの環境変数を記載。 │ samba用のUID,GIDなどを記載している。 ├── compose.yaml # docker composeの内容を記載 ├── epgstation/ │ ├── Dockerfile # service名のディレクトリ直下にDockerfile │ ├── config/ # epgstationのコンフィグ。 │ │ template,sampleを持ってきて編集。 │ ├── data/ │ ├── logs/ │ └── thumbnail/ ├── mirakurun/ │ ├── Dockerfile │ ├── conf/ # channels.ymlはここ │ └── db/ └── samba/ └── smb.conf
Sambaのインストール
compose.yaml/smb.confの設定
docker/docker composeを使って、Sambaを起動する。
Sambaのイメージはこちらを使った。
SambaのDockerImage-dperson/samba
docker composeの公式サイトがこちら。
docker-compose.yamlというファイル名でも後方互換性の一環として読み込むけれども、好ましいファイル名は"compose.yaml"だそう。
また、.envファイルを使うことで環境変数を活用することができる。
環境変数を活用することで、compose.yamlにSAMBAのユーザー名とパスワードを直接記述することを避ける。
compose.yaml
services: samba: container_name: samba image: dperson/samba:aarch64 restart: always volumes: - ~/samba:/samba - ./samba/smb.conf:/tmp/smb.conf ports: - "139:139" - "445:445" environment: - TZ=Asia/Tokyo - USERID=1000 - GROUPID=1000 tty: true stdin_open: true command: '-r -I /tmp/smb.conf -u "${SMBUSER};${SMBPASSWD}"'
smb.conf
[USB-SSD] comment = Raspberry Pi 4 browseable = yes path = /samba guest ok = no read only = no veto files = /.apdisk/.DS_Store/.TemporaryItems/.Trashes/desktop.ini/ehthumbs.db/Network Trash Folder/Temporary Items/Thumbs.db/ delete veto files = yes valid users = [ユーザー名] hosts allow = 192.168.1. fe80::/10
veto files,delete veto filesは、commandで"-s"オプションを使った時に生成された内容を活用している。
補足:
"-s"オプションとは、dperson/sambaのイメージでsamba.shというスクリプトに-sの引数で、smb.confに設定したときと同じ設定ができるオプション。
その場合に、veto filesなどが自動生成されるため、その内容を使っている。
自動起動の設定
docker composeで"up"と設定していれば、docker起動時に該当のコンテナも起動する。
サーバーにサービスを設定するイメージ。
逆に、"run"で起動した場合には、その一回きりとなってしまう。
サーバーとして動作させたい場合は、"up"を用いる。
$ docker compose -f docker/compose.yaml up -d
反対に、"down"をしておけば、OSリブート後にコンテナは再起動しない。
$ docker compose -f docker/compose.yaml down
もしくは、Docker自体が自動起動の設定になっていない場合にも、当然だがコンテナは起動しない。
mirakurunのインストール
B-CASのデコード用ライブラリのインストール
- 何か
- libarib25
- recpt1
- pm2
- install Mirakurun
libarib25をmakeするときにこのライブラリだけ必要なので、インストール。
$ sudo apt -y install libpcsclite-dev
$ sudo apt-get install cmake g++ $ cd [一時的なフォルダー] $ git clone https://github.com/stz2012/libarib25.git $ cd libarib25/cmake $ cmake .. $ make $ sudo make install
recpt1のビルドとインストール
pt1_dev.hにPX-W3U4 のデバイス名を追加してからビルドする。(./configure に--enable-b25オプションが必要)
$ cd $ sudo apt-get -y install autoconf $ git clone https://github.com/stz2012/recpt1.git $ cd recpt1/recpt1 $ sed -i -e "/^char \*bsdev\[NUM_BSDEV\] = {$/a \ \ \ \ \"/dev/px4video1\",\n\ \ \ \ \"/dev/px4video0\"," pt1_dev.h $ sed -i -e "/^char \*isdb_t_dev\[NUM_ISDB_T_DEV\] = {$/a \ \ \ \ \"/dev/px4video2\",\n\ \ \ \ \"/dev/px4video3\"," pt1_dev.h $ ./autogen.sh $ ./configure --enable-b25 $ make $ sudo make install
動作確認
地上波、BSをそれぞれ録画できるか確認。
$ recpt1 --b25 --strip 24 10 test_ts.ts $ recpt1 --b25 --strip BS01_0 10 test_bs.ts
Mirakurunの設定
チューナーの設定
Mirakurunにアクセス(http://[raspberrypiのIPアドレス]:40772)
Config - Tunersを選択して、px4_drvのデバイスを登録する
カードリーダーなどを使う場合には、"decoder: arib-b25-stream-test" の記載が必要。
今回は使用しないので、decoderの欄には何も記入しない。
- name: PX4-S1 types: - BS - CS command: recpt1 --b25 --strip --device /dev/px4video0 <channel> - - #decoder: arib-b25-stream-test isDisabled: false - name: PX4-S2 types: - BS - CS command: recpt1 --b25 --strip --device /dev/px4video1 <channel> - - #decoder: arib-b25-stream-test isDisabled: false - name: PX4-T1 types: - GR command: recpt1 --b25 --strip --device /dev/px4video2 <channel> - - #decoder: arib-b25-stream-test isDisabled: false - name: PX4-T2 types: - GR command: recpt1 --b25 --strip --device /dev/px4video3 <channel> - - #decoder: arib-b25-stream-test isDisabled: false
チャンネルスキャン
# 地上波 curl -X PUT "http://localhost:40772/api/config/channels/scan?type=GR&setDisabledOnAdd=false&refresh=true" # BS curl -X PUT "http://localhost:40772/api/config/channels/scan?type=BS&setDisabledOnAdd=false&refresh=true" # CS curl -X PUT "http://localhost:40772/api/config/channels/scan?type=CS&setDisabledOnAdd=false&refresh=true" # 終わったら docker compose で再起動
EPGStation
設定ファイルのコピー
$ cd /app $ cp config/config.yml.template config/config.yml
合計6つのファイルがあるので、すべてコピーしておく。
templateやsampleが存在していないとログにWarningが出る場合あり。
- config.yml.template
- enc-enhance.js.template
- enc.js.template
- epgUpdaterLogConfig.sample.yml
- operatorLogConfig.sample.yml
- serviceLogConfig.sample.yml
設定ファイルの編集
# config.jsonの編集 $ vi config/config.json
以下の項目を編集する。
#mirakurunのパス設定(もしmirakurunとEPGStationが同一ホストの場合の設定であれば変更すること) # mirakurunPath: http+unix://%2Fvar%2Frun%2Fmirakurun.sock/ ↓ mirakurunPath: 'http://mirakurun:40772/' # sqliteの有効化 dbtype: sqlite # 正規表現での検索の有効化 sqlite: extensions: - '/app/regexp.so' regexp: true # mysqlの無効化 #dbtype: mysql #mysql: # host: mysql # port: 3306 # user: epgstation # password: epgstation # database: epgstation # EPGの更新間隔(720分=12時間) (構築初期はデフォルト値。安定してきたら長くする。) # epgUpdateIntervalTime: 720 # DropチェックとそのLog(構築初期だけのお試し。安定してきたらこれらの行をコメントアウトする予定。dropLogはフルパスで指定。) isEnabledDropCheck: true dropLog: '/app/recorded' # 保存ファイルのフォーマットをタイトルのみにする recordedFormat: '%TITLE%'
詳細はこちらを参照すること -> config.yml 詳細マニュアル
参考
Docker上での構築方法
小茂根の暮らし - 【完全解説】LinuxとPX-W3U4でEPGStation v2を構築する方法(PX-Q3U4/W3PE4/Q3PE4)
Docker + RasPi4
Github - Rpi4 PX-W3U4 Bullseye ただし、32bitOS