Piaciuto il post sulla conversione vdi/qcow2?
No, a giudicare dai commenti. Perfetto: ecco allora un howto per la messa in funzione di KVM su Ubuntu 8.10 dai sorgenti, cioè compilando e senza usare il pacchetto ufficiale della distribuzione, e con rete bridged, ovvero dando alla macchina virtuale un proprio IP indipendente dall'host. Useremo Windows XP come sistema guest.
Di letteratura sull'argomento ce n'è già tanta, ma garantisco che questa guida è quantomeno ridotta all'essenziale, oltre che efficace e up-to-date.

Il NokOnline Steering Commettee ritiene che l'utilizzo di un software "cutting edge" come KVM abbia senso solo a patto che se ne insegua sempre l'ultima release, altrimenti si può ripiegare su piattaforme più solide e user-friendly, come VirtualBox. Al momento la versione più recente di KVM è la 81. Caso vuole che sia uscita proprio ieri, e sembra che io sia stato il primo a scaricarla. Non so se questa nota di colore possa interessare, e nemmeno se sia poi così affidabile, ma comunque qui c'è lo screenshot del repository di SourceForge col suo bel counter illibato.
Abbandoniamo allora il pacchetto di Ubuntu (corrispondente alla versione di KVM numero 72) e buttiamoci sulla tastiera:

Prerequisiti
Verifichiamo di avere una CPU che supporti le istruzioni per la virtualizzazione intel-vt o amd-v:

root@spitfire# egrep '(vmx|svm)' --color=always /proc/cpuinfo
Si consiglia di avere sulla macchina un kernel x86_64, anche se la cosa non è indispensabile. Comunque sia la versione di qemu x86 customizzata da KVM è a 64 bit.
Servono GCC, librerie e pacchetti devel di di zlib, SDL, alsa, gnutils, sorgenti del kernel corrente e del necessario per far funzionare la rete:
apt-get install gcc libsdl1.2-dev zlib1g-dev libasound2-dev linux-headers-2.6.XXX pkg-config libgnutls-dev git gawk uml-utilities bridge-utils
Dove ovviamente XXX è la versione specifica del vostro kernel.
Rimuoviamo l'eventuale pacchetto kvm di Ubuntu che fornisce lo user space, rimuoveremo dopo il modulo del kernel:
root@spitfire# apt-get remove --purge kvm

Download
Tutto ciò che serve si trova su http://sourceforge.net/project/showfiles.php?group_id=180599. Prendiamo kvm-81.tar.gz e i kvm-guest-drivers corrispondenti al sistema operativo che installeremo nella VM. Noi per esempio prenderemo kvm-guest-drivers-windows-2.zip.

Compilazione e installazione
Mettiamo il tar di kvm in una directory consona, ad esempio /usr/src o /usr/local/src, entriamoci e da root:

root@spitfire# tar -xzf kvm-81.tar.gz root@spitfire# cd kvm-81
Configuriamo e compiliamo il modulo:
root@spitfire# ./configure --prefix=/usr/local/kvm root@spitfire# make; make install
Se tutto va bene make eseguirà anche un depmod e a noi resterà solo da eliminare il modulo originale presente nella "dotazione standard" dei kernel patchati da Ubuntu:
root@spitfire# find /lib/modules -name kvm
/lib/modules/2.6.XXX-generic/kernel/arch/x86/kvm
root@spitfire# rm /lib/modules/2.6.XXX-generic/kernel/arch/x86/kvm

 

Verifica
I moduli installati sono in tutto 3: kvm, kvm-intel e kvm-amd, il primo dei quali è usato dai secondi due. Modprobbate a seconda della vostra architettura. Il mio MacBook "late 2008" ha un Core 2 Duo:
root@spitfire# modprobe kvm-intel
root@spitfire# modinfo kvm-intel
filename: /lib/modules/2.6.27-9-generic/extra/kvm-intel.ko
license: GPL
author: Qumranet
version: kvm-81
srcversion: C75B0BF65A8D659137C2824
depends: kvm
vermagic: 2.6.27-9-generic SMP mod_unload modversions
parm: bypass_guest_pf:bool
parm: enable_vpid:bool
parm: flexpriority_enabled:bool
parm: enable_ept:bool
parm: emulate_invalid_guest_state:bool

