Mirakurun を jail の中で動かす。

ということで、前回のエントリで書いた Mirakurun ですが、うちの環境では jail に閉じ込めて動かしています。 さすがに pt3 のデバイスは親環境でなければ動かないのですが、それ以外は jail で動きます。

さっくり簡単に説明すると、/etc/devfs.rules を新規に作成します。

[devfsrules_jail_ptx=5] add include $devfsrules_hide_all add include $devfsrules_unhide_basic add include $devfsrules_unhide_login add path 'ptx*' unhide
上記のように、jail の中に見せたいデバイスを見せるように作ります。

あとは、jail を作る際にこのルールセット5を使うようにすればオッケーです。通常のjail は /etc/default/devfs.rules の中で定義されている4番の ルールを使うようになっています。 別の jail で別のデバイスを見せたい場合は、同様にルールセットを別に定義します。 たとえば、dhcpd を動かしたいのであれば、bpf を見えるようにします。

[devfsrules_jail_bpf=6] add include $devfsrules_hide_all add include $devfsrules_unhide_basic add include $devfsrules_unhide_login add path 'bpf*' unhide

さて、本題に戻って mirakurun という jail を作成して、jexec で jail の外から確認してみましょう。 ptxというデバイスが見えるようになってます。

> sudo jexec mirakurun ls -l /dev total 2 dr-xr-xr-x 2 root wheel 512 Dec 7 15:24 fd crw-rw-rw- 1 root wheel 0x15 Dec 14 00:33 null dr-xr-xr-x 2 root wheel 512 Dec 7 15:24 pts crw-rw-rw- 1 root operator 0xae Nov 27 23:21 ptx0.s0 crw-rw-rw- 1 root operator 0xaf Nov 27 23:21 ptx0.s1 crw-rw-rw- 1 root operator 0xb0 Nov 27 23:21 ptx0.t0 crw-rw-rw- 1 root operator 0xb1 Nov 27 23:21 ptx0.t1 crw-rw-rw- 1 root operator 0xb2 Nov 27 23:21 ptx1.s0 crw-rw-rw- 1 root operator 0xb3 Nov 27 23:21 ptx1.s1 crw-rw-rw- 1 root operator 0xb4 Nov 27 23:21 ptx1.t0 crw-rw-rw- 1 root operator 0xb5 Nov 27 23:21 ptx1.t1 crw-r--r-- 1 root wheel 0x5 Nov 27 23:20 random lrwxr-xr-x 1 root wheel 4 Dec 7 15:24 stderr -> fd/2 lrwxr-xr-x 1 root wheel 4 Dec 7 15:24 stdin -> fd/0 lrwxr-xr-x 1 root wheel 4 Dec 7 15:24 stdout -> fd/1 lrwxr-xr-x 1 root wheel 6 Dec 7 15:24 urandom -> random crw-rw-rw- 1 root wheel 0x16 Nov 28 08:20 zero

試していないのでわからないけど、たぶん複数の jail の中から同時に ptx 触るとエラーになると思うんですよね。 常識的に考えて。なので、その辺は適当に排他制御しておきましょう。っていうか、複数に割り振らないよね。

この手の環境を jail に押し込めることができると、いろいろ実験したり、バックアップ取ったりするのが非常に楽に なるので、せっかく FreeBSD 使ってるので活かしましょう。 ちなみにうちは、Mirakurun, Chinachu, EPGStation それぞれ別の jail の中で動かしています。 アップデートがらくちんで便利。

qjail を使っているjailを管理している場合は、ルールセットを作成後、qjail config で ruleset を指定できます。具体的には

> sudo qjail config [jail名] -b [ルールセット]
です。もちろん、対象の jail は stop していないと変更できません。 create の際に指定する方法は無いようなので、create した直後に変更しておくとよいでしょう。

タグ: FreeBSD PT3 Jail Mirakurun