rokkonet

PC・Androidソフトウェア・アプリの開発・使い方に関するメモ

Docker版「Mirakurun + MySQL + EPGStation」をPLEX PX-W3U4チューナーのXubuntu 22.04にインストール

2024 Jan. 14.
2023 Dec. 30.
2023 Nov. 13.
2023 Oct. 09.

参考
【家】録画鯖のリプレース(その他 その他)by @由貴 - みんカラ PLEX PX-Q3PE4 で docker-mirakurun-epgstation を使いたい #Docker - Qiita
【完全解説】LinuxとPX-W3U4でEPGStation v2を構築する方法(PX-Q3U4/W3PE4/Q3PE4) | ページ 2 | 小茂根の暮らし

PLEXチューナーでのチューナーデバイスと録画コマンド

PLEXチューナーで使うpx4_drvドライバではチューナーデバイスは /dev/px4_drv[n] となる。
/dev/px4_drv[n]は、Mirakurun標準の録画コマンドdvbv5-zapでは利用できず、recpt1コマンドで利用できる。
MirakurunでPLEXチューナーを使うには、Mirakurunが/dev/px4_drv[n]にアクセスでき、recpt1を利用できるようにする必要がある。
Mirakurunでのaribデコードにはarib-b25-stream-testが使われるので、libarib25は不要。

利用するMirakurunとEPGStationについて

(手順)

PCにPLEX PX-W3U4チューナー、B-CAS ICカードリーダ、録画ファイル保存用ストレージを接続する。


ロケールタイムゾーンを設定する

$ sudo apt update
$ sudo apt install language-pack-ja
$ sudo update-locale LANG=ja_JP.UTF-8
$ sudo timedatectl set-timezone Asia/Tokyo

時刻サーバーに同期させる

$ echo 'NTP=ntp.nict.jp' | sudo tee -a /etc/systemd/timesyncd.conf >/dev/null
$ echo 'FallbackNTP=ntp1.jst.mfeed.ad.jp ntp2.jst.mfeed.ad.jp ntp3.jst.mfeed.ad.jp' | sudo tee -a /etc/systemd/timesyncd.conf >/dev/null

// サービス再起動
$ sudo systemctl restart systemd-timesyncd

// 状態確認
$ systemctl status systemd-timesyncd

ビルドツール、インストールツールをインストール

$ sudo apt install build-essential git unzip dkms pkg-config automake cmake curl libssl-dev libtool libboost-all-dev yasm

(オプション)swapを無効化する

$ sudo swapoff --all
$ sudo reboot

(オプション)/tmpをtmpfsにする

/etc/fstabに次の行を書き込み、システムを再起動する。
tmpfs /tmp tmpfs defaults,noatime 0 0

(オプション)ログをRAMディスクに書き込むようにする

$ echo "deb http://packages.azlux.fr/debian/ buster main" | sudo tee /etc/apt/sources.list.d/azlux.list
$ wget -qO - https://azlux.fr/repo.gpg.key | sudo apt-key add -
$ sudo apt update
$ sudo apt install -y log2ram

/etc/log2ram.confのSIZEとUSE_RSYNCの設定を次のようにする。
SIZE=256MB
USE_RSYNC=true

システムを再起動する。

$ sudo reboot

稼働確認

$ df -h | grep "log2ram"
log2ram         256M   60M  197M  24% /var/log

チューナー Plex PX-W3U4がPCに接続されていることを確認

$ lsusb
Bus 002 Device 002: ID 0511:083f N'Able (DataBook) Technologies, Inc. PXW3U4

次の記事を参考に、PLEX PX-W3U4をXubuntuにインストールする。

PLEX PX-W3U4 TVチューナー ドライバをxubuntu 22.04にインストール - rokkonet

次の記事を参考に、B-CASカードリーダをXubuntuにインストールする

ICカードリーダライタSCR3310-NTTComをxubuntuにインストール - rokkonet

pcscdを停止する

Mirakurunでは pcscdが稼働していてはいけない。

$ sudo systemctl stop pcscd.socket
$ sudo systemctl disable pcscd.socket
$ pcsc_scan
 次の出力があれば成功
  SCardEstablishContext: Service not available.

次の記事を参考に、Docker (version 18.06.0 and higher), docker-compose (version 1.22.0 and higher)をインストールする

Docker、docker-composeをubuntuにインストール - rokkonet

Docker版のMirakurun、MySQL、EPGStationを運用する任意の一般ユーザーを決める(ここではtvユーザーとする)

tvユーザーをdockerグループ、sudoグループ、videoグループに所属させ、ログインしなおす

・所属グループ追加

$ sudo usermod -aG docker,sudo,video tv

・いったんXubuntuからログアウトし、tvユーザーで再度ログインする

dockerディレクトリを作成する

$ su - tv
$ mkdir ~/docker

Docker版Mirakurunをインストールする

https://github.com/Chinachu/Mirakurun にアクセスし、Codeタブ画面にて最新タグを確認する。(ブランチ・ドロップダウンで Tags をクリックすると確認できる) 現時点では 3.9.0-rc.4 が最新タグ。
git clone コマンドの"-b"オプションで最新タグを指定する。

Mirakurunインストール

ホスト側(Dockerコンテナ外)のMirakurun用ディレクトリを作成する。

