Ubuntu 13.10 で Chinachu を使う その3

テーマ:
[ご注意]この記事は2013年に書かれたものなので内容が古くなっています。
■Chinachu のインストール
chinachu で実行ユーザーを作る。
sudo adduser chinachu
でもいいが GUI上から作って環境も整えておいた。
$ sudo apt-get install build-essential curl git-core libssl-dev yasm libtool autoconf

chinachuでログイン
$ sudo -i -u chinachu

git からクローンを取得
$ git clone git://github.com/kanreisa/Chinachu.git ~/chinachu

インストーラ実行
$ cd ~/chinachu/
~/chinachu$ ./chinachu installer

最初のメニューから (A)Auto を選択。自動でインストールが行われ必要なものがダウンロード&インストール
されていく。./chinachu の中身はシェルスクリプトなので、何をやっているかはエディタで開けばわかる。
インストールが終了したら、Chinachu公式サイトのインストール説明に従い下記の通り設定をすすめる。

~/chinachu$ ./chinachu service operator initscript > /tmp/chinachu-operator
~/chinachu$ ./chinachu service wui initscript > /tmp/chinachu-wui
~/chinachu$ sudo chown root:root /tmp/chinachu-operator /tmp/chinachu-wui
ここで sudo できないようなら chinachu で sudo できるように他のユーザーで sudo visudo して再度実行。
~/chinachu$ sudo chown root:root /tmp/chinachu-operator /tmp/chinachu-wui

~/chinachu$ sudo chmod +x /tmp/chinachu-operator /tmp/chinachu-wui
~/chinachu$ sudo mv /tmp/chinachu-operator /tmp/chinachu-wui /etc/init.d/
~/chinachu$ sudo insserv chinachu-operator
ここで「sudo: insserv: コマンドが見つかりません」と表示された場合はシンボリックリンクを張って
~/chinachu$ sudo ln -s /usr/lib/insserv/insserv /sbin/insserv
再度実行。
~/chinachu$ sudo insserv chinachu-operator

~/chinachu$ sudo insserv chinachu-wui

設定ファイルを作る。作る前にサービスを起動しないこと。PT2の場合はサービスを起動する前に
ファイルで設定しないとデバイスがロックするらしい。
※Chinachu の初期サンプルファイルは PT3 前提になっている。

~/chinachu$ ls
LICENSE app-cli.js app-wui.js node_modules test
README.md app-operator.js chinachu package.json usr
api app-scheduler.js config.sample.json rules.sample.json web
~/chinachu$ cp config.sample.json config.json
~/chinachu$ cp rules.sample.json rules.json
~/chinachu$ sudo gedit config.json

config.json は直接の動作環境を設定するファイル。
PT2 を使った地デジ2チューナーとして下記の通り変更した。
・PT3-T1/T2 を PT2-T1/T2 に
・/dev/pt3video* を /dev/pt1video* に
・録画ファイルの拡張子を .m2ts から .ts に(過去の設定を変更するのが面倒だっただけ)
・チャンネルを実測値に合わせて変更
{
"recordedDir" : "./recorded/",
"temporaryDir": "/tmp/",

"wuiUsers": [
"a****:b********"
],

"wuiPort" : 10772,
"wuiHost" : "::",
"wuiTlsKeyPath" : null,
"wuiTlsCertPath" : null,
"wuiPreviewer" : true,
"wuiStreamer" : true,
"wuiFiler" : true,
"wuiConfigurator": true,

"recordedFormat": "[<date:yymmdd-HHMM>][<type><channel>][<tuner>]<title>.ts",

"tuners": [
{
"name" : "PT2-T1",
"isScrambling": false,
"types" : [ "GR" ],
"command" : "recpt1 --device /dev/pt1video2 --b25 --strip --sid <sid> <channel> - -"
},
{
"name" : "PT2-T2",
"isScrambling": false,
"types" : [ "GR" ],
"command" : "recpt1 --device /dev/pt1video3 --b25 --strip --sid <sid> <channel> - -"
}
],

"channels": [
{ "type": "GR", "channel": "13" },
{ "type": "GR", "channel": "16" },
{ "type": "GR", "channel": "18" },
{ "type": "GR", "channel": "21" },
{ "type": "GR", "channel": "22" },
{ "type": "GR", "channel": "23" },
{ "type": "GR", "channel": "24" },
{ "type": "GR", "channel": "25" },
{ "type": "GR", "channel": "26" },
{ "type": "GR", "channel": "27" },
{ "type": "GR", "channel": "28" },
{ "type": "GR", "channel": "30" },
{ "type": "GR", "channel": "32" },
{ "type": "GR", "channel": "49" },
{ "type": "GR", "channel": "50" }
]
}

