Ubuntu 13.04上のvirt-installでFreeBSD-CURRENTなVMを作る

前回の記事の続き。
FreeBSD-CURRENTのISOはシリアルコンソール用になっていないため、余計な作業が増えて面倒くさい。
よく読まずに作業を飛ばすとログイン手段をすべて失う事になるので注意されたい。

また、このOSは--location引数でのセットアップには対応していないので、ISOによるセットアップになる。

wget http://ftp.jaist.ac.jp/pub/FreeBSD/snapshots/amd64/amd64/ISO-IMAGES/10.0/FreeBSD-10.0-CURRENT-amd64-20130505-r250260-release.iso
mkdir fbsd10-iso
sudo mount -o loop,ro ./FreeBSD-10.0-CURRENT-amd64-20130505-r250260-release.iso /mnt/
cp -av /mnt/* fbsd10-iso/
sudo umount /mnt

まずはISOをダウンロードし、中身を作業用ディレクトリへ展開する必要がある。

cd fbsd10-iso/
echo 'console="comconsole"' > boot/loader.conf

ブートローダのコンソールモードをCOMへ設定する。

sudo apt-get install genisoimage
mkisofs -v -b boot/cdboot -no-emul-boot -r -J -V "FREEBSD_INSTALL" -o ~/Headless-FreeBSD.iso ./
cd ~
rm -rf fbsd10-iso
rm FreeBSD-10.0-CURRENT-amd64-20130505-r250260-release.iso

設定変更を反映した新しいISOを作成する。古いISOや作業用ディレクトリはISO作成後に捨ててしまって構わない。

sudo qemu-img create -f qcow2 /var/lib/libvirt/images/freebsd.img 15G
sudo virt-install --connect=qemu:///system -n freebsd --vcpus=4 -r 8192 --serial pty -v \
--disk=/var/lib/libvirt/images/freebsd.img,format=qcow2,bus=virtio --nographics \
-c Headless-FreeBSD.iso  --network network=default,model=virtio

ディスクイメージを作成し、virt-installを実行する。
最近のFreeBSDはvirtio-blk,virtio-netに対応しているので、ここではLinuxゲストの時と同じくvirtioで設定を行う。
インストーラが起動するので通常どおりインストールを実行する。

ifconfig
exit

但し、最後にシェルを起動するか聞かれるので「Yes」とし、exitで終了する前に必ずifconfigを実行、DHCPから取得されたIPアドレスをメモしておくこと。
或いは、固定IPでセットアップを行うこと。
初回起動時にこのVMのコンソールへログインする方法が、SSH以外無いため、IPアドレスが分からないとログイン手段がなくなってしまう。

IPをメモしたらexitでシェルを終了し、VMの再起動を行う。
この時、virshのコンソール(シリアル)には何も表示されないので、1分程度起動を待ってから別のシェルからsshコマンドでVMへログインする必要がある。

echo 'console="comconsole"' > /boot/loader.conf
vi /etc/ttys
reboot

ログインできたら、/boot/loader.confへconsole=comconsoleを書き込み、/ety/ttysのttyu0の行を'ttyu0 "/usr/libexec/getty std.9600" vt100 on secure'に変更する。
できたら再起動すれば今度はvirshのコンソールに表示が行われるようになる。

インストーラでデフォルト対応してくれないのかなぁ、シリアルコンソール。