LoginSignup
3
10

More than 5 years have passed since last update.

録画サーバーをChinachuに更新した時の備忘録

Last updated at Posted at 2018-09-26

EpegrecからChinachuへ

数年前に組んだPT2の録画サーバーはEpgrecを使っていたが、さすがに時代遅れもいいところなのでHDDの入れ替えついでにChinachuへ移行することにした。使用環境は CentOS 6.9。

準備

標準リポジトリの gcc 及び g++ は 4.4.x と少々古く C++11 をサポートしていない。導入スクリプトが失敗してしまうので 4.8 とか 4.9 を入れておく。
またgitも必要になるが、これもやはり 1.x 系の古いやつが入る。yum に IUS リポジトリを追加するなどして 2.x 系を入れる。
それぞれ分かりやすい導入記事がたくさんあるので、ここでは手順を割愛。

recpt1

DVBはCentOS 7からなので、DVB版ドライバの導入はなし。カーネルの更新の度に再ビルドが必要になって面倒だったのだが仕方ない。なので録画も引き続きrecpt1で行う。

Node.js

現行のRivarunが要求するNode.jsは8.9.4以上9未満。yumで普通に入れると恐ろしく古いバージョンがやって来るので、nvmを使って任意のバージョンを入れる。バージョンの切り替えが簡単に行えるのが良い点なのだが、これが後で役に立つことに。

$ git clone git://github.com/creationix/nvm.git ~/.nvm
$ source ~/.nvm/nvm.sh
$ nvm install v8.12.0

Rivarun & Mirakurun

pm2はプロセスマネージャー。自動起動とかを管理してくれる。

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

チューナー設定

root# mirakurun config tuners

command の DevicePath を /dev/ の中を確認して適宜変更。isDisabled は false にしておかないとデバイスが無効になる。
PT2は二枚刺ししているので、下記の設定をもう1セット用意した。

- name: PT2A-S1
  types:
    - BS
    - CS
  command: recpt1 --device /dev/pt1video0 <channel> - -
  decoder: arib-b25-stream-test
  isDisabled: false

- name: PT2A-S2
  types:
    - BS
    - CS
  command: recpt1 --device /dev/pt1video1 <channel> - -
  decoder: arib-b25-stream-test
  isDisabled: false

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

- name: PT2A-T2
  types:
    - GR
  command: recpt1 --device /dev/pt1video3 <channel> - -
  decoder: arib-b25-stream-test
  isDisabled: false

チャンネル設定

root# mirakurun config channels

チャンネルスキャンもできるが時間がかかるようなので、epgrec の config を元に自分で書いた。

動作確認

一通り設定したらサービスを再起動し、EPGが更新されるのを待つ。

root# mirakurun restart

rivarun コマンドを叩いてチャンネル情報が取れていればOK。

