お久しぶり(いつもの)。
皆様テレワークは如何で御座いましょうか。俺はそう言うお仕事では無いので普通に出勤しておりますが、出来る限りの防衛手段をとっているとは言えなかなか難しいもので御座います。
で。
見るかどうかは置いといて「やっぱTVくらい見れるようにしとくかなー」的な感じで今回さっくりchinachu環境を組みました。「だからなんだ?」で終わってしまうくらいにはchinachuに関しては色んなところで手順が説明されておりますので、当たり前のように割愛させて頂き、今回は「lxcコンテナでchinachuを動かす」と言う話で表題通りlxcの話メインで。
コンテナのメリットって何
そもそもコンテナを使うメリットって何だよ、とか根本的な話になりすぎじゃねって感じですが、まあメリットは色々ありますが今回は、
- 失敗してもすぐ潰してやり直せる。
- 多少無茶やってもコンテナ内がぐちゃぐちゃになるだけで済む。
- 別マシンにそこそこ簡単に移動できるので未来明るい。
とまあ、こんな感じの理由でchinachu環境をlxcコンテナに監禁していきます。
まあ、3に関してはあまり考えてはいないのですが、どうしても移動が必要となった時に簡単に移動できると言う保険は当然ありがたいですよね(同調圧力)。
必要なハードの用意
今回はchinachuで地上波をギュンギュンしてもらうのが目的ですのでささっとハードを揃えます。まあ、地上波用B-CASカード、カードリーダ、USB型チューナの3品でしょうか。俺は以前もchinachu環境組んでいますので実家の床に全て転がっていたわけですが、まあどのご家庭の台所にも2・3セットはあると思いますので問題無いでしょう。
で、これらのハードをどう使うのかと言う話なのですが、まあB-CASカードはカードリーダとセットで使うわけですが、lxcコンテナから使うとなるとそれぞれどう言う形でコンテナからアクセスさせるのかをちょっと考えないといけません(当然ホストでどれもフルアクセス可能なことが前提ですよ)。
カードリーダ、チューナともUSB接続なのでどちらもUSBパススルーでよさそうに見えますが、チューナはカーネルモジュール経由のアクセスとなるのでデバイスファイルの共有を使い、カードリーダに関してはパススルーでコンテナ内のpcscdからアクセス、と言う形を選びましょうか。
lxd/lxcセットアップ
lxdは割愛。あ、因みに”s/割愛/ググれ/”です。
lxcでUSBパススルーさせる場合は、
$ lxc config device add コンテナ名 任意の名前 usb vendorid=ベンダid
こんな感じにすると良いようです。
デバイスファイルを追加するなら、
$ lxc config device add コンテナ名 ホストでのデバイスファイルフルパス unix-char
こんな感じ。
USBチューナだと”/dev/dvb/adapter0/demux0″、”/dev/dvb/adapter0/dvr0″、”/dev/dvb/adapter0/frontend0″とかをunix-charタイプで追加しておくといいんじゃないでしょうか。
他にもGPUを追加しておくとlibvaからハードウェアデコードが使えたりするかも知れませんがまあその辺は「割愛」。
node.jsとmirakurunとchinachuのインストール
まるっと「割愛」。
分かりやすく説明してくださってるサイトがたっくさんありますので。
当然recdvbなんかも「割愛」。ちゃんとデバイス追加できていればpcscdもrecdvbも普通に動きます。
一点だけ、どうもlxcコンテナではreniceが動かないようなので(いや、動くようにもできるようだけど別に動かなくてもいいような気がするので)mirakurunのソースからreniceの部分をコメントアウトしておくと良いです。って言うかそうしないと動かないんじゃないかな。
結論
結構面倒くさいかなー?と思ったら意外にもあっさりと動いておりました。実際、これ以外にもネットワーク周りを調整したりとか色々あるのですが、lxcコンテナ←chinachu環境、いい感じじゃないでしょうか。lxc startで一式起動できlxc stopで一式後腐れなく止めることができる、別マシンへの移動も結構簡単。
色んなサイトを見る限りラズパイなんかで録画サーバ組んでる方多いようですが、今回は体力有り余るうちのメインマシンで組みました。ここから(lxd動いていることが前提ですが)別のマシンにそのまま移動させて使う、なんて目もあるかと思うので(個人的にその予定は無いですけどねえ)試してみるのもありかと思いますよ。
まあ、コンテナ技術色々ありますが、ubuntuベースのdistribution使っているならlxcが簡単なので色々ぶち込んでみるのはいかがでしょうか。例えば、64bitしか提供されていないneonみたいな環境でも、lxcコンテナで32bitライブラリをばっつり入れてwine動かす、みたいなこともできますよお。