FreeBSD環境の構築 jailの導入まで

Lionをクリーンインストールして、さて開発環境も構築し直すか、と思っていた時に、 開発環境仮想化計画なるページを見つけてあっさり感化されたw Macの場合、homebrewやMacPortsでUnix系の環境も簡単に導入できてしまうせいで、 ガチムチの開発環境を構築してしまいがちだが、 そういう環境を作ってしまうと今みたいな場合にまた手になじむまで環境を構築するのが大変だったりする。 SSD化したことだし、仮想環境もそう問題なく動くだろうから、 いっぺん試しに仮想化してみるか、ということで、VMware FusionにFreeBSDを入れてみた。 さし当たっては、サーバと同じような環境を構築して、作ったアプリをそのまま動かせるようにしてみる。

さて、開発環境というかサーバ環境なので、別にXを動かすつもりはない。 従ってインストール自体は簡単。 http://www.freebsd.org/ja/where.html からamd64用のisoファイルを準備し、VMwareに読みこませる。 一端インストーラーをブートしてしまえば必要なパッケージだけWebからとってきてインストールしてくれるので、 ブロードバンド環境がある人はbootonly.isoを利用するといいと思う。 後はインストーラーの指示に従い、サーバに必要なものだけ入れる。 仮想OS用の領域は16GBもあれば十分だと思うが、 ホストOSのHDDに余裕がある場合は必ず「事前にディスク領域を割り当てる」にチェックを入れておくこと。 これをしておかないと、仮想HDD領域を拡張する必要が生じた際に逐一処理が停止してうっとおしいため。

FreeBSDが起動したら、まずはPortsを最新にする。 最近はcvsupじゃなくてportsnapというツールを使うのがトレンドらしい。 portsnapは標準で入っているので、root権限で以下を実行する。

# portsnap fetch && portsnap extract && portsnap update

ちなみに2回目以降の更新ではportsnap extractをする必要はないため、一手間減るらしい。

# portsnap fetch && portsnap update

さて、portsからアプリをインストールするには、アプリのディレクトリまで移動してmake installすればいいわけだが、最近はこちらも便利なツールが出ているらしい。 portinstallというツールがあるようなので入れる。 portupgrade一式をインストールすると付いてくるようだ。

# cd /usr/ports/ports-mgmt/portupgrade
# make install clean

portupgradeを入れたら定期的に

# portupgrade -a 

しておく。アプリが全て最新版に更新される。

さて、標準のターミナルだと機能がしょぼいのでzshを入れる。 これから設定ファイルをいじる関係上、ついでにvimも入れておく。 後々絶対使うのでcurlとwgetも入れておく。 (初期状態ではeeというエディタが入っているので急ぎの場合はこちらを使う)

#portinstall zsh
#portinstall vim
#portinstall curl
#portinstall wget

ここから何回か再起動することになるので、起動時の選択画面を短くしておく。

# vi /boot/loader.conf
autoboot_delay="2" #2秒に変更

さてここまででOSを利用するために必要なアプリは入れたので、 ここから構築を開始する。 まずはjail環境を構築して、その中で色々遊べるようにしておく。 jailの構築は、ezjailというツールで自動化されているのでこれを利用する。 まずはインストールする。

#portinstall ezjail

jail環境の構築のためには、まずホスト側でネットワークの設定をすませ、 jail環境の中でそのネットワークを利用するための設定を入れるという手順になる。

まず、サーバアプリケションがbindしているIPアドレスの設定を確認する。 Host側でアドレスを指定せずにbindしていると(0.0.0.0や*をbindしている状態) Host側で通信を行ってしまい、jail側にパケットが届かなかったりbind自体ができなかったりするため、 bindするアドレスをきっちり指定してやる。

アプリの確認は

#sockstat

で行える。

うちの環境では、syslogd, sshdが引っかかったので設定を入れる。

#vim /etc/rc.conf
syslogd_flags="-s -b ホストのipアドレス" #追記
#vim /etc/ssh/sshd_config
ListenAddress ホストのipアドレス #追記する

次に、jailで使うipアドレスを設定する。 ネットワークモジュールにaliasのipアドレスを設定しそれを利用する。

#vim /etc/rc.conf
ifconfig_em0_alias0="inet 172.16.239.101 netmask 255.255.255.0" #追記する

172.16.XX.XXなのは趣味。別に192.168.XX.XXでもよい。 em0なのはうちの環境で利用できるネットワークデバイスがたまたまem0という名前だったからで、 人によってはeth0だったりするはず。適宜読み替えてください。

ipアドレスの設定が終わったら、jail環境下でネットワークソケットを利用するための設定を入れる。

#vim /etc/sysctl.conf
security.jail.allow_raw_sockets=1

ここまでできたら再起動して、以下のコマンドを実行する

#ezjail-admin create jail.example 172.16.239.101

勝手にjail環境が構築される。 構築したら、いよいよjail環境を起動する。

#/usr/local/etc/rc.d/ezjail.sh start

無事起動に成功したら、/var/run/jail_hogehoge.idにidが記載されているので確認する。 確認したidはjail環境を操作するのに利用する。

#jexec ID /bin/sh

これでjail環境にログインできるので、まずはネットワークを確認する。

#ping www.google.co.jp

むむ、通らない。

#ping 72.14.203.103

だと通信できるので、DNSが引けていないようだ。 とりあえず疲れたのでここから先は また明日

Written on July 26, 2011