$ sudo mkdir -p /opt/mirakurun/run
$ sudo mkdir /opt/mirakurun/opt
$ sudo mkdir /opt/mirakurun/config
$ sudo mkdir /opt/mirakurun/data
$ sudo chmod 755 /opt/mirakurun /opt/mirakurun/*

$ sudo mkdir -p /RECORDED/FILES/DIR/thumbnail
$ sudo chmod 777 /RECORDED/FILES/DIR /RECORDED/FILES/DIR/thumbnail

まずEPGStationリポジトリをダウンロードする

参考
PLEX PX-Q3PE4 で docker-mirakurun-epgstation を使いたい #Docker - Qiita
【完全解説】LinuxとPX-W3U4でEPGStation v2を構築する方法(PX-Q3U4/W3PE4/Q3PE4) | ページ 4 | 小茂根の暮らし

https://github.com/l3tnun/docker-mirakurun-epgstation にアクセスし、Codeタブ画面にて最新ブランチを確認する。(ブランチ・ドロップダウンで View all branches をクリックすると確認できる) 現時点では v2 ブランチが最新。
git clone コマンドの"-b"オプションで最新ブランチを指定する。

$ su - tv
$ cd ~/docker
$ git clone https://github.com/l3tnun/docker-mirakurun-epgstation -b v2 docker-mirakurun-epgstation
$ cd docker-mirakurun-epgstation

docker-mirakurun-epgstationディレクトリ内のファイル状況
(この中のmirakurunは利用しない)

$ ls
LICENSE  Readme.md  docker-compose-sample.yml  docs  epgstation  mirakurun  recorded  setup.sh


Docker版Mirakurunのgitリポジトリを~/docker/docker-mirakurun-epgstationにダウンロード

参考
【家】録画鯖のリプレース(その他 その他)by @由貴 - みんカラ
PLEX PX-Q3PE4 で docker-mirakurun-epgstation を使いたい #Docker - Qiita
【完全解説】LinuxとPX-W3U4でEPGStation v2を構築する方法(PX-Q3U4/W3PE4/Q3PE4) | ページ 4 | 小茂根の暮らし

https://github.com/Chinachu/Mirakurun にアクセスし、Codeタブ画面でブランチ・ドロップダウンをクリックしTagsタブをクリックし、最新バージョンもしくは最新rc版を確認する。現時点では 3.9.0-rc.4 もしくは 3.8.0。
git clone コマンドの"-b"オプションに最新タグを指定する。

$ cd ~/docker/docker-mirakurun-epgstation
$ git clone https://github.com/Chinachu/Mirakurun -b 3.9.0-rc.4

docker-mirakurun-epgstationディレクトリ内のファイル状況

$ ls
LICENSE  Mirakurun  Readme.md  docker-compose-sample.yml  docs  epgstation  mirakurun  recorded  setup.sh

mirakurun が docker-mirakurun-epgstation にあったものでPlexチューナー(recpt1コマンド)を利用できない。Mirakurun が Mirakurun -b 3.9.0-rc.4で git clone したものでPlexチューナー(recpt1コマンド)を利用できる。

MirakurunのDockerfileを作成する

参考
【家】録画鯖のリプレース(その他 その他)by @由貴 - みんカラ
PLEX PX-Q3PE4 で docker-mirakurun-epgstation を使いたい #Docker - Qiita
【完全解説】LinuxとPX-W3U4でEPGStation v2を構築する方法(PX-Q3U4/W3PE4/Q3PE4) | ページ 4 | 小茂根の暮らし

$ mv ~/docker/docker-mirakurun-epgstation/Mirakurun/docker/Dockerfile ~/docker/docker-mirakurun-epgstation/Mirakurun/docker/Dockerfile.original

~/docker/docker-mirakurun-epgstation/Mirakurun/docker/Dockerfile ファイルを次の内容にする。(ここでは docker-mirakurun-epgstation/mirakurun/ ではなく docker-mirakurun-epgstation/Mirakurun/ を扱う)

(参考)マルチステートビルドDockerfile
Dockerのマルチステージビルドでimageを軽量化する

下記のDockerfileは recpt1とarib25をインストールするようになっている。

~/docker/docker-mirakurun-epgstation/Mirakurun/docker/Dockdrfile

ARG ARCH=
# FROM --platform=$BUILDPLATFORM ${ARCH}node:18.15.0-buster AS build
FROM ${ARCH}node:18.15.0-buster AS build
WORKDIR /app
ENV DOCKER=YES NODE_ENV=production
ADD . .
RUN apt-get update && \
    apt-get upgrade -y && \
    apt-get install -y --no-install-recommends build-essential && \
    npm install --production=false && \
    npm run build && \
    npm install -g --unsafe-perm --production

FROM ${ARCH}node:18.15.0-buster-slim
WORKDIR /app
ENV DEV="build-essential libtool autoconf git automake"
RUN apt-get update && \
    apt-get upgrade -y && \
    apt-get install -y --no-install-recommends \
        ca-certificates \
        make \
        gcc \
        g++ \
        pkg-config \
        pcscd \
        libpcsclite-dev \
        libccid \
#        libdvbv5-dev \
        pcsc-tools \
#        dvb-tools \
        $DEV && \
\
# arib25
\
apt install -y --no-install-recommends \
    autoconf \
    build-essential \
    cmake \
    curl \
    git \
    libssl-dev \
    libtool \
    libboost-all-dev \
    pkg-config \
    yasm && \
git clone https://github.com/stz2012/libarib25.git && \
cd libarib25 && \
cmake . && \
make && \
make install && \
ldconfig && \
\
# recpt1
\
git clone https://github.com/stz2012/recpt1 /tmp/recpt1 && \
cd /tmp/recpt1/recpt1 && \
./autogen.sh && \
./configure --enable-b25 && \
make && \
make install && \
rm -rf /tmp/recpt1 && \
\
apt-get -y remove $DEV && \
apt-get autoremove -y && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*

COPY --from=build /usr/local/lib/node_modules/mirakurun /app
CMD ["./docker/container-init.sh"]
EXPOSE 40772 9229

EPGStationのDockerfileを作成する(ファイルをコピーするだけ)

$ cd ~/docker/docker-mirakurun-epgstation/epgstation
$ cp debian.Dockerfile Dockerfile

docker-compose.ymlを作成する

参考
【家】録画鯖のリプレース(その他 その他)by @由貴 - みんカラ
PLEX PX-Q3PE4 で docker-mirakurun-epgstation を使いたい #Docker - Qiita

次の内容で~/docker/docker-mirakurun-epgstation/docker-compose.ymlを作成する。
81行目あたりの"- ./epgstation/thumbnail:/app/thumbnail"は録画サムネイルファイル保存用パスに合わせる。
83行目あたりの"- ./recorded:/app/recorded"は録画ファイル保存用パスに合わせる。
  書式 - ホスト側のPath:コンテナの絶対Path

Ver. 2024 Jan. 08

version: '3'
services:
    mirakurun:
        container_name: mirakurun-3.9.0-rc.4
        build:
            context: Mirakurun
            dockerfile: docker/Dockerfile
        # image: chinachu/mirakurun
        image: chinachu/mirakurun:3.9.0-rc.4
        cap_add:
            - SYS_ADMIN
            - SYS_NICE
        ports:
            - "40772:40772"
            - "9229:9229"
        environment:
            TZ: "Asia/Tokyo"
            # DOCKER_NETWORK: host
        # network_mode: host
        devices:
            - /dev/px4video0:/dev/px4video0
            - /dev/px4video1:/dev/px4video1
            - /dev/px4video2:/dev/px4video2
            - /dev/px4video3:/dev/px4video3
            - /dev/bus:/dev/bus
        volumes:
          # ** CAUTION **
          # (default) `/usr/local/mirakurun/*` has been moved to `/opt/mirakurun/*`
          # try:
          #   sudo mv -vf /usr/local/mirakurun /opt/mirakurun
          #   sudo mkdir -p /opt/mirakurun/run /opt/mirakurun/opt /opt/mirakurun/config /opt/mirakurun/data
          # you can change to any location if required.
          - type: bind
            source: /opt/mirakurun/run/
            target: /var/run/
          - type: bind
            source: /opt/mirakurun/opt/
            target: /opt/
          - type: bind
            source: /opt/mirakurun/config/
            target: /app-config/
          - type: bind
            source: /opt/mirakurun/data/
            target: /app-data/
        restart: always
        logging:
            driver: json-file
            options:
                max-file: "1"
                max-size: 10m

    mysql:
        container_name: mysql-epgstation
        image: mariadb:10.5
        # image: mysql:8.0 # 囲み文字を使用する場合
        volumes:
            - mysql-db:/var/lib/mysql
        environment:
            MYSQL_USER: epgstation
            MYSQL_PASSWORD: epgstation
            MYSQL_ROOT_PASSWORD: epgstation
            MYSQL_DATABASE: epgstation
            TZ: "Asia/Tokyo"
        # for mariadb
        command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --performance-schema=false --expire_logs_days=1
        # for mysql
        # command: --character-set-server=utf8mb4 --collation-server=utf8mb4_090 0_as_ci --performance-schema=false --expire_logs_days=1 --default-authentication -plugin=mysql_native_password # for myql
        restart: always
        logging:
            options:
                max-size: "10m"
                max-file: "3"

    epgstation:
        container_name: epgstation-v2.7.3
        build:
            context: epgstation
            dockerfile: Dockerfile
        volumes:
            - ./epgstation/config:/app/config
            - ./epgstation/data:/app/data
            - ./epgstation/thumbnail:/app/thumbnail
            - ./epgstation/logs:/app/logs
            - ./recorded:/app/recorded
                # VMware仮想マシンへのインストールでは ./recorded を共有フォルダにしておく

        environment:
            TZ: "Asia/Tokyo"
        depends_on:
            - mirakurun
            - mysql
        ports:
            - "8888:8888"
            - "8889:8889"
        # user: "1000:1000"
        # devices:
            # - /dev/dri:/dev/dri
        restart: always

volumes:
    mysql-db:
        driver: local

Ver. 2024 Jan. 07

services:
    mirakurun:
        container_name: mirakurun-3.9.0-rc.4
        build:
            context: Mirakurun
            dockerfile: docker/Dockerfile
        # image: chinachu/mirakurun
        image: chinachu/mirakurun:3.9.0-rc.4
        cap_add:
            - SYS_ADMIN
            - SYS_NICE
        ports:
            - "40772:40772"
            - "9229:9229"
        environment:
            TZ: "Asia/Tokyo"
            # DOCKER_NETWORK: host
        # network_mode: host
        devices:
            - /dev/px4video0:/dev/px4video0
            - /dev/px4video1:/dev/px4video1
            - /dev/px4video2:/dev/px4video2
            - /dev/px4video3:/dev/px4video3
            - /dev/bus:/dev/bus
        volumes:
          # ** CAUTION **
          # (default) `/usr/local/mirakurun/*` has been moved to `/opt/mirakurun/*`
          # try:
          #   sudo mv -vf /usr/local/mirakurun /opt/mirakurun
          #   sudo mkdir -p /opt/mirakurun/run /opt/mirakurun/opt /opt/mirakurun/config /opt/mirakurun/data
          # you can change to any location if required.
          - type: bind
            source: /opt/mirakurun/run/
            target: /var/run/
          - type: bind
            source: /opt/mirakurun/opt/
            target: /opt/
          - type: bind
            source: /opt/mirakurun/config/
            target: /app-config/
          - type: bind
            source: /opt/mirakurun/data/
            target: /app-data/
        restart: always
        logging:
            driver: json-file
            options:
                max-file: "1"
                max-size: 10m

    mysql:
        container_name: mysql-epgstation
        image: mariadb:10.5
        # image: mysql:8.0 # 囲み文字を使用する場合
        volumes:
            - mysql-db:/var/lib/mysql
        environment:
            MYSQL_USER: epgstation
            MYSQL_PASSWORD: epgstation
            MYSQL_ROOT_PASSWORD: epgstation
            MYSQL_DATABASE: epgstation
            TZ: "Asia/Tokyo"
        # for mariadb
        command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --performance-schema=false --expire_logs_days=1
        # for mysql
        # command: --character-set-server=utf8mb4 --collation-server=utf8mb4_090 0_as_ci --performance-schema=false --expire_logs_days=1 --default-authentication -plugin=mysql_native_password # for myql
        restart: always
        logging:
            options:
                max-size: "10m"
                max-file: "3"

    epgstation:
        container_name: epgstation-v2.6.20
        build:
            context: "./epgstation"
        volumes:
            - ./epgstation/config:/app/config
            - ./epgstation/data:/app/data
            - ./epgstation/thumbnail:/app/thumbnail
            - ./epgstation/logs:/app/logs
            - /YOUR/RECORDED/FILES/DIR:/app/recorded
        environment:
            TZ: "Asia/Tokyo"
        depends_on:
            - mirakurun
            - mysql
        ports:
            - "8888:8888"
            - "8889:8889"
        # user: "1000:1000"
        # devices:
            # - /dev/dri:/dev/dri
        restart: always

volumes:
    mysql-db:
        driver: local

Mirakurun用チューナー情報ファイルを作成する

$ cd ~/docker/docker-mirakurun-epgstation/Mirakurun/config
$ mv tuners.yml tuners.yml.original

次の内容で~/docker/docker-mirakurun-epgstation/Mirakurun/config/tuners.ymlを作成する。
参考 【完全解説】LinuxとPX-W3U4でEPGStation v2を構築する方法(PX-Q3U4/W3PE4/Q3PE4) | ページ 5 | 小茂根の暮らし

- name: PX-W3U4_S1
  types:
    - BS
    - CS
  command: recpt1 --device /dev/px4video0 <channel> - -
  decoder: arib-b25-stream-test
  isDisabled: false
 
- name: PX-W3U4_S2
  types:
    - BS
    - CS
  command: recpt1 --device /dev/px4video1 <channel> - -
  decoder: arib-b25-stream-test
  isDisabled: false
 
- name: PX-W3U4_T1
  types:
    - GR
  command: recpt1 --device /dev/px4video2 <channel> - -
  decoder: arib-b25-stream-test
  isDisabled: false
 
- name: PX-W3U4_T2
  types:
    - GR
  command: recpt1 --device /dev/px4video3 <channel> - -
  decoder: arib-b25-stream-test
  isDisabled: false

Mirakurun用チャンネル情報ファイルを作成する

$ cd ~/docker/docker-mirakurun-epgstation/Mirakurun/config
$ mv channels.yml channels.yml.original

参考 mirakurun BSCSチャンネル設定(2023/04/19現在) · GitHub

次の内容で ~/docker/docker-mirakurun-epgstation/Mirakurun/config/channels.yml を作成する。

神戸チャンネル フォーマット
(見ないチャンネルには "isDisabled: true"行を書き込む)

- name: NHK総合
  type: GR
  channel: '22'
  isDisabled: false
- name: NHKEテレ
  type: GR
  channel: '13'
  isDisabled: false
- name: サンテレビ
  type: GR
  channel: '26'
  isDisabled: false
- name: MBS毎日放送
  type: GR
  channel: '16'
  isDisabled: false
- name: ABCテレビ
  type: GR
  channel: '15'
  isDisabled: false
- name: テレビ大阪
  type: GR
  channel: '18'
  isDisabled: false
- name: 関西テレビ
  type: GR
  channel: '17'
  isDisabled: false
- name: 読売テレビ
  type: GR
  channel: '14'
  isDisabled: false
- name: J:COMテレビ
  type: GR
  channel: '19'
  isDisabled: false
- name: J:COMチャンネル
  type: GR
  channel: '24'
  isDisabled: false
- name: NHK BS1
  type: BS
  channel: BS15_0
  serviceId: 101
- name: NHK BSプレミアム
  type: BS
  channel: BS03_1
  serviceId: 103
- name: BS日テレ
  type: BS
  channel: BS13_0
  serviceId: 141
- name: BS朝日
  type: BS
  channel: BS01_0
  serviceId: 151
- name: BS-TBS
  type: BS
  channel: BS01_1
  serviceId: 161
- name: BSテレ東
  type: BS
  channel: BS01_2
  serviceId: 171
- name: BSフジ
  type: BS
  channel: BS13_1
  serviceId: 181
- name: WOWOWプライム
  type: BS
  channel: BS03_0
  serviceId: 191
  isDisabled: true
- name: WOWOWライブ
  type: BS
  channel: BS05_0
  serviceId: 192
  isDisabled: true
- name: WOWOWシネマ
  type: BS
  channel: BS05_1
  serviceId: 193
  isDisabled: true
- name: スター・チャンネル1
  type: BS
  channel: BS09_1
  serviceId: 200
  isDisabled: true
- name: スター・チャンネル2
  type: BS
  channel: BS15_1
  serviceId: 201
  isDisabled: true
- name: スター・チャンネル3
  type: BS
  channel: BS15_1
  serviceId: 202
  isDisabled: true
- name: BS11
  type: BS
  channel: BS09_0
  serviceId: 211
- name: TwellV
  type: BS
  channel: BS09_2
  serviceId: 222
- name: 放送大学 BS1
  type: BS
  channel: BS11_0
  serviceId: 231
- name: 放送大学 BS2
  type: BS
  channel: BS11_0
  serviceId: 232
- name: グリーンチャンネル
  type: BS
  channel: BS21_2
  serviceId: 234
  isDisabled: true
- name: BSアニマックス
  type: BS
  channel: BS13_2
  serviceId: 236
  isDisabled: true
- name: J SPORTS 1
  type: BS
  channel: BS19_1
  serviceId: 242
  isDisabled: true
- name: J SPORTS 2
  type: BS
  channel: BS19_2
  serviceId: 243
  isDisabled: true
- name: J SPORTS 3
  type: BS
  channel: BS19_3
  serviceId: 244
  isDisabled: true
- name: J SPORTS 4
  type: BS
  channel: BS19_0
  serviceId: 245
  isDisabled: true
- name: BS釣りビジョン
  type: BS
  channel: BS11_1
  serviceId: 251
  isDisabled: true
- name: WOWOWプラス
  type: BS
  channel: BS21_0
  serviceId: 252
  isDisabled: true
- name: 日本映画専門チャンネル
  type: BS
  channel: BS21_1
  serviceId: 255
  isDisabled: true
- name: ディズニー・チャンネル
  type: BS
  channel: BS23_0
  serviceId: 256
  isDisabled: true
- name: BS松竹東急
  type: BS
  channel: BS23_3
  serviceId: 260
- name: BSJapanext
  type: BS
  channel: BS23_2
  serviceId: 263
- name: BSよしもと
  type: BS
  channel: BS23_1
  serviceId: 265

EPGStationの設定ファイルを作成する

参考 PLEX PX-Q3PE4 で docker-mirakurun-epgstation を使いたい #Docker - Qiita

$ cd ~/docker/docker-mirakurun-epgstation/epgstation/config
$ cp config.yml.template config.yml

次のように、録画ファイル保管先・データベース設定等を記述する。

参考
~/docker/docker-mirakurun-epgstation/epgstation/config/config.yml

# mirakurunPath: http+unix://%2Fvar%2Frun%2Fmirakurun.sock/
mirakurunPath: 'http://127.0.0.1:40772'

# dbtype: sqlite
# sqlite:
#   extensions:
#     - '/hoge/regexp.dylib'
#   regexp: true

dbtype: mysql
mysql:
    host: 127.0.0.1
    port: 3306
    user: epgstation
    password: epgstation
    database: epgstation
    charset: utf8mb4

recordedFormat: '%SHORTYEAR%%MONTH%%DAY%%HOUR%%MIN%%TYPE%%CH%-%SID%-%CHNAME%-%TITLE%'

recorded:
    - name: recorded    # ブラウザ上に表示される保存場所名
      path: '%ROOT%/recorded'    # docker-compose.ymlのEPGStationのvolume設定でrecordedをホストとの共有ディレクトリにしておく

thumbnail: '%ROOT%/thumbnail'    # docker-compose.ymlのEPGStationのvolume設定でthumbnailをホストとの共有ディレクトリにしておく

ffmpeg: /usr/bin/ffmpeg    # システム構築後にepgstationコンテナに入り、pathを確認する
ffprobe: /usr/bin/ffprobe    # システム構築後にepgstationコンテナに入り、pathを確認する

EPGStationのログ設定ファイルを作成する

参考 PLEX PX-Q3PE4 で docker-mirakurun-epgstation を使いたい #Docker - Qiita

$ cd ~/docker/docker-mirakurun-epgstation/epgstation/config
$ cp operatorLogConfig.sample.yml operatorLogConfig.yml
$ cp epgUpdaterLogConfig.sample.yml epgUpdaterLogConfig.yml
$ cp serviceLogConfig.sample.yml serviceLogConfig.yml
$ cp enc.js.template enc.js

コンテナ作成

pcscdを確実に停止しておく
$ sudo systemctl stop pcscd.socket
$ sudo systemctl disable pcscd.socket
$ sudo systemctl status pcscd.socket

Dockerの稼働確認<BR>
$ sudo systemctl status docker.service

(docker.serviceが稼働していなければ)
$ sudo systemctl start docker.service
$ sudo systemctl status docker.service

コンテナ作成
$ cd ~/docker/docker-mirakurun-epgstation
$ docker-compose pull
$ docker-compose build --no-cache
かなり時間がかかる

初回セットアップ

$ cd ~/docker/docker-mirakurun-epgstation
$ docker-compose run --rm -e SETUP=true mirakurun

チューナー情報ファイル確認

~/docker/docker-mirakurun-epgstation/Mirakurun/config/tuners.yml が先に作成した内容であることを確認する。

チャンネル設定ファイル確認


~/docker/docker-mirakurun-epgstation/Mirakurun/config/channels.yml が先に作成した内容であることを確認する。

コンテナ起動

$ cd ~/docker/docker-mirakurun-epgstation
$ docker-compose up -d

ffmpeg、ffprobeのパスを確認し、~/docker/docker-mirakurun-epgstation/epgstation/config/config.ymlに反映する

ffmpeg: /usr/local/bin/ffmpeg    # システム構築後にepgstationコンテナに入り、pathを確認する
ffprobe: /usr/local/bin/ffprobe    # システム構築後にepgstationコンテナに入り、pathを確認する

Mirakurun稼働確認

http://localhost:40772/ にアクセスして確認する。
正常にインストールされていれば、次回からPC起動すればログインせずとも自動起動される

コンテナ停止

$ docker-compose down

ポート開放

40772ポートをLAN内に開放する
$ sudo ufw enable
$ sudo ufw allow proto tcp from YOUR.NETWORK.ADDRESS.0/24 to any port 40772
$ sudo ufw allow proto udp from YOUR.NETWORK.ADDRESS.0/24 to any port 40772
$ sudo ufw reload

OpenVPNクライアントからのアクセス許可する
$ sudo ufw enable
$ sudo ufw allow proto tcp from 10.8.0.0/24 to any port 40772
$ sudo ufw allow proto udp from 10.8.0.0/24 to any port 40772
$ sudo ufw reload

(2023 Dec. 23. ここまで記述した)

MySQL

Epgstation

$ node --version $ curl -o - http://:/api/version $ ffmpeg -version $ python --version $ gcc --version

以下の方法では、Mirakurunは稼働したが、Epgstation画面がブラウザに表示されなかった。


参考
【家】録画鯖のリプレース(その他 その他)by @由貴 - みんカラ PLEX PX-Q3PE4 で docker-mirakurun-epgstation を使いたい #Docker - Qiita
【完全解説】LinuxとPX-W3U4でEPGStation v2を構築する方法(PX-Q3U4/W3PE4/Q3PE4) | ページ 2 | 小茂根の暮らし

PLEXチューナーでのチューナーデバイスと録画コマンド

PLEXチューナーで使うpx4_drvドライバではチューナーデバイスは /dev/px4_drv[n] となる。
/dev/px4_drv[n]は、Mirakurun標準の録画コマンドdvbv5-zapでは利用できず、recpt1コマンドで利用できる。
MirakurunでPLEXチューナーを使うには、Mirakurunが/dev/px4_drv[n]にアクセスでき、recpt1を利用できるようにする必要がある。
Mirakurunでのaribデコードにはarib-b25-stream-testが使われるので、libarib25は不要。

利用するMirakurunとEPGStationについて

$ sudo useradd -d /home/tv-xubuntu2204 -m -s /bin/bash -u 1234 tv
$ sudo passwd tv
$ sudo usermod -aG sudo,video tv


(念のためシステム再起動し)tvユーザーでログイン

$ sudo reboot
$ su - tv

作業用ディレクトリ作成

$ mkdir ~/work


パッケージリスト更新・タイムゾーン設定

$ sudo apt update
$ sudo timedatectl set-timezone Asia/Tokyo

ビルドツール、インストールツールをインストール

$ sudo apt install build-essential git unzip dkms pkg-config automake cmake curl libssl-dev libtool libboost-all-dev yasm

チューナー Plex PX-W3U4がPCに接続されていることを確認

$ lsusb
Bus 002 Device 002: ID 0511:083f N'Able (DataBook) Technologies, Inc. PXW3U4

チューナー Plex PX-W3U4のドライバをインストール

参考ページ 録画サーバーOS更新

ファームウェア抽出ツール作成
$ cd ~/work
$ git clone https://github.com/nns779/px4_drv.git
$ cd px4_drv/fwtool/
$ make


ファームウェア抽出
$ cd ~/work
$ wget http://plex-net.co.jp/download/pxw3pe4v1.4.zip
$ unzip pxw3pe4v1.4.zip
$ cd px4_drv/fwtool/
$ sudo ./fwtool ../../pxw3pe4v1.4/x64/PXW3PE4.sys it930x-firmware.bin
$ sudo cp -p it930x-firmware.bin /lib/firmware/
$ ls /lib/firmware/ | grep it930
  it930x-firmware.binが表示されれば成功

ドライバのdkms対応化
$ sudo apt install dkms
$ cd ~/work/px4_drv

px4_drvディレクトリ内に以下の内容の dkms.install ファイルを作成する
$ vim dkms.install

(dkms.install)
+++ ここから
. ./dkms.conf
cp -a `pwd` /usr/src/$PACKAGE_NAME-$PACKAGE_VERSION
dkms add -m $PACKAGE_NAME -v $PACKAGE_VERSION
dkms build -m $PACKAGE_NAME -v $PACKAGE_VERSION
dkms install -m $PACKAGE_NAME -v $PACKAGE_VERSION
+++ ここまで

dkms対応でドライバをインストール
$ sudo bash dkms.install

ドライバ組み込みと確認
$ sudo modprobe px4_drv
$ ls /dev | grep 'px4'
 次の出力があれば成功
  px4video0
  px4video1
  px4video2
  px4video3

システム起動時のドライバ自動組み込み
以下の内容(1行のみ)の/etc/modules-load.d/px4_drv.confファイルを作成する
$ sudo vim /etc/modules-load.d/px4_drv.conf

(px4_drv.conf)
+++ ここから
px4_drv
+++ ここまで

システム再起動
$ sudo reboot

tvユーザーでログインする
$ su - tv

チューナーデバイスを確認
$ ls /dev | grep 'px4'
 次の出力があれば成功
  px4video0
  px4video1
  px4video2
  px4video3


チューナードライバのアンインストール方法
出典 【完全解説】LinuxとPX-W3U4でEPGStation v2を構築する方法(PX-Q3U4/W3PE4/Q3PE4) | ページ 2 | 小茂根の暮らし

# DKMSを使用してインストールした場合(アンインストール)
$ cd ~/work/px4_drv
$ sudo dkms remove px4_drv/0.2.1 --all
$ sudo rm -rf /usr/src/px4_drv-0.2.1
 
# ファームウェアのアンインストール
$ sudo rm /lib/firmware/it930x-firmware.bin

カードリーダー用ソフトをインストール

参考ページ 録画サーバーOS更新

$ sudo apt install pcscd pcsc-tools libpcsclite-dev
$ sudo systemctl status pcscd.socket

(期待される出力例)
● pcscd.socket - PC/SC Smart Card Daemon Activation Socket
     Loaded: loaded (/lib/systemd/system/pcscd.socket; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2023-10-29 10:49:13 JST; 18s ago
   Triggers: ● pcscd.service
     Listen: /run/pcscd/pcscd.comm (Stream)
     CGroup: /system.slice/pcscd.socket

 (pcscdが動作していなかったら)
  $ sudo systemctl restart pcscd.socket

カードリーダーにカードをB-CASを挿入し、動作確認
$ pcsc_scan
 次の出力があれば成功
  Japanese Chijou Digital B-CAS Card (pay TV)

pcscd の無効化

Mirakurunでは pcscdが稼働していてはいけない

$ sudo systemctl stop pcscd.socket
$ sudo systemctl disable pcscd.socket
$ pcsc_scan
 次の出力があれば成功
  SCardEstablishContext: Service not available.


Dockerをインストール

$ sudo apt update && sudo apt install docker.io

Dockerがインストールされたことを確認する。
$ sudo docker version

Dockerの自動起動設定
$ sudo systemctl start docker.service
$ sudo systemctl enable docker.service
$ sudo usermod -aG docker tv

docker-composeをインストール

$ sudo apt install docker-compose


docker-composeがインストールされたことを確認する。

$ sudo docker-compose -v

dokcerディレクトリを作成する。

$ su - tv
$ mkdir ~/docker

システムからログアウトし、tvユーザーで再度ログインする。

最新バージョンのDockerを利用する場合(必須ではない)

参考ページ 録画サーバーOS更新

+++ ここから +++

$ sudo snap remove docker
$ sudo apt purge docker
$ sudo reboot

システムが再起動したらtvユーザーでログインする

$ su - tv
$ cd ~/
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
$ echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release -y
$ sudo apt update
$ sudo apt install docker-ce docker-ce-cli containerd.io -y
$ sudo usermod -aG docker tv

システムからログアウトし、tvユーザーで再度ログインする。
+++ ここまで +++

(録画ファイル保管ディレクトリ)作成

$ sudo mkdir /YOUR/RECORDED/FILES/DIR
$ sudo mkdir /YOUR/RECORDED/FILES/DIR/thumbnail
$ sudo chmod 777 /YOUR/RECORDED/FILES/DIR /YOUR/RECORDED/FILES/DIR/thumbnail

Docker版Mirakurunをインストールする

https://github.com/Chinachu/Mirakurun にアクセスし、Codeタブ画面でブランチ・ドロップダウンをクリックしTagsタブをクリックし、最新バージョンもしくは最新rc版を確認する。現時点では 3.9.0-rc.4 もしくは 3.8.0。
git clone コマンドの"-b"オプションに最新タグを指定する。

$ su - tv
$ mkdir ~/docker
$ cd ~/docker
$ git clone https://github.com/Chinachu/Mirakurun -b 3.9.0-rc.4
$ sudo systemctl status docker.service

(docker.serviceが稼働していなければ)
    $ sudo systemctl enable docker.service
    $ sudo systemctl start docker.service

$ cd ~/docker/Mirakurun/docker
$ docker-compose pull
 "Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?"となったらdocker.serviceが稼働していない

MirakurunのDockerfileを作成する

EPGStationリポジトリをダウンロード

参考
PLEX PX-Q3PE4 で docker-mirakurun-epgstation を使いたい #Docker - Qiita
【完全解説】LinuxとPX-W3U4でEPGStation v2を構築する方法(PX-Q3U4/W3PE4/Q3PE4) | ページ 4 | 小茂根の暮らし

https://github.com/l3tnun/docker-mirakurun-epgstation にアクセスし、Codeタブ画面にて最新ブランチを確認する。(ブランチ・ドロップダウンで View all branches をクリックすると確認できる) 現時点では v2 ブランチが最新。
git clone コマンドの"-b"オプションで最新ブランチを指定する。

$ su - tv
$ mkdir ~/docker
$ cd ~/docker
$ git clone https://github.com/l3tnun/docker-mirakurun-epgstation -b v2 docker-mirakurun-epgstation
$ cd docker-mirakurun-epgstation

docker-mirakurun-epgstationディレクトリ内のファイル状況

$ ls
LICENSE  Readme.md  docker-compose-sample.yml  docs  epgstation  mirakurun  recorded  setup.sh


Docker版Mirakurunのgitリポジトリを~/docker/docker-mirakurun-epgstationにダウンロード

参考
【家】録画鯖のリプレース(その他 その他)by @由貴 - みんカラ
PLEX PX-Q3PE4 で docker-mirakurun-epgstation を使いたい #Docker - Qiita
【完全解説】LinuxとPX-W3U4でEPGStation v2を構築する方法(PX-Q3U4/W3PE4/Q3PE4) | ページ 4 | 小茂根の暮らし

https://github.com/Chinachu/Mirakurun にアクセスし、Codeタブ画面でブランチ・ドロップダウンをクリックしTagsタブをクリックし、最新バージョンもしくは最新rc版を確認する。現時点では 3.9.0-rc.4 もしくは 3.8.0。
git clone コマンドの"-b"オプションに最新タグを指定する。

$ cd ~/docker/docker-mirakurun-epgstation
$ git clone https://github.com/Chinachu/Mirakurun -b 3.9.0-rc.4

docker-mirakurun-epgstationディレクトリ内のファイル状況

$ ls
LICENSE  Mirakurun  Readme.md  docker-compose-sample.yml  docs  epgstation  mirakurun  recorded  setup.sh

mirakurun が docker-mirakurun-epgstation にあったものでPlexチューナー(recpt1コマンド)を利用できない。Mirakurun が Mirakurun -b 3.9.0-rc.2で git clone したものでPlexチューナー(recpt1コマンド)を利用できる。

ホスト側ディレクトリ(録画ファイル保管)作成

$ sudo mkdir /YOUR/RECORDED/FILES/DIR
$ sudo mkdir /YOUR/RECORDED/FILES/DIR/thumbnail
$ sudo chmod 777 /YOUR/RECORDED/FILES/DIR /YOUR/RECORDED/FILES/DIR

MirakurunのDockerfileを作成する

参考
【家】録画鯖のリプレース(その他 その他)by @由貴 - みんカラ
PLEX PX-Q3PE4 で docker-mirakurun-epgstation を使いたい #Docker - Qiita
【完全解説】LinuxとPX-W3U4でEPGStation v2を構築する方法(PX-Q3U4/W3PE4/Q3PE4) | ページ 4 | 小茂根の暮らし

$ cp ~/docker/docker-mirakurun-epgstation/Mirakurun/docker/Dockerfile ~/docker/docker-mirakurun-epgstation/Mirakurun/docker/Dockerfile.original

~/docker/docker-mirakurun-epgstation/Mirakurun/docker/Dockerfile ファイルを次の内容にする。(ここでは docker-mirakurun-epgstation/mirakurun/ ではなく docker-mirakurun-epgstation/Mirakurun/ を扱う)

(参考)マルチステートビルドDockerfile
Dockerのマルチステージビルドでimageを軽量化する

ARG ARCH=
FROM ${ARCH}node:16.14.0-buster AS build
WORKDIR /app
ENV DOCKER=YES NODE_ENV=production
ADD . .
RUN apt-get update && \
apt-get upgrade -y && \
apt-get install -y --no-install-recommends build-essential && \
npm install --production=false && \
npm run build && \
npm install -g --unsafe-perm --production

FROM ${ARCH}node:16.14.0-buster-slim
WORKDIR /app
ENV DEV="build-essential libtool autoconf git automake"
RUN apt-get update && \
apt-get upgrade -y && \
apt-get install -y --no-install-recommends \
    ca-certificates \
    make \
    gcc \
    g++ \
    pkg-config \
    pcscd \
    libpcsclite-dev \
    libccid \
    pcsc-tools \
    $DEV && \
\
# arib25
\
apt install -y --no-install-recommends \
    autoconf \
    build-essential \
    cmake \
    curl \
    git \
    libssl-dev \
    libtool \
    libboost-all-dev \
    pkg-config \
    yasm && \
git clone https://github.com/stz2012/libarib25.git && \
cd libarib25 && \
cmake . && \
make && \
make install && \
ldconfig && \
\
# recpt1
\
git clone https://github.com/stz2012/recpt1 /tmp/recpt1 && \
cd /tmp/recpt1/recpt1 && \
./autogen.sh && \
./configure --enable-b25 && \
make && \
make install && \

rm -rf /tmp/recpt1 && \
apt-get -y remove $DEV && \
apt-get autoremove -y && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
COPY --from=build /usr/local/lib/node_modules/mirakurun /app
CMD ["./docker/container-init.sh"]
EXPOSE 40772 9229

EPGStationのDockerfileを作成する(ファイルをコピーするだけ)

$ cd ~/docker/docker-mirakurun-epgstation/epgstation
$ cp debian.Dockerfile Dockerfile

recpt1用のdocker-compose.ymlを作成する

参考
【家】録画鯖のリプレース(その他 その他)by @由貴 - みんカラ
PLEX PX-Q3PE4 で docker-mirakurun-epgstation を使いたい #Docker - Qiita

$ cd ~/docker/docker-mirakurun-epgstation

次の内容で~/docker/docker-mirakurun-epgstation/docker-compose.ymlを作成する。
62行目の"- /media/tv_record:/app/recorded"は録画ファイル保存用パスに合わせる。
  書式 [ホスト側のPath]:コンテナの絶対Path

version: '3'
services:
    mirakurun:
        container_name: mirakurun-3.9.0-rc.4
        build:
            context: Mirakurun
            dockerfile: docker/Dockerfile
        image: chinachu/mirakurun
        cap_add:
            - SYS_ADMIN
            - SYS_NICE
        ports:
            - "40772:40772"
            - "9229:9229"
        volumes:
            - ./Mirakurun/config/:/app-config/
            - ./Mirakurun/data/:/app-data/
        environment:
            TZ: "Asia/Tokyo"
        devices:
            - /dev/px4video0:/dev/px4video0
            - /dev/px4video1:/dev/px4video1
            - /dev/px4video2:/dev/px4video2
            - /dev/px4video3:/dev/px4video3
            - /dev/bus:/dev/bus
        restart: always
        logging:
            driver: json-file
            options:
                max-file: "1"
                max-size: 10m

    mysql:
        container_name: mysql-epgstation
        image: mariadb:10.5
        # image: mysql:8.0 # 囲み文字を使用する場合
        volumes:
            - mysql-db:/var/lib/mysql
        environment:
            MYSQL_USER: epgstation
            MYSQL_PASSWORD: epgstation
            MYSQL_ROOT_PASSWORD: epgstation
            MYSQL_DATABASE: epgstation
            TZ: "Asia/Tokyo"
        command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --performance-schema=false --expire_logs_days=1 # for mariadb
        # command: --character-set-server=utf8mb4 --collation-server=utf8mb4_090 0_as_ci --performance-schema=false --expire_logs_days=1 --default-authentication -plugin=mysql_native_password # for myql
        restart: always
        logging:
            options:
                max-size: "10m"
                max-file: "3"

    epgstation:
        container_name: epgstation-v2.6.20
        build:
            context: "./epgstation"
        volumes:
            - ./epgstation/config:/app/config
            - ./epgstation/data:/app/data
            - ./epgstation/thumbnail:/app/thumbnail
            - ./epgstation/logs:/app/logs
            - /YOUR/RECORDED/FILES/DIR:/app/recorded
        environment:
            TZ: "Asia/Tokyo"
        depends_on:
            - mirakurun
            - mysql
        ports:
            - "8888:8888"
            - "8889:8889"
        # user: "1000:1000"
        # devices:
            # - /dev/dri:/dev/dri
        restart: always

volumes:
    mysql-db:
        driver: local

tuners.ymlを作成する

参考 【完全解説】LinuxとPX-W3U4でEPGStation v2を構築する方法(PX-Q3U4/W3PE4/Q3PE4) | ページ 5 | 小茂根の暮らし

$ cp ~/docker/docker-mirakurun-epgstation/Mirakurun/config/tuners.yml ~/docker/docker-mirakurun-epgstation/Mirakurun/config/tuners.yml.original

次の内容で~/docker/docker-mirakurun-epgstation/Mirakurun/config/tuners.ymlを作成する。

- name: PX-W3U4_S1
  types:
    - BS
    - CS
  command: recpt1 --device /dev/px4video0 <channel> - -
  decoder: arib-b25-stream-test
  isDisabled: false
 
- name: PX-W3U4_S2
  types:
    - BS
    - CS
  command: recpt1 --device /dev/px4video1 <channel> - -
  decoder: arib-b25-stream-test
  isDisabled: false
 
- name: PX-W3U4_T1
  types:
    - GR
  command: recpt1 --device /dev/px4video2 <channel> - -
  decoder: arib-b25-stream-test
  isDisabled: false
 
- name: PX-W3U4_T2
  types:
    - GR
  command: recpt1 --device /dev/px4video3 <channel> - -
  decoder: arib-b25-stream-test
  isDisabled: false

channels.ymlを作成する

$ cp ~/docker/docker-mirakurun-epgstation/Mirakurun/config/channels.yml ~/docker/docker-mirakurun-epgstation/Mirakurun/config/channels.yml.original


参考 mirakurun BSCSチャンネル設定(2023/04/19現在) · GitHub

編集ファイル:~/docker/docker-mirakurun-epgstation/Mirakurun/config/channels.yml

神戸チャンネル フォーマット
(見ないチャンネルには "isDisabled: true"行を書き込む)

- name: NHK総合
  type: GR
  channel: '22'
  isDisabled: false
- name: NHKEテレ
  type: GR
  channel: '13'
  isDisabled: false
- name: サンテレビ
  type: GR
  channel: '26'
  isDisabled: false
- name: MBS毎日放送
  type: GR
  channel: '16'
  isDisabled: false
- name: ABCテレビ
  type: GR
  channel: '15'
  isDisabled: false
- name: テレビ大阪
  type: GR
  channel: '18'
  isDisabled: false
- name: 関西テレビ
  type: GR
  channel: '17'
  isDisabled: false
- name: 読売テレビ
  type: GR
  channel: '14'
  isDisabled: false
- name: J:COMテレビ
  type: GR
  channel: '19'
  isDisabled: false
- name: J:COMチャンネル
  type: GR
  channel: '24'
  isDisabled: false
- name: NHK BS1
  type: BS
  channel: BS15_0
  serviceId: 101
- name: NHK BSプレミアム
  type: BS
  channel: BS03_1
  serviceId: 103
- name: BS日テレ
  type: BS
  channel: BS13_0
  serviceId: 141
- name: BS朝日
  type: BS
  channel: BS01_0
  serviceId: 151
- name: BS-TBS
  type: BS
  channel: BS01_1
  serviceId: 161
- name: BSテレ東
  type: BS
  channel: BS01_2
  serviceId: 171
- name: BSフジ
  type: BS
  channel: BS13_1
  serviceId: 181
- name: WOWOWプライム
  type: BS
  channel: BS03_0
  serviceId: 191
  isDisabled: true
- name: WOWOWライブ
  type: BS
  channel: BS05_0
  serviceId: 192
  isDisabled: true
- name: WOWOWシネマ
  type: BS
  channel: BS05_1
  serviceId: 193
  isDisabled: true
- name: スター・チャンネル1
  type: BS
  channel: BS09_1
  serviceId: 200
  isDisabled: true
- name: スター・チャンネル2
  type: BS
  channel: BS15_1
  serviceId: 201
  isDisabled: true
- name: スター・チャンネル3
  type: BS
  channel: BS15_1
  serviceId: 202
  isDisabled: true
- name: BS11
  type: BS
  channel: BS09_0
  serviceId: 211
- name: TwellV
  type: BS
  channel: BS09_2
  serviceId: 222
- name: 放送大学 BS1
  type: BS
  channel: BS11_0
  serviceId: 231
- name: 放送大学 BS2
  type: BS
  channel: BS11_0
  serviceId: 232
- name: グリーンチャンネル
  type: BS
  channel: BS21_2
  serviceId: 234
  isDisabled: true
- name: BSアニマックス
  type: BS
  channel: BS13_2
  serviceId: 236
  isDisabled: true
- name: J SPORTS 1
  type: BS
  channel: BS19_1
  serviceId: 242
  isDisabled: true
- name: J SPORTS 2
  type: BS
  channel: BS19_2
  serviceId: 243
  isDisabled: true
- name: J SPORTS 3
  type: BS
  channel: BS19_3
  serviceId: 244
  isDisabled: true
- name: J SPORTS 4
  type: BS
  channel: BS19_0
  serviceId: 245
  isDisabled: true
- name: BS釣りビジョン
  type: BS
  channel: BS11_1
  serviceId: 251
  isDisabled: true
- name: WOWOWプラス
  type: BS
  channel: BS21_0
  serviceId: 252
  isDisabled: true
- name: 日本映画専門チャンネル
  type: BS
  channel: BS21_1
  serviceId: 255
  isDisabled: true
- name: ディズニー・チャンネル
  type: BS
  channel: BS23_0
  serviceId: 256
  isDisabled: true
- name: BS松竹東急
  type: BS
  channel: BS23_3
  serviceId: 260
- name: BSJapanext
  type: BS
  channel: BS23_2
  serviceId: 263
- name: BSよしもと
  type: BS
  channel: BS23_1
  serviceId: 265

EPGStationの設定ファイルを作成する

参考 PLEX PX-Q3PE4 で docker-mirakurun-epgstation を使いたい #Docker - Qiita

$ cd ~/docker/docker-mirakurun-epgstation/epgstation/config
$ cp config.yml.template config.yml

録画ファイル保管先・データベース設定等を記述する。

参考
~/docker/docker-mirakurun-epgstation/epgstation/config/config.yml

# mirakurunPath: http+unix://%2Fvar%2Frun%2Fmirakurun.sock/
mirakurunPath: http://localhost:40772

# dbtype: sqlite
# sqlite:
#   extensions:
#     - '/hoge/regexp.dylib'
#   regexp: true

dbtype: mysql
mysql:
    host: localhost
    port: 3306
    user: epgstation
    password: epgstation
    database: epgstation

recordedFormat: '%SHORTYEAR%%MONTH%%DAY%%HOUR%%MIN%%TYPE%%CH%-%SID%-%CHNAME%-%TITLE%'

recorded:
    - name: recorded    # ブラウザ上に表示される保存場所名
      path: '%ROOT%/recorded'    # epgstationのDockerfileのvolume設定でrecordedをホストとの共有ディレクトリにしておく

ffmpeg: /usr/local/bin/ffmpeg    # システム構築後にepgstationコンテナに入り、pathを確認する
ffprobe: /usr/local/bin/ffprobe    # システム構築後にepgstationコンテナに入り、pathを確認する

EPGStationのログ設定ファイルを作成する

参考 PLEX PX-Q3PE4 で docker-mirakurun-epgstation を使いたい #Docker - Qiita

$ cd ~/docker/docker-mirakurun-epgstation/epgstation/config
$ cp operatorLogConfig.sample.yml operatorLogConfig.yml
$ cp epgUpdaterLogConfig.sample.yml epgUpdaterLogConfig.yml
$ cp serviceLogConfig.sample.yml serviceLogConfig.yml
$ cp enc.js.template enc.js

コンテナ起動

念のため、pcscdを確実に停止しておく
$ sudo systemctl stop pcscd.socket
$ sudo systemctl disable pcscd.socket

コンテナ作成
$ cd ~/docker/docker-mirakurun-epgstation/
$ docker-compose pull
$ docker-compose build --no-cache
かなり時間がかかる

コンテナ起動
$ docker-compose up -d

epgstationコンテナに入り、ffmpegとffprobeのパスを確認し、epgstationのconfig.ymlに反映する。

$ docker exec -it epgstation-v2.7.3 bash
# which ffmpeg
/usr/local/bin/ffmpeg

# which ffprobe
/usr/local/bin/ffprobe

# exit

次のコマンドで recpt1 が出力されている間は番組データ読み込み中。

$ ps ax | grep "recpt1" | grep -v "grep"

番組データ読み込み完了まで待った上で、下記urlにアクセスして確認する。
チャンネル取得状況 http://YOUR.HOST.IP.ADDRESS:40772/api/channels
Mirakurun http://YOUR.HOST.IP.ADDRESS:40772
EPGStation http://YOUR.HOST.IP.ADDRESS:8888

地上デジタルチャンネル登録について

~/docker/docker-mirakurun-epgstation/Mirakurun/config/channels.yml 内の地上デジタルチャンネル設定を削除し、次のコマンドを実行すれば自動的に登録される。

$ sudo apt-get install curl
$ curl -X PUT "http://localhost:40772/api/config/channels/scan"

Docker再起動

$ docker-compose down  # コンテナ停止
$ docker-compose up -d  # コンテナ起動

手動録画

(1) Mirakurunコンテナ内で録画する。
(2) Mirakurunコンテナとホストが共有できるディレクトリに録画ファイルを保存する。
  (共有ディレクトリ)
   Mirakurunコンテナの /app-data
   ホストの ~/docker/docker-mirakurun-epgstation/Mirakurun/data
(3) Mirakurunコンテナを抜けホストに出て、録画ファイルを所定のディレクトリに移動する。

$ cd ~/docker/docker-mirakurun-epgstation
$ docker exec -it  mirakurun-3.9.0-rc.4 bash

(recpt1のオプション確認)
# recpt1 --help

# recpt1 --b25 --strip --sid hd --device /dev/px4video2 15 22 /app-data/TVREC22CH15SEC.ts
# exit
$ cd ~/docker/docker-mirakurun-epgstation/Mirakurun/data
$ mv ./TVREC22CH15SEC.ts /YOUR/RECFILE/DIR/

mysql利用

$ cd ~/docker/docker-mirakurun-epgstation/Mirakurun
$ docker exec -it  mysql-epgstation bash
# mysql -u epgstation -p epgstation
> show tables ;
> exit
# exit