First of all, this walk through pertains to Ubuntu 12.04 and assumes that your hosting company or ISP is able and willing to assign an extra static IP to an arbitrary hwaddress/mac on your host machine.
1.) First of all, let’s install the software:
apt-get install qemu-kvm libvirt-bin bridge-utils vm-install
2.) If you have apparmor running and are planning to put the disk images of your virtual machines in a non-default place you might want to turn off apparmor completely to save yourself some headaches:
/etc/init.d/apparmor stop /etc/init.d/apparmor teardown update-rc.d -f apparmor remove
The error you get if apparmor interferes with your stuff is error: internal error Timed out while reading console log output.
4.) It’s time to setup the virtual machine:
virt-install --connect qemu:///system -n ubuntu1004 -r 8192 --vcpus=2 --disk path=/mnt/data/kvm/images/u1004.img,size=240 -c /mnt/data/kvm/ubuntu-10.04.4-server-amd64.iso --vnc --noautoconsole --os-type linux --accelerate --network=bridge:virbr0 --hvm
My VM will use Lucid, have 8GB of RAM, two cores and 240GB HD space.
This line will give you: Domain installation still in progress. You can reconnect to the console to complete the installation process..
5.) Install virt manager on your desktop/work machine: sudo apt-get install virt-manager
6.) Go to Dash Home and start writing Virtual Machine Manager to get the launcher, launch it. Go File -> Add Connection. Check Connect to remote host via SSH with Hypervisor QEMU/KVM. The connection should now show in the list, right click it and Connect to complete the installation.
7.) Possibly pointless but won’t hurt (the eth0:0 virtual interface part), your /etc/network/interfaces:
auto lo iface lo inet loopback auto eth0 iface eth0 inet static address host_ip netmask netmask_ip gateway gateway_ip auto eth0:0 iface eth0:0 inet static address guest_ip netmask netmask_ip
Also possibly pointless: Uncomment net.ipv4.ip_forward=1 in /etc/sysctl.conf and do sysctl -p /etc/sysctl.conf
8.) Do virsh dumpxml ubuntu1004 > /etc/ubuntu1004.xml followed by nano /etc/ubuntu1004.xml. Check out the network interface part:
<interface type='direct'> <mac address='guest:mac:address'/> <source dev='eth0' mode='bridge'/> <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x1'/> </interface>
Make sure that it looks like above (with a proper MAC address of course, not guest:mac:address). Note the mac address and notify your hosting provider or ISP of the mac address and the guest ip that should be attached to it.
Do virsh define /etc/ubuntu1004.xml and /etc/init.d/libvirt-bin restart.
9.) Login to your virtual machine by way of virt-manager again. Edit /etc/network/interfaces on the guest:
auto lo iface lo inet loopback auto eth0 iface eth0 inet static address guest_ip netmask netmask_ip gateway gateway_ip
Restart networking: /etc/init.d/networking restart.
10.) Fix /etc/resolv.conf on the guest, make it look like on the host.
Voila! You should now be able to SSH in to your guest via the static guest ip and the guest should be able to access the internet.