Ubuntu20.04とPX-MLT5PEとchinachuで録画サーバーを作る

環境

$ cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.1 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.1 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
$ uname -r
5.4.0-58-generic

必要に応じてadduserでユーザーを作っておきsudoできるようにしておく

$ sudo adduser rec
$ sudo visudo 

#タイムゾーンの設定
$ timedatectl
               Local time: Tue 2020-12-29 08:29:51 UTC
           Universal time: Tue 2020-12-29 08:29:51 UTC
                 RTC time: Tue 2020-12-29 08:29:51    
                Time zone: Etc/UTC (UTC, +0000)       
System clock synchronized: yes                        
              NTP service: active                     
          RTC in local TZ: no   
$ sudo timedatectl set-timezone Asia/Tokyo
$ timedatectl
               Local time: Tue 2020-12-29 17:30:48 JST
           Universal time: Tue 2020-12-29 08:30:48 UTC
                 RTC time: Tue 2020-12-29 08:30:48    
                Time zone: Asia/Tokyo (JST, +0900)    
System clock synchronized: yes                        
              NTP service: active                     
          RTC in local TZ: no 

PX-MLT5PEドライバーのインストール
https://github.com/nns779/px4_drv を見ながら粛々と入れる

$ sudo apt install -y unzip gcc make
$ mkdir src
$ cd src/
$ git clone https://github.com/nns779/px4_drv.git
$ 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
$ sudo cp it930x-firmware.bin /lib/firmware/
$ cd ../
##### DKMSを使用しない場合
$ cd driver
$ make
$ sudo make install
#####
$ lsmod | grep -e ^px4_drv
$ ls /dev/pxmlt5video*
/dev/pxmlt5video0  /dev/pxmlt5video1  /dev/pxmlt5video2  /dev/pxmlt5video3  /dev/pxmlt5video4

ubuntuは自動的にカーネルがアップデートされるので、ドライバーが消えるのでDKMSでインストールしたほうが良いかもしれない。
(もしくはアップデートを自動で止める)

$ sudo cp -a ./ /usr/src/px4_drv-0.2.1
$ sudo dkms add px4_drv/0.2.1
$ sudo dkms install px4_drv/0.2.1
$ lsmod | grep -e ^px4_drv
px4_drv               143360  0
$ ls -l /dev/pxmlt5video*
crw-rw-r-- 1 root video 239, 0 Aug 23 22:37 /dev/pxmlt5video0
crw-rw-r-- 1 root video 239, 1 Aug 23 22:37 /dev/pxmlt5video1
crw-rw-r-- 1 root video 239, 2 Aug 23 22:37 /dev/pxmlt5video2
crw-rw-r-- 1 root video 239, 3 Aug 23 22:37 /dev/pxmlt5video3
crw-rw-r-- 1 root video 239, 4 Aug 23 22:37 /dev/pxmlt5video4
crw-rw-r-- 1 root video 239, 5 Aug 23 22:37 /dev/pxmlt5video5
crw-rw-r-- 1 root video 239, 6 Aug 23 22:37 /dev/pxmlt5video6
crw-rw-r-- 1 root video 239, 7 Aug 23 22:37 /dev/pxmlt5video7
crw-rw-r-- 1 root video 239, 8 Aug 23 22:37 /dev/pxmlt5video8
crw-rw-r-- 1 root video 239, 9 Aug 23 22:37 /dev/pxmlt5video9

カードリーダードライバのインストール
#好みのやり方で

arib25ライブラリのインストール

$ sudo apt install -y cmake  build-essential libpcsclite-dev

$ cd ~/src/
$ git clone https://github.com/stz2012/libarib25.git
$ cd libarib25/
$ cmake .
$ make
$ sudo make install
$ 

recpt1のインストール

