This is an old revision of the document!
Workshop libVirt & KVM
- by Christian Pointner
- workshop notes by Michael Prokop
Ressources
- man kvm
Software
Required software packages:
apt-get install libvirt-bin qemu-kvm qemu-utils
Graphical user interface:
apt-get install virt-manager
Kernel 2.6.32 and according libvirt highly recommended, e.g. Debian/squeeze and Debian/lenny with backports works fine.
ifaces example
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# bridge for kvm
auto eth0
iface eth0 inet manual
auto vnet
iface vnet inet dhcp
bridge_ports eth0
Simple demo setup with Grml ISO
cd /dev/shm
wget http://download.grml.org/grml-small_2010.04.iso
ISO=/dev/shm/grml-small_2010.04.iso
cat > grml.xml << EOF
<domain type='kvm'>
<name>grml-kvm</name>
<memory>262144</memory>
<currentMemory>262144</currentMemory>
<vcpu>1</vcpu>
<os>
<type arch='x86_64' machine='pc'>hvm</type>
<boot dev='cdrom'/>
</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='cdrom'>
<driver name='qemu'/>
<source file='/grml/isos/grml-small_2010.04.iso'/>
<target dev='hdc' bus='ide'/>
<readonly/>
<alias name='ide0-1-0'/>
<address type='drive' controller='0' bus='1' unit='0'/>
</disk>
<controller type='ide' index='0'>
<alias name='ide0'/>
</controller>
<interface type='bridge'>
<source bridge='vnet'/>
<model type='virtio'/>
<alias name='net0'/>
</interface>
<serial type='pty'>
<source path='/dev/pts/9'/>
<target port='0'/>
<alias name='serial0'/>`
</serial>
<console type='pty'>
</console>
<input type='mouse' bus='ps2'/>
<graphics type='vnc' autoport='yes'/>
</devices>
</domain>
EOF
sudo virsh [--connect qemu:///system]
Inside virsh then define and start grml instance:
virsh # define grml.xml virsh # start grml-kvm
List VNC port:
virsh # vncdisplay grml-kvm :0
List all defined instances:
virsh # list --all Id Name State ---------------------------------- 14 grml-kvm running
List assigned serial console:
virsh # ttyconsole grml-kvm /dev/pts/8
Connect via serial console (choose the “Serial” boot menu entry under additional entries for “grml-small” in the bootsplash to automatically enable serial console):
sudo -u libvirt-qemu cu -l /dev/pts/8
Connect via VNC:
vncviewer localhost:5900
Possible falltraps while setup:
- i686 vs. x86_64 as arch type
- missing any defined block devices
- missing bridge configuration as defined in config, example for /etc/network/interfaces see above
Verify defined configuration:
define $FOO dumpxml $FOO
Autostart setup:
autostart $HOST net-auostart default net-autostart --disable default autostart --disable $HOST
Ballooning:
setmem $HOST 256000 <currentMemory> <= <memory> -> but can be overriden via setmaxmem
Overbooking of CPU:
<vcpu>16</vcpu>
Tip: Disable caching in the virtualised instance so just the internal system (the system running inside the virtual machine) uses the caches (add this line inside every <disk> … </disk> environment):
"<driver cache='none'/>"
Serial console access (guest)
Adjust Grub2 configuration /etc/default/grub:
GRUB_CMDLINE_LINUX="console=ttyS0,115200n8" GRUB_SERIAL_COMMAND="serial --speed=1152200 --unit=0 --word=8 --parity=no --stop=1"
Adjust /etc/inittab for serial console access:
T0:23:respawn:/sbin/getty -L ttyS0 115200 vt100
Tips
Convert file config in the native guest configuration format named by format to a domain XML format:
virsh [--connect qemu:///system domxml-to-native] domxml-to-native qemu-argv /dev/shm/grml.xml
virsh like console access to kvm/qemu:
kvm [...] -monitor stdio
Block device:
qemu-img create -f qcow2 block.img 1G
<disk type='block' device='disk'>
<driver cache='none'/>
<source dev='/dev/shm/block.img'/>
<target dev='vda' bus='virtio'/>
<alias name='virtio-disk0'/>
</disk>