Ubuntu 8.10: KVM From Source + Bridged Network HowTo

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:
Servono GCC, librerie e pacchetti devel di di zlib, SDL, alsa, gnutils, sorgenti del kernel corrente e del necessario per far funzionare la rete:
Rimuoviamo l'eventuale pacchetto kvm di Ubuntu che fornisce lo user space, rimuoveremo dopo il modulo del kernel:
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:
/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# 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:
#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
* 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):
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:
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
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:
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.
![]()
Votes: 2 - Rate: 5.00
Viewed 8729 times




MRG wrote:
1) nei prerequisiti è possibile installare il pacchetto linux-headers-generic anzichè il pacchetto linux-headers-2.6.XXX (dove XXX è la versione deol kernel in uso).
2) i kvm-guest-drivers sono ormai necessari solo per Windows e se si sceglie di utilizzare i driver paravirtualizzati, scelta comunque non obligatoria, per linux sono inclusi nel kernel dalla release 2.6.25 in poi. Per altri sistemi operativi (come ad esempio SUN Solaris) non esistono.
3) anche se è una cosa che faccio anche io non è obbligatorio rimuovere i moduli originali in quanto quando si esegue make install vengono rinominati in *.orig. Diciamo che è una delle opzioni.
4) non mi garba molto annullare il wizard riguardante l'installazione della vga...qua bisognerebbe approfondire l'installazione dei driver bochs.
Nel complesso ottimo, volevo scrivere qualcosa di simile però mi hai preceduto, vorrà dire che ti linkerò dal mio blog!!!