$ cd ~/src/
$ wget http://plex-net.co.jp/download/linux/Linux_Driver.zip
$ unzip Linux_Driver.zip
$ cd Linux_Driver/MyRecpt1/MyRecpt1/recpt1
$ sed -i".org" 's/-DTV/video/g' pt1_dev.h
$ sh ./autogen.sh 
$ sh ./configure --enable-b25
$ make clean
$ make
$ sudo make install

録画の確認
エラーが出たら上の手順をやり直す

$ recpt1 --device /dev/pxmlt5video1 --b25 --strip --sid hd 27 10 test.ts
using device: /dev/pxmlt5video1
using B25...
enable B25 strip
device = /dev/pxmlt5video1
C/N = 22.501011dB
(PID:4648)(CH:T27) Recording...
Available sid = 1024 1025 1408 65520 
Chosen sid    = 1024
Available PMT = 0x1f0 0x3f0 0x1fc8 0x1cf0 
(PID:4648)(CH:T27) Recorded 10sec

–deviceでデバイスを指定しないとエラーになる。

$ recpt1 --b25 --strip --sid hd 27 10 test.ts
using B25...
enable B25 strip
(tune) Cannot tune to the specified channel

Mirakurunのインストール
この辺を見ながらインストール

$ sudo apt install -y pkg-config
$ curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -
$ sudo apt-get install -y nodejs
$ sudo npm install pm2 -g
$ sudo npm install mirakurun -g --unsafe-perm
$ sudo npm install rivarun -g
$ sudo npm install arib-b25-stream-test -g --unsafe
$ sudo mirakurun config tuners # 下のテキストっぽく修正
$ sudo mirakurun restart

中身はこんな感じ

- name: PX-MLT5PE0
  types:
    - GR
  command: /usr/local/bin/recpt1 --device /dev/pxmlt5video0 <channel> - -
  decoder: arib-b25-stream-test
  isDisabled: false

- name: PX-MLT5PE1
  types:
    - GR
  command: /usr/local/bin/recpt1 --device /dev/pxmlt5video1 <channel> - -
  decoder: arib-b25-stream-test
  isDisabled: false

- name: PX-MLT5PE2
  types:
    - GR
  command: /usr/local/bin/recpt1 --device /dev/pxmlt5video2 <channel> - -
  decoder: arib-b25-stream-test
  isDisabled: false

- name: PX-MLT5PE3
  types:
    - GR
  command: /usr/local/bin/recpt1 --device /dev/pxmlt5video3 <channel> - -
  decoder: arib-b25-stream-test
  isDisabled: false

- name: PX-MLT5PE4
  types:
    - GR
  command: /usr/local/bin/recpt1 --device /dev/pxmlt5video4 <channel> - -
  decoder: arib-b25-stream-test
  isDisabled: false

チャンネルが取得できる事を確認

$ curl -X PUT "http://localhost:40772/api/config/channels/scan"
channel scanning... (type: "GR")
(略)
-> total 11 channels found and 34 channels stored.

channel scan has completed and saved successfully.
**RESTART REQUIRED** to apply changes

この辺を見ながらChinachuインストール

$ sudo apt install -y python2
$ git clone git://github.com/Chinachu/Chinachu.git ~/chinachu
$ cd ~/chinachu/
$ EPYTHON=python2 ./chinachu installer
$ cp config.sample.json config.json
$ vim config.json #公式を見ながら修正
$ echo [] > rules.json
$ ./chinachu service wui execute
$ ./chinachu update
$ sudo pm2 start processes.json
$ sudo pm2 save
$ sudo pm2 startup

ubuntu20にはpython2系が入っていないのでそのまま./chinachu installer するとエラーになる

Installing Node Modules using NPM...

> mirakurun@2.15.2 preinstall /home/rec/chinachu/node_modules/mirakurun
> node bin/preinstall.js

Note: add `-g` to install Mirakurun as Server!

> diskusage@1.1.3 install /home/rec/chinachu/node_modules/diskusage
> node-gyp rebuild

