## libvirt

La libreria libvirt è utilizzata per interfacciarsi con differenti tecnologie di virtualizzazione. Prima di iniziare a utilizzare libvirt è utile accertarsi che il proprio hardware supporti le estensioni di virtualizzazione necessarie per KVM. In un terminale, digitare quanto segue:

     egrep '(vmx|svm)' /proc/cpuinfo

Se non viene stampato nulla, la CPU non supporta la virtualizzazione.

Sulla maggior parte dei computer i cui processori supportano la virtualizzazione, è necessario attivare un'opzione nel bios per poterla abilitare. Il metodo precedentemente descritto non mostra lo stato della sua attivazione.

### Rete virtuale

Esistono diversi modi per consentire accesso alla rete esterna a una macchina virtuale. La configurazione di rete predefinita è usermode, che utilizza il protocollo SLIRP e il traffico è passato attraverso l'interfaccia dell'host verso la rete esterna.

Per abilitare accesso diretto agli host ai servizi sulle macchine virtuali, è necessario configurare un bridge. Questo consente alle interfacce virtuali di connettersi alla rete esterna attraverso l'interfaccia fisica, facendole apparire come host normali. Per configurare un'interfaccia "bridge", modificare il file `/etc/network/interfaces` e commentare o sostituire la configurazione esistente con:

    auto lo
    iface lo inet loopback

    auto br0
    iface br0 inet static
            address 192.168.0.10
            network 192.168.0.0
            netmask 255.255.255.0
            broadcast 192.168.0.255
            gateway 192.168.0.1
            bridge_ports eth0
            bridge_fd 9
            bridge_hello 2
            bridge_maxage 12
            bridge_stp off

Inserire i valori appropriati per la propria interfaccia di rete.

Riavviare la rete; le macchine virtuali gestite da libvirt appariranno nella rate come degli host fisici:

    sudo /etc/init.d/networking restart

Se si sta configurando un'interfaccia "bridge" usando la Ubuntu Desktop Edition oppure se dhcdbd è installato, il demone dhcdbd deve essere fermato e disabilitato.

Dopo aver configurato il "bridge" in `/etc/network/interfaces`, arrestare dhcdbd:

    sudo /etc/init.d/dhcdbd stop

Per fare in modo che non venga lanciato all'avvio, digitare:

    sudo update-rc.d -f dhcdbd remove

### Installazione

Per installare i pacchetti necessari, da un terminale digitare:

    sudo apt-get install kvm libvirt-bin

Dopo aver installato libvirt-bin, l'utente usato per la gestione delle macchine virtuali deve essere aggiunto al gruppo libvirtd. In questo modo, all'utente è garantito accesso alle configurazioni avanzate di rete.

In un terminale digitare:

    sudo adduser $USERNAME libvirtd

Se l'utente scelto è quello corrente, è necessario terminare la sessione e ri-accedervi affinché le modifiche abbiano effetto.

È ora possibile installare un sistema operativo ospite. La procedura di installazione di una macchina virtuale è la stessa di un sistema operativo normale ed è quindi necessario automatizzare la procedura oppure avere una tastiera e uno schermo collegati al computer.

Nel caso delle macchine virtuali, un'interfaccia grafica è analoga all'uso di una tastiera e di un mouse. Invece di installare un'interfaccia grafica, è possibile usare virt-viewer per connettersi alla console di una macchina virtuale via VNC. Per maggiori informazioni, consultare la la sezione chiamata «Visualizzatore di macchine virtuali».

Ci sono diverse strade da poter percorrere per automatizzare l'installazione di Ubuntu, utilizzando, per esempio, "preseeds", "kickstart", ecc... Per maggiori informazioni fare riferimento alla Ubuntu Installation Guide.

Un altro modo per installare una macchina virtuale Ubuntu consiste nell'usare ubuntu-vm-builder, che consente di impostare partizioni avanzate, eseguire script post installazione, ecc... Per maggiori informazioni, consultare la la sezione chiamata «ubuntu-vm-builder».

### virt-install

virt-installfa parte del pacchetto python-virtinst. Per installarlo, in un terminale, digitare:

    sudo apt-get install python-virtinst

Durante l'uso di virt-install sono disponibili molte azioni, per esempio:

    sudo virt-install -n web_devel -r 256 -f web_devel.img -s 4 -c jeos.iso --accelerate --vnc --noautoconsole

- -n web_devel: il nome della nuova macchine virtuale usato in questo esempio sarà web_devel.

- -r 256: specifica la quantità di memoria che la macchina virtuale userà.

- -f web_devel.img: indica il percorso al disco virtuale che può essere un file, una partizione o un volume logico. In questo esempio è un file chiamato `web_devel.img`.

- -s 4: la dimensione del disco virtuale.

- -c jeos.iso: il file usato come CD-ROM virtuale. Il file può essere un file ISO o il percorso al device del CD-ROM nell'host.

- --accelerate: abilita letecnologie di accelerazione nel kernel.