~/chinachu$ sudo gedit rules.json
rules.json は録画の条件付けを記述するファイル。
サービス開始後にブラウザ上からGUIで変更できるので、とりあえずそのままでも良いが、デフォルトの
サンプルファイルのままだと某衛星アニメチャンネルから大量にアニメが録画予約されてしまうっぽい。
[
{
"types": [
"GR"  ←地デジ/BS/CS の別
],
"categories": [
"anime"  ←EPG上のジャンル
],
"ignore_channels": [
"13",  ←このルールで無視するチャンネル
"28"
],
"hour": {
"start": 23,  ←このルールで対象とする時間 23時~4時
"end": 4
},
"duration": {
"min": 600,
"max": 10801
},
"ignore_titles": [
"兄貴四重奏 ~くんずほぐれつ~",  ←条件と合致しても無視するタイトル
"機動戦士マンダム",
"黒子のバスト",
"鉄雄の部屋"
],
"ignore_flags": [
"再"
]
},
{
"reserve_titles": [
"どうじん!",  ←条件と合致しなくても強制予約するタイトル。
"嫁のカノジョ"
]
}
]
なお、どちらのファイルも , { } [ ] " の書き間違い、抜けには注意が必要。

サービスを起動する。
~/chinachu$ sudo service chinachu-operator start
Starting chinachu-operator: OK.
~/chinachu$ sudo service chinachu-wui start
Starting chinachu-wui: OK.

EPGを受信する。
~/chinachu$ ./chinachu update -f
設定ファイルに記述ミスがある場合は、この時に

undefined:xx
SyntaxError: Unexpected string

などと表示されるので再度設定ファイルをチェック。
動作した場合は逐一チューナーの受信状況が表示されていくはず。

ブラウザで http://127.0.0.1:10772 を開く。
127.0.0.1 の部分はLAN上の他のマシンのブラウザから開く場合は chinachu 稼動マシンのアドレスにする。
ポップアップウィンドウに

ユーザ名:a****
パスワード:b********

を入れて(このパスワードは config.json 内で変更できる)しばし待つとマゼンタな画面になる。ちなちゅー!

■オフラインで動かない Chinachu(解決済)
録画サービス自体はオフラインで問題なく動くが、ブラウザ画面はオフラインで開こうとすると
いつまでも画面の中心で表示待ちのアニメーションが回りっぱなしだったり、
JavaScript execution required. と表示されたままで画面が出なかったりする。
これは、/chinachu/web/index.html の中に http でスタイルシートや javascript を読みに行く部分があるため。

ブラウザで index.html を読み込む際にオンライン(インターネット接続)であれば、後はオフラインになっても
ページを閉じない限りは大丈夫。
これらのスクリプトは平文で読めるので、外部に読みに行くファイルをローカルで持つように
index.html を改変するとオフラインでも動作する。

具体的には、
1.index.html 内で http: で始まる3つのファイルをURL直打ちでダウンロードしてくる。
2.ユーザー chinachu で /home/chinachu/chinachu/web/lib/ 以下に3つのファイルを配置。
3.index.html の該当部分3箇所をローカルファイルのパスに修正。

一応これで動くことは確認したが、このブログを書き上げるよりも早く公式で対応されたようなので、
今後のインストールでこの現象は発生しないものと思われる。

■ロックの解除と問題点
Chinachu は録画であれ EPG受信であれ PT2 を使っている間はデバイスのロックを行う。
ある日録画開始予定時間になったのに動かないのでログを見たところ、EPG受信でチューナーが
2つともロックされているのが原因のようだった。アンロックしたら録画が開始された。

