ゎぃゎぃのおもちゃ箱

一般的な大学生の遊び場所

Linuxで録画鯖を建てる #03「CentOS7.5 + Mirakurun + Chinachu」

f:id:yy_kuso:20190630052731p:plain

前回までのあらすじ

ハードウェアの組み立てが完成し,OSを入れる前まで完了. 
yy-kuso.hatenablog.com

CentOSの準備

基本こちらのサイトを参考に進めていった.非常にわかりやすく書いてあるので,初心者でも構築に失敗しないだろう.

最小構成インストール

こちらからMinimal ISOをダウンロード.USBにぶちこんで,インストールUSBを作成.
ブート順番をUSB優先にして起動,GUIにしたがって普通にOSをインストールする.

カーネルのバージョンを確認する.

# cat /etc/redhat-release 
CentOS Linux release 7.5.1804 (Core)

カーネルのバージョン固定

yum updateでカーネルのバージョンが上がってしまうとドライバ周りで困るので固定をする.

# yum install -y vim
# vim /etc/yum.conf
    exclude=kernel*                 <-これを追加

vimおじさんなのでvimを入れた.

firewallの停止

# yum -y install net-tools
# systemctl stop firewalld
# systemctl disable firewalld

SELinuxの無効化

# getenforce
Enforcing
# vim /etc/selinux/config
    SELINUX=enforcing -> SELINUX=disabled           <-ここを変更
# reboot
# getenforce
Disabled

NTPの設定 (by Chrony)

録画スケジューラの正確な動作のためにntpsサーバを登録する.

# vim /etc/chrony.conf
    server ntp.nict.jp iburst                <-これを追加
# systemctl enable chronyd
# systemctl start chronyd
# date

ここではNICTのNTPサーバを登録した.

sambaの設定

録画ファイルにWindowsGUIから簡単にアクセスできるようにするためsambaを準備する.
なお,ここではルート直下にrecorderディレクトリを作成しているので,CentOSのインストール時のデフォルトのパーティション割当では50GBしか容量がないと思うので,後の記事で再割当する.

# mkdir /recorder
# chmod 777 /recorder
# chown nobody:nobody /recorder
# yum install -y samba
# vim /etc/samba/smb.conf

[global]
        disable spoolss = Yes
        load printers = No
        printcap name = cups
        security = USER
        idmap config * : backend = tdb

[share]
        comment = waiwai-Recorder
        create mask = 0777
        directory mask = 0777
        guest ok = Yes
        guest only = Yes
        path = /recorder
        read only = No

# testparm
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section "[share]"
Loaded services file OK.
Server role: ROLE_STANDALONE

Press enter to see a dump of your service definitions
# pdbedit -a "{samba用のユーザ名}"
new password:
retype new password:
# systemctl enable smb nmb
# systemctl start smb nmb

[home]や[printers]は使う予定がないので消した.

開発環境の準備

# yum -y install wget git unzip bzip2 gcc gcc-c++ make \
     autogen automake kernel-devel patch perl-ExtUtils-MakeMaker \
     libtool openssl-devel libboost-all-dev boost-devel cmake

録画コマンドの準備

カードリーダの設定

カードリーダはSCR3310/v2.0を用いた.

# yum -y install ccid pcsc-lite-devel

# mkdir ~/source
# cd ~/source
# wget http://ludovic.rousseau.free.fr/softwares/pcsc-perl/pcsc-perl-1.4.14.tar.bz2
# tar xvf pcsc-perl-1.4.14.tar.bz2
# cd pcsc-perl-1.4.14
# perl Makefile.PL
# make
# make install

# cd ~/source
# wget http://ludovic.rousseau.free.fr/softwares/pcsc-tools/pcsc-tools-1.5.3.tar.bz2
# tar xvf pcsc-tools-1.5.3.tar.bz2
# cd pcsc-tools-1.5.3
# ./configure
# make
# make install

# systemctl enable pcscd
# systemctl start pcscd
# pcsc_scan
~~ 中略 ~~
Japanese Chijou Digital B-CAS Card (pay TV)

arib25ライブラリの設定

B-CASカードを読み,受信した放送データを復号化するARIB STD-B25ライブラリ
ちなみにカードがいらない(インストール時に刺さっていれば後は抜いても大丈夫な)バージョン(soft arib)とかもあるらしい.

# cd ~/source
# git clone https://github.com/stz2012/libarib25.git
# cd libarib25
# cmake ./
# make
# make install
# echo /usr/local/lib > /etc/ld.so.conf.d/usr-local-lib.conf
# ldconfig

PLEX製チューナーの設定

PX-W3PE4を用いた.
Linux用のドライバは公式ページから配布されてはいる.(サポートなし)
つい先日の2018年6月にCentOS7.5に対応したドライバCentOS7-1804_64bit_kernel3.10.0-862」が配布開始したので,これをダウンロードする.

# cd ~/source
# wget http://plex-net.co.jp/plex/linux/CentOS7-1804_64bit_kernel3.10.0-862.zip
# unzip CentOS7-1804_64bit_kernel3.10.0-862.zip
# cd CentOS7-1804_64bit_kernel3.10.0-862
# insmod tty_Virtual.ko
# insmod usb-px4.ko
# lsmod | grep px4
usb_px4               464010  0
tty_Virtual            22223  1 usb_px4
# ls /dev/px4*
/dev/px4-DTV0  /dev/px4-DTV1  /dev/px4-DTV2  /dev/px4-DTV3
# cp -p *.ko /lib/modules/`uname -r`/kernel/drivers/video
# depmod
# vim /etc/udev/rules.d/99-px4.rules
    KERNEL=="px4*" GROUP="video", MODE="0666"
