📺

Rock5BでTV録画サーバを作る(前編)

2024/09/22に公開

きっかけ

Raspberry PiではTV録画サーバを作る記事がいっぱいあるのに、他のSingle Boad Computer(SBC)での記事が少なく、みんなどうしているのか?同じLinuxだし、できるんじゃね?と思い立って作り始めたのがきっかけです。おりしもRaspberry Piの入手が難しかったのも手伝って、できたらいろんなSBCが選択肢として選べていいよねとも思っていました。また、Mirakurun+EPGStationの構成ではMirakurunの開発があまりされておらず、そろそろ別なものを用意できたら今後も長くつかえるかなとも思っていました。

最終的な構成

以下の画像の構成を目標としています。もし、自分が思っているのと違うと判断された場合、読むのをやめるか一部を参考にするとよいと思います。

録画サーバには録画予約と録画だけをやらせます。録画されたデータはファイルサーバに送り、そちらでデコード(スクランブル解除)をします。そしてデコードをしたファイルをPCで視聴する構成です。機能を分割して、特に録画サーバには録画以外の負担をかけないようにして安定した録画をするようにしています。
録画データはファイルサーバ間でCIFS接続して通信させます。ファイルサーバ側でsambaを動作させてPCから視聴しているためNFSではなくCIFS接続にしてあります。

前編にはなにが書かれているのか

最後まで書ききるつもりでしたが随分長くなってしまったので前後編にします。
前編にはEPGStationやmirakcの設定前までの準備が記載されています。後編はDockerの準備からEPGStationやmirakcの設定について記載しています。準備部分が不要な方は後編からお読みください。

用意するもの

ハードウエア

Rock5B
 録画サーバ本体
https://shop.iothonpo.com/product/rock-5b/
Plex PX-W3U4
 録画チューナー(デコードはしない)
https://www.plex-net.co.jp/product/px-w3u4/
NVMe SSD
 録画サーバ本体のディスク
NVMe対応 SSD エンクロージャ
 録画サーバのLinuxをインストールする
MircoSDカード
 Rock5BをSSDで起動するために一度だけ必要
上記SSDへLinuxを書き込むPC
 前章の画像でいうPCと記載されている機器。視聴するPCでもある。

ソフトウエア

Rock5B用Ubuntu 24.04 LTS Server
https://joshua-riek.github.io/ubuntu-rockchip-download/boards/rock-5b.html
mirakc Ver3系 (2024/9/15時点で3.2.5のようです)
https://mirakc.github.io/dekiru-mirakc/v3/
EPGStation Ver2系 (2024/9/15時点で2.10.0のようです)
https://github.com/l3tnun/EPGStation.git
Docker
balena etcher (SSD書き込みソフト)
中で利用するソフトについては割愛します。
https://etcher.balena.io/

SSDから起動できるようにする

IoT本舗のページ を見てまずはSSDから起動できるようにしましょう。
https://iothonpo.com/rock5b-nvme-boot/

SSDにLinuxを書き込む

起動できるようになったら、SSDにLinuxを書き込みます。Linuxはここ から Ubuntu 24.04 LTS Server with Linux 6.1をダウンロードして使いますので、書き込み用PCへダウンロードします。
https://joshua-riek.github.io/ubuntu-rockchip-download/boards/rock-5b.html
2024/9/15時点では9/4に作成されたバージョンが最新のようです。最初に出たバージョンでは色々不足していましたが、現時点のバージョンでは随分楽になりました。
ダウンロードしている間に書き込みソフトもbalenaのページ からダウンロードします。書き込みソフトについては別なものでも構いません。
https://etcher.balena.io/
さらに、SSDをエンクロージャへ入れてPCへ接続しておきます。

balanaEtcherを利用してLinuxをSSDに書き込んでいきます。アプリを起動して、Flash from fileを選択し、ダウンロードしたUbuntuを選択して開くボタンを押下します(圧縮されたままで選択可能です)。

