vnc設定に挑戦してみる

    • などを追加で定義してみるとエラーする
# virsh define /etc/libvirt/qemu/chaos.dummy.xml
エラー: /etc/libvirt/qemu/chaos.dummy.xml からのドメイン定義に失敗しました
エラー: internal error unable to reserve PCI address 0:0:2
    • インストールの定義で試す
# qemu-img create -f qcow2 /home2/vnc.img 10G
# virt-install --connect qemu:///system \
  --name vnc \
  --ram=512 \
  --hvm \
  --location http://ftp.riken.jp/Linux/centos/5.5/os/i386 \
  --os-type=Linux \
  --os-variant=virtio26 \
  --disk=/home2/vnc.img,format=qcow2 \
  --network bridge=br0 \
  --nographics \
  --keymap ja \
  --vnc \
  --vncport=5901 \
  --extra-args='console=tty0 console=ttyS0,115200n8'
ERROR    Can't specify more than one of VNC, SDL, or --nographics
Traceback (most recent call last):
  File "/usr/bin/virt-install", line 1033, in <module>
    main()
  File "/usr/bin/virt-install", line 851, in main
    options.video, guest)
  File "/usr/lib/pymodules/python2.6/virtinst/cli.py", line 747, in get_graphics
    raise ValueError, _("Can't specify more than one of VNC, SDL, "
ValueError: Can't specify more than one of VNC, SDL, or --nographics

nographicsとvncは競合できないようだ?
nographicsを外してみる。

# virt-install --connect qemu:///system \
  --name vnc \
  --ram=512  \
  --hvm  \
  --location http://ftp.riken.jp/Linux/centos/5.5/os/i386 \
  --os-type=Linux \
  --os-variant=virtio26 \
  --disk=/home2/vnc.img,format=qcow2 \
  --network bridge=br0 \
  --keymap ja \
  --vnc \
  --vncport=5901 \
  --extra-args='console=tty0 console=ttyS0,115200n8'
インストールを開始しています...
ファイル .treeinfo ・100% |=========================|  413 B    00:00
ファイル vmlinuz を・100% |=========================| 1.8 MB    00:00
ファイル initrd.img ・100% |=========================| 7.2 MB    00:01
ドメインを作成中...                                        0 B 00:00
Unable to connect to graphical console: virt-viewer not installed. Please install the 'virt-viewer' package.
Domain installation still in progress. You can reconnect to
the console to complete the installation process.

virt-viewer パッケージが必要。

# aptitude install virt-viewer

削除定義ファイル
# rm /etc/libvirt/qemu/vnc.xml
kill インストール中のプロセス
# service libvirt-bin restart

# virt-install --connect qemu:///system \
  --name vnc \
  --ram=512  \
  --hvm  \
  --location http://ftp.riken.jp/Linux/centos/5.5/os/i386 \
  --os-type=Linux \
  --os-variant=virtio26 \
  --disk=/home2/vnc.img,format=qcow2 \
  --network bridge=br0 \
  --keymap ja

インストールを開始しています...
ファイル .treeinfo ・100% |=========================|  413 B    00:00
ファイル vmlinuz を・100% |=========================| 1.8 MB    00:00
ファイル initrd.img ・100% |=========================| 7.2 MB    00:01
ドメインを作成中...                                        0 B 00:00
Cannot open display:
Run 'virt-viewer --help' to see a full list of available command line options
Domain installation still in progress. You can reconnect to
the console to complete the installation process.

仮想コンソールからでは無理か。
コンソールから再度挑戦。

# virt-install --connect qemu:///system \
  --name vnc \
  --ram=512  \
  --hvm  \
  --location http://ftp.riken.jp/Linux/centos/5.5/os/i386 \
  --os-type=Linux \
  --os-variant=virtio26 \
  --disk=/home2/vnc.img,format=qcow2 \
  --network bridge=br0 \
  --keymap ja

インストールが終わったら起動してvncclientで接続する。UltraVncビューアとか推奨。
接続先は HOST のIPの 5901 (定義値) 
例)host:192.168.1.11 guest:192.168.1.9 port:5901 なら
  192.168.1.11:5901で接続する。
その前に libvirt で vnc用のポート設定が必要。(任意でパスワード設定が可能)

# diff -Naur /etc/libvirt/qemu.conf{.o,}
--- /etc/libvirt/qemu.conf.o    2010-09-25 10:14:27.000000000 +0900
+++ /etc/libvirt/qemu.conf      2010-11-14 13:36:12.128381597 +0900
@@ -10,6 +10,8 @@
 # verification when allowing public access
 #
 # vnc_listen = "0.0.0.0"
+vnc_listen = "0.0.0.0"
+vnc_password = "vncvnc"


 # Enable use of TLS encryption on the VNC server. This requires

# service libvirt-bin restart
    • ここからが本題。graphic type 〜を付けても起動しなかったものと定義ファイルを比較してみる。(一部省略)
# diff -Naur /etc/libvirt/qemu/{vnc2.xml.o,vnc.xml}
--- /etc/libvirt/qemu/vnc2.xml.o        2010-11-14 13:50:52.861351422 +0900
+++ /etc/libvirt/qemu/vnc.xml   2010-11-14 13:19:56.888778118 +0900
@@ -21,15 +21,15 @@
     <emulator>/usr/bin/kvm</emulator>
     <disk type='file' device='disk'>
       <driver name='qemu' type='qcow2'/>
-      <source file='/home2/vnc2.img'/>
+      <source file='/home2/vnc.img'/>
       <target dev='vda' bus='virtio'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
     </disk>
     <interface type='bridge'>
-      <mac address='52:54:00:eb:38:9f'/>
+      <mac address='52:54:00:34:82:32'/>
       <source bridge='br0'/>
       <model type='virtio'/>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
     </interface>
     <serial type='pty'>
       <target port='0'/>
@@ -37,8 +37,14 @@
     <console type='pty'>
       <target type='serial' port='0'/>
     </console>
+    <input type='mouse' bus='ps2'/>
+    <graphics type='vnc' port='5901' autoport='no' keymap='ja'/>
+    <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='0x04' function='0x0'/>
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
     </memballoon>
   </devices>
 </domain>

mouseもしくは<video>が無いのが原因か?と思って追加してみたがdefineで失敗する。
<address type〜のところも合わせて丸ごとコピーしたら成功した。
    • 以下にvnc設定前の定義ファイルとvnc定義後の設定ファイルを示す。
・vnc定義前
<domain type='kvm'>
  <name>vnc2</name>
  <uuid>0102e2c5-90f7-e5ad-fa3a-d437d3c512e0</uuid>
  <memory>524288</memory>
  <currentMemory>524288</currentMemory>
  <vcpu>1</vcpu>
  <os>
    <type arch='i686' 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='qcow2'/>
      <source file='/home2/vnc2.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:eb:38:9f'/>
      <source bridge='br0'/>
      <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>
・vnc定義後
<domain type='kvm'>
  <name>vnc2</name>
  <uuid>0102e2c5-90f7-e5ad-fa3a-d437d3c512e0</uuid>
  <memory>524288</memory>
  <currentMemory>524288</currentMemory>
  <vcpu>1</vcpu>
  <os>
    <type arch='i686' 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='qcow2'/>
      <source file='/home2/vnc2.img'/>
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </disk>
    <interface type='bridge'>
      <mac address='52:54:00:eb:38:9f'/>
      <source bridge='br0'/>
      <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='5908' autoport='no' keymap='ja'/>
    <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>

続く。