[Operetor のログ]
12 Dec 00:28:26 - READ: `/home/chinachu/chinachu/data/reserves.json` is updated.
12 Dec 00:29:00 - PREPARE: 2013-12-12T00:30:00 [TBS] 夫婦堂
12 Dec 00:29:00 - WRITE: /home/chinachu/chinachu/data/recording.json
12 Dec 00:29:55 - RECORD: 2013-12-12T00:30:00 [TBS] 夫婦堂
12 Dec 00:29:55 - WARNING: GR 利用可能なチューナーが見つかりません (存在しないかロックされています) (5秒後に再試行)
12 Dec 00:30:00 - RECORD: 2013-12-12T00:30:00 [TBS] 夫婦堂
12 Dec 00:30:00 - WARNING: GR 利用可能なチューナーが見つかりません (存在しないかロックされています) (5秒後に再試行)
(以下、くりかえし)

[Scheduler のログ]
11 Dec 23:04:33 - {"type":"GR","channel":"28","n":10}
11 Dec 23:04:33 - LOCK: PT2-T1 (n=0)
11 Dec 23:04:33 - SPAWN: recpt1 --device /dev/pt1video2 --sid epg 28 - - (pid=8905)
11 Dec 23:04:33 - STREAM: /tmp/chinachu-tmp-hor7xiui.m2ts
11 Dec 23:04:33 - {"type":"GR","channel":"30","n":11}
11 Dec 23:04:33 - LOCK: PT2-T2 (n=1)
11 Dec 23:04:33 - SPAWN: recpt1 --device /dev/pt1video3 --sid epg 30 - - (pid=8906)
11 Dec 23:04:33 - STREAM: /tmp/chinachu-tmp-hor7xiut.m2ts
11 Dec 23:04:33 - STATUS: { completed: 15, waiting: 5, worked: 12, running: 3 }
11 Dec 23:04:33 - #recpt1: using device: /dev/pt1video2 pid = 8905
11 Dec 23:04:33 - #recpt1: using device: /dev/pt1video3 pid = 8906
11 Dec 23:04:33 - STATUS: { completed: 15, waiting: 3, worked: 12, running: 3 }
11 Dec 23:04:33 - STATUS: { completed: 15, waiting: 3, worked: 12, running: 3 }
11 Dec 23:04:34 - #recpt1: device = /dev/pt1video2
11 Dec 23:04:34 - STATUS: { completed: 15, waiting: 3, worked: 12, running: 2 }
11 Dec 23:04:34 - #recpt1: device = /dev/pt1video3
11 Dec 23:04:34 - #recpt1: C/N = 32.691421dB
11 Dec 23:04:34 - #recpt1: Recording...
11 Dec 23:04:34 - #recpt1: C/N = 33.132528dB
11 Dec 23:04:34 - #recpt1: Recording...
11 Dec 23:04:34 - #recpt1: Available sid =
11 Dec 23:04:34 - #recpt1: 1088
11 Dec 23:04:34 - #recpt1: 1089
11 Dec 23:04:34 - #recpt1: 1090
11 Dec 23:04:34 - #recpt1:
11 Dec 23:04:34 - #recpt1: Chosen sid =
11 Dec 23:04:34 - #recpt1: Available PMT =
11 Dec 23:04:34 - #recpt1: 0x1f0
11 Dec 23:04:34 - #recpt1: 0x2f0
11 Dec 23:04:34 - #recpt1: 0x3f0
11 Dec 23:04:34 - #recpt1:
11 Dec 23:04:34 - #recpt1: Available sid =
11 Dec 23:04:34 - #recpt1: 27704
11 Dec 23:04:34 - #recpt1: 27705
11 Dec 23:04:34 - #recpt1: 28088
11 Dec 23:04:34 - #recpt1:
11 Dec 23:04:34 - #recpt1: Chosen sid = Available PMT = 0x110 0x120 0x1fc8
11 Dec 23:07:31 - GETTING EPG.
11 Dec 23:07:31 - STATUS: { completed: 0, waiting: 15, worked: 0, running: 0 }
12 Dec 00:07:30 - GETTING EPG.
12 Dec 00:07:30 - STATUS: { completed: 0, waiting: 15, worked: 0, running: 0 }

23時4分あたりにトラぶったっぽい。
SIGTERM received. cleaning up... や UNLOCK: PT2-T* (n=0) が現れないところを見ると
ロックしたままになってるようだ。

[ロックを解除]
$ sudo -i -u chinachu
$ cd chinachu
~/chinachu$ ./chinachu -help
Usage: ./chinachu <cmd> ...

Commands:

installer Run a Installer.
updater Run a Updater.
service <name> <action> Service-utility.

update Run a Scheduler.
search [options] Search for programs.

