Ubuntu 9.10 Karmic Koalaでkvm

UbuntuEucalyptusとか試したいのもあるし、KVMを使ってみる。ちなみに初めて使っています。

まずは、以下のような手を使ってインストールしてみました。
(結論からいうとうまくいかなかった。)

KVM単体でイメージを作ってみる。

http://www.atmarkit.co.jp/flinux/rensai/kvm02/kvm02a.html
のやり方で試してみました。

準備
$ sudo apt-get install kvm
$ sudo adduser yosinori kvm
$ sudo reboot
イメージディスク作成
$ kvm-img create -f qcow2 u910.img 10GB
OSインストール
$ kvm -hda u910.img  -cdrom /dev/cdrom -boot d -m 512 -monitor stdio
起動

Desktop版

 kvm -hda u910.img -boot c -m 512 -k ja


Server版

$ kvm -hda u910.img -boot c -m 512 -curses -k ja

注)-k ja 指定しないと日本語キーボードでアンダースコアが入力できない。


これで一応NATによる外部への接続が出きるが、内部への接続はまだできない。


次にブリッジネットワークを作ろうとしたところうまくいかない。
bridgeの設定方法がうまくいかない。kvm起動コマンド中の-netオプション中のscript=/etc/kvm/kvm-ifupの部分とかも、/etc/qemu-ifupとかだったり微妙にディストリが違えば動作環境も違うみたい。

Ubuntu オフィシャルのドキュメントのやり方を試す。

以下を参考にやりなおし
https://help.ubuntu.com/community/KVM
目標はブリッジ接続ですべてのゲストを透過的に同じIPアドレス帯に配置する方法です。


やっぱり対象はホストOS、ゲストOSともにUbuntu 9.10 Karmic Koalaです。

環境チェック

$ grep ' vmx ' /proc/cpuinfo (Intel)
$ grep ' lm ' /proc/cpuinfo
でなにか表示されたらVMサポートされているということ。
ちなみにうちのCore 2 Duoマシンで試した結果は

$ grep ' vmx ' /proc/cpuinfo 
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr \
pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm \
pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good pni \
dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 lahf_lm \
ida tpr_shadow vnmi flexpriority
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr \
pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm \
pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good pni \
dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 lahf_lm \
ida tpr_shadow vnmi flexpriority

$ grep ' lm ' /proc/cpuinfo 
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr \
pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm \
pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good pni \
dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 lahf_lm \
ida tpr_shadow vnmi flexpriority
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr \
pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm \
pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good pni \
dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 lahf_lm \
ida tpr_shadow vnmi flexpriority
インストール
$ sudo apt-get install kvm libvirt-bin ubuntu-vm-builder virt-manager bridge-utils
$ sudo adduser `id -un` libvirtd
$ sudo adduser `id -un` kvm
$ sudo reboot
virshのチェック
$ virsh list --all
Connecting to uri: qemu:///system
 Id 名前               状態
----------------------------------
ネットワークの設定
$ sudo invoke-rc.d networking stop
$ sudo cp /etc/network/interfaces /etc/network/interfaces.original
$ sudo vi /etc/network/interfaces

以下のように編集する。

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual

auto br0
iface br0 inet static
        address 192.168.0.10
        network 192.168.0.0
        netmask 255.255.255.0
        broadcast 192.168.0.255
        gateway 192.168.0.1
        bridge_ports eth0
        bridge_stp off
        bridge_fd 0
        bridge_maxwait 0


ネットワークの再起動。

$ sudo /etc/init.d/networking restart


ブリッジ接続のみでよくて、vmbuilderでのみ作成する場合は、以下のような設定をしておくと便利。

$ sudo cp /etc/vmbuilder/libvirt/libvirtxml.tmpl /etc/vmbuilder/libvirt/libvirtxml.tmpl.original
$ sudo vi /etc/vmbuilder/libvirt/libvirtxml.tmpl 


オリジナルは以下のとおり。

<domain type='kvm'>
  <name>$hostname</name>
  <memory>#echo int($mem) * 1024 #</memory>
  <vcpu>$cpus</vcpu>
  <os>
    <type>hvm</type>
    <boot dev='hd'/>
  </os>
  <features>
    <acpi/>
  </features>
  <clock offset='utc'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>destroy</on_crash>
  <devices>
    <emulator>/usr/bin/kvm</emulator>
#if $bridge
    <interface type='bridge'>
      <source bridge='$bridge'/>
#else
    <interface type='network'>
#if $mac
      <mac address='$mac'/>
