FreeBSD6.2Rでjail環境構築中 - ナウいezjailの構築法
http://d.hatena.ne.jp/m-bird/20080118/1200643734の続き。
portsツリーを分けるかどうか。
さて、この後portsツリーを使えるようにする必要があります。
今まで仮想環境を使わずにFreeBSDを使うときは、portsツリーをcvsup等で持ってきていました。
しかし、ezjailで複数台マシンを作る場合、portsツリーがマシンの数だけできてしまい、メンテナンスの手間が増え、HDD容量も無駄になります。
そこで、nullfsを使って、HOST環境のportsツリーをリードオンリーでマウントします。
これにより、
- host環境のportsツリー一個分のHDD容量だけで済む
- host環境のportsツリーを更新するだけで、全ての仮想マシンのportsツリーが更新される
- nullfsでリードオンリーなので、「マウントしてるから、host環境に辿られたり…」という心配が無くなります(...多分
しかし。
FreeBSD7.0-currentで/etc/fstabでro(Read-Only)でnullfsなマウントしても、なぜかwriteが立ってるというバグがあったらしいです。
つまり、「jail環境でportsツリーを書き換えたら、マウント元であるhostのportsツリーまで書き換わってしまう」という事です。
これじゃ、hostマシンと完全に隔離したんだってVA!なんて言えませんね。
6.2-Rや6.3-Rでは問題ないですが、jailの公式では
忠実な訳:「またそんなバグあったら危ないから、ホスト環境とjail環境では完璧に環境を分離させた方が良いと思うお。portsツリーもHOST環境とjail環境で分けた方が良いと思うお。」
とあったりします。
「多少ディスク容量が無駄になったとしてもhostのツリーと分けようぜ、その方が夜も安心だろ?」という事です。
以上を読んで、
「よし、俺ナウいezjailの構築方法を実行するZE!」
って言う人はこのまま読み進めて下さい。
「危険性は分かったけど、リリースなバージョンではそんなバグ無いだろ?ディスクを少しでも節約したいZE!」という人は次のリンク先へ行ってください。
http://d.hatena.ne.jp/m-bird/20080118/1200643734
jail用のportsツリー構築
ezjailはデフォルトで/basejail/usr/portsをマウントするようになっています。
そこにportsツリー構築してやれば、jail環境でもportsツリーが使えるようになります。
まず以下をチェック
/usr/jails/basejail/usr/ports /usr/jails/basejail/usr/src
この二つのディレクトリがあるかどうか確認(私はここで詰まりましたorz)。
portsツリーをごっすんごっすん
次に、portsツリーを作っちゃいます。
今回はcvsupを使ってportsツリーを持ってくる場合について書きます。
# cp /usr/share/examples/cvsup/ports /root/jail-ports-supfile
とりあえず、rootのホームディレクトリあたりに、standard-supfileのexampleをコピー。
*default host=CHANGE_THIS.FreeBSD.org *default base=/var/db *default prefix=/home/ncvs *default release=cvs *default delete use-rel-suffix
上のような感じになっているのを、下のような感じに。
*default host=cvsup3.jp.FreeBSD.org *default base=/usr/YOUR_JAIL_PATH/jails *default prefix=/usr/YOUR_JAIL_PATH/jails/basejail/usr
YOUR_JAIL_PATHは、適当にjailsディレクトリへのパスと置き換えてください。
で、実行。
# cvsup /root/jail-ports-supfile
ごっすんごっすんportsツリー構築。
以上で終わり。
後は、時々portsツリーを更新してやらなきゃなりませんが、hostとjailの両方を更新わすれないように、適当なシェルスクリプトでも書いて、常にそれを実行するようにした方が良いと思います。
cvsup /root/ports-supfile cvsup /root/jail-ports-supfile
とか、適当に。
以上設定が終わったら、いよいよjail環境内の仮想マシンを実行します。
http://d.hatena.ne.jp/m-bird/20080118/1200647446
続きへGO
おまけ。
/jails/flavours/defaultとかありますが、ここのezjail.flavourとかを編集するとezjailを初めて走らせる時にscreenとかvimとかmakeしてもらえます。
cd /usr/ports/sysutils/screen && make install cd /usr/ports/sysutils/vim && make install cd /usr/ports/sysutils/sudo && make install
こんな感じで列挙。
ただ、portsからインストールする時みたくportsのconfig画面は出ません。
つまり、デフォルト設定のまんまmakeが走ります。ギャース。
で、打開策としてはWITHOUT_GUI=yes...とか延々と書く。
めどいですか?ええ、めどいです。
で、もう一つの方法としてはhost環境でconfigしてから、そのconfigファイルだけ持ってくる。
たとえば、sudoとかだと
# cd /usr/ports/security/sudo # make rmconfig # make config
こんな感じ。
sudoのディレクトリまで行って、make rmconfigで今までのconfigファイルを飛ばす。
んで、make configで設定ファイルを再生成。
一旦configファイルを吹っ飛ばしておかないと、host環境で設定したものと同じものになってしまうので。
hostと同じ設定で良くても、設定見直しを兼ねて再設定した方が無難です。
設定が終わったら、その設定ファイルをコピーしてやります。
# mkdir -p /usr/local/jails/flavours/default/var/db/ports/sudo # cp /var/db/ports/sudo/options /usr/local/jails/flavours/default/var/db/ports/sudo
これで、make時のオプションが指定できます。
が。
これだけだと、GUIで設定できる分しか設定してやれません。
例えば、WITHOUT_GUI=yesとか、WITHOUT_X11=yesとか。
そうじゃないと、サーバなのにX11とかいう憎き敵がごっすんごっすんmakeされてしまいます。
回避する為に、flavoursディレクトリ以下の/etc/make.confをきちんと書いておきましょう。
で、結論。
flavoursディレクトリに入れるのは、make.confとかresolv.confとか、そういったものだけでよくね?と。
ezjail.flavourの設定をミスってて、途中でmakeが終わってたとしても端末を通して見る事は無理なんですよね。
いつmakeが終わるとも知れないし(ロードアベレージ見てりゃ大体分かりますし、sshで構築中の仮想マシンにログインしちゃえばpsで何makeしてるか分かりますが面倒)。
10個20個作って貸し出しする人でないなら、とりあえずmake.confとかresolv.confとかをfravours以下の/etc/に置いておく、位が丁度いいんでないかなー、と。