1〜2個のjailなら rc.conf に変数を書く方式で何とか行けるが 50個、100個ともなるとrc.confに書くのがかったるい。
よし、50個のjail環境を作ろうじぇー。
50個ともなると
ということで、自前でやっちゃった方が楽。作業手順は以下のとおり。
/var
の大量作成
/etc/rc
の調整
mountの基盤ディレクトリを作る。必要なディレクトリは
/bin /sbin /lib /libexec
/usr/{bin,include,sbin,lib,libexec,libdata,share}
/etc /root
/var/{empty,log,run,tmp}
あたり。
まず土台となるディレクトリを作り、必須ディレクトリをコピー。
# cd /jail # mkdir BASE # cd / # tar cf - *bin lib* /usr/{*bin,include,lib*,share} \ | tar xpfC - /jail/BASE
ただし /sbin や /usr/lib にはjail環境で不要なものが多いので
明らかに分かるものはすぐに削除する。ちなみに /sbin
は
こんな感じにした。
bsdlabel* ldconfig* mount* ping6* fdisk* md5* newfs* rcorder* ifconfig* mdconfig* ping* sysctl*
でももっと削れる。/etc/rc /etc/rc.sub /etc/rc.d
を使う場合
rcorder と sysctl は必要。ping
とかはあってもしょうがないの
だが、pingできないことを確認するために置いとくと心が和む。
/root
は必要と思うものをコピーする。
次、/etc
はこんな感じ。
Makefile localtime pam.d/ rc.d/ spwd.db auth.conf mail@ passwd rc.local@ ssh/ defaults/ manpath.config protocols rc.shutdown sudoers fstab master.passwd pswd.tab rc.subr syslog.conf group mkhome.sh* pwd.db resolv.conf termcap@ guest.shadow mkmaster.sh* rc services varetc@ host.conf opiekeys rc.conf skel/
各jailごとに異なる設定が必要なものは
Makefile
は master.masswd
から
passwd pwd.db spwd.db
を生成するための定義。
# # Makefile for generating spwd.db from master.passwd # all: spwd.db passwd spwd.db: master.passwd pwd_mkdb -d . $> passwd: master.passwd pwd_mkdb -d . -p $>
最後に /var
を作る。実際にはjail内のプロセスが書き込むこ
とになるので、必要なディレクトリを作っておけばよい。50個作ろう。
# exec zsh # mkdir -p v/var00/{empty,log,run,tmp} # touch v/var00/log/{messages,auth.log,maillog,security} # for i in {01..49}; do cp -r v/var00 v/var$i done
マウントポイントを作成し、一気にマウントするfstabを作成。
# mkdir j{00..49} # mkdir CONFIG; cd CONFIG # for i in {00..49}; do echo "/jail/BASE\t/jail/j$i\tnullfs\tro\t0\t0" echo "/jail/v/var$i\t/jail/j$i/var\tnullfs\trw\t0\t0" echo "devfs\t\t/jail/j$i/dev\tdevfs\trw\t0\t0" done > fstab
最後に50個分の IP alias を設定し、jailを起動するスクリプトを作る。
rno=50 devfs rule -s $rno delset devfs rule -s $rno add hide devfs rule -s $rno add path null unhide devfs rule -s $rno add path zero unhide devfs rule -s $rno add path random unhide devfs rule -s $rno add path uraondom unhide devfs rule -s $rno add path fd unhide devfs rule -s $rno add path fd/* unhide devfs rule -s $rno add path kmem unhide devfs rule -s $rno add path log unhide devfs rule -s $rno add path 'pty[pqrs]*' unhide mount -f /jail/CONFIG/fstab -a if=fxp0 i=0; end=49 for i in `jot -w '%02d' 50 00`; do ifconfig ${if} alias 172.19.5.$((i)) netmask 255.255.255.255 devfs -m /jail/j$i/dev rule -s $rno applyset jail /jail/j$i jail-$i 172.19.5.$((i)) /bin/sh /etc/rc i=`expr $i + 1` done
かな。
実際に動かしたPATHを書き換えてこのスクリプト例を書いているので、 ちょこまか書き換え間違いのところがあるはず。
叱咤激励感想ツッコミはゲストブックへ
Generated with mkdiary.rb