Contents
This walk-through assumes you start qemu/kvm either manually or from a script. You already have a filesystem (eg: disk image, LVM partition). You are familiar with kvm/qemu networking.
Todo
Follow the instructions in the Networking hints and tips.
Virtinst is a set of commandline tools to create virtual machines using libvirt.
apt-get install python-virtinst
Now use virt-install to create your virtual machine, as described here. For example, to create a guest domain called 'vader' using a pre-existing LVM partition and KVM:
virt-install -n vader -r 384 -f /dev/mapper/vg-vaderlv --accelerate --vnc --noautoconsole -v --network bridge:br0
The above command will create the domain definition file /etc/libvirt/qemu/vader.xml, and will attempt to start the domain.
FIXME: The above command will ask for a CDROM and attempt to boot from it. This is unnecessary if a filesystem already exists on /dev/mapper/vg-vaderlv. I bypassed this by setting the CDROM to /dev/null and then restarting the domain after the initial boot failure.
FIXME: If you are running Ubuntu and cannot bring up eth0 on your guest domain, it is likely that there is a conflict with your MAC address from your pre-existing domain. Note the MAC address assigned on the host domain in the file /etc/libvirt/qemu/vader.xml. Log into the guest domain using the console and edit the file /etc/udev/rules.d/70-persistent-net.rules. Remove the line containing 'NAME="eth1"' (provided you are only running 1 interface). Edit the line containing 'NAME="eth0"' and modify ATTR{address}== field with the current MAC address.
To create a domain called 'vader' using your favorite text editor, create a file called vader.xml which looks something like the following.
Note the uuid must be unique to this domain; if you leave it out, correct (random) one will be generated for you.
<domain type='kvm'>
<name>vader</name>
<uuid>f5b8c05b-9c7a-3211-49b9-2bd635f7e2aa</uuid>
<memory>393216</memory>
<currentMemory>393216</currentMemory>
<vcpu>1</vcpu>
<os>
<type>hvm</type>
<boot dev='hd'/>
</os>
<features>
<acpi/>
</features>
<clock offset='utc'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>destroy</on_crash>
<devices>
<emulator>/usr/bin/kvm</emulator>
<disk type='block' device='disk'>
<source dev='/dev/mapper/vg-vaderlv'/>
<target dev='hda' bus='ide'/>
</disk>
<interface type='bridge'>
<mac address='52:54:00:00:01:89'/>
<source bridge='br0'/>
</interface>
<input type='tablet' bus='usb'/>
<input type='mouse' bus='ps2'/>
<graphics type='vnc' port='-1' listen='127.0.0.1'/>
</devices>
</domain>
For more information, see the domain format documentation.
After that file is created, you can define it in libvirt with the following command:
virsh define vader.xml
You can verify your changes have taken effect with the command:
virsh dumpxml vader
To list all currently-running domains:
virsh list
To display info on a specific domain:
virsh dominfo vader
To start/stop/reboot a domain:
virsh start vader virsh shutdown vader virsh reboot vader
To hard-stop a domain (no elegant shutdown):
virsh destroy vader
Usually issuing the following command should be enough and should deal with possible combinations:
virt-viewer vader
The virt-viewer is in a separate package with
The above examples connect a VNC terminal to the loopback device (127.0.0.1). Pay attention to the port number if you have multiple domains running.
You can connect from the host machine:
vncviewer localhost
or over the network using ssh port-forwarding. Login to the host:
ssh deathstar -L 5900:127.0.0.1:5900
On the local computer, now run:
vncviewer localhost
Set the 'autostart' flag so the domain is started upon boot:
virsh autostart vader
To enable elegant shutdown of domains, ensure they respond to ACPI power button presses. On Linux, install acpid in the guest OS.