jail仮想でデバイスフルにするために

FreeBSDのjail環境下でストリーミング配信を行う実験のため、jail仮想環境でデバイスをフルに利用するための設定を行ってみたメモ。

/etc/defaults/devfs.rulesを/etcにコピー

# cp /etc/defaults/devfs.rules /etc

jail仮想ホストのデバイスをフルにするためにコピーした/etc/devfs.rulesを編集

[devfsrules_hide_all=1]
add hide

# Basic devices typically necessary.
# Requires: devfsrules_hide_all
#
[devfsrules_unhide_basic=2]
add path log unhide
add path null unhide
add path zero unhide
add path crypto unhide
add path random unhide
add path urandom unhide

# Devices typically needed to support logged-in users.
# Requires: devfsrules_hide_all
#
[devfsrules_unhide_login=3]
add path 'ptyp*' unhide
add path 'ptyq*' unhide
add path 'ptyr*' unhide
add path 'ptys*' unhide
add path 'ptyP*' unhide
add path 'ptyQ*' unhide
add path 'ptyR*' unhide
add path 'ptyS*' unhide
add path 'ptyl*' unhide
add path 'ptym*' unhide
add path 'ptyn*' unhide
add path 'ptyo*' unhide
add path 'ptyL*' unhide
add path 'ptyM*' unhide
add path 'ptyN*' unhide
add path 'ptyO*' unhide
add path 'ttyp*' unhide
add path 'ttyq*' unhide
add path 'ttyr*' unhide
add path 'ttys*' unhide
add path 'ttyP*' unhide
add path 'ttyQ*' unhide
add path 'ttyR*' unhide
add path 'ttyS*' unhide
add path 'ttyl*' unhide
add path 'ttym*' unhide
add path 'ttyn*' unhide
add path 'ttyo*' unhide
add path 'ttyL*' unhide
add path 'ttyM*' unhide
add path 'ttyN*' unhide
add path 'ttyO*' unhide
add path ptmx unhide
add path pts unhide
add path 'pts/*' unhide
add path fd unhide
add path 'fd/*' unhide
add path stdin unhide
add path stdout unhide
add path stderr unhide

# Devices usually found in a jail.
#
[devfsrules_jail=4]
add include $devfsrules_hide_all
add include $devfsrules_unhide_basic
add include $devfsrules_unhide_login
add path zfs unhide
#
[devfsrules_jail=5]            ← 以下を追加
add path mem unhide
add path kmem unhide

/etc/jail.confを調整

#
##############
# 共通の設定 #
##############
allow.raw_sockets = 0;
allow.set_hostname = 0;
allow.sysvipc = 0;
mount.devfs;
mount += "procfs /jail/${name}/proc procfs rw 0 0";
exec.start += "/bin/sh /etc/rc";
exec.stop = "/bin/sh /etc/rc.shutdown";
##################
# jail個別の設定 #
##################
jail1 {      # デバイスを規制したjail
        host.hostname = "jail1.hoge.com";
        path = "/jail/jail1";
        ip4.addr += "xxx.xxx.xxx.xxx/32";
        allow.raw_sockets = 1;
        allow.sysvipc = 1;
        allow.mount.procfs;
        devfs_ruleset = "4"; ← 制限したルール適用
}
jail2 {   # デバイスフルのjail
        host.hostname = "jail2.hoge.com";
        path = "/jail/jail2";
        ip4.addr += "xxx.xxx.xxx.yyy/32";
        allow.raw_sockets = 1;
        allow.sysvipc = 1;
        allow.mount.procfs;
        devfs_ruleset = "5"; ← 制限無のルール適用
}