Libvirt は仮想マシン管理用のソフトウエア.次のような機能がある.
※ Ubuntu 12.04 では KVM/QEMU, Xen, LXC, OpenVZ に対応(のようです)
◆ この Web ページで行うこと:
QEMU は x86, PowerPC, S390, ARM などのマシンのエミューレータ.
◆ 以下、 Ubuntu 12.04 で、パッケージを使ってインストールしたいときの手順を示します(ソースコードからビルドしたいときは, 別の Web ページの説明を見てください)
sudo apt -y install kvm sudo apt -y install kvm-ipxe sudo apt -y install qemu-common sudo apt -y install qemu-keymaps sudo apt -y install qemu-kvm-extras sudo apt -y install qemu-kvm sudo apt -y install qemu-system sudo apt -y install qemu-user sudo apt -y install qemu-utils sudo apt -y install qemu-launcher sudo apt -y install qemulator sudo apt -y install qemuctl sudo apt -y install qtemu sudo apt -y install qemu-kvm-spice
まず手動でカーネルモジュールの組み込みを行ってみる
sudo modprobe kvm_intel sudo modprobe kvm lsmod | grep kvm kvm-ok
うまく組み込めるようだったら、自動で組み込むように設定することにする。 /etc/modules を編集し、
kvm_intel kvm
の2行を追加する
sudo apt -y install spice-client
次の手順を踏む.
sudo apt -y install libvirt0 sudo apt -y install libvirt-bin sudo apt -y install libvirt-dev sudo apt -y install libvirt-doc sudo apt -y install python-libvirt sudo apt -y install libvirt-ruby sudo apt -y install virt-manager sudo apt -y install virt-viewer sudo apt -y install virt-goodies sudo apt -y install virt-top sudo apt -y install ubuntu-vm-builder sudo apt -y install cpu-checker sudo apt -y install bridge-utils
以上の操作で,vmware2libvirt, virt-viewer, virsh, virt-install などのコマンドが使えるようになります また /etc/libvirt 下にいくつかの設定ファイルができる
sudo usermod $(whoami) -a -G libvirtd cat /etc/group | grep libvirtd
see http://gihyo.jp/admin/serial/01/ibm_kvm/0003
sudo /etc/init.d/networking restart
ifconfig -a
virsh list --all
◆ 実行結果の例
ここでの実行結果では、ドメインがない(まだドメインを作成していないので)
◆ ここでの設定内容(例)
| 設定項目 | データ型 | 本 Web ページでの設定値 |
| ゲスト OS の種類 | 文字列 | precise (Ubuntu 12.04) |
| 接続に使用するドライバ | 文字列 | qemu:///system |
| 仮想マシン識別名(libvirtでは「ドメイン名」ともいう) | 文字列 | ubuntu1204i386 または ubuntu1204amd64 |
| 仮想マシン・イメージファイルのディレクトリ | 文字列 | /home |
| 仮想マシン・イメージファイルのファイル名 | 文字列 | /home/ubuntu1204i386.qcow2 または /home/ubuntu1204amd64.qcow2 |
| 仮想マシン・イメージファイルのフォーマット | 文字列 | qcow2 |
| 仮想マシン・イメージファイルの最大サイズ | 数値 | 80 (GB) |
| 仮想マシンに割り当てるメインメモリのサイズ | 数値 | 2048 (MB) |
| 仮想マシンに割り当てるCPU数 | 数値 | 1 |
| 仮想マシンの起動に使う ISO イメージファイル名 | 文字列 | /home/www/linux/ubuntu-12.04-desktop-i386.iso または /home/www/linux/ubuntu-12.04-desktop-amd64.iso |
※ 参考 Web ページ: http://libvirt.org/formatdomain.html#elementsGraphics
◆ 操作手順の例 (グラフィックスとして vnc を指定する場合)
ホストが 64 ビット Linux ならゲストも 64 ビット Linux, ホストが 32 ビット Linux ならゲストも 32 ビット Linuxとしている。
virsh list --all
if [ `arch` = 'i686' ]; then
export QEMU_ISOFILE=/home/www/linux/ubuntu-12.04-desktop-i386.iso
export QEMU_FILE_PATH=/home/ubuntu1204i386.qcow2
export QEMU_MACHINE_NAME=ubuntu1204i386
elif [ `arch` = 'x86_64' ]; then
export QEMU_ISOFILE=/home/www/linux/ubuntu-12.04-desktop-amd64.iso
export QEMU_FILE_PATH=/home/ubuntu1204amd64.qcow2
export QEMU_MACHINE_NAME=ubuntu1204amd64
fi
/usr/bin/qemu-img create -f qcow2 ${QEMU_FILE_PATH} 80G .
sudo virt-install --connect=qemu:///system --name=${QEMU_MACHINE_NAME} --hvm --accelerate --disk path=${QEMU_FILE_PATH},size=80,device=disk,bus=virtio,format=qcow2 --ram=2048 --vcpus=1 --cdrom ${QEMU_ISOFILE} --network network=default,model=virtio --vnc --os-type=linux --os-variant=ubuntuprecise --livecd --noacpi
◆ 実行結果の例 (グラフィックスとして vnc を指定する場合)
このとき、ドメインはすでに起動した状態になっている.ドメインの状態は virsh list --all で確認できる.
XML ファイルができている. ファイルの場所は /etc/libvirt/qemu の下
<!--
WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
OVERWRITTEN AND LOST. Changes to this xml configuration should be made using:
virsh edit ubuntu1204amd64
or other application using the libvirt API.
-->
<domain type='kvm'>
<name>ubuntu1204amd64</name>
<uuid>085960a1-cfaa-354e-a47c-f9542c1d9efe</uuid>
<memory>2097152</memory>
<currentMemory>2097152</currentMemory>
<vcpu>1</vcpu>
<os>
<type arch='x86_64' machine='pc-1.1'>hvm</type>
<boot dev='cdrom'/>
<boot dev='hd'/>
</os>
<features>
<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-spice</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/home/ubuntu1204amd64.qcow2'/>
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
</disk>
<disk type='file' device='cdrom'>
<driver name='qemu' type='raw'/>
<source file='/home/www/linux/ubuntu-12.04-desktop-amd64.iso'/>
<target dev='hdc' bus='ide'/>
<readonly/>
<address type='drive' controller='0' bus='1' unit='0'/>
</disk>
<controller type='ide' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
</controller>
<interface type='network'>
<mac address='52:54:00:55:0d:13'/>
<source network='default'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
<serial type='pty'>
<target port='0'/>
</serial>
<console type='pty'>
<target type='serial' port='0'/>
</console>
<input type='mouse' bus='ps2'/>
<graphics type='vnc' port='-1' autoport='yes'/>
<video>
<model type='cirrus' vram='9216' heads='1'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</video>
<memballoon model='virtio'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
</memballoon>
</devices>
</domain>
◆ 操作手順の例 (グラフィックスとして spice を指定する場合)
「--graphics spice,port=5930,password=hoge --video qxl」のようにしている。
※ libvirt のバージョンによっては 「--graphics spice,port=5930,passwd=hoge --video qxl」のようにしなければならないようです(「password」でなく「passwd」)
virsh list --all
if [ `arch` = 'i686' ]; then
export QEMU_ISOFILE=/home/www/linux/ubuntu-12.04-desktop-i386.iso
export QEMU_FILE_PATH=/home/ubuntu1204i386.qcow2
export QEMU_MACHINE_NAME=ubuntu1204i386
elif [ `arch` = 'x86_64' ]; then
export QEMU_ISOFILE=/home/www/linux/ubuntu-12.04-desktop-amd64.iso
export QEMU_FILE_PATH=/home/ubuntu1204amd64.qcow2
export QEMU_MACHINE_NAME=ubuntu1204amd64
fi
/usr/bin/qemu-img create -f qcow2 ${QEMU_FILE_PATH} 80G .
sudo virt-install --connect=qemu:///system --name=${QEMU_MACHINE_NAME} --hvm --accelerate --disk path=${QEMU_FILE_PATH},size=80,device=disk,bus=virtio,format=qcow2 --ram=2048 --vcpus=1 --cdrom ${QEMU_ISOFILE} --network network=default,model=virtio --graphics spice,port=5930,password=hoge --video qxl --os-type=linux --os-variant=ubuntuprecise --livecd --noacpi
◆ 実行結果の例 (グラフィックスとして spice を指定する場合)
このとき、下図のように「うまく動作してない」ように見える場合があるが、 無視する。
ドメインはすでに起動した状態になっている.ドメインの状態は virsh list --all で確認できる.
SPICE のプロトコルで、仮想マシンに接続してみる. パスワードは適切に指定すること。
spicec -h 127.0.0.1 -p 5930 -w "hoge"
ドメインの定義解除は「virsh undefine」で行う.定義解除の前に「virsh destroy」で強制停止する.
◆ 操作手順の例
virsh destroy ubuntu1204amd64 virsh undefine ubuntu1204amd64
sudo virt-clone -o ubuntu1204amd64 -n new_ubuntu1204amd64 -f /home/new_ubuntu1204amd64.qcow2 --connect=qemu:///system
◆ 停止しているドメインを起動し、Virt-viewer を用いて接続する操作
virsh start ubuntu1204amd64 virsh list --all virt-viewer --connect qemu:///system <ID番号>
◆ 停止しているドメインを起動し、VNC を用いて接続する操作
virsh start ubuntu1204amd64 virsh list --all virsh vncdisplay ubuntu1204amd64 vncviewer :0
※ リモートから接続したいときは、ファイヤウオールの設定、/etc/libvirt/qemu.confの設定を確認すること
◆ 停止しているドメインを起動し、SPICE を用いて接続する操作
virsh start ubuntu1204amd64 virsh list --all spicec -h 127.0.0.1 -p 5930 -w hoge
※ リモートから接続したいときは、ファイヤウオールの設定、/etc/libvirt/qemu.confの設定を確認すること
◆ 停止しているドメインを起動し、コンソールを起動する操作
virsh start ubuntu1204amd64 virsh list --all virsh console ubuntu1204amd64
◆ ドメインの停止 (Stop Domain)
まず、仮想マシン(ゲスト)の方でシャットダウン操作を行った後に、 ホストの方で、次のコマンドを実行する
virsh shutdown ubuntu1204amd64
◆ ドメインの再起動 (Reboot Domain)
virsh reboot ubuntu1204amd64
仮想マシンの状態をファイルに保存し、あとで復帰できるようにする.
◆ スナップショットの作成
virsh save ubuntu1204amd64 ubuntu1204amd64.snap01
◆ スナップショットを用いた復帰
virsh restore ubuntu1204amd64.snap01
以下 Ubuntu 12.04 での操作手順例を示す
※ 参考 Web ページ: http://libvirt.org/formatdomain.html#elementsGraphics
まず、 graphics セクションで vnc が定義されているのを削除する. 次に、spice に関する記述を行う。例えば、次のように記述する.
◆ 先ほど virt-installコマンドの実行により作成された XML ファイル /etc/libvirt/qemu/ubuntu1204.xml を編集しているところ
virsh start ubuntu1204amd64 virsh list --all
spicec -h 127.0.0.1 -p 5930 -w "hoge"
本サイトは金子邦彦研究室のWebページです.サイトマップは,サイトマップのページをご覧下さい. 本サイト内の検索は,サイト内検索のページをご利用下さい.
問い合わせ先: 金子邦彦(かねこ くにひこ) ![]()