DebianとChinachuで、録画サーバーを再構築した話


家の録画サーバーが不安定になった。

というか、そもそもが専用の録画サーバーというものが存在せず、メインマシンが片手間でやっていたのだが、色々となんかもう限界が訪れていた。
せっかく始まったばかりの2014年冬アニメをしょっぱなからいろいろ見れなかった後悔は大きく、これはもう専用の録画サーバーを作れというお告げだと受け取ることにした。

Chinachu

丁度、冬コミで素晴らしい物を見つけていた。
Chinachuである。Linuxで動く録画サーバーで、しかもオープンソース
実際にC85のサークルスペースでは、NUCとPT3を使った実機のお手本みたいなものまで置いてあり、既にこの時点で自分の頭のなかには、「専用録画サーバーを作らなきゃ」という意識があった。多分、正月前後で録画マシンが急に不安定になったのは、そんな自分の頭のなかを読まれたのだと思う。

まずDebianをインストールする

Debianを入れるのは、このマシン。前に家族が使っていたものだけど、使わなくなってから引き取ってずっと足元で腐ってた。とりあえずケースからマザーと電源だけ取り出して、PT2を刺す。
Atomとかいう微妙CPUと、1Gとかいう微妙メモリだけど、録画くらいならなんとかなると思う。こいつにTOSHIBAの2.5インチ500GのHDDを5000円くらいで買ってきて接続。SSDにしたかったけど、悩んでやめた。
インストール用にブートCDとか作るのダルいから、USBからブートさせてインストール。
http://www.nigauri.org/~iwamatsu/wiki/debian_usb_mem_install/
ここを参考にして、理研のミラーからsqueezのブートイメージを持ってくる
で、Macに刺したUSBメモリを、diskutil list コマンドでデバイス名を調べ、ブートイメージを書き込み(自分の環境では、/dev/disk1だった)
ディスクを一度アンマウントしてからブートイメージを書き込んで、それから再度マウントしてインストール用のCDイメージを書き込む。

作ったブート用のUSBメモリを、サーバーに刺してブート。
あとは適当にインストーラーの質問に答えながら、Debianはインストール完了。

インストールはサクッと終わったけど

gccが入らなくて困ってた。
色々探した結果、ここに行き着く
http://d.hatena.ne.jp/memoyashi/20090213/1234528090
/etc/apt/source.list から、CDROMを見る記述を消せばOKだった。そりゃそうだ。
今度こそサクッと開発ツールを入れる
こっからの作業は、基本的に全部rootでやってる。危ない? 仕事じゃないから知らん。

カードリーダーのセットアップ

ここからは、ほとんどこのページを参考にした
Linux/テレビ関連/PT2
使っているカードリーダーは、かなり昔に買ったやつで名前がわからない。
が、これも特に何も考えずにサクッと終わった

最後のコマンドを打つと、ctrl-cじゃないと止められない謎の画面が出てくるが、多分出てくるってことは動いてる(多分)

PT2のドライバとコマンドのセットアップ

カードリーダーと同様のページを参考にした。
参考ページの方では、様々なパッチに関する解説が色々と書いてあるが、自分の環境と最新のリポジトリを使えば、パッチなんか一個も当てることなくサックリと終わった。すげえ。開発者の人に感謝。

有効なチャンネルを確認する

めでたくrecpt1コマンドが使えるようになったので、chinachuを入れる前に有効なチャンネルを把握しておいて、後々の設定を楽にする。
recpt1は、信号が有効な場合しか録画を実行しないらしいので、こんな感じに愚直にfor文を回してみた。

この時に、なんかゴニョゴニョっと、あまり言葉に出しづらい感じのエラーが出る可能性があるが、その場合はおそらく信号の強度が足りていないのだと思う。テストするときに簡易的なアンテナから直接線を引っ張ってきたので、そんな感じのエラーが出た。参考:Computer/Linux/PT2
どうやら、Linux用のチャンネルスキャンスクリプトもあるらしいのだけど、epgdumpが要るらしいので力技で解決。

chinachuのインストール