- --vnc: esporta la console virtuale usando VNC.

- --noautoconsole: non si collegherà automaticamente alla console della macchina virtuale.

Una volta lanciata virt-install è possibile collegarsi alla console della macchina virtuale utilizzando, localmente, un'interfaccia grafica oppure l'utilità virt-viewer.

### virt-clone

L'applicazione virt-clone può essere usata per copiare una macchina virtuale in un'altra, per esempio:

    sudo virt-clone -o web_devel -n database_devel -f /path/to/database_devel.img --connect=qemu:///system

- -o: macchina virtuale originale.

- -n: nome della nuova macchina virtuale.

- -f: percorso al file, volume logico o partizione da usare per la nuova macchina virtuale.

- --connect: specifica a quale hypervisor collegarsi.

Usare anche le opzioni -d o --debug per risolvere i problemi che potrebbero verificarsi con virt-clone.

Sostituire web_devel e database_devel con i nomi delle macchine virtuali appropriati.

### Gestione macchina virtuale

#### virsh

Sono disponibili diverse utilità per la gestione delle macchine virtuali e di libvirt. L'utilità virsh può essere utilizzata dalla riga di comando. Alcuni esempi:

- Per elencare le macchine virtuali in esecuzione:

      virsh -c qemu:///system list

- Per avviare una macchina virtuale:

      virsh -c qemu:///system start web_devel

- Similmente, per avviare una macchina virtuale in fase di avvio:

      virsh -c qemu:///system autostart web_devel

- Riavviare una macchina virtuale con:

      virsh -c qemu:///system reboot web_devel

- Lo stato di una macchina virtuale può essere salvato in un file per poterlo ripristinare dopo. Il seguente comando salva lo stato della macchina virtuale in un file nominato in base alla data.

      virsh -c qemu:///system save web_devel web_devel-022708.state

  Una volta salvata, la macchina virtuale non sarà più in esecuzione.

- Per ripristinare una macchina virtuale:

      virsh -c qemu:///system restore web_devel-022708.state

- Per arrestare una macchina virtuale:

      virsh -c qemu:///system shutdown web_devel

- Per montare un CD-ROM in una macchina virtuale, digitare:

      virsh -c qemu:///system attach-disk web_devel /dev/cdrom /media/cdrom

Nell'esempio precedente, sostituire web_devel con il nome della macchina virtuale appropriata e `web_devel-022708.state` con un nome file descrittivo.

#### Gestore macchina virtuale

Il pacchetto virt-manager contiene un'utilità grafica per gestire le macchie virtuali locali e remote. Per installare virt-manager digitare:

    sudo apt-get install virt-manager

Dato che virt-manager richiede un'interfaccia grafica (GUI), è raccomandato di installarlo su una workstation o una postazione di prova al posto di un server in produzione. Per connettersi al servizio libvirt locale:

    virt-manager -c qemu:///system

È possibile collegarsi al servizio libvirt in esecuzione su un altro host digitando, in un terminale:

    virt-manager -c qemu+ssh://virtnode1.mydomain.com/system

L'esempio precedente assume che la connessione SSH tra il sistema di gestione e virtnode1.mydomain.com sia già configurata e utilizzi le chiavi SSH per l'autenticazione. Le chiavi SSH sono necessarie perché libvirt invia il prompt password a un altro processo. Per maggiori informazioni sulla configurazione di SSH, consultare la la sezione chiamata «Server OpenSSH»

### Visualizzatore di macchine virtuali

L'applicazione virt-viewer consente di collegarsi alla console di una macchina virtuale. virt-viewer non richiede un'interfaccia grafica per interagire con la macchina virtuale.

Per installare virt-viewer, da un terminale digitare:

    sudo apt-get install virt-viewer

Una volta installata e in esecuzione, è possibile connettersi alla console della macchina virtuale digitando:

    virt-viewer qemu:///system web_devel

Analogamente a virt-manager, virt-viewer può collegarsi a un host remoto utilizzando SSH con chiave di autenticazione:

    virt-viewer -c qemu+ssh://virtnode1.miodominio.it/system web_devel

Assicurarsi di sostituire web_devel con il nome corretto della macchina virtuale.

Se configurato per usare un'interfaccia di rete bridged, è possibile configurare l'accesso SSH alla macchina virtuale. Per maggiori informazioni, consultare la sezione chiamata «Server OpenSSH» e la sezione chiamata «Rete virtuale».

### Risorse

- Per maggiori informazioni, consultare il sito web di KVM.

- Per maggiori informazioni su libvirt, consultare il sito web di libvirt

- Il sito di Virtual Machine Manager dispone di ulteriori informazioni riguardo lo sviluppo di virt-manager.

- È anche possibile passare nel canale IRC #ubuntu-virt su freenode per discutere delle tecnologie di virtualizzazione in Ubuntu.

Capitolo 17. Virtualizzazione |  | ubuntu-vm-builder