お久しぶりです。
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]