Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

CentOS8 + PX-W3PE4 + docker-mirakurun-epgstationで作る自宅TV録画サーバー

(追記) CentOS8 EOL

CentOS 8の提供は2021年で終了、今後はCentOS Stream開発に注力 | マイナビニュース
https://news.mynavi.jp/article/20201209-1573811/

残念ながら、CentOS8は2021年で終了となるため、現在この記事の内容の一部はお勧めできません。
著者自身このニュースに動揺しております。 CentOS8が、消えていく...これは面倒なことになった...

OSの移行先として CentOS StreamやOracle Linux等のRHEL系もあるのですが、今後RHEL系はコンテナ仮想化にDockerではなくPodmanを利用していくようなのでUbuntu辺りに移行しようと考えています。
個人鯖で使う分にはdocker-composeで十分でk8sは牛刀割鶏だと思うのですよ。はい。

その際、 @urouro0615 さん、 @keng さんからコメントでご指摘のあった問題についても取り込んで取り込んで解決し、新たに記事にしたいと思います。あとubuntuへの移行作業自体も出来れば記事に...
また、書き忘れていた日本鯖ntpでの時間較正を書き加えます、これをやらないと番組開始10sec程度を取り逃すという哀しみを背負いますので…(1敗

(追記2) collelog/tv-recorder

移行のため調べてみると、最初からpx4系に対応したdocker-composeをまとめてくれている神がいたりします。
しかも様々な魅力的な機能まで追加されています。
- mirakc(mirakurun互換でより低負荷)
- vaapi(EPGStationでハードウェアエンコ)

更新記事ではこれに切り替えて記述しようと思います。テストで動作は確認しました。
(これがほぼ完成されているので、更新記事の必要性すら怪しい…)

collelog/tv-recorder
https://github.com/collelog/tv-recorder

概要

現在入手困難なTVチューナーカード、アースソフト社のPT3に代わり、PLEX社のPX-W3PE4を用いて自宅TV録画サーバーを構築します。録画ソフトウェアとしてl3tnun氏作成のdocker-mirakurun-epgstationを改変して利用し、できる限りサーバー環境を汚さず、手軽に作成します。

注意

本記事はある程度「分かっている」方向けとなります。できる限り詳細に説明はしますが、一部の説明を他の方の解説に任せたり説明を省いている点があることをご了承ください。

2020年3月時点でDockerはCentOS8で未サポートとなっていますが、稼働は確認しています。気になる方はCentOS7で作成してください。

また、サーバーは既に作成しており、記憶を辿って解説記事を書いていることから抜けや間違いがあると思われます。間違いあればご指摘いただければと思います。

おしながき

  1. 資材調達
  2. CentOS8インストール、初期設定。
  3. PLEX TVチューナー用非公式ドライバインストール
  4. Docker, docker-composeインストール
  5. docker-mirakurun-epgstation導入

1. 資材調達

必要な資材は次の通りとなります。

1.1 PC

私は中古のHP Z230 SFFを用いていますが録画のみの場合であればそこまでの性能は必要ありません。購入を予定しているTVチューナーの推奨性能以上のものを選んでください。今回の説明で用いるPX-W3PE4はIntel Core i3以上、メモリ4GB以上となっております。Dockerで運用することを考えてこれより多少良いものを選んでおけば確実でしょう。

PX-W3PE4, PX-Q3PE4の場合は PCIExpress端子に加え、内蔵USB端子が必要なことに注意してください。

1.2 PLEX製TVチューナー

PLEX PX-W3U4/Q3U4/W3PE4/Q3PE4 用の非公式版Linuxドライバに対応しているTVチューナーを購入。私はこの中で比較的動作が安定しているという噂のある「PX-W3PE4」を購入しました。

ここではPX-W3PE4を用いて説明します。PX-W3U4についてはここに記載した方法で視聴可能となると思われますが、PX-Q3U4, PX-Q3PE4はS4+T4チューナーとなるためここに記載した方法そのままでは視聴できません。当方所有していないため検証できません!

1.3 ICカードリーダー

TVチューナーに付属しているカードリーダーは非公式ドライバでは利用できません。USB接続タイプのICカードリーダーが別途必要になります。

私は昔ながらのSCR3310-NTTComを用いていますが、終売していますのでACR39-NTTComあたりを購入するとよいでしょう。私は使用していないため保証はできませんが、ネットでの報告ではPX-W3PE4での利用実績があるようです。

1.4 B-CASカード

暗号化されたストリームを復号するために必要。入手法については言及しません。

2. CentOS 8 インストール、初期設定

すべてのパーツを入手し、PCとして組み上げてから各種インストールを行います。

2.1 CentOS8インストール

まず、CentOSでは最新バージョンとなるCentOS8をインストールします。

  1. CentOS8のISOイメージをダウンロード
  2. RufusでUSBメモリに焼きこみ or DVDライティングソフトでDVD-RにISO焼きこみ
  3. 2.で作成したメディアから起動するようにBiosを設定、起動。
  4. 手順に従いインストール。

「ソフトウェアの選択」は「サーバー」を選択。
ここの手順に従って録画鯖のみ動かすのであれば「最小限のインストール」でも問題ないと思います。

参考:「ネットワークエンジニアの日常 CentOS 8 をインストールする手順」

2.2 IPアドレス固定

最終的に録画鯖と同じネットワーク上にいる別PCからブラウザでEPGStationにアクセスし録画管理を行うため、ネットワーク内での鯖のIPアドレスを固定します。

鯖側で固定、ルーターからmacアドレスを用いて固定、いずれの方法でも問題ありません。詳細は省きます。

ここでは、鯖IPを「192.168.xxx.yyy」と固定したとして説明を続けます。

2.3 ファイアウォール・SELinux無効化

鯖より上位のルーター等で適切にファイアウォールが設定されているという前提で鯖のファイアウォール及びSELinuxを無効化します。セキュリティ上問題があるので、気になる方は無効にせず適切に設定の上ご利用ください。

以降、コマンドはすべてルート権限で実行します。

# echo ----ファイアウォール無効化----
# systemctl stop firewalld
# systemctl disable firewalld

# echo ----SELinux無効化----
# vi /etc/selinux/config

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
#SELINUX=enforcing   #この行をコメントアウト
SELINUX=disabled     #disabledに変更

:wq

# echo ----再起動----
# reboot

参考:ServerWorld CentOS8 初期設定:ファイアウォール

3. PLEX TVチューナー用非公式ドライバインストール

PLEX PX-W3U4/Q3U4/W3PE4/Q3PE4 用の非公式版Linuxドライバをリンクに従ってDKMSを利用してインストールします。

# echo ----必要ライブラリのインストール----
# dnf update
# dnf install git unzip gcc make dkms kernel-devel kernel-headers

# echo ----ファームウェアの抽出とインストール----
# git clone https://github.com/nns779/px4_drv
# cd px4_drv/fwtool
# make
# wget http://plex-net.co.jp/plex/pxw3u4/pxw3u4_BDA_ver1x64.zip -O pxw3u4_BDA_ver1x64.zip
# unzip -oj pxw3u4_BDA_ver1x64.zip pxw3u4_BDA_ver1x64/PXW3U4.sys
# ./fwtool PXW3U4.sys it930x-firmware.bin
# mkdir -p /lib/firmware
# cp it930x-firmware.bin /lib/firmware/
# cd ../

# echo ----ドライバのインストール(DKMS使用)----
# cp -a ./ /usr/src/px4_drv-0.2.1
# dkms add px4_drv/0.2.1
# dkms install px4_drv/0.2.1

# echo ----再起動(一応)----
# reboot

インストール後、リンク先の「3.確認」の手順を実施し、/dev/px4video0~4が作成されていることを確認。

参考:PLEX PX-W3U4/Q3U4/W3PE4/Q3PE4 用の非公式版Linuxドライバ

参考:How to Install Kernel Headers in CentOS 7

4. Docker, docker-composeインストール

docker-mirakurun-epgstationを利用するためにDocker, docker-composeをインストールしていきます。

4.1 Dockerをインストール

# echo ----リポジトリの追加----
# dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# echo ----暫定対応:containerd.ioの直接インストール----
# wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-[最新バージョン].x86_64.rpm
# dnf install containerd.io-[最新バージョン].x86_64.rpm

# echo ----Dockerのインストール----
# dnf install docker-ce docker-ce-cli

# echo ----Dockerの自動起動設定----
# systemctl start docker
# systemctl enable docker

# echo ----Dockerインストールの確認----
# docker --version

コマンド中の[最新バージョン]とは、
https://download.docker.com/linux/centos/7/x86_64/stable/Packages/
にある中でbeta, rcのついていない最新のcontainerd.io。
執筆時点での最新はcontainerd.io-1.2.13-3.1.el7.x86_64.rpm

参考:CentOS8にDockerを入れる

4.2 docker-composeをインストール

# echo ----docker-composeインストール----
# curl -L "https://github.com/docker/compose/releases/download/[最新バージョン]/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# chmod 755 /usr/local/bin/docker-compose

# echo ----docker-composeインストールの確認----
# docker-compose --version

コマンド中の[最新バージョン]とは、
https://github.com/docker/compose/releases
にある中でbeta,rcのついていない最新のバージョン。
執筆時点での最新は1.25.4

参考:Install Docker Compose

5. docker-mirakurun-epgstation導入

docker-mirakurun-epgstationをgitクローンし、PLEX用の設定に書き換えて実行します。

5.1 USB型ICカードリーダーの接続場所を探す

後程コンテナに渡す際に必要になるUSB型ICカードリーダーがどのBusに刺さっているかをlsusbで探します。
lsusbを実行し、「SCM~」と記載のあるものがカードリーダーです。
このBusとDeviceの後に続く数字をメモっておきます。

# lsusb
...
Bus 003 Device 002: ID 04e6:511a SCM Microsystems, Inc.
...

5.2 docker-mirakurun-epgstationのクローン

# cd ~
# git clone https://github.com/l3tnun/docker-mirakurun-epgstation

5.3 各種設定ファイルの書き換え

docker-mirakurun-epgstationはPT3を前提とした記載となっているため、PLEX用に各種設定ファイルを書き換えます。vi等お好みのエディタで書き換えてください。

PX-W3U4, PX-W3PE4はこのままで良いですが、PX-Q3U4, PX-Q3PE4はS4+T4チューナーとなるためここに記載した方法では動作しません。

5.3.1 ~/docker-mirakurun-epgstation/docker-compose.yml

services:
    mirakurun:
     ...
        devices:
            - /dev/pt3video0:/dev/pt3video0
            - /dev/pt3video1:/dev/pt3video1
            - /dev/pt3video2:/dev/pt3video2
            - /dev/pt3video3:/dev/pt3video3
            #- /dev/bus/usb/00x/00x # card reader

この箇所を次の通り書き換える。

services:
    mirakurun:
     ...
        devices:
            - /dev/px4video0:/dev/px4video0
            - /dev/px4video1:/dev/px4video1
            - /dev/px4video2:/dev/px4video2
            - /dev/px4video3:/dev/px4video3
            - /dev/bus/usb/[BUS]/[DEV]  # card reader

pt3の部分をすべてpx4に書き換え、#card reader行のコメントを外す。
この時、5.1で調べたBusとDeviceの数字をそれぞれ[BUS], [DEV]のところに記入。
その他、お好みで録画ファイルの位置を変更したり#restart: alwaysをアンコメント。

5.3.2 ~/docker-mirakurun-epgstation/mirakurun/conf/tuners.yml

PT3-S0, PT3-S1, PT3-T1, PT3-T2のCommand行

command: recpt1 --device /dev/pt3video0 <channel> - -
command: recpt1 --device /dev/pt3video1 <channel> - -
command: recpt1 --device /dev/pt3video2 <channel> - -
command: recpt1 --device /dev/pt3video3 <channel> - -

この箇所のpt3をpx4に書き換える。

command: recpt1 --device /dev/px4video0 <channel> - -
command: recpt1 --device /dev/px4video1 <channel> - -
command: recpt1 --device /dev/px4video2 <channel> - -
command: recpt1 --device /dev/px4video3 <channel> - -

BSアンテナのLNB電源をONにする場合は S0, S1に --lnb 15を追加。

command: recpt1 --device /dev/px4video0 --lnb 15 <channel> - -
command: recpt1 --device /dev/px4video1 --lnb 15 <channel> - -

BSアンテナを接続しない場合はS0, S1のisDisableをtrueに変更。

#isDisabled: false
isDisabled: true

5.3.3 ~/docker-mirakurun-epgstation/mirakurun/Dockerfile

2019年10月にrecpt1がpx4に対応したようで、この記載は不要でした。
5.3.3は読み飛ばしてください

もしかしたらこの変更は必要ないかもしれない[未検証]

recpt1のビルド前にpt1_dev.hにPLEX用のデバイス名を追加する。

# recpt1
\
    git clone https://github.com/stz2012/recpt1 /tmp/recpt1 && \
    cd /tmp/recpt1/recpt1 && \
    ./autogen.sh && \
    ./configure && \
    make && \
    make install && \
\

この箇所のcd /tmp/recpt1/recpt1 && \./autogen.sh && \の間に2行追加。

# recpt1
\
    git clone https://github.com/stz2012/recpt1 /tmp/recpt1 && \
    cd /tmp/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 && \
    make && \
    make install && \
\

参考:Raspberry Pi 3 Model B で PLEX PX-W3U4 が動くという良い話

5.4 コンテナの起動

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

初回立ち上げはかなり長い時間がかかるので気長に待つ。

5.5 起動確認

ネットワーク上の別PCで
http://192.168.xxx.yyy:8888
にアクセスし、EPGStationが表示されることを確認。

5.6 チャンネル設定

~/docker-mirakurun-epgstation/mirakurun/conf/channels.ymlを変更してチャンネル設定をする。
BS/CSは入力されたものをそのまま利用できる。
地上波は後述するチャンネルスキャンを用いれば自動設定ができるので、基本的にはチャンネルスキャンだけすればよい。

チャンネルスキャン

# echo ----mirakurunチャンネルスキャン----
# curl -X PUT "http://192.168.xxx.yyy:40772/api/config/channels/scan"

# echo ----完了後、コンテナの再起動----
# cd ~/docker-mirakurun-epgstation
# docker-compose down
# docker-compose up -d

おわりに

Linux, PLEX, dockerで録画鯖を構築する手段、という記事がなかったので作成しました。
PT3が入手困難になって久しいので、代替手段を探している方々もきっといるはず…

PT3に比べてPLEXのチューナーは動作が不安定、という話もありますが、非公式ドライバは安定して動作しているように見えます。私はかれこれこの鯖で1年ほど深夜アニメを録画していますが、悪天候時以外のドロップは今のところありません。途中CentOSを7から8に上げましたが。

5.3の書き換え部分についてgithubにdiffを設置してそのdiffを適用するような記事にすればもっと容易に導入可能になるかなとも思う。需要があるなら作ろうかな。

昨今映像サブスクリプション全盛でもはやTV録画に需要はないのかもしれないけど、何より無料で放送しているものを録画できるというのは大きなアドバンテージだと思う。皆様良き録画ライフを!

yukarimazedofu
某IT企業に勤務するしがないエンジニア。まったくの別業から2020年3月転職。 趣味のTRPGがどどんとふ自鯖運用、C#によるソフトウェア開発に高じ本職にした。 ユカリサンカワイイヤッター
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away