Come già detto più volte, con KVM si definisce il nuovo hypervisor Linux sponsorizzato principalmente da RedHat; in realtà KVM è un modulo kernel che permette di dialogare direttamente con le CPU dotate di Hardware specifico per la virtualizzazione, in modo da ottenere un “Hardware Virtualization” per ciò che riguarda la CPU; le rimanenti periferiche (ad esempio rete, dischi, porte USB, ecc.) vengono emulate attraverso qemu.
In questo HowTo eseguiremo un setup completo di KVM su Gentoo Linux e lo configureremo per far parte di un cloud OpenNebula.
Installazione di KVM
Partiamo con una installazione base di Gentoo Linux e installiamo i pacchetti necessari per KVM:
emerge -av qemu-kvm usbutils bridge-utils usermode-utilities iptables
Quindi andiamo a modificare la configurazione del kernel. Ammettendo di aver compialto il kernel in maniera manuale, digitiamo:
cd /usr/src/linux make menuconfig
e abilitiamo il modulo KVM:
[*] Virtualization --->
--- Virtualization
Kernel-based Virtual Machine (KVM) support
KVM for Intel processors support
< > KVM for AMD processors support
Io ho abilitato l’estensione per CPU Intel, se avete una CPU AMD ovviamente dovete utilizzare l’altro modulo.
Ora verifichiamo di aver attivato le impostazioni necessarie per la rete:
Device Drivers --->
[*] Network device support --->
Universal TUN/TAP device driver support
Networking support --->
Networking options --->
<*> 802.1d Ethernet Bridging
<*> 802.1Q VLAN Support
Networking options --->
[*] Network packet filtering framework (Netfilter) --->
Core Netfilter Configuration --->
<*> Netfilter connection tracking support
-*- Netfilter Xtables support (required for ip_tables)
<*> "state" match support
IP: Netfilter Configuration --->
<*> IPv4 connection tracking support (required for NAT)
Attiviamo tutti i moduli retalivi ad IPTables, quindi procediamo alla ricompilazione del kernel con:
make && make modules_install && make install
e riavviamo il server.
Installazione dei pacchetti per OpenNebula
Per dialogare con OpenNebula, è necessario installare dei pacchetti aggiuntivi:
echo "app-emulation/libvirt qemu udev" >> /etc/portage/package.use emerge ruby libvirt sudo dnsmasq virtinst cyrus-sasl dmidecode
Ora andiamo ad aggiungere l’user “oneadmin” e i gruppi “cloud” e “libvirt”:
groupadd libvirt groupadd --gid 1001 cloud useradd --uid 1001 -g cloud -d /srv/cloud/one -s /bin/bash oneadmin usermod -a -G libvirt oneadmin
Quindi modifichiamo il file /etc/libvirt/libvirt.conf in modo da consentire al gruppo libvirt a cui appartiene l’utente oneadmin di usare il demone via socket:
/etc/libvirt/libvirt.conf listen_tls = 0 listen_tcp = 1 unix_sock_group = "libvirt" unix_sock_ro_perms = "0777" unix_sock_rw_perms = "0770" unix_sock_dir = "/var/run/libvirt"
Ora modifichiamo il file /etc/conf.d/libvirtd
/etc/conf.d/libvirtd LIBVIRTD_OPTS="--listen" LIBVIRTD_KVM_SHUTDOWN_MAXWAIT="100"
e avviamo il demone:
rc-update add libvirtd default /etc/init.d/libvirtd start
Ricordiamoci infine di montare la directory di rete /srv/cloud/one, che normalmente è esportata tramite NFS e di aggiungere l’host all’interno del cloud controller con:
onehost create host01 im_kvm vmm_kvm tm_nfs





