|   | 1 | [[TOC(heading=KVM tutorial TOC, Tutorials/KVM)]] | 
          
          
            |   | 2 |  | 
          
          
            |   | 3 | = KVM Tutorial = | 
          
          
            |   | 4 | == Installing KVM == | 
          
          
            |   | 5 |  | 
          
          
            |   | 6 | Check if your CPU supports hardware virtualization via command: | 
          
          
            |   | 7 | {{{ | 
          
          
            |   | 8 | egrep '(vmx|svm)' --color=always /proc/cpuinfo | 
          
          
            |   | 9 | }}} | 
          
          
            |   | 10 |          | 
          
          
            |   | 11 | If nothing is displayed CPU doesn't support virtualization. | 
          
          
            |   | 12 |  | 
          
          
            |   | 13 | Instal packages ubuntu-virt-server, python-vm-builder and kvm-pxe via command (but just in case, first update the package repository on the node): | 
          
          
            |   | 14 | {{{ | 
          
          
            |   | 15 | apt-get update | 
          
          
            |   | 16 | apt-get install ubuntu-virt-server python-vm-builder kvm-pxe | 
          
          
            |   | 17 | }}} | 
          
          
            |   | 18 |                  | 
          
          
            |   | 19 | Add the current user to the group: | 
          
          
            |   | 20 | {{{ | 
          
          
            |   | 21 | adduser `id -un` libvirtd | 
          
          
            |   | 22 | adduser `id -un` kvm | 
          
          
            |   | 23 | }}} | 
          
          
            |   | 24 |          | 
          
          
            |   | 25 | Logout and login again: | 
          
          
            |   | 26 | {{{ | 
          
          
            |   | 27 | logout | 
          
          
            |   | 28 | ssh root@node1-1 | 
          
          
            |   | 29 | }}} | 
          
          
            |   | 30 |          | 
          
          
            |   | 31 | Check users group by comamand: | 
          
          
            |   | 32 | {{{ | 
          
          
            |   | 33 | groups | 
          
          
            |   | 34 | }}} | 
          
          
            |   | 35 |  | 
          
          
            |   | 36 | Output should be similar to: | 
          
          
            |   | 37 | {{{ | 
          
          
            |   | 38 | root kvm libvirtd | 
          
          
            |   | 39 | }}} | 
          
          
            |   | 40 |  | 
          
          
            |   | 41 | To list all running KVMs use: | 
          
          
            |   | 42 | {{{ | 
          
          
            |   | 43 | virsh -c qemu:///system list | 
          
          
            |   | 44 | }}} | 
          
          
            |   | 45 |  | 
          
          
            |   | 46 | == Setup network bridge on the host == | 
          
          
            |   | 47 |  | 
          
          
            |   | 48 | Install the package bridge-utils: | 
          
          
            |   | 49 | {{{ | 
          
          
            |   | 50 | apt-get install bridge-utils | 
          
          
            |   | 51 | }}} | 
          
          
            |   | 52 |  | 
          
          
            |   | 53 | Create the bridge interface named br0: | 
          
          
            |   | 54 | {{{ | 
          
          
            |   | 55 | brctl addbr br0 | 
          
          
            |   | 56 | }}} | 
          
          
            |   | 57 |  | 
          
          
            |   | 58 | Edit the network interfaces configuration with editor (for example nano): | 
          
          
            |   | 59 | {{{ | 
          
          
            |   | 60 | nano /etc/network/interfaces | 
          
          
            |   | 61 | }}} | 
          
          
            |   | 62 |  | 
          
          
            |   | 63 | and add persistent configuration for br0 interface: | 
          
          
            |   | 64 | {{{ | 
          
          
            |   | 65 | # This file describes the network interfaces available on your system | 
          
          
            |   | 66 | # and how to activate them. For more information, see interfaces(5). | 
          
          
            |   | 67 |  | 
          
          
            |   | 68 | # The loopback network interface | 
          
          
            |   | 69 | auto lo | 
          
          
            |   | 70 | iface lo inet loopback | 
          
          
            |   | 71 |  | 
          
          
            |   | 72 | # The primary network interface | 
          
          
            |   | 73 | auto eth1 | 
          
          
            |   | 74 | iface eth1 inet dhcp | 
          
          
            |   | 75 |  | 
          
          
            |   | 76 | # The secondary network interface | 
          
          
            |   | 77 | auto eth0 | 
          
          
            |   | 78 | iface eth0 inet manual | 
          
          
            |   | 79 |  | 
          
          
            |   | 80 | #Bridge 0 interface | 
          
          
            |   | 81 | auto br0 | 
          
          
            |   | 82 | iface br0 inet static | 
          
          
            |   | 83 |   address 10.28.1.1 | 
          
          
            |   | 84 |   netmask 255.255.0.0 | 
          
          
            |   | 85 |   broadcast 10.28.255.255 | 
          
          
            |   | 86 |   network 10.28.0.0 | 
          
          
            |   | 87 |   bridge_ports eth0 | 
          
          
            |   | 88 |   bridge_fd 9 | 
          
          
            |   | 89 |   bridge_hello 2 | 
          
          
            |   | 90 |   bridge_maxage 12 | 
          
          
            |   | 91 |   bridge_stp off | 
          
          
            |   | 92 | }}} | 
          
          
            |   | 93 |  | 
          
          
            |   | 94 | Restart networking with command: | 
          
          
            |   | 95 | {{{ | 
          
          
            |   | 96 | /etc/init.d/networking restart | 
          
          
            |   | 97 | }}} | 
          
          
            |   | 98 |  | 
          
          
            |   | 99 | For bridge verification open the new ssh window and run: | 
          
          
            |   | 100 | {{{ | 
          
          
            |   | 101 | tcpdump -i br0 | 
          
          
            |   | 102 | }}} | 
          
          
            |   | 103 |  | 
          
          
            |   | 104 | and then, in the other window, try to ping some adress in same subnet, for example: | 
          
          
            |   | 105 | {{{ | 
          
          
            |   | 106 | ping 10.28.0.1 | 
          
          
            |   | 107 | }}} | 
          
          
            |   | 108 |  | 
          
          
            |   | 109 | In the second windows you should see logging ofrequest/reply messages. | 
          
          
            |   | 110 |  | 
          
          
            |   | 111 | It is recommended to reboot the machine once the bridge is configured. | 
          
          
            |   | 112 |  | 
          
          
            |   | 113 | == Create and run KVM image using vmbuilder == | 
          
          
            |   | 114 |  | 
          
          
            |   | 115 | Folder /var/lib/libvirt/images/ will be created for storing images. Each image will have | 
          
          
            |   | 116 | separate folder for example /var/lib/libvirt/images/virtual-machine1 | 
          
          
            |   | 117 |  | 
          
          
            |   | 118 | Create necessary folders: | 
          
          
            |   | 119 | {{{ | 
          
          
            |   | 120 | mkdir -p /var/lib/libvirt/images/vm1/mytemplates/libvirt | 
          
          
            |   | 121 | }}}      | 
          
          
            |   | 122 | '-p' option of mkdir command means that all parent folders will be created if they do not exist. | 
          
          
            |   | 123 |  | 
          
          
            |   | 124 | vmbuilder tool uses templates for creating of images so copy the template: | 
          
          
            |   | 125 | {{{ | 
          
          
            |   | 126 | cp /etc/vmbuilder/libvirt/* /var/lib/libvirt/images/vm1/mytemplates/libvirt/ | 
          
          
            |   | 127 | }}} | 
          
          
            |   | 128 |          | 
          
          
            |   | 129 | Open partition configuration file with command: | 
          
          
            |   | 130 | {{{ | 
          
          
            |   | 131 | nano /var/lib/libvirt/images/vm1/vmbuilder.partition | 
          
          
            |   | 132 | }}} | 
          
          
            |   | 133 |  | 
          
          
            |   | 134 | and add the following lines: | 
          
          
            |   | 135 | {{{ | 
          
          
            |   | 136 | root 8000 | 
          
          
            |   | 137 | swap 4000 | 
          
          
            |   | 138 | --- | 
          
          
            |   | 139 | /var 20000 | 
          
          
            |   | 140 | }}} | 
          
          
            |   | 141 |          | 
          
          
            |   | 142 | Copied text defines three partitions - root, swap and var and their sizes. | 
          
          
            |   | 143 | "---" means that var partition will be separate image file. | 
          
          
            |   | 144 |  | 
          
          
            |   | 145 | Go to folder vm1: | 
          
          
            |   | 146 | {{{ | 
          
          
            |   | 147 | cd /var/lib/libvirt/images/vm1/ | 
          
          
            |   | 148 | }}} | 
          
          
            |   | 149 |  | 
          
          
            |   | 150 | Execute vmbuilder command: | 
          
          
            |   | 151 | {{{ | 
          
          
            |   | 152 | vmbuilder kvm ubuntu --suite=oneiric --flavour=virtual --arch=amd64 --mirror=http://de.archive.ubuntu.com/ubuntu -o --libvirt=qemu:///system --ip=10.28.4.4 --gw=10.28.0.1 --mask=255.255.0.0 --bcast=10.28.255.255 --net=10.28.0.0 --dns=10.0.0.9 --part=vmbuilder.partition --templates=mytemplates --user=guest --name=Guest --pass=guest --addpkg=vim-nox --addpkg=unattended-upgrades --addpkg=acpid --mem=256 --hostname=vm1 --bridge=br0 --addpkg openssh-server --addpkg nano | 
          
          
            |   | 153 | }}}      | 
          
          
            |   | 154 |  | 
          
          
            |   | 155 | == Create and run KVM image using KVM directly == | 
          
          
            |   | 156 |  | 
          
          
            |   | 157 | Download ubuntu server ISO file: | 
          
          
            |   | 158 | {{{ | 
          
          
            |   | 159 | wget -O ubuntu-server.iso http://www.ubuntu.com/start-download?distro=server&bits=64&release=latest  | 
          
          
            |   | 160 | }}} | 
          
          
            |   | 161 |  | 
          
          
            |   | 162 | Create Disk: | 
          
          
            |   | 163 | {{{ | 
          
          
            |   | 164 | qemu-img create -f qcow2 vm-oneric-amd64-serial 10G | 
          
          
            |   | 165 | }}} | 
          
          
            |   | 166 |  | 
          
          
            |   | 167 | Setup network bridge (see part III). | 
          
          
            |   | 168 |  | 
          
          
            |   | 169 | Install tool for Tun: | 
          
          
            |   | 170 | {{{ | 
          
          
            |   | 171 | apt-get install uml-utilities | 
          
          
            |   | 172 | }}} | 
          
          
            |   | 173 |  | 
          
          
            |   | 174 | Create the tap interface: | 
          
          
            |   | 175 | {{{ | 
          
          
            |   | 176 | tunctl | 
          
          
            |   | 177 | }}} | 
          
          
            |   | 178 |  | 
          
          
            |   | 179 | Output of the name is (tap0). | 
          
          
            |   | 180 |  | 
          
          
            |   | 181 | Add tap interface to the bridge as a port: | 
          
          
            |   | 182 | {{{ | 
          
          
            |   | 183 | brctl addif br0 tap0 | 
          
          
            |   | 184 | }}} | 
          
          
            |   | 185 |  | 
          
          
            |   | 186 | Bring up tap0 interface: | 
          
          
            |   | 187 | {{{ | 
          
          
            |   | 188 | ifconfig tap0 up | 
          
          
            |   | 189 | }}} | 
          
          
            |   | 190 |  | 
          
          
            |   | 191 | Boot and Install Ubuntu using VNC: | 
          
          
            |   | 192 | {{{ | 
          
          
            |   | 193 | kvm -daemonize -m 1024 -hda vm-oneric-amd64-serial -cdrom ubuntu-server.iso -boot d -smp 2 -cpu qemu64 -net nic,model=virtio -net tap,ifname=tap0,script=no -vnc :0 | 
          
          
            |   | 194 | }}}      | 
          
          
            |   | 195 |  | 
          
          
            |   | 196 | To run already created image you can enter: | 
          
          
            |   | 197 | {{{ | 
          
          
            |   | 198 | kvm -daemonize -m 1024 -hda vm-oneric-amd64-serial  -smp 2 -cpu qemu64 -net nic,model=virtio -net tap,ifname=tap0,script=no -vnc :0 | 
          
          
            |   | 199 | }}} | 
          
          
            |   | 200 |  | 
          
          
            |   | 201 | Use VNC client to connect to virtual machine. | 
          
          
            |   | 202 |          | 
          
          
            |   | 203 | Kill Virtual machine (KVM process): | 
          
          
            |   | 204 | {{{ | 
          
          
            |   | 205 | pkill -9 kvm | 
          
          
            |   | 206 | }}} | 
          
          
            |   | 207 |  | 
          
          
            |   | 208 | Remove tap0 in as a bridge interface: | 
          
          
            |   | 209 | {{{ | 
          
          
            |   | 210 | brctl delif br0 tap0 | 
          
          
            |   | 211 | }}} | 
          
          
            |   | 212 |  | 
          
          
            |   | 213 | Delete tap interface: | 
          
          
            |   | 214 | {{{ | 
          
          
            |   | 215 | tunctl -d tap0 | 
          
          
            |   | 216 | }}} | 
          
          
            |   | 217 |  | 
          
          
            |   | 218 | {{{ | 
          
          
            |   | 219 | kvm -daemonize -m 1024 -hda vm-oneric-amd64-serial -smp 2 -cpu qemu64 -net nic,model=virtio -net tap,ifname=tap0,script=no -vnc :0 | 
          
          
            |   | 220 | }}} | 
          
          
            |   | 221 |  | 
          
          
            |   | 222 | {{{ | 
          
          
            |   | 223 | kvm -daemonize -m 1024 -hda vm-oneric-amd64-serial -cdrom ubuntu-11.10-server-amd64.iso -boot d -smp 2 -cpu qemu64 -net nic,model=virtio -net tap,ifname=tap0,script=no -vnc :0 | 
          
          
            |   | 224 | }}} | 
          
          
            |   | 225 |  |