Raspberry Pi 4 で録画サーバー作り(PX-W3U4 + Mirakurun + EPGStation)

はじめに

昨年ラズパイ4を買って録画サーバーを作ったのですが、なぜか動作が止まってしまったので(原因究明は面倒なのでしなかった)、再セットアップのついでにやり方についてまとめる。 完全に自分用備忘録。


準備

準備物

  • Raspberry pi 4 (Model B/4GB)
  • micro SDカード (16GB)
  • micro SDカードリーダー
  • 有線LAN環境
  • QNAP NAS(詳細は別記事)
  • PLEX PX-W3U4
  • B-CASカード
  • B-CASカードリーダー

環境

  • Windows 10 Pro(設定、視聴PC)
  • Raspbian buster


手順

1. Raspbianインストール

公式からインストーラーが出ててびっくり。

www.raspberrypi.org

今まで色々入れていたのはなんだったのか。 Raspberry Pi Imager for Windowsを選択してダウンロード、インストール、起動。

f:id:mhcp0001:20200525074753p:plain 起動するとこのような画面になるのでまずは左のChoose OS。

f:id:mhcp0001:20200525074917p:plain SDのフォーマットもこれまでは別ソフトで行っていましたが、Eraseから出来ます。なんて便利!!!

f:id:mhcp0001:20200525074947p:plain 画像では複数のメディアが表示されていますが、通常は1つのはず。ディスク容量やラベル(CとかDとか)を見て正しいSDカードを選びましょう。

f:id:mhcp0001:20200525075007p:plain WRITEでフォーマットできます。

f:id:mhcp0001:20200525075019p:plain フォーマットが完了したらいよいよOSを入れていきます。先程のOS選択で今回は一番上のRaspbianを選択しました。 レッツ書き込み。あまり良いSDじゃないのでまあまあ時間かかりました。

f:id:mhcp0001:20200525075032p:plain 終わった!!


2. SSH設定

SDカードのルートディレクトリ直下にsshという名前のファイルを作成することで、ssh接続ができるようになります。 Windowsなので普通にGUIで作りました。


3. SSHコマンドログイン

Raspberry PiへSDカードを刺して、電源コードをUSB-C端子へ刺す。 起動するので、Windows PowershellSSH接続していきます。

ssh pi@raspberrypi.localを叩いてログイン。デフォルトのパスワードはraspberry。


4. raspi-configで初期設定

以下参考

https://hiroto-k.hatenablog.com/entry/2020/03/04/190000

raspi-configコマンドを使ってタイムゾーンを変える。 日本になっていないかもしれないので、Asia→Tokyoを選びましょう。


5. ユーザ名、パスワードを変更

初期設定はあまりにも危ないので流石に変えよう。 piユーザで何かやってからにすると面倒なのでできるだけ早くここはやる。

pi ユーザーでログインしたままユーザー名を変えるのは不可能なので, 一旦作業用ユーザーを作って実行する.

$ sudo useradd -M tmp
$ sudo gpasswd -a tmp sudo
$ sudo passwd tmp

一旦ログアウトして tmp でログインする.

$ sudo usermod -l newuser pi
$ sudo usermod -d /home/newuser -m newuser
$ sudo groupmod -n newuser pi

もしこの時にusername変換でうまくいかないときは、raspi-configのBoot option→B1 Desktop / CLI→B1 Consoleを選択してリブートするとうまくいく。

ログアウトして newuser でログインし直し, 作業用ユーザーを削除する.

$ sudo userdel tmp

newuser のパスワードを変える.

$ sudo passwd newuser


6. 環境構築に必要なパッケージ取得

/etc/apt/sources.list を編集する。

# 国内のミラーを追加  
$ cat << 'EOT' | sudo tee /etc/apt/sources.list  
deb http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi  
# Uncomment line below then 'apt-get update' to enable 'apt-get source'  
deb http://ftp.jaist.ac.jp/raspbian/ buster main contrib non-free rpi  
deb http://ftp.tsukuba.wide.ad.jp/Linux/raspbian/raspbian/ buster main contrib non-free rpi  
deb http://ftp.yz.yamagata-u.ac.jp/pub/linux/raspbian/raspbian/ buster main contrib non-free rpi  
deb http://download.webmin.com/download/repository sarge contrib  
EOT  
# Webminのキーを追加  
$ wget -qO - http://www.webmin.com/jcameron-key.asc | sudo apt-key add -  
$ sudo apt update ; sudo apt -y upgrade 
# パッケージ追加 
$ sudo apt -y install pcscd libpcsclite-dev libccid pcsc-tools python2.7 mercurial sqlite3 ffmpeg cmake g++ autoconf git dkms cpufrequtils cpufreqd webmin nodejs npm hexedit

ここまで引用


7. IPアドレス固定

ルーター側設定でIPアドレスを固定。やり方はルーターによって違うので割愛。


8. apt更新

いつもの。

$ apt update
$ apt upgrade -y


9. NASへの自動マウント設定

以下を参考。

https://www.mana-cat.com/entry/2017/05/02/164244

$ sudo apt-get install cifs-utils
$ sudo mkdir /mnt/nas
$ sudo nano /etc/fstab 
以下を追記 
//$(NASのIP)/$(ディレクトリパス) /mnt/nas cifs username=xxxxxxx,password=xxxxxxxx,file_mode=0777,dir_mode=0777,iocharset=utf8,uid=1000,gid=1000,forceuid,forcegid,_netdev 0 0

OS起動後、NASが自動的にマウントされるようにブートオプションを変更する。ネットワークサービスが起動されてからブートするようにタイミングを変えないと、fstabに設定したNASのマウントが失敗する。

raspi-configから「3 Boot Options」→「B2 Wait for Network at Boot Choose whether to wait for network」→Yes