chinachuのgithubリポジトリにある、Installationの通りにコマンドを実行して終わり。
ライブラリ系を入れ終わったら、あとはインストールスクリプトがNode.jsから何からバンバン放り込んでくれるから、時間はかかるけどコマンド一発でインストール終了。
その後に、少しだけサービス登録用のスクリプトとかをコピーしたりするだけ。簡単。

./chinachu installer コマンドの時に、インストールの仕方を色々聞かれるけど、1)autoでいいはず。
超サックリ終わった。すげえ。アッカリーン!

サービスを起動する前に

config.jsonとrules.jsonを用意せずにサービスを起動すると、PT2の場合デバイスにロックが掛かって大変らしい。参考:CentOSでChinachuを試してみた
とりあえず、config.sample.jsonと、rules.sample.jsonをまるまる再利用して、設定を作ってみる。

rulesの方は後でいいから、とりあえずconfigだけ編集した。
自分の家はBSとかうまく入らんので、地上波だけの設定だけを残して編集

で、この時にすごく嵌った。

嵌った点1、chinachuは、設定ファイル類が全部JSONで用意されていて、すごく直感的でわかりやすい。が、どうにもJSONファイルってのは手で直接いじると、大抵文法ミスを起こす。実際ミスった。
しかし、その後気付かずにJSONがおかしいままchinachuのサービスを立ち上げてみても、サービスそのものはなんのエラーも吐かない。というか、普通に起動したように見えた。
だが、chinachuのディレクトリの下にあるlogディレクトリを見てみると、operatorがパースエラーを吐いてコケているらしいログが残っていたのだ。それから、元のconfig.sample.jsonとdiffをとったりして、文法がおかしなところを見つけてめでたしめでたし。というか、配列の最後にコロンが許されないってのは、どうもなぁ……

嵌った点2、config.sample.jsonの中にデフォで書いてある録画のコマンドが、PT2ではそのまま通らない。どうやら、recpt1コマンドは、PT2の環境だと–sidというオプションが存在しないらしい。そもそもsidが何なのかよくわからないが、PT3だとコネクタの数が半分だから、そのへんの制御に使ったりするのではないかと思う。多分。わからんけど。

番組情報を取得して、サービスを起動する

無事設定が終わったら、CLIモードで立ち上がるのを確認する。

chinachu/log の下のログとかを見て、特に不穏な言葉が出ていなければ、問題なくイケてるはずなので、実際にサービスを起動する前にEPG情報を更新しておく。

で、つらつらとEPGの更新情報が出てくるはずなので、しばらく放置。ここでもなんかエラーが出てくる可能性があるから、一応よく見ておくこと(さっきのsidはここで見つけた)
EPGが空です、とか言われない限り、チャンネル名とrules.jsonのルールで予約に追加される番組とかが出てくる。幸せな感じがしてくる。

サービスを起動して、ブラウザからアクセス

あとは、普通にサービス起動するだけでおしまい。

configure.jsonに書いたポートを使って、ブラウザでchinachuにアクセスするだけで幸せになれる。

とても簡単だった

chinachuのインストールだけでなく、DebianやPT2周りの環境を入れるのも、すごく簡単だった。こんな感じなら、もうちょっと早く取り組んでいればよかったと思う。
目下の問題は、まだchinachuを入れたばかりでこのブログを書いているから、動作のテストが十分に出来てないってところと、あとは本当にchinachuが使いやすいのかもまだ吟味しきれていないところ。
それはもう、今季のアニメを使って頑張って見極めていきたい。

あと

今までの録画環境は、メインで使ってるマシンの上で動いていたから、普通に使ってない時はスリープしてた。だけど、Debian/chinachuの専用サーバーを作ってしまったら、こいつらは24時間動き続ける。
なんというか、サーバーってそういうもんだろうけど、なんかもったいない。
アイドル時に何か別の処理をさせておきたいのだけど、一体何をさせれば捗るのだろう?
(TSファイルのエンコードとかは、CPUパワー的にムリだろうし、逆に電気を使いそう)


この記事はDebian, Linux, アニメに投稿されました タグ: , , . このパーマリンクをブックマークする。 コメントを投稿するか、トラックバックをどうぞ: トラックバック URL.

コメントする

あなたのメールは 絶対に 公開されたり共有されたりしません。 * が付いている欄は必須項目です

次の HTML タグと属性が使用できます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

*
*