TV録画機の再構築 ~3.Samba/Mirakurun/EPGstationのインストール~

概要

この記事では、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の公式サイトがこちら。

公式サイト Compose file

docker-compose.yamlというファイル名でも後方互換性の一環として読み込むけれども、好ましいファイル名は"compose.yaml"だそう。

また、.envファイルを使うことで環境変数を活用することができる。
環境変数を活用することで、compose.yamlにSAMBAのユーザー名とパスワードを直接記述することを避ける。

Composeにおける環境変数

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 - もとのコードをForkしたリスト

Github - Rpi4 PX-W3U4 Bullseye ただし、32bitOS

過去記事

lsp.hatenablog.jp

lsp.hatenablog.jp