Introduzione

QEMU è uno strumento a codice aperto per emulare e virtualizzare diversi sistemi e architetture.
KVM (Kernel Virtual Machine) è un modulo del kernel linux che permette a programmi in spazio utente di sfruttare il supporto hardware alla virtualizzazione presente in quasi tutti i moderni processori.
QEMU è progettato per funzionare anche senza appoggiarsi al modulo KVM, tuttavia è evidente come l'utilizzo dello stesso sia consigliato ogni volta che è possibile visti i vantaggi prestazionali che esso garantisce. In generale l'utilizzo di KVM è possibile quando l'architettura (x86 o x64) del sistema host è uguale a quella del sistema guest.

Installazione

Il primo passo è verificare che la propria CPU supporti effettivamente l'accelerazione hardware per la virtualizzazione (Intel VT o AMD-V):

egrep '(vmx|svm)' --color=always /proc/cpuinfo

Se negli elenchi compaio le diciture vmx e/o svm allora il processore è dotato delle suddette istruzioni hardware.
KVM è nativamente incluso nel kernel dalla versione 2.6.20, pertanto è necessario installare quanto segue:

aptitude install qemu qemu-kvm bridge-utils

Il pacchetto bridge-utils non è in realtà strettamente necessario se si intende semplicemente creare una rete virtuale per il sistema guest.

Utilizzo

Il primo passo è creare il disco virtuale in cui installare il sistema guest:

$ qemu-img create -f qcow2 <nome disco virtuale>.img <dimensione in GB>G

Il disco può essere creato in una qualsiasi posizione accessibile all'utente. A questo punto se si installa in locale è possibile procedere all'installazione del sistema operativo digitando un comando di questo tipo:

$ qemu -m 768 -hda /percorso/disco_virtuale.img -cdrom /percorso/immagine_SO.iso -vga std -enable-kvm -localtime -net nic,vlan=0,macaddr=XX:XX:XX:XX:XX:XX -net user,vlan=0 -usb -usbdevice tablet
  • -m indica il massimo quantitativo di memoria RAM in [MB] utilizzabile dal sistema guest; in generale tale valore deve essere inferiore alla metà del totale disponibile.
  • -hda definisce il percorso del disco virtuale in cui installare il sistema guest.
  • -cdrom definisce il percorso dell'immagine iso del sistema operativo da installare; tale opzione viene in generale usata per passare immagini che il sistema guest vedrà come dischi ottici veri e propri.
  • -vga std permette di usare risoluzioni dello schermo diverse da quelle standard. Omettendo questo parametro viene sempre presentata una finestra sdl in cui mostrare l'output grafico della macchina, ma le risoluzioni disponibili sono poche; naturalmente in fase d'installazione le risoluzioni disponibili sono comunque limitate perché è lo stesso installer a limitarle.
  • -enable-kvm abilità l'utilizzo di KVM.
  • -net nic,vlan=0,macaddr=XX:XX:XX:XX:XX:XX e -net user,vlan=0 sono parametri che permettono di configurare un semplice dispositivo di rete virtuale; il parametro macaddr è arbitrario, basta che sia di formato corretto (sei coppie di cifre esadecimali).
  • -usb attiva il controller usb.
  • -usbdevice tablet permette di evitare la seccatura di dover catturare/rilasciare il puntatore del mouse ogni volta che si seleziona/deseleziona la macchina virtuale.

Qualora si volesse avviare un installazione su una certa macchina da remoto, sarebbe sufficiente aggiungere alla precedente riga di comando l'opzione -vnc host:XY, dove host è l'IP o l'alias della macchina su cui effettuare l'installazione e XY il numero da aggiungere al valore base della porta, cioè 5900; ad esempio -vnc :10 permette la connessione remota da qualunque IP attraverso la porta 5910.
In sintesi l'opzione -vnc non permette la creazione di una finestra sdl come di norma, ma reindirizza il flusso video ad un'istanza di VNC; è quindi necessario l'uso di un client VNC, come vinagre, per connettersi alla macchina su cui è stata avviata la macchina virtuale e vedere l'output grafico della stessa.