次にbalanaEtcherのメイン画面からSelect targetを押下して、ターゲットとなるSSDを選択します。
選択が終わったら、メイン画面からFlash!を押して書き込まれるまで待ちます。

書き込みが終わったらエンクロージャからSSDを取り外し、Rock5Bへ取り付けます。

SSDからLinuxを起動

取り付けが終わったらRock5Bに電源やキーボード、ディスプレイ、LANケーブルを刺して起動します。

初期起動後、User名、Passwordはubuntuになっているので、ログインしてみると初回でPasswordを変更しろと言ってくるので、いい感じのPasswordに変更しましょう。

タイムゾーンなどの細かい部分の変更

起動したらまずはタイムゾーンなどの変更をしましょう。

#タイムゾーンの変更
$ sudo timedatectl set-timezone Asia/Tokyo
#変更結果確認
$ timedatectl

次にpython3にシンボリックリンクがないとpythonがないとエラーが出る場合があったので以下を実行。(不要かもしれません)

$ sudo ln -s /usr/bin/python3 /usr/local/bin/python

ついでにパッケージの最新化もしてしまいましょう。コマンドの詳しい内容はあちこちに記載がありますので割愛します。

$ sudo apt update -qy && sudo apt upgrade -qy

IPアドレスの固定化

起動したらまずはネットワークの設定。サーバ用途なのでまずは固定IPへ変更しましょう。
とりあえずコマンドラインからip aと打って、ネットワークデバイスをメモします。
以下の例では2:の後ろにかかれているenP4p65s0がデバイス名です。

デバイス名がわかったところで、netplanでipアドレスを変更します。

$ cd /etc/netplan
$ vi 60-user.yaml

60-user.yamlの内容

network:
  ethernets:
    enP4p65s0:
      dhcp4: false
      addresses: [xxx.xxx.xxx.xxx/xx]
      routes:
        - to: default
          via: xxx.xxx.xxx.xxx
      nameservers:
        addresses: [8.8.8.8,8.8.4.4]
      optional: true
  version: 2

netplanの反映は再起動か以下コマンドを打てば実行可能です。

$ netplan apply

IPアドレスが変更されたことをip aコマンドで確認してください。
(※ifconfig -aを使いたい場合はsudo apt install net-toolsでインストール可能です)

sambaクライアントの動作

録画サーバとファイルサーバ間でsambaアクセスさせます。ファイルサーバ側ではすでにsambaサーバを動作させているため、クライアント動作の設定をします。
まずはクライアントのインストールからはじめていきます。
以下は/pt1encというディレクトリにマウントするようにしています。適宜修正してください。
ここにはスクランブルがかかった録画データをコピーしていくようになります。

$ sudo apt install cifs-utils -y
$ sudo mkdir -p /pt1enc

一度マウントしてみます。ファイルサーバ側フォルダへのアクセス権(User名とPassword)が必要となります。ファイルサーバ側の設定はあちこちに記述があるので割愛します。

$ sudo mount -t cifs -o vers=3.1.1,username=uuuu,password=pppp //[fileserver ip]/[mountpoint] /pt1enc

/pt1encにファイルを置くなどして、ファイルサーバ側に書き込めていることを確認してみます。
うまく書き込め低層なら、user名とpasswordを保存するファイルを作成します。今回はrootユーザの管理下にある/root/.smbcredentialsに置きますが、適宜変更してください。この情報があるとファイルサーバの特定の場所にファイルを置くことができたり、削除することができますので注意してください。

$ sudo vi /root/.smbcredentials

中には以下2行を記載します。

username=uuuu
password=pppp

終わったら、ファイルアクセスをユーザだけがアクセスできるように変更します。

$ sudo chmod 600 /root/.smbcredentials

fstabへ書き込みます。これで再起動してもマウントされたままになります。

$ sudo vi /etc/fstab

fstabの一番したに以下を追記します。

//[fileserver ip]/[mountpoint] /pt1enc cifs _netdev,credentials=/root/.smbcredentials,vers=3.1.1,noperm,noauto,x-systemd.automount,rw 0 0

