FreeBSD 6.0 與 jail
因為要惡搞一些東西,不方便在現有的系統上跑,於是就跑去弄個 jail 出來用。比起 FreeBSD 4.x 需要自己寫一些 shell script 丟到 /usr/local/etc/rc.d/
下,6.0 下的 jail 已經整合到系統內了,所以不太需要在自己寫 shell script。
而且 6.x 的 jail 也修掉不少 bug,像是 dmesg 偶而會出不來 (喂喂),reboot 不會理你 (喂喂)… 另外 df 也只會看到 /,不會看到其他的 slice 了。
要生出 jail 的環境,先是:
make buildworld make installworld DESTDIR=/da1/jail0 make distribution DESTDIR=/da1/jail0
然後改 /da1/jail0/etc/master.passwd
,把自己加進去,用 pwd_mkdb -d /da1/jail0/etc /da1/jail0/etc/master.passwd
重新編過一次,記得把家目錄開好 :p
然後是 /etc/rc.conf
:
ifconfig_fxp1_alias0="inet 192.168.113.10/24" jail_enable="YES" jail_list="testbase" jail_testbase_devfs_enable="YES" jail_testbase_devfs_ruleset="devfsrules_jail" jail_testbase_exec="/bin/sh /etc/rc" jail_testbase_hostname="testbase" jail_testbase_ip="192.168.113.10" jail_testbase_rootdir="/da1/jail0" pf_enable="YES"
接下來弄 pf 的設定,所以去改 /etc/pf.conf
:
nat on fxp0 from 192.168.113.0/24 to any -> (fxp0) nat on fxp1 from 192.168.113.0/24 to any -> (fxp0)
接下來把 jail 裡面的東西設一設,像是 resolv.conf
。
最後用系統給的 jail 就可以啟動了:
/etc/rc.d/jail start
第一次跑起來應該會卡在 ssh 產生金鑰的地方,所以就去喝個飲料之類的 :p (也可以自己先在 host 產生好,不過我這邊懶得講了,請自己去 /etc/rc.d/sshd
翻,需要三組金鑰)
弄完以後就可以 ssh 進去玩了,如果要跟 host 共用 ports directory,可以用 mount_nullfs 以 read-only 掛上來 (security issue),然後修改 /etc/make.conf
,把本來會寫入的部分都改到 /tmp
下:
DISTDIRWRKDIRPREFIX
這樣應該就沒什麼大問題了