reserve <pgid> Reserve the program manually.
unreserve <pgid> Unreserve the program manually.
skip <pgid> Skip the auto-reserved program.
unskip <pgid> Cancel the skip.
stop <pgid> Stop the recording.

rule [options] Add or config a rule for auto reservation.
enrule <rule#> Enable a rule. (alias of rule -n <rule#> --enable)
disrule <rule#> Disable a rule. (alias of rule -n <rule#> --disable)
rmrule <rule#> Remove a rule. (alias of rule -n <rule#> --remove)

rules Show a list of auto reserving rules.
reserves Show a list of reserved programs.
recording Show a list of recording programs.
recorded Show a list of recorded programs.

cleanup Clean-up the recorded list.
unlock Unlock the tuners.

ircbot [options] Connect to IRC server and run a ircbot. (Experimental)

test <app> [options] Run <app> in /home/chinachu/chinachu/usr/bin

help Output this information.
~/chinachu$ ./chinachu unlock
Unlock the tuners.
*WARNING* Do NOT run this command when on running recording, scheduler.
Do you want to continue [Y/n]? y
`/home/chinachu/chinachu/data/tuner.0.lock' を削除しました
`/home/chinachu/chinachu/data/tuner.1.lock' を削除しました
`/home/chinachu/chinachu/data/tuner.2.lock' を削除しました
done.

[Operetor のログ]
12 Dec 00:35:05 - WARNING: GR 利用可能なチューナーが見つかりません (存在しないかロックされています) (5秒後に再試行)
12 Dec 00:35:10 - RECORD: 2013-12-12T00:30:00 [TBS] 夫婦堂
12 Dec 00:35:10 - LOCK: PT2-T1 (n=0)
12 Dec 00:35:10 - SPAWN: recpt1 --device /dev/pt1video2 --b25 --sid 12125,epg 22 - - (pid=12814)
12 Dec 00:35:10 - WRITE: /home/chinachu/chinachu/data/recording.json
12 Dec 00:35:10 - STREAM: ./recorded/[131212-0030][GR22][TBS] 夫婦堂.ts

多分上記はイリーガルな動作例のような気がするが、録画中やEPG受信中に電源が落ちたりリセットが
かかったりして自動で再起動した場合、ロックが解除されずに以降の録画がすべてハネられる可能性が
あるようにも思える。そんな対策として
・録画が実行されていなければ一定時間ごとにロックを解除する
・サービスがリスタートした時に録画の有無を調べて実行されていない限りロックを解除する
といった処理が備わっているのかもしれないが、どうなんだろう?

実は epgrec の時にも何度か落ちたことがあるのだが、epgrec の場合はトラブル発生時間に回っていた
録画は中断され、リスタート後も途中からの再録画はされないが、その次の録画予定はちゃんと回る、
という挙動であったように記憶している。

■Chinachu を使ってみた感想
最も普及していると思われる epgrec と比べると、epgrec は番組表から録画する対象を選んでいく感じ、
Chinachu は大きな条件で指定しておいてそこから細かくルールで外していく感じです。
例えて言えば一本釣りかトロール漁かの違い?
Chinachu の番組表は epgrec の新聞のテレビ欄のような表示に比べると見難いです。
チューナー2つで録画できるかどうかの時間の重なり具合の判断もしにくい。
しかし例えばアニメならアニメというジャンルで一括指定するとダッシュボードに番組名が並び、
これをクリックして詳細画面からルールの作成に飛んで指定を外していく、という処理が簡単にできます。
WebMを使った httpストリーミング機能など、新しい試みもあります。
LAMP環境を必要としませんので、録画専用に使うならシンプルです。
すべての情報がテキストファイルとして参照できるのでクラッシュ時の復旧がたぶん楽です。

epgrec を使っていると番組は「録画してから見る」スタイルになるのですが、Chinachu は
今後、録画しながらの視聴やトランスコード録画にも対応して行くようです。
現在はまだベータ版であり、番組表の改善や時間延長への対応などもアナウンスされているので、
今後がとても期待できるシステムだと思います。わぁい!

Chinachu プロジェクト:
http://chinachu.akkar.in/

七森中録画研究会:
https://chinachu.moe/
俺的防備録 ~なんかいろいろ~ CentOSでChinachuを試してみた:
http://orebibou.blogspot.jp/2013/10/centoschinachu.html

おわり
(がんくま)
AD