Creazione del bridge
Prima di avviare KVM prepariamo il bridge. Io ho optato, come molto spesso si fa, per una configurazione "al volo" che crea e disfa il bridge all'avvio e alla chiusura di qemu. Editiamo due file:
root@spitfire# cat /etc/qemu-ifup
#network bridge setup
/sbin/ifconfig eth0 0.0.0.0 promisc up
/sbin/ifconfig $1 up
/usr/sbin/brctl addbr br0
/usr/sbin/brctl addif br0 eth0
/usr/sbin/brctl addif br0 $1
/sbin/ifconfig br0 up
/sbin/dhclient br0

root@spitfire# cat /etc/qemu-ifdown
#!/bin/bash
#network bridge setdown
/sbin/ifconfig eth0 down
/sbin/ifconfig $1 down
/sbin/ifconfig br0 down
/usr/sbin/brctl delif br0 eth0
/usr/sbin/brctl delif br0 $1
/usr/sbin/brctl delbr br0
/sbin/dhclient eth0
* $1 è l'interfaccia tap che kvm passa a qemu allo startup. Da non toccare (è un argomento sulla linea di comando).
* eth0 è l'interfaccia esterna che usate normalmente per uscire sulla LAN. Da cambiare se la vostra è diversa.
* br0 è il nome del bridge. Da modificare se vi va.
Una volta installato un sistema operativo guest (nel nostro esempio sempre XP) ricordatevi che la configurazione di rete andrà fatta come se si trattasse di una macchina nella stessa sottorete dell'host, quindi con diverso IP, ma stesso default gateway, dns, ecc.

Creazione disco virtuale

Lo facciamo con qemu, da 10GB, in formato ad espansione dinamica qcow2. Il formato qcow è meno figo e lasciato come opzione solo per compatibilità. vmdk è il formato di VMWare. raw è il più portabile ma lento e full-size (rif. man qemu-img):
root@spitfire# qemu-img create -f qcow2 /var/vm/winxp.img 10G

Primo avvio di KVM
A questo punto creiamo un comando o un alias per lanciare velocemente KVM. Se avete installato un altro virtualizzatore che fa uso di moduli del kernel, come VirtualBox, dovete ricordarvi che essi vanno in conflitto con quello di kvm se usati in comtemporanea. Per ovviare a qualsiasi inconveniente o distrazione possiamo creare il seguente script:
root@spitfire:~# cat /usr/local/bin/kvm-start
sudo rmmod vboxdrv
sudo modprobe kvm-intel
sudo /usr/local/kvm/bin/qemu-system-x86_64 -drive file=/var/vm/winxp.qcow2,if=ide -drive file=/dev/cdrom,if=ide,media=cdrom,boot=on -net nic -net tap -m 512 -k it -localtime
Mettete il CD di Windows (o altro OS) nel lettore e gotetevi il velocissimo KVM. Usate ctrl-alt per sganciare il mouse e ctr-alt-f per andare a pieno schermo.

Tuning
A sistema installato possiamo migliorare le prestazioni della grafica e della rete, quest'ultima coi driver paravirtualizzati (rif. www.mrgcorner.it per una guida con screenshot) contenuti nello zip delle kvm-guest-options scaricato in precedenza. Lo copiamo e scompattiamo da qualche parte nel sistema guest tramite share di rete, oppure lo ri-scarichiamo dal suo interno, quindi facciamo shutdown. Modifichiamo lo script di avvio:
root@spitfire:~# cat /usr/local/bin/kvm-start
sudo rmmod vboxdrv
sudo modprobe kvm-intel
sudo /usr/local/kvm/bin/qemu-system-x86_64 -drive file=/home/noko/winxp.qcow2,if=ide,boot=on -drive file=/dev/cdrom,if=ide,media=cdrom -net nic,model=virtio -net tap -m 512 -k it -localtime -vga std

Nel caso di Windows XP al riavvio ci verranno chiesti i driver per una serie di nuovi dispositivi, che noi andremo a fornirgli. Per la scheda di rete puntiamo alla cartella delle kvm-guest-options, per la scheda VGA annulliamo semplicemente il wizard.

Godetevi le prestazioni superiori della rete e la grafica ad alta risoluzione e in 16/9, a fronte tuttavia di un carico maggiore per la CPU.