録画サーバ構築 PT3 Rev.A @ LXC

今まで仮想サーバ上で動かそうとしていた録画サーバ。チューナーカードをCentOS7でも問題なく動作するPT3に変更したので、今回はCentOS7上のLXCコンテナとして録画サーバを構築する。コンテナの方がストレージ周りをホストOSと共有しやすく、性能的なオーバーヘッドも少ないのでKVMより扱いやすい。ホストOS上そのものに録画サーバを構築してしまうと、自宅インフラが硬直的になってしまうので避けておく。また、ドライバの関係でノードを分けていたチューナーサーバとエンコードサーバも1つのノードとして統合する。

アースソフト★地デジチューナーカード PT3 Rev.A★
価格 : 31,800円(税込、送料無料)
by Yahoo! ショッピング

録画サーバ用に使うコンテナをlxc-create -t centos -n rec1で作成する。うちは自分用のlxc-templateを作ってしまっていて、IPの設定やらchefの適用やら、全自動で出来上がってしまうので、素の構築方法は割愛させて頂く。このままだとホストOS側のデバイスをLXCコンテナ側では使用することができないので、権限を付与して使用できるようにする。録画サーバ側で使いたいデバイスは以下の3つ。

  • PCI接続のチューナーカード(PT3 Rev.A)
  • USB接続のB-CASカードリーダー(SCR3310)
  • 動画圧縮に使うCPU上のハードウェアエンコーダー(Skylake)

ホストOS上で、これらのハードウェアについてキャラクタデバイスを確認しておく。PT3のキャラクタデバイスは皆さんもご存知だろう。/dev/pt3video*でほぼ間違いないと思うので、このキャラクタデバイスのメジャー番号を確認しておく。メジャー番号というのは5列目くらいに書いてある番号のこと。権限を最小限にしたいなら、その隣のマイナー番号も指定する方が安全だが、USBデバイスなどは他のUSB機器を刺すことで番号がずれたりするので、メジャー番号で権限を解放してしまうつもり。

ls -l /dev/pt3video*
crw-r--r-- 1 root root 246, 0  4月 23 22:24 /dev/pt3video0
crw-r--r-- 1 root root 246, 1  4月 23 22:24 /dev/pt3video1
crw-r--r-- 1 root root 246, 2  4月 23 22:24 /dev/pt3video2
crw-r--r-- 1 root root 246, 3  4月 23 22:24 /dev/pt3video3

続いて、B-CASカードリーダーのキャラクタデバイスを確認する。USBの場合は接続しているポートでメジャー番号が変化するので間違いのないように確認する。lsusbでBUS番号を確認して、それに相当するキャラクタデバイスを見る。/dev/bus/usb/バス番号のようなパスになる。CPUのハードウェアエンコーダーは/dev/driを見ておけば、おそらく問題ないはず。

lsusb
Bus 001 Device 002: ID 04e6:5116 SCM Microsystems, Inc. SCR331-LC1 / SCR3310 SmartCard Reader
ls -l /dev/bus/usb/001 /dev/dri
/dev/bus/usb/001:
合計 0
crw-rw-r-- 1 root root 189, 0  4月 23 22:24 001
crw-rw-r-- 1 root root 189, 1  4月 23 22:24 002

/dev/dri:
合計 0
crw-rw---- 1 root video 226,   0  4月 24 01:04 card0
crw------- 1 root video 226,  64  4月 23 22:24 controlD64
crw-rw---- 1 root video 226, 128  4月 23 22:24 renderD128

という訳で、それぞれチューナーカードが246、カードリーダーが189、ハードウェアエンコーダーが226ということだった。これらをLXCコンテナのconfigファイルで使用できるように設定する。LXCコンテナ名をrec1と仮定すると、以下のように修正すればよい。

vi /var/lib/lxc/rec1/config
    :
lxc.cgroup.devices.allow = c 189:* rwm
lxc.cgroup.devices.allow = c 226:* rwm
lxc.cgroup.devices.allow = c 246:* rwm

これでコンテナを再起動すれば、デバイスに対して適切な権限も持てるようになる。ただし、LXCコンテナ上にはキャラクタデバイスが存在しないので、以下のようにデバイスを用意しておく。これを/etc/rc.d/rc.localなどに記載して、起動時に実行されるようにする。

mkdir -p /dev/bus/usb/001 /dev/dri
mknod /dev/bus/usb/001/002 c 189 1
mknod /dev/bus/usb/001/003 c 189 2
mknod /dev/bus/usb/001/004 c 189 3
mknod /dev/pt3video0 c 246 0
mknod /dev/pt3video1 c 246 1
mknod /dev/pt3video2 c 246 2
mknod /dev/pt3video3 c 246 3
mknod /dev/dri/renderD128 c 226 128
mknod /dev/dri/card0 c 226 0

USB用のデバイスは該当するもの1つだけでもよいのだが、さきほども触れた通り、USBメモリやキーボードなど、何らかデバイスを接続したまま、再起動したりするとメジャー番号がずれてしまうので、幾つかキャラクターデバイスを作っておいた。カードリーダーを認識できないと間違いなく録画障害に繋がってしまうので、安全側に振っておいて損はない。尚、PT3のドライバをコンテナに入れる必要はないが、Intel Media Server Studioはコンテナ側にもインストールした。でないとQSVによるffmpegエンコードが動作しなかった。

あとはいつも通りカードリーダー用のミドルウェアとrecpt1をインストールすれば録画するところまでは確認できた。また、ffmpegをインストールしてQSVエンコードが出来ることも確認した。次はようやく録画サーバの構築を進めていくが、いろいろ悩んだ挙句、epgrec UNA + mirakurun 構成で運用していくことにした。mirakurunは本来chinachuと連携して使うものだが、epgrecを個人的に魔改造しまくったので捨てるのが惜しいのと、chinachuのUIが若干好きになれなかったのが理由。次回はepgrec UNAで使うためのmirakurun構築を行う。

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)