お久しぶりです。
KVMを使ってみました。
ホストOS・・・Debian6.0.6(Squeeze)
Kernel・・・2.6.32-5-amd64
KVM・・・qemu-kvm-0.12.5
管理ツール・・・virtinst
基本的なインストール方法だけしか書いていませんので、
MANやHelpを見ながらやったほうが良いと思います。
1)KVMと管理ツールのインストール
まず、これがないと始まりません・・・
# aptitude install kvm 以下の新規パッケージがインストールされます: bridge-utils{a} ca-certificates{a} dbus{a} kvm libaio1{a} libasound2{a} libasyncns0{a} libbluetooth3{a} libbrlapi0.5{a} libcap2{a} libcurl3-gnutls{a} libdbus-1-3{a} libdirectfb-1.2-9{a} libflac8{a} libgcrypt11{a} libgnutls26{a} libgpg-error0{a} libice6{a} libidn11{a} libldap-2.4-2{a} libogg0{a} libpulse0{a} libsasl2-2{a} libsasl2-modules{a} libsdl1.2debian{a} libsdl1.2debian-alsa{a} libsm6{a} libsndfile1{a} libsvga1{a} libsysfs2{a} libtasn1-3{a} libts-0.0-0{a} libvdeplug2{a} libvorbis0a{a} libvorbisenc2{a} libx86-1{a} libxi6{a} libxtst6{a} mime-support{a} openssl{a} python{a} python-minimal{a} python2.6{a} python2.6-minimal{a} qemu-kvm tsconf{a} 更新: 0 個、新規インストール: 46 個、削除: 0 個、保留: 0 個。 13.0 MB のアーカイブを取得する必要があります。展開後に 40.6 MB のディスク領域が新たに消費されます。 先に進みますか? [Y/n/?]
KVMだけでは、使いづらい。。。
管理ツールを入れましょう。
# aptitude install virtinst 以下の新規パッケージがインストールされます: esound-common{a} etherboot-qemu{a} fontconfig{a} hicolor-icon-theme{a} libatk1.0-0{a} libatk1.0-data{a} libaudiofile0{a} libavahi-client3{a} libavahi-common-data{a} libavahi-common3{a} libcairo2{a} libcap-ng0{a} libcups2{a} libdatrie1{a} libesd0{a} libglade2-0{a} libglib2.0-0{a} libglib2.0-data{a} libgtk-vnc-1.0-0{a} libgtk2.0-0{a} libgtk2.0-bin{a} libgtk2.0-common{a} libjasper1{a} libjpeg62{a} libnl1{a} libpango1.0-0{a} libpango1.0-common{a} libpcap0.8{a} libpcre3{a} libpixman-1-0{a} libpng12-0{a} libreadline5{a} libthai-data{a} libthai0{a} libtiff4{a} libvde0{a} libvirt0{a} libxcb-render-util0{a} libxcb-render0{a} libxcomposite1{a} libxcursor1{a} libxdamage1{a} libxenstore3.0{a} libxfixes3{a} libxft2{a} libxinerama1{a} libxml2{a} libxrandr2{a} libxrender1{a} lvm2{a} openbios-ppc{a} openbios-sparc{a} openhackware{a} python-central{a} python-libvirt{a} python-libxml2{a} python-pycurl{a} python-support{a} python-urlgrabber{a} qemu{a} qemu-keymaps{a} qemu-system{a} qemu-user{a} qemu-utils{a} seabios{a} sgml-base{a} shared-mime-info{a} vde2{a} vgabios{a} virt-viewer{a} virtinst x-ttcidfont-conf{a} xml-core{a} 更新: 0 個、新規インストール: 73 個、削除: 0 個、保留: 0 個。 42.1 MB のアーカイブを取得する必要があります。展開後に 124 MB のディスク領域が新たに消費されます。 先に進みますか? [Y/n/?]
おもむろに叩くと
# virt-install ERROR unable to connect to '/var/run/libvirt/libvirt-sock', libvirtd may need to be started: そのようなファイルやディレクトリはありません Traceback (most recent call last): File "/usr/bin/virt-install", line 1033, in <module> main() File "/usr/bin/virt-install", line 789, in main conn = cli.getConnection(options.connect) File "/usr/lib/pymodules/python2.6/virtinst/cli.py", line 217, in getConnection conn = open_connection(connect) File "/usr/lib/pymodules/python2.6/virtinst/cli.py", line 232, in open_connection open_flags) File "/usr/lib/python2.6/dist-packages/libvirt.py", line 111, in openAuth if ret is None:raise libvirtError('virConnectOpenAuth() failed') libvirtError: unable to connect to '/var/run/libvirt/libvirt-sock', libvirtd may need to be started: そのようなファイルやディレクトリはありません
怒られたw
解決してあげます。
# aptitude install libvirt-bin 以下の新規パッケージがインストールされます: dnsmasq-base{a} ebtables{a} gawk{a} libparted0debian1{a} libpciaccess0{a} libvirt-bin libxml2-utils{a} netcat-openbsd{a} 更新: 0 個、新規インストール: 8 個、削除: 0 個、保留: 0 個。 2,766 kB のアーカイブを取得する必要があります。展開後に 6,652 kB のディスク領域が新たに消費されます。 先に進みますか? [Y/n/?]
これでOK.
また、叩いてみる
# virt-install ERROR A name is required for the virtual machine. (use --prompt to run interactively)
大丈夫そう
モジュールの詳細
# modinfo kvm filename: /lib/modules/2.6.32-5-amd64/kernel/arch/x86/kvm/kvm.ko license: GPL author: Qumranet depends: vermagic: 2.6.32-5-amd64 SMP mod_unload modversions parm: oos_shadow:bool parm: ignore_msrs:bool
# modinfo kvm-intel filename: /lib/modules/2.6.32-5-amd64/kernel/arch/x86/kvm/kvm-intel.ko license: GPL author: Qumranet depends: kvm vermagic: 2.6.32-5-amd64 SMP mod_unload modversions parm: bypass_guest_pf:bool parm: vpid:bool parm: flexpriority:bool parm: ept:bool parm: unrestricted_guest:bool parm: emulate_invalid_guest_state:bool
きちんと読まれています
2)ホストOSのネットワーク設定
ネットワークはブリッジを使いたいので、
「auto」に「br0」を追加。
「eth0」をコメントアウトして、「br0」にIPやらを設定する。
(bridge-utilsはkvm入れた時に、依存で入ります)
# vi /etc/network/interfaces # The loopback network interface auto lo br0 iface lo inet loopback # The primary network interface #allow-hotplug eth0 #iface eth0 inet dhcp iface br0 inet static address 192.168.255.254 netmask 255.255.255.0 network 192.168.255.0 broadcast 192.168.255.255 gateway 192.168.255.1 bridge_ports eth0
こんな感じになります。
OS再起動してもいいですが、ネットワーク再起動だけでも大丈夫です。
# /etc/init.dnetwork restart
特にエラーもなく・・・w
確認してみます。
# ifconfig br0 Link encap:イーサネット ハードウェアアドレス 00:17:08:56:a5:fb inetアドレス:192.168.255.254 ブロードキャスト:192.168.255.255 マスク:255.255.255.0 inet6アドレス: fe80::217:8ff:fe56:a5fb/64 範囲:リンク UP BROADCAST RUNNING MULTICAST MTU:1500 メトリック:1 RXパケット:85 エラー:0 損失:0 オーバラン:0 フレーム:0 TXパケット:53 エラー:0 損失:0 オーバラン:0 キャリア:0 衝突(Collisions):0 TXキュー長:0 RXバイト:8601 (8.3 KiB) TXバイト:8640 (8.4 KiB) eth0 Link encap:イーサネット ハードウェアアドレス 00:17:08:56:a5:fb inet6アドレス: fe80::217:8ff:fe56:a5fb/64 範囲:リンク UP BROADCAST RUNNING MULTICAST MTU:1500 メトリック:1 RXパケット:49232 エラー:0 損失:0 オーバラン:0 フレーム:0 TXパケット:24935 エラー:0 損失:0 オーバラン:0 キャリア:0 衝突(Collisions):0 TXキュー長:1000 RXバイト:65613235 (62.5 MiB) TXバイト:1827025 (1.7 MiB) 割り込み:16 lo Link encap:ローカルループバック inetアドレス:127.0.0.1 マスク:255.0.0.0 inet6アドレス: ::1/128 範囲:ホスト UP LOOPBACK RUNNING MTU:16436 メトリック:1 RXパケット:0 エラー:0 損失:0 オーバラン:0 フレーム:0 TXパケット:0 エラー:0 損失:0 オーバラン:0 キャリア:0 衝突(Collisions):0 TXキュー長:0 RXバイト:0 (0.0 B) TXバイト:0 (0.0 B)
ブリッジデバイスにIP等割り当てられているのがわかります。
3)ゲストOS用HDDイメージの作成
さて、ここからOSをインストール作業です。
まず、OSインストール先のイメージファイルを作ります。
インストール先のディスクを作成します。
今回は10GBにしてみます。
# qemu-img create -f raw /var/vm/ubuntu-test.img 10G Formatting '/var/vm/ubuntu-test.img', fmt=raw size=10737418240
一瞬ですw
仮想的に10GBありますが、中身はありません。
# qemu-img info /var/vm/ubuntu-test.img image: /var/vm/ubuntu-test2.img file format: raw virtual size: 10G (10737418240 bytes) disk size: 0
データが書き込まれれば、その分増えていくので経済的ですw
(注意)
qcow2で作ったHDDイメージでは、
ゲストOSからなぜかそのファイル容量しか認識せず、
使うことはできませんでした。
# qemu-img create -f qcow2 test.img 10G Formatting 'test.img', fmt=qcow2 size=10737418240 encryption=off cluster_size=0 # # ls -la -rw-r--r-- 1 root root 262144 2012-10-14 10:36 test.img
約256kbのファイルが作成されましたが、ゲストOSからも256kbしか見えませんでした。
いろいろみるとrawのほうが速いのでこれはこれで放置w
4)ゲストOSのインストール
VNCを使わないでゲストOSを入れてみます
さて、コマンド一発でやっちゃいます
ドメイン(ゲストOS)名・・・ubuntu-test
HDDイメージ・・・/var/vm/ubuntu-test.img
CPU・・・2つ
メモリ・・・512MB
ネットワーク・・・ブリッジ
# virt-install \ --name ubuntu-test \ --ram 512 \ --vcpus=2 \ --disk path=/var/vm/ubuntu-test.img \ --os-variant=virtio26 \ --network=bridge:br0 \ --location http://archive.ubuntu.com/ubuntu/dists/precise/main/installer-amd64/ \ --nographics \ --extra-args='console=tty0 console=ttyS0,115200n8'
こんな感じ。
–os-variant
Linux系とかUnix系、Win系でオプションが違います。
準仮想化ドライバが使えるようになります。
–location
ネットワークインストールさせています。
–nographics
–extra-args=’console=tty0 console=ttyS0,115200n8′
これを書いておかないとコンソール接続できません。
あとは、ホストOSのコンソールにインストール画面がツラツラ出てきますので、
いつもどおりに、ゲストOSをインストール出来ます。
コンソールから、離れる場合は
Ctrl+](「コントロールキー」と「]」括弧)で、一旦離れることができます。
再度、コンソールに接続する場合は、
# virsh virsh # console <domain-name or ID>
で、接続出来ます。
あとは、
マニュアルを見て下さい・・・
いろいろ書かれています。
# man virt-install
Debian/Ubuntuだけなのかもしれませんが、
ゲストOSが停止出来ないので(destroyするしかない)、ゲストOSにACPIデーモンを入れてあげます。
# aptitude install acpid
これで、
virsh # shutdown <domain-name or ID>
でゲストOSが落とせます。
出来たXMLファイルは、
virsh # dumpxml ubuntu-test <domain type='kvm'> <name>ubuntu-test</name> <uuid>a8e1ea50-ac50-f1d8-f57c-5f91c2323068</uuid> <memory>524288</memory> <currentMemory>524288</currentMemory> <vcpu>2</vcpu> <os> <type arch='x86_64' machine='pc-0.12'>hvm</type> <boot dev='hd'/> </os> <features> <acpi/> <apic/> <pae/> </features> <clock offset='utc'/> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>restart</on_crash> <devices> <emulator>/usr/bin/kvm</emulator> <disk type='file' device='disk'> <driver name='qemu' type='raw'/> <source file='/var/vm/ubuntu-test.img'/> <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </disk> <interface type='bridge'> <mac address='52:54:00:73:ed:4b'/> <source bridge='br0'/> <target dev='vnet1'/> <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> </interface> <serial type='pty'> <target port='0'/> </serial> <console type='pty'> <target type='serial' port='0'/> </console> <memballoon model='virtio'> <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> </memballoon> </devices> </domain>
こんな感じ。
virtioが見えています。
ゲストOSを消すには
virsh # list --all Id Name State ---------------------------------- 3 ubuntu-test running
動いているのが見えます。
削除してみる
virsh # undefine ubuntu-test error: Failed to undefine domain ubuntu-test error: Requested operation is not valid: cannot delete active domain
と怒られるので、
virsh # destroy ubuntu-test Domain ubuntu-test destroyed
もしくはshutdownしてないとダメです。
今回は強制終了してやりますw
改めて
virsh # undefine ubuntu-test Domain ubuntu-test has been undefined
これで消えました。
詳細は
virsh # help
でコマンド一覧がでますので、見てみて下さい。
いろんなことができますねぇ。。。
今回使った各バージョンは以下の通りです。
# virt-install --version 0.500.3 # kvm --version QEMU PC emulator version 0.12.5 (qemu-kvm-0.12.5), Copyright (c) 2003-2008 Fabrice Bellard # virsh --version 0.8.3
[tegaki]難しいなぁ。。。[/tegaki]