mimikakimemo

自分用メモ。

LIVA に Chinachu を導入して録画サーバーにする

今までは、鼻毛鯖に epgrec を入れて録画サーバーにしていた。先日、超小型の低価格 PC である ECS LIVA を買ったので、以前から気になっていた録画予約システム Chinachu を入れてみる。環境は以下のとおり。

マシン ECS LIVA-B3-2G-32G
OS Ubuntu 14.04 Desktop 日本語Remix 64bit
チューナー 恵安 KTV-FSUSB2
録画コマンド recfsusb2n for linux v0.9.2(パッチ適用済み)

recfsusb2n の導入については前回の記事を参照。

KEIAN USB地デジ&ワンセグチューナー KTV-FSUSB2/V3

KEIAN USB地デジ&ワンセグチューナー KTV-FSUSB2/V3

Chinachu のインストール

以下、公式ドキュメントの指示に従ってインストールしていく。

依存パッケージのインストール

$ sudo apt-get install build-essential curl git-core libssl-dev yasm libtool autoconf libboost-all-dev

Chinachu 本体のインストール

GitHub 上のリポジトリをクローンし、インストーラを実行する。

$ git clone git://github.com/kanreisa/Chinachu.git ~/chinachu
$ cd ~/chinachu/
$ ./chinachu installer
Chinachu Installer Menu:
[!] These are installed under all /home/*****/chinachu/...
[!] Recommend the Auto installation. 
1) Auto (full)            5) Node.js Modules       9) libfdk-aac
2) Auto (fast)            6) epgdump              10) libogg
3) submodule              7) libx264              11) libvorbis
4) Node.js Environment    8) libvpx               12) libav
what do you install? > 1

1 の Auto (full) を選べば、必要なものをすべて自動でインストールしてくれる。いろいろコンパイルするので、LIVA では10分強かかった。

設定

設定ファイル config.json の編集

設定ファイルのサンプル config.sample.json が chinachu のルート直下にあるので、これをコピーして使う。

$ cp config.sample.json config.json

config.json の内容は以下のようにした。

{
  "recordedDir" : "./recorded/",
  "temporaryDir": "/tmp/",

  "wuiUsers": [
    "akari:bakuhatsu"
  ],

  "wuiPort"        : 10772,
  "wuiHost"        : "::",
  "wuiTlsKeyPath"  : null,
  "wuiTlsCertPath" : null,
  "wuiOpenServer"  : false,
  "wuiOpenPort"    : 20772,
  "wuiPreviewer"   : true,
  "wuiStreamer"    : true,
  "wuiFiler"       : true,
  "wuiConfigurator": true,

  "recordedFormat": "<date:yymmdd-HHMM>_<type><channel>_<title>.m2ts",

  "tuners": [
    {
      "name"        : "FSUSB2",
      "isScrambling": false,
      "types"       : [ "GR" ],
      "command"     : "recfsusb2n -b <channel> - -"
    }
  ],

  "channels": [
    { "type": "GR", "channel": "27" },
    { "type": "GR", "channel": "26" },
    { "type": "GR", "channel": "25" },
    { "type": "GR", "channel": "24" },
    { "type": "GR", "channel": "22" },
    { "type": "GR", "channel": "23" },
    { "type": "GR", "channel": "21" },
    { "type": "GR", "channel": "20" },
    { "type": "GR", "channel": "28" }
  ]
}

サンプルには tuners に PT3 の設定も入っているが、今回は FSUSB2 だけなので消しておく。channels には、受信したい物理チャンネルを列挙する。

Chinachu の番組表におけるチャンネルの並び順は、この channels に書かれた順序になる。

なお、valid な JSON になっていないと、Chinachu を動かしたときにエラーが出る。コメントや末尾のカンマは許容されないので注意。

空の録画予約ルールの作成

$ echo "[]" > rules.json

動作チェック

Web UI の動作確認

$ ./chinachu service wui execute

ブラウザで http://localhost:10772/ が開けるか確認。config.json の wuiUsers で指定したユーザー名/パスワード(初期設定では akari/bakuhatsu)を入力して中に入る。

この段階ではまだ EPG のデータを取得していないので、番組表は表示されない。WUI がちゃんと起動できていたら Ctrl+\ で終了させる。

EPG の取得テスト

EPG(番組表のデータ)を取得してみる。1チャンネルにつき1分程度要した。