root# rivarun --list | sed 's/},/},\n/g'
status: 200
headers: {"server":"Mirakurun/2.7.1","content-type":"application/json; charset=utf-8","date":"Wed, 26 Sep 2018 06:55:56 GMT","connection":"close","content-length":"3100"}
[{"type":"GR","channel":"24","name":"NHK","services":[{"id":3211240960,"serviceId":40960,"networkId":32112,"name":"NHK総合1・大阪"},
{"id":3211240961,"serviceId":40961,"networkId":32112,"name":"NHK総合2・大阪"},
{"id":3211241344,"serviceId":41344,"networkId":32112,"name":"NHK携帯G・大阪"}]},
{"type":"GR","channel":"13","name":"教育","services":[{"id":3272102056,"serviceId":2056,"networkId":32721,"name":"NHKEテレ1大阪"},
{"id":3272102057,"serviceId":2057,"networkId":32721,"name":"NHKEテレ2大阪"},
{"id":3272102058,"serviceId":2058,"networkId":32721,"name":"NHKEテレ3大阪"},
{"id":3272102440,"serviceId":2440,"networkId":32721,"name":"NHK携帯2"}]},
{"type":"GR","channel":"26","name":"サンテレビ","services":[{"id":3208643056,"serviceId":43056,"networkId":32086,"name":"サンテレビ1"},
{"id":3208643057,"serviceId":43057,"networkId":32086,"name":"サンテレビ2"},
{"id":3208643440,"serviceId":43440,"networkId":32086,"name":"サンテレビ携帯"}]},
*以下略*

次に録画できるかをテスト。

root# rivarun --b25 --sid 2088 --ch GR/14 10 ./test.ts

チャンネル GR/14 のサービスID 2088 を 10 秒間録画するコマンド。チャンネルやサービスの値は先ほどの rivarun コマンドの結果から拾えるので、環境に合わせて適宜変える。

Chinachu

動作用にroot以外のユーザーが必要。なければ適宜作成する。
録画したファイルはsambaでネットワーク共有しているので、アクセス権で難儀しないようそれ用のユーザーを使い回すことにした。

samba# git clone git://github.com/kanreisa/Chinachu.git ~/chinachu
samba# cd ~/chinachu/
samba# ./chinachu installer
samba# Auto を選択

録画条件は自分で設定するので、空のルールを入れておく。

samba# echo "[]" > rules.json

テンプレートをコピーして設定ファイルを作成し、編集。

samba# cp config.sample.json config.json
samba# vim config.json

とりあえず変えておくべき項目は uid と recordedDir。uid には chinachu 用ユーザーを設定し、recordedDir には録画データの保存パスを入れる。

起動テスト

samba# ./chinachu service wui execute
samba# ./chinachu service operator execute

それぞれのコマンドを試し、エラーが出なければOK。その場合制御が返ってこないはずなので、Ctrl+Cで終了させる。

…のだが、後者のコマンドのみ下記のようなエラーを吐いて動作しなかった。

Error: Module version mismatch. Expected 48, got 57.

ちなみに pm2 から起動させると operator も status=online となり一見問題なく動作するように見えるが、/usr/local/var/log/chinachu-operator.stderr.log にはエラーが記録されており実際には動作していないので注意。

どうも Chinachu が要求する Node.js バージョンは6.11.2であるにも関わらず、実際には別のバージョン(ここでは8.12.0)がChinachuにインストールされていることでエラーになっている模様。
要求される Node.js バージョンは以下のコマンドで確認可能。もし別の値になっていたら、以降は 6.11.2 の部分をその値に読み替える。

root# pm2 show chinachu-operator
*中略*
│ node.js version   │ 6.11.2
│ node env          │ production
│ watch & reload    │ ✘
│ unstable restarts │ 0

Chinachuにv6.11.2のNode.jsモジュールを入れる

Node.js の導入方法の問題なのかもしれないが、解決方法が分からなかったので対症療法で解決。
まず nvm で v6.11.2を入れる。動作バージョンを確認し、v6.11.2に切り替わっていることを確認。

root# nvm install v6.11.2
root# nvm ls
->      v6.11.2
        v8.12.0

chinachu のインストールディレクトリに移動し、node_modules ディレクトリを削除。

root@chinachu# rm -rf node_modules

続いて再インストール。これで v6.11.2 のモジュールが入る。
なお node_modules 以下の所有権が root になってしまうので、chown しておくか、ユーザーを切り替えて sudo を付けてコマンドを叩いた方がいいかもしれない。

root@chinachu# npm install

再度コマンドを叩いて動くかどうかを確認。

root@chinachu# ./chinachu service operator execute

問題が無ければ Node.js のバージョンを元に戻す。

root@# nvm use v8.12.0
root@# nvm ls
        v6.11.2
->      v8.12.0

諸々も入れ直す。設定は消えていないので大丈夫。

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

起動テスト(の続き)

Mirakurun から EPG が取れることを確認。

root# ./chinachu update

起動設定

pm2 に登録して保存。

sudo pm2 start processes.json
sudo pm2 save

動作確認

ブラウザから http://Server-IP:20772 を叩いてウェブページが表示されるかを確認。

Epgrecの停止

cron に登録してある EPG の更新スクリプトを停止させ、ウェブページ上から録画予約と自動録画キーワードを全て削除すればOK。

3
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
10