KVMのネットワークを有効化できた
http://d.hatena.ne.jp/longicorn/20090503#p1の続き
結論からいうとコマンドの権限とKVMの起動、終了スクリプトの問題が重なっていた。
まずはコマンドの権限。
今までは起動する時にsudoで起動していたんだけどこの方法が使えなくなっていた。
理由は不明。
対応策としてsetcapを使うことにする。
setcapのインストール。
# aptitude install libcap2-bin
そして、起動時に必要な各コマンドにsetcapする。
qemu-system-i386はqemuコマンドの実体。
# 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]
ということで、起動用スクリプトを引数で指示すれば問題なく起動した。
起動コマンドはこんな感じ。
$ 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