gyp ERR! configure error 
gyp ERR! stack Error: Can't find Python executable "python", you can set the PYTHON env variable.
gyp ERR! stack     at PythonFinder.failNoPython (/home/rec/chinachu/.nave/installed/10.16.3/lib/node_modules/npm/node_modules/node-gyp/lib/configure.js:484:19)
gyp ERR! stack     at PythonFinder.<anonymous> (/home/rec/chinachu/.nave/installed/10.16.3/lib/node_modules/npm/node_modules/node-gyp/lib/configure.js:406:16)
gyp ERR! stack     at F (/home/rec/chinachu/.nave/installed/10.16.3/lib/node_modules/npm/node_modules/which/which.js:68:16)
gyp ERR! stack     at E (/home/rec/chinachu/.nave/installed/10.16.3/lib/node_modules/npm/node_modules/which/which.js:80:29)
gyp ERR! stack     at /home/rec/chinachu/.nave/installed/10.16.3/lib/node_modules/npm/node_modules/which/which.js:89:16
gyp ERR! stack     at /home/rec/chinachu/.nave/installed/10.16.3/lib/node_modules/npm/node_modules/isexe/index.js:42:5
gyp ERR! stack     at /home/rec/chinachu/.nave/installed/10.16.3/lib/node_modules/npm/node_modules/isexe/mode.js:8:5
gyp ERR! stack     at FSReqWrap.oncomplete (fs.js:153:21)
gyp ERR! System Linux 5.4.0-58-generic
gyp ERR! command "/home/rec/chinachu/.nave/installed/10.16.3/bin/node" "/home/rec/chinachu/.nave/installed/10.16.3/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /home/rec/chinachu/node_modules/diskusage
gyp ERR! node -v v10.16.3
gyp ERR! node-gyp -v v3.8.0
gyp ERR! not ok 
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! diskusage@1.1.3 install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the diskusage@1.1.3 install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/rec/.npm/_logs/2020-12-20T13_59_12_766Z-debug.log

> diskusage@1.1.3 install /home/rec/chinachu/node_modules/diskusage
> node-gyp rebuild

gyp ERR! configure error 
gyp ERR! stack Error: Can't find Python executable "python", you can set the PYTHON env variable.
gyp ERR! stack     at PythonFinder.failNoPython (/home/rec/chinachu/.nave/installed/10.16.3/lib/node_modules/npm/node_modules/node-gyp/lib/configure.js:484:19)
gyp ERR! stack     at PythonFinder.<anonymous> (/home/rec/chinachu/.nave/installed/10.16.3/lib/node_modules/npm/node_modules/node-gyp/lib/configure.js:406:16)
gyp ERR! stack     at F (/home/rec/chinachu/.nave/installed/10.16.3/lib/node_modules/npm/node_modules/which/which.js:68:16)
gyp ERR! stack     at E (/home/rec/chinachu/.nave/installed/10.16.3/lib/node_modules/npm/node_modules/which/which.js:80:29)
gyp ERR! stack     at /home/rec/chinachu/.nave/installed/10.16.3/lib/node_modules/npm/node_modules/which/which.js:89:16
gyp ERR! stack     at /home/rec/chinachu/.nave/installed/10.16.3/lib/node_modules/npm/node_modules/isexe/index.js:42:5
gyp ERR! stack     at /home/rec/chinachu/.nave/installed/10.16.3/lib/node_modules/npm/node_modules/isexe/mode.js:8:5
gyp ERR! stack     at FSReqWrap.oncomplete (fs.js:153:21)
gyp ERR! System Linux 5.4.0-58-generic
gyp ERR! command "/home/rec/chinachu/.nave/installed/10.16.3/bin/node" "/home/rec/chinachu/.nave/installed/10.16.3/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /home/rec/chinachu/node_modules/diskusage
gyp ERR! node -v v10.16.3
gyp ERR! node-gyp -v v3.8.0
gyp ERR! not ok 
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! diskusage@1.1.3 install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the diskusage@1.1.3 install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/rec/.npm/_logs/2020-12-20T13_59_16_061Z-debug.log
done.