再起動をかけるか、mountコマンドでマウントしてみます。最近のLinuxはSystemdで管理されているため、systemctlコマンドでいったんリロードをかけてからmountします。

$ sudo systemctl daemon-reload
$ sudo mount /pt1enc

mountコマンドやdfコマンドなどで確認して、うまくmountできていれば完了です。

チューナドライバのコンパイルとインストール

今回使うTVチューナーのドライバのコンパイルをしていきます。まずは必要なアプリをインストールしていきます。

$ sudo apt install git unzip gcc make -y
$ mkdir src     ← ~/src
$ cd src

とりあえずgithubのここからアンオフィシャルなドライバを作っていきます。以下コマンドを記載していきます。
https://github.com/nns779/px4_drv

$ git clone https://github.com/nns779/px4_drv.git
$ cd px4_drv/fwtool
$ make

Plex PX-W3U4の本家から最新ドライバをダウンロードして色々やろうとするとうまくいかないので、少し古いバージョンを利用します。この古いバージョンに上記fwtoolを利用して一部変更をして使います。

$ cd ~/src
$ mkdir PXQ3U4_Driver
$ cd PXQ3U4_Driver
$ wget http://plex-net.co.jp/download/pxq3u4v1.4.zip
$ unzip pxq3u4v1.4.zip
$ cp ~/src/PXQ3U4_Driver/pxq3u4v1/x64/PXQ3U4.sys  ~/src/px4_drv/fwtool/
$ cd ~/src/px4_drv/fwtool
$ ./fwtool PXQ3U4.sys it930x-firmware.bin
$ sudo mkdir -p /lib/firmware
$ sudo cp it930x-firmware.bin /lib/firmware

ドライバができたので、DKMSを利用して起動時に読み込みができるようにしていきます。

$ sudo apt install dkms -y
$ cd ../driver
$ make
$ sudo make install
$ cd ..
$ sudo cp -av ./ /usr/src/px4_drv-0.2.1
$ cd .. 
$ sudo dkms add px4_drv/0.2.1
上記コマンドを打ち、以下が出力されれば問題ありません。
Creating symlink /var/lib/dkms/px4_drv/0.2.1/source ->
                 /usr/src/px4_drv-0.2.1

$ sudo dkms install px4_drv/0.2/1
$ lsmod | grep -e ^px4_drv
px4_drv   xxxx(数字) 0    ←この行があれば問題ありません。

もし、最後のlsmodで何も表示されない場合は以下コマンドを打ち再度lsmodしてみてください。

$ sudo modprobe px4_drv

Plex PX-W3U4を接続して、認識させます。接続したところで、デバイスがあるかどうかを確認します。
※Plex PX-W3U4なら、px4video0からpx4video7まで8つあれば問題ありません。

$ ls /dev/px4video*
/dev/px4video0  /dev/px4video2  /dev/px4video4  /dev/px4video6
/dev/px4video1  /dev/px4video3  /dev/px4video5  /dev/px4video7

recpt1のダウンロードとインストール

recpt1の本家はPX系が対応してないっぽいようなので、亜流版を使っていきます。とりあえず必要なアプリをインストールしていきます。

$ sudo apt install autoconf automake -y
$ cd ~/src
$ mkdir recpt1
$ git clone https://github.com/stz2012/recpt1.git
$ cd recpt1/recpt1
$ ./autogen.sh
$ ./configure
$ make
$ sudo make install

recpt1 --strip xxxx 60 rec.ts ←xxxxにチャンネルリストを入れて確認する。(例えばBS15_0)
デコードはしてないので、このtsファイルはスクランブルがかかっています。vlcなどのアプリで視聴しようとしても真っ暗で音声もでません。(※デコードにはb25などのアプリと、B-CASカードなどが必要です。)

前半はここまで

前半はここまでです。ちょっと大変だったでしょうか?
楽しく作っていってもらえたらうれしい限りです。

Discussion