ラボノート(実験ノート) - FreeBSDを、Xenの DomainU として動かす件
|
このエントリで説明している方法は現在は使えません。 最新の方法はこちら |
結論から言うと、
2008年9月4日現在、FreeBSD 7-STABLEは、正式にはXenに対応していない。(RELEASE-7で対応する予定だったが、見送られている。)
また、Domain0(基盤)として動作する時期は未定で、こちらはFreeBSDの開発ロードマップにも載っていない。
FreeBSDをDomainUとして動作させるためのソースコードは、8-CURRENTのCVSから取得する事が出来る。実際に導入してみた結果、それらは見た目上、問題なく動作している。
しかしながら、CURRENTをサーバーとして動作させ続ける度胸は僕には無いので、今回のサーバーの再構築に際しては、FreeBSDのXen上での動作はあくまで実験にとどめ、各仮想サーバーはCentOSで構築した。
(但し、将来的にFreeBSDの8-STABLEがリリースされて、正式にXenのDomainUとして動作する日が来た時のために、その備えはしておく必要があるわけで。)
今回、実験のためのFreeBSDのXen対応カーネルとディスクイメージを構築する際に大変参考になったのが、こちら → Yoichi's diary
参考というか、上記のサイトに全てが書いてあるのだが、備忘録を兼ねて、ここにもFreeBSDをXenで動作させる方法を書き記しておく事にする。
手順
1.FreeBSDのXen対応カーネルとイメージを用意
Xen上でFreeBSDを動作させるには、Xen対応カーネルと、仮想OSから見たファイルシステムとなるディスクイメージを用意する必要がある。
FreeBSDの普通(Xen対応でない)のカーネルをそのままインストールしたディスクイメージを作っても、当然ながらXen上では起動しない。
1−1.FreeBSDを準備する(cvsup)
FreeBSDをまずは普通にインストールし、cvsupをインストールしておく(package、portどちらでも可)
1−2.Xen対応ソースを入手(チェックアウト)
cvsupの設定ファイルを以下のように作成
| xen-supfile |
|---|
*default host=cvsup18.FreeBSD.org *default base=/var/db *default prefix=/usr/src/xen *default release=cvs tag=. *default delete use-rel-suffix p4-cvs-xen31 |
作成した設定ファイルを使ってcvsupを実行
tmp# cvsup ./xen-supfile
1−3.ディスクイメージファイルの用意(dd, mdconfig, bsdlabel, newfs, mount)
ディスクイメージ用のファイル領域を確保。確保する容量は適宜調整(この場合、1024byte * 10M blockで、10GB確保している)
tmp# dd if=/dev/zero of=/freebsd-xen/freebsd.img bs=1k count=10M
これ以後の作業は、特に指定をしない限り、/freebsd-xen/ディレクトリ内で行う。
書き出したファイル"freebsd.img"を、デバイス/dev/md0とする
tmp# mdconfig -a -t vnode -f freebsd.img -u 0
ラベルの初期化
tmp# bsdlabel -w /dev/md0
ラベル編集
tmp# bsdlabel -e /dev/md0
| disklabel指定(容量は適宜調整) |
|---|
# /dev/md0:
8 partitions:
# size offset fstype [fsize bsize bps/cpg]
a: 8GB * 4.2BSD 2048 16384 28552
b: * * swap
c: * * unused 0 0 # "raw" part, don't edit
|
ファイルシステムを初期化
tmp# newfs /dev/md0a
tmp# newfs /dev/md0b
tmp# newfs /dev/md0c
ディスクイメージを/mntディレクトリにマウント
tmp# mount /dev/md0a /mnt
1−4.Xen対応ソースをビルド・ディスクイメージ内にインストール
tmp# cd [xen対応ソースをダウンロードした場所]
tmp# make buildworld
tmp# make installworld DESTDIR=/mnt
1−5.Xen対応カーネルをビルド・インストール
tmp# make buildkernel KERNCONF=XEN
tmp# make installkernel KERNCONF=XEN DESTDIR=/mnt
1−6.設定ファイルのコピーと変更(fstab, ttys)
ディスクイメージ内に設定ファイルをコピー
tmp# cd /mnt/etc
tmp# cp -r /etc/* /mnt/etc/
設定ファイル(fstab, ttys)を、以下のように変更
| fstab |
|---|
# Device Mountpoint FStype Options Dump Pass# /dev/xbd769a / ufs rw 1 1 /dev/xbd769b none swap sw 0 0 デバイス名の数字"769"は変更可能(Xenの設定ファイルで指定する予定の値) |
| ttys |
|---|
# xc0 "/usr/libexec/getty Pc" vt100 on secure # #ttyv0 "/usr/libexec/getty Pc" cons25 on secure # Virtual terminals #ttyv1 "/usr/libexec/getty Pc" cons25 on secure #ttyv2 "/usr/libexec/getty Pc" cons25 on secure #ttyv3 "/usr/libexec/getty Pc" cons25 on secure #ttyv4 "/usr/libexec/getty Pc" cons25 on secure #ttyv5 "/usr/libexec/getty Pc" cons25 on secure #ttyv6 "/usr/libexec/getty Pc" cons25 on secure #ttyv7 "/usr/libexec/getty Pc" cons25 on secure #ttyv8 "/usr/X11R6/bin/xdm -nodaemon" xterm off secure # xc0を追加。ttyv0-8をコメントアウト |
ディスクイメージからカーネルファイルをコピーする(Xenの設定から指定する為)
tmp# cp /mnt/boot/kernel/kernel /freebsd-xen/freebsd.kern
ディスクイメージのマウントを解除し、md0を消去する。
tmp# umount /mnt
tmp# mdconfig -d -u 0
以上で、Xen上で動作するFreeBSDのディスクイメージ(freebsd.img)とカーネル(freebsd.kern)が完成した。
2.XenのDomain0へ配置
freebsd.imgと、freebsd.kernの2つのファイルを、Xenが動作するDomain0にコピーする。
今回は、freebsd.imgを/freebsd/images/に、freebsd.kernを/freebsd/にコピーした。
3.DomainUとして設定(freebsd)
FreeBSDのdomainU用の設定ファイルを作成。
| /etc/xen/freebsd |
|---|
name = "freebsd_test" kernel ="/freebsd/freebsd.kern" uuid = "e788b52c-e71c-d317-ccac-98be22e9c86a" maxmem = 256 memory = 128 vcpus = 1 on_poweroff = "destroy" on_reboot = "restart" on_crash = "restart" vfb = [ ] disk = [ "file:/freebsd/images/freebsd.img,hda1,w" ] vif = [ "mac=00:16:3e:a3:3d:df,bridge=xenbr0" ] extra = "boot_verbose" extra += ",boot_single" extra += ",kern.hz=100" extra += ",vfs.root.mountfrom=ufs:/dev/xbd769a" uuidは適当に設定する。 vif内のmac=以降はMACアドレスの指定。後半48bit[a3:3d:df]を、ランダムの値で設定する。 xbd769は、FreeBSDのディスクイメージ内の設定ファイル"fstab"内で指定した数字と合わせる。 |
4.起動
xen-machine# xm create freebsd
freebsd_test ドメインが起動する。
2008/09/05: 設定ファイルをディスクイメージへコピーする際のコマンドラインを訂正
*/
