Rock5BでTV録画サーバを作る(前編)
きっかけ
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
録画サーバ本体
Plex PX-W3U4
録画チューナー(デコードはしない)
NVMe SSD
録画サーバ本体のディスク
NVMe対応 SSD エンクロージャ
録画サーバのLinuxをインストールする
MircoSDカード
Rock5BをSSDで起動するために一度だけ必要
上記SSDへLinuxを書き込むPC
前章の画像でいうPCと記載されている機器。視聴するPCでもある。
ソフトウエア
Rock5B用Ubuntu 24.04 LTS Server
mirakc Ver3系 (2024/9/15時点で3.2.5のようです)
EPGStation Ver2系 (2024/9/15時点で2.10.0のようです)
Docker
balena etcher (SSD書き込みソフト)
中で利用するソフトについては割愛します。
SSDから起動できるようにする
IoT本舗のページ を見てまずはSSDから起動できるようにしましょう。
SSDにLinuxを書き込む
起動できるようになったら、SSDにLinuxを書き込みます。Linuxはここ から Ubuntu 24.04 LTS Server with Linux 6.1をダウンロードして使いますので、書き込み用PCへダウンロードします。
2024/9/15時点では9/4に作成されたバージョンが最新のようです。最初に出たバージョンでは色々不足していましたが、現時点のバージョンでは随分楽になりました。
ダウンロードしている間に書き込みソフトもbalenaのページ からダウンロードします。書き込みソフトについては別なものでも構いません。
さらに、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のここからアンオフィシャルなドライバを作っていきます。以下コマンドを記載していきます。
$ 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