KVMのネットワークを有効化できた

http://d.hatena.ne.jp/longicorn/20090503#p1の続き
結論からいうとコマンドの権限とKVMの起動、終了スクリプトの問題が重なっていた。


まずはコマンドの権限。
今までは起動する時にsudoで起動していたんだけどこの方法が使えなくなっていた。
理由は不明。


対応策としてsetcapを使うことにする。
setcapのインストール。

# aptitude install libcap2-bin


そして、起動時に必要な各コマンドにsetcapする。
qemu-system-i386qemuコマンドの実体。

# setcap cap_net_admin=ep /usr/bin/kvm
# setcap cap_net_admin=ep /usr/bin/qemu-system-i386
# setcap cap_net_admin=ep /sbin/ifconfig
# setcap cap_net_admin=ep /usr/sbin/brctl


次にKVMの起動、終了スクリプトの問題。
KVMは起動、終了時にスクリプトが実行される。
ここでネットワークの処理を行っているが、kvmのヘルプを見るとデフォルトパスが表示されている。
デフォルトパスは/etc/kvm-ifupになっているが、Ubuntu(というかdebian系かな?)では/etc/kvm/以下に存在するので、起動スクリプトを見つけられないみたい。
終了時のスクリプトも同様。

$ kvm --help
〜省略〜
  • net tap[,vlan=n][,name=str][,fd=h][,ifname=name][,script=file][,downscript=dfile]
connect the host TAP network interface to VLAN 'n' and use the network scripts 'file' (default=/etc/kvm-ifup) and 'dfile' (default=/etc/kvm-ifdown); use '[down]script=no' to disable script execution; use 'fd=h' to connect to an already opened TAP interface 〜省略〜


ということで、起動用スクリプトを引数で指示すれば問題なく起動した。
起動コマンドはこんな感じ。
はイメージファイル。

$ SDL_VIDEO_X11_DGAMOUSE=0 QEMU_AUDIO_DRV=alsa kvm -m 512 -hda  -boot c -usb -net nic -net tap,script=/etc/kvm/kvm-ifup,downscript=/etc/kvm/kvm-ifdown -soundhw all -localtime