Linuxで録画鯖を建てる #03「CentOS7.5 + Mirakurun + Chinachu」
前回までのあらすじ
ハードウェアの組み立てが完成し,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* <-これを追加
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の設定
録画ファイルにWindowsのGUIから簡単にアクセスできるようにするため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 6月 29 17:26 /dev/px4-DTV0 crw-rw-rw- 1 root video 180, 193 6月 29 17:26 /dev/px4-DTV1 crw-rw-rw- 1 root video 180, 194 6月 29 17:26 /dev/px4-DTV2 crw-rw-rw- 1 root video 180, 195 6月 29 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
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