$ ./chinachu update -f

なお、最初は下のようなエラーが出たが、これは config.json の command にタイポがあった(recfsusb2n が .recfsusb2n になっていた)というだけだった。

8 Jun 00:44:50 - GETTING EPG.
8 Jun 00:44:50 - [0] {"type":"GR","channel":"20","n":0}
8 Jun 00:44:50 - [0] LOCK: FSUSB2 (n=0)
8 Jun 00:44:50 - [0] SPAWN: .recfsusb2n -b 27 - - (pid=22521)
8 Jun 00:44:50 - [0] STREAM: /tmp/chinachu-tmp-hw53ex34.m2ts
8 Jun 00:44:50 - STATUS: { completed: 0, waiting: 9, worked: 1, running: 1 }

events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: spawn ENOENT
    at errnoException (child_process.js:988:11)
    at Process.ChildProcess._handle.onexit (child_process.js:779:34)

サービスの登録

Chinachu のサービス(chinachu-operator と chinachu-wui)が自動的に起動するよう、システムに登録する。

まず、起動スクリプトを /etc/init.d/ に追加する。

$ ./chinachu service operator initscript > /tmp/chinachu-operator
$ ./chinachu service wui initscript > /tmp/chinachu-wui
$ sudo chown root:root /tmp/chinachu-operator /tmp/chinachu-wui
$ sudo chmod +x /tmp/chinachu-operator /tmp/chinachu-wui
$ sudo mv /tmp/chinachu-operator /tmp/chinachu-wui /etc/init.d/

次に、insserv でサービスを登録する。ただし、Ubuntu のデフォルトの状態では、

$ sudo insserv chinachu-operator
sudo: insserv: command not found

となって使えない。insserv は /usr/lib/insserv/ に入っているので、シンボリックリンクを張ってから実行する。

$ sudo ln -s /usr/lib/insserv/insserv /sbin/insserv
$ sudo insserv chinachu-operator
$ sudo insserv chinachu-wui

サービスの開始

$ sudo service chinachu-operator start
$ sudo service chinachu-wui start

これで Chinachu が起動する。先ほどと同様、http://localhost:10772/ にアクセスすれば WUI が動いているはず。

Chinachu のログは chinachu/log/ 以下に保存されるので、うまく動いていない場合にはこれを参照する。WUI の ダッシュボード > ログ からでも閲覧可能(しかも自動的に表示を更新してくれる)。

なお、最初は(chinachu/log/operator に)以下のようなエラーが出て、うまく録画できなかった。

uncaughtException: Error: spawn ENOENT
    at errnoException (child_process.js:988:11)
    at Process.ChildProcess._handle.onexit (child_process.js:779:34)
8 Jun 03:04:55 - #recfsusb2n: execvp(): No such file or directory

どうやら、.zshrc で追加した PATH の中に recfsusb2n を入れていたため、./chinachu update -f などを手動で実行することはできても、Chinachu のサービスが recfsusb2n を動かそうとしたときには見つけられず、エラーになっていたっぽい。recfsusb2n を /usr/local/bin/ に移動したら解消された。

WUI からの設定の変更

Chinachu 設定ファイル config.json は、WUI が動いていれば右上の「+設定」から編集することができる。ハイライトや文法チェックもリアルタイムで行なってくれる。編集内容によっては、保存後に

$ sudo service chinachu-operator restart

(あるいは chinachu-wui)でサービスを再起動しないと反映されない。

まとめ

というわけで、LIVA への Chinachu の導入をひととおり行なった。鼻毛鯖に epgrec を入れたときには、MySQLパーミッションの設定などいろいろ面倒だったような記憶があるが、Chinachu はわりと簡単にできた。まだ使い始めたばかりだけども、UI も作りこまれていて使いやすそう。epgrec の開発が止まっていることもあり、夏アニメが始まる頃までには Chinachu に乗り換えていきたい。

エンコードとなると LIVA では厳しいかもしれないが、普通に Chinachu を動かす分には十分な感じだった。あとは TS ファイルの保存先をどうしようか。それほど録り溜めるつもりはないものの、LIVA に組み込まれているストレージ(eMMC)は 32GB だけなので、なにか考える必要がある。

次回は LAN 内の他の PC から録画・視聴ができるよう、環境を整備していきたい。