これで設定は完了。再起動して「df -h」コマンドでマウントできるか確認する。


10. チューナーセットアップ

今回使うのはPX-W3U4。 以下を参考。

https://note.com/gk2hk/n/nabd30328bc34

# チューナードライバのダウンロード 
$ mkdir -p ~/src/ 
$ cd ~/src/ 
$ git clone https://github.com/nns779/px4_drv.git 

# ファームウェアのインストール 
$ cd ~/src/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 
$ sudo mkdir -p /lib/firmware 
$ sudo cp it930x-firmware.bin /lib/firmware/ 

# チューナードライバのインストール 
$ cd ~/src/px4_drv/ 
$ sudo cp -av ./ /usr/src/px4_drv-0.2.1 
$ sudo dkms add px4_drv/0.2.1 
$ sudo dkms install px4_drv/0.2.1 
$ sudo modprobe px4_drv 
$ ls /dev/px4video* 
/dev/px4video0 
/dev/px4video1 
/dev/px4video2 
/dev/px4video3 

# 再起動 
$ sudo reboot now 
# 再起動前にusbメモリとかチューナーを挿しておく。


11. 録画ツール等の導入

以下を参考。

https://qiita.com/tatsuya_info/items/3583182ac104a4958eac

# recpt1の構築
$ git clone https://github.com/stz2012/recpt1.git 
$ cd recpt1/recpt1 
$ sed -i -e "/^char \*bsdev\[NUM_BSDEV\] = {$/a \ \ \ \ \"/dev/px4video1\",\n\ \ \ \ \"/dev/px4video0\",\n\ \ \ \ \"/dev/px4video4\",\n\ \ \ \ \"/dev/px4video5\"," pt1_dev.h 
$ sed -i -e "/^char \*isdb_t_dev\[NUM_ISDB_T_DEV\] = {$/a \ \ \ \ \"/dev/px4video2\",\n\ \ \ \ \"/dev/px4video3\",\n\ \ \ \ \"/dev/px4video6\",\n\ \ \ \ \"/dev/px4video7\"," pt1_dev.h 
$ ./autogen.sh 
$ ./configure --enable-b25 
$ make -j 4 
$ sudo make install 
$ cd /tmp 
$ recpt1 --b25 --strip [チャンネル] 20 test.ts

# Mirakurun
# curl -sL https://deb.nodesource.com/setup_10.x | bash - 
$ sudo apt install -y nodejs npm
$ sudo npm install pm2 -g 
$ sudo npm install mirakurun -g --unsafe-perm --production 
$ sudo EDITOR=nano mirakurun config tuners
- name: PX4-S1 
  types: 
    - BS 
    - CS 
  command: recpt1 --b25 --device /dev/px4video0 <channel> - - 
  isDisabled: false 
- name: PX4-S2 
  types: 
    - BS 
    - CS 
  command: recpt1 --b25 --device /dev/px4video1 <channel> - - 
  isDisabled: false

- name: PX4-T1 
  types: 
    - GR 
  command: recpt1 --b25 --device /dev/px4video2 <channel> - - 
  isDisabled: false 
- name: PX4-T2 
  types: 
    - GR 
  command: recpt1 --b25 --device /dev/px4video3 <channel> - - 
  isDisabled: false


12. Mirakurunの設定

11と同様の記事を参考。

$ sudo mirakurun restart 

# チャンネルスキャン 時間が掛かるけど、とりあえず待つ 
$ sudo curl -X PUT "http://localhost:40772/api/config/channels/scan" 
$ sudo mirakurun restart 
$ sudo npm install rivarun -g

# チャンネルスキャンした結果を確認 
$ sudo rivarun --list | sed 's/},/},\n/g'

# pm2-logrotateをインストール 
$ sudo pm2 install pm2-logrotate

# 毎日ログを圧縮して一週間分保存 
$ cat << 'EOT' | sudo tee /etc/logrotate.d/mirakurun 
/usr/local/var/log/mirakurun.stdout.log 
/usr/local/var/log/mirakurun.stderr.log 
/{ 
daily 
compress 
rotate 7 
missingok 
notifempty 
} 
EOT

# Mirakurunの再起動 
$ sudo mirakurun restart


13. EPGStationの導入

以下を参考

https://qiita.com/SamAkada/items/a4864eff53a304d07932

$ git clone https://github.com/l3tnun/EPGStation.git 
$ cd EPGStation 
$ sudo npm i npm@latest -g 
$ sudo npm install --unsafe-perm=true --allow-root 
$ sudo npm run build

$ sudo cp config/config.sample.json config/config.json 
$ sudo cp config/operatorLogConfig.sample.json config/operatorLogConfig.json 
$ sudo cp config/serviceLogConfig.sample.json config/serviceLogConfig.json

$ sudo nano config/config.json

# ffmpegの2行の部分に以下4行を挿入
"ffmpeg": "/usr/bin/ffmpeg", 
"ffprobe": "/usr/bin/ffprobe", 
"recorded": "/mnt/nas", 
"recordedTmp": "/mnt/nas",


# 自動起動設定
$ sudo pm2 startup 
$ sudo pm2 start dist/server/index.js --name "epgstation" 
$ sudo pm2 save

これで設定は終了。

f:id:mhcp0001:20200525075043p:plain ラズパイのIP:8888にブラウザからアクセスして、この画面が出てきたら成功!!


あとがき

死ぬほど疲れた。 上手く行ったり上手くいかなかったり原因の切り分けが微妙。 でもこれでPCからはもちろん、iPhoneiPadからでもテレビが見れるし、VPN接続で外出先からも家のNASに入っている録画データにアクセスできる。 最近テレビ見ないけど。