#end if
      <source network='default'/>
#end if
#if $virtio_net
      <model type='virtio'/>
#end if
    </interface>
    <input type='mouse' bus='ps2'/>
    <graphics type='vnc' port='-1' listen='127.0.0.1'/>
#for $disk in $disks
    <disk type='file' device='disk'>
      <source file='$disk.filename' />
      <target dev='hd$disk.devletters()' />
    </disk>
#end for
  </devices>
</domain>


これを以下のように編集。

<domain type='kvm'>
  <name>$hostname</name>
  <memory>#echo int($mem) * 1024 #</memory>
  <vcpu>$cpus</vcpu>
  <os>
    <type>hvm</type>
    <boot dev='hd'/>
  </os>
  <features>
    <acpi/>
  </features>
  <clock offset='utc'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>destroy</on_crash>
  <devices>
    <emulator>/usr/bin/kvm</emulator>
    <interface type='bridge'>
      <source bridge='br0'/>
    </interface>
    <input type='mouse' bus='ps2'/>
    <graphics type='vnc' port='-1' listen='127.0.0.1' keymap='ja'/>
#for $disk in $disks
    <disk type='file' device='disk'>
      <source file='$disk.filename' />
      <target dev='hd$disk.devletters()' />
    </disk>
#end for
  </devices>
</domain>

ポイントは、ネットワークのブリッジ設定のところ。


あと、keymap。


次のエントリーにある、仮想マシンマネージャでKVMイメージを作る場合も以下のようにkeymapの設定はしておいた方がいい。

<graphics type='vnc' port='-1' listen='127.0.0.1' keymap='ja'/>
ゲストOS(Ubuntu 9.10 server)をインストール
$ sudo ubuntu-vm-builder kvm karmic --arch 'amd64' --mem '512' \
--rootsize '10240'  --swapsize '2048'  --kernel-flavour 'generic' \
--hostname 'ubuntu'  --mirror 'http://archive.ubuntu.com/ubuntu' \
--components 'main,universe'  --name 'ubuntu'  --user 'ubuntu' \
--pass 'ubuntu' --libvirt qemu:///system --domain u910s64


この面倒くさいパラメータは下記ツールで生成するとよい。
http://people.canonical.com/~kirkland/ubuntu-vm-builder.html
このツールで生成したものに、以下の変更をする必要がある。
" --libvirt qemu:///system"パラメータを追加する。
"hardy" などのUbuntuバージョン名を"karmic"に変更する。


上記パラメータでしばらく待つと、以下が生成される。
{コマンド実行ディレクトリ}/ubuntu-kvm
{コマンド実行ディレクトリ}/ubuntu-kvm/disk0.qcow2
/etc/libvirt/qemu/ubuntu.xml

Qemuでチェック
$ virsh list --all
Connecting to uri: qemu:///system
 Id 名前               状態
----------------------------------
  - ubuntu               シャットオフ

$ virsh
virsh # start ubuntu
ドメイン ubuntu が起動されました。


と、ここで、どーやってサーバに入ればいいんだろう?w
[アプリケーション] > [システムツール] > [仮想マシンマネージャー]でNameがubuntuになっているところをダブルクリックするとコンソールが出る。(よかった)
とりあえず仮想マシンマネージャからOSにアクセスできるようにはなったけど、SSHとかでも使えるようにとりあえず、設定したアカウントでログインする。

ubuntu@ubuntu:~$ ifconfig

でホストと同じネットワークにいることが確認できる。
IPアドレスが判明したところで...。

ssh, acpidは入れとこ
$ sudo apt-get install ssh acpid

ちなみにacpidは仮想マシンマネージャーから電源off/rebootするのに必要。


これでなんとか普通にKVMが使えるようになったはず。


とにかく、困ったのは、
ブリッジの仕組みが分かってなくて、設定がうまく動かなくて何度もやり直したこと。分かってない上にどっかで記述をミスってたのもあったんだと思う。
あと、" --libvirt qemu:///system"パラメータを追加するのを忘れてて、/etc/libvirt/qemu配下にxmlファイルが出来てくれなかったこと。


参考)
全般
https://help.ubuntu.com/community/KVM
acpidについて
http://d.hatena.ne.jp/kiyotakak/20090102/1230945559


ここまで設定できたら下のようなことができるのかな?

virt-manager を使って新規の仮想化ドメインを作成時に、ブリッジが選択できるようになる。
http://moimoitei.blogspot.com/2008/07/ubuntu-kvm-libvirt.html