FreeBSD 10.0 でqemuを使う

FreeBSDでqemuを使うためのメモ。基本的にはここのwikiを参考にしています。

基本

1) パッケージのインストール

# pkg install qemu

2) /boot/loader.confに以下の4行を追加する

if_bridge_load="YES"
bridgestp_load="YES"
if_tap_load="YES"
aio_load="YES"

再起動しておしまい。再起動が嫌ならkldloadでモジュールを読み込ませるとよいかと。

3)適当な起動可能なゲストのCDのimageを用意して起動させて動くのを確認する

以下の例ではFreeBSD-9.0のimageを使用しています。

# qemu-system-x86_64 \
-hda vm00.img -m 1024 -monitor telnet::4444,server,nowait -vnc :0 \
-cdrom Images/FreeBSD-9.0-RELEASE-amd64-disc1.iso 

確認は適当なvncclientで

% vncviewer localhost

とかやればOKです。

応用

動かすだけならこれでもいいのですが、これだけですとHostがDHCPサーバ&ルータになり、ゲストと外界が遮断されている状態なので、もうひと捻りします。具体的には bridgeとtapデバイスを使って、ホスト側からのパケットをゲスト側にも持ってくるという作戦。

4) /etc/sysctl.confに以下の2行を追加

net.link.tap.up_on_open=1

これは tapデバイスがopenされたとき自動的にupするというものの設定らしいです。設定しなくてもqemu起動する度に ifconfig tap0 upとかしてやればいいのですが、煩雑なので設定しておいたほうがよいでしょう。

5) /etc/rc.confに以下の3行を追加 (re0は使用しているNICの名前に適宜読み替えてください)

cloned_interfaces="bridge0 tap0"
autobridge_interfaces="bridge0"
autobridge_bridge0="re0 tap*"
ifconfig_bridge0="up"

cloned_interfacesにbridge0と書いただけでは bridge0がupされた状態でやってこないので、ifconfig_bridge0="up"を書いています。もっとスマートな手法があるかもしれませんが。ここまで設定したら念のため再起動します。これも再起動が嫌だというひとは4の設定も含めてsysctrlやifconfigで自力で設定するという手法もあります。

6) 適当な起動可能なゲストのCDのimageを用意して起動させて動くのを確認

qemu-system-x86_64 -net nic -net tap,name=tap0,script=no \
-hda vm00.img -m 1024 -monitor telnet::4444,server,nowait -vnc :0 \
-cdrom Images/FreeBSD-9.0-RELEASE-amd64-disc1.iso

VNCで起動を確認し、LiveCDやshellに移行し dhclient ed0等するとDHCPサーバからアドレスが振られるのがわかるかと思います。

Posted by issei

カテゴリ: BSD