# reboot
# ls -l /dev/px4*
crw-rw-rw- 1 root video 180, 192  629 17:26 /dev/px4-DTV0
crw-rw-rw- 1 root video 180, 193  629 17:26 /dev/px4-DTV1
crw-rw-rw- 1 root video 180, 194  629 17:26 /dev/px4-DTV2
crw-rw-rw- 1 root video 180, 195  629 17:26 /dev/px4-DTV3

次にLinux用録画コマンドを持ってくる.

# cd ~/source
# wget http://plex-net.co.jp/download/linux/Linux_Driver.zip
# unzip Linux_Driver.zip
# cd Linux_Driver/MyRecpt1/MyRecpt1/recpt1/
# make clean
# sh ./configure --enable-b25
# make
# make install
# recpt1 --b25 --strip 27 10 /recorder/test.ts

チャンネル27 (NHK)を10秒間録画.
WindowsVLCでこの動画が再生できることを確認した.

Mirakurunの準備

recpt1は録画するだけの簡単なアプリでチューナーの排他制御やマルチクライアントへの配信など高度なことはしてくれない.これをやってくれる優秀な子.

Node.jsのインストール

# cd
# curl -sL https://rpm.nodesource.com/setup_8.x | bash -
# yum update
# yum install -y nodejs
# node -v
v8.11.3

PM2のインストール

Node.jsのプロセスマネージャーであるPM2をインストールする.

# npm install pm2 -g

Mirakurunのインストール

# npm install mirakurun -g --unsafe --production
# npm install rivarun -g
# npm install arib-b25-stream-test -g --unsafe
# pm2 status

次にチューナーやチャンネルの設定をCLIで行う.
なお,私の環境では地デジしか受信できないのでBS/CS用のチューナーは無効(isDisabled: true)にしておく.

# EDITOR=vim mirakurun config tuners
- name: PX4-S1
  types:
    - BS
    - CS
  command: recpt1 --device /dev/px4-DTV0 --lnb 15 <channel> - -
  decoder: arib-b25-stream-test
  isDisabled: ture

- name: PX4-S2
  types:
    - BS
    - CS
  command: recpt1 --device /dev/px4-DTV1 --lnb 15 <channel> - -
  decoder: arib-b25-stream-test
  isDisabled: ture

- name: PX4-T1
  types:
    - GR
  command: recpt1 --device /dev/px4-DTV2 <channel> - -
  decoder: arib-b25-stream-test
  isDisabled: false

- name: PX4-T2
  types:
    - GR
  command: recpt1 --device /dev/px4-DTV3 <channel> - -
  decoder: arib-b25-stream-test
  isDisabled: false
# mirakurun restart
# EDITOR=vim mirakurun config channels
(適宜環境に合わせて)
# mirakurun restart
# rivarun --b25 --sid 1024 --ch GR/27 10 /recorder/test.ts
# rivarun --b25 --mirakurun localhost:40772 --sid 1024 --ch GR/27 10 /recorder/test.ts

rivarunコマンドから録画ができるか,tcp接続でも同様に録画できるか確認した.

Chinachuの準備

Chinachuのインストール

chinachu用のユーザchinachuを作成してインストール.

# useradd chinachu
# su chinachu
$ git clone -b gamma git://github.com/kanreisa/Chinachu.git ~/chinachu
$ cd ~/chinachu
$ ./chinachu installer
Chinachu Installer Menu:
[!] These are installed under all /home/chinachu/chinachu/...
[!] Recommend the Auto installation.
1) Auto (full)          3) Node.js Environment  5) ffmpeg
2) submodule            4) Node.js Modules
what do you install? > 1
$ echo "[]" > rules.json
$ cp config.sample.json config.json
$ vim config.json
    変更部分
    "uid": "chinachu",
    "recordedDir" : "/recorder/",
    "wuiHost": "0.0.0.0", -> "wuiOpenHost": "0.0.0.0",
$ exit

これでとりあえずchinachuは動くはず.あら簡単.

ログ管理の設定

chianachuとmirakurunのログファイルがディスク容量を圧迫するとよくないのでログ管理するっぽい.

# pm2 install pm2-logrotate
# vim /etc/logrotate.d/mirakurun
/usr/local/var/log/mirakurun.stdout.log
/usr/local/var/log/mirakurun.stderr.log
/{
  daily
  compress
  rotate 7
  missingok
  notifempty
}
# vim /etc/logrotate.d/chinachu
/usr/local/var/log/chinachu-operator.stderr.log
/usr/local/var/log/chinachu-operator.stdout.log
/usr/local/var/log/chinachu-wui.stderr.log
/usr/local/var/log/chinachu-wui.stdout.log
{
  weekly
  compress
  rotate 4
  missingok
  notifempty
}

動作確認と最終設定

# su chinachu
$ cd ~/chinachu
$ ./chinachu service operator execute
Client {
  basePath: '/api',
  priority: 2,
  host: '',
  port: 40772,
  socketPath: '/var/run/mirakurun.sock',
  userAgent: 'Chinachu/0.9.5-gamma.0 (operator)',
  _userAgent: 'MirakurunClient/2.7.0 Node/v6.11.2 (linux)' }
ログデータが続く
$ exit
# cd /home/chinachu/chinachu
# pm2 start processes.json
# pm2 save
# su chinachu
$ ./chinachu update

動作確認もできたので別端末からWebページ経由でアクセスしてみる.
http://(鯖のIPアドレス):20772/
chinachuのWebUIが表示されて無事完了.

感想

WindowsでTVTestを入れたときにはBonDriverやらその他色々設定が面倒くさかったけど,ここまでさくってできると楽でいいですね.
ここまでで録画予約・sambaを通じて別端末でtsファイル視聴まではできるようになったので,次は自動エンコードNAS連携等を実装していきたいです.
yy-kuso.hatenablog.com