Installare KVM su Debian

Da Guide@Debianizzati.Org.

Debian-swirl.pngVersioni compatibili

Tutte le versioni supportate di Debian

Indice

Prerequisiti

Kernel-based Virtual Machine (KVM) è un'infrastruttura di virtualizzazione del kernel Linux. KVM attualmente supporta una completa virtualizzazione usando Intel VT o AMD-V.
Per utilizzare KVM è necessario avere un processore dotato di estensioni per la virtualizzazione; verifichiamo quindi che siano presenti con il seguente comando:

# egrep -c '(vmx|svm)' /proc/cpuinfo

Se il comando restituisce "1" o un numero maggiore le estensioni sono state rilevate; se restituisce "0", significa che il vostro processore non dispone di tali estensioni e dovrete quindi utilizzare una soluzione di virtualizzazione differente, come ad esempio Xen o VirtualBox.
Nel caso vogliate creare VirtualMachine con un quantitativo di RAM superiore ai 2 GB, è necessario avere un processore con architettura X86-64. Anche in questo caso possiamo estrarre questa informazione dal file /proc/cpuinfo:

# egrep -c ' lm ' /proc/cpuinfo

Anche in questo caso, se il comando restituisce un numero diverso da "0", il vostro processore potrà eseguire software a 64 bit.
L’ultima componente in gioco è il kernel del vostro sistema, che deve essere compilato con il supporto ai 64 bit; per verificarlo è sufficiente lanciare:

# uname -m
x86_64

Installazione

A causa di alcuni bug presenti nel pacchetto libvirt di Wheezy è consigliabile installare una versione più aggiornata dal repository backports (assicurarsi quindi che il repository backport sia presente nel file /etc/apt/sources.list):

# apt-get -t wheezy-backports install qemu-kvm virtinst libvirt-bin bridge-utils screen debconf acpi-support acpid

Diamo la possibilità all'utente con il quale siamo loggati (root) di gestire le macchine virtuali, aggiungendolo ai gruppi corretti:

# adduser `id -un` libvirt
# adduser `id -un` kvm

ed eventualmente estendiamo questa possibilità anche a uno o più altri utenti:

# adduser ferdy libvirt

Quindi verifichiamo che l'installazione si sia conclusa correttamente:

# virsh -c qemu:///system list

Dovremmo ottenere:

Id Name                 State
----------------------------------
 
#

Il tool utilizzato, virsh, è una shell interattiva che permette di gestire il proprio ambiente di virtualizzazione da linea di comando.

Configurazione

Come prima cosa avviamo il network di default di libvirt:

# virsh net-start default && virsh net-autostart default

Per fare in modo che le virtual machine possano connettersi alla stessa rete presso cui il server è collegato, esattamente come se fossero dei normali PC, sarà necessario configurare bridge (per approfondimenti si veda la guida: Ethernet Bridging: "trasformare" un computer in un hub/switch) e abilitare l'IP forward per dare accesso a internet. Per prima cosa installiamo i tool necessari:

# apt-get install bridge-utils

Quindi modifichiamo la nostra configurazione di rete in questa maniera:

# nano /etc/network/interfaces
####################
# PRIMA DEL BRIDGE
####################
#auto eth0
#iface eth0 inet static
#        address 192.168.0.100
#        netmask 255.255.255.0
#        network 192.168.0.0
#        broadcast 192.168.0.255
#        gateway 192.168.0.1

##################
# DOPO IL BRIDGE
##################
auto eth0
iface eth0 inet manual

auto br0
iface br0 inet static
        address 192.168.0.100
        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

E infine abilitiamo l'IP Forward modificando il file:

# nano /etc/sysctl.conf

come segue:

net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0 

Carichiamo le modifiche:

sysctl -p /etc/sysctl.conf

Per fare in modo che le modifiche appena apportare rimangano anche dopo un riavvio dobbiamo, a causa di un bug segnalato su Ubuntu ma presente anche in Debian Squeeze, apportare i seguenti cambiamenti al file /etc/rc.local, appena prima della riga exit 0:

/sbin/sysctl -p /etc/sysctl.conf

Riavviamo infine i servizi di rete:

# /etc/init.d/networking restart

Creazione di una macchina virtuale

Se il nostro server non ha installata un'interfaccia grafica come Gnome, KDE, XFce o altri, il modo più semplice per gestire le nostre macchine virtuali è quello di utilizzare una workstation Debian GNU/Linux opportunamente configurata.

Configurazione della workstation per la gestione di KVM

Installiamo prima di tutto un'interfaccia grafica per la gestione delle macchine virtuali:

# apt-get install virt-manager ssh-askpass

Quindi aggiungiamo il nostro utente al gruppo di gestione delle macchine virtuali:

# adduser ferdy libvirt

La connessione della workstation al nostro server KVM verrà effettuata in forma sicura attraverso il protocollo SSH. Dobbiamo quindi verificare che SSH sia configurato correttamente sul server e sulla workstation, ad esempio seguendo le guide del nostro wiki:

Una volta verificato il corretto funzionamento di SSH, possiamo aggiungere una connessione dalla nostra workstation al demone libvirt del server:

$ virt-manager -c qemu+ssh://ferdy@192.168.1.1:22222/system

dove:

Creazione di una macchina virtuale

Per avviare la creazione di una nuova macchina virtuale abbiamo due strade alternative:

  1. utilizzare l'interfaccia grafica di Virtual Machine Manager appena installata nella nostra workstation di appoggio
  2. utilizzare la shell direttamente dal server

L'installazione tramite Virtual Machine Manager è semplice e non richiede spiegazione: è sufficiente avviare il programma e seguire le schermate del Wizard di installazione.

Tramite linea di comando è possibile creare una nuova macchina virtuale con le seguenti istruzioni:

# virt-install --connect qemu:///system -n virtualmachine -r 2048 --vcpus=2 --disk path=/var/lib/libvirt/images/virtualmachine.img,size=12 -c /dev/cdrom --vnc --noautoconsole --os-type linux --os-variant debiansqueeze --accelerate --network=bridge:br0 --hvm
# virt-install --connect qemu:///system -n virtualmachine -r 2048 --vcpus=2 --disk path=/var/lib/libvirt/images/virtualmachine.img,size=12 -c /var/lib/libvirt/images/debian-6.0.0-amd64-netinst.iso --vnc --noautoconsole --os-type linux --os-variant debiansqueeze --accelerate --network=bridge:br0 --hvm

A questo punto è possibile collegarci via VNC al server, oppure utilizzare il tool Virtual Machine Manager dalla nostra workstation, e completare l'installazione della macchina virtuale.

Le opzioni hanno il seguente significato:

Una volta completata l'installazione, se la nostra macchina virtuale ha sistema operativo Microsoft Windows possiamo installare i driver dell'hardware virtuale, seguendo le istruzioni presenti all'indirizzo: http://alt.fedoraproject.org/pub/alt/virtio-win/latest/images/bin/

Con macchine virtuali Linux è possibile che si verifichino dei freeze di sistema, come descritto nel Bugzilla di Red Hat:

La soluzione consiste nel modificare:

# nano /etc/default/grub
# GRUB_CMDLINE_LINUX=""
GRUB_CMDLINE_LINUX="clocksource=acpi_pm"

aggiornare la configurazione:

# update-grub

e riavviare.

Amministrazione delle macchine virtuali

La shell interattiva virsh è il tool principale per la gestione delle macchine virtuali. Per lanciare virsh sarà necessario lanciare dal server il comando:

# virsh --connect qemu:///system

Si presenterà quindi una vera e propria shell interattiva:

Welcome to virsh, the virtualization interactive terminal.
 
Type:  'help' for help with commands
       'quit' to quit
 
virsh #

Per ottenere la lista dei comandi disponibili è sufficiente:

virsh # help
Commands:
 
    help            print help
    attach-device   attach device from an XML file
    attach-disk     attach disk device
    attach-interface attach network interface
    autostart       autostart a domain
    capabilities    capabilities
    cd              change the current directory
    connect         (re)connect to hypervisor
    ....
    version         show version
    vncdisplay      vnc display
    snapshot-create Create a snapshot
    snapshot-current Get the current snapshot
    snapshot-delete Delete a domain snapshot
    snapshot-dumpxml Dump XML for a domain snapshot
    snapshot-list   List snapshots for a domain
    snapshot-revert Revert a domain to a snapshot

I comandi disponibili per virsh sono moltissimi e permettono di gestire qualsiasi aspetto di una macchina virtuale, dal suo stato, alla gestione dei dischi virtuali, fino alla gestione delle reti interne.
I comandi sicuramente più utilizzati sono quelli relativi alla gestione di un guest, cioè list, start, shutdown, reboot, destroy, suspend e resume.

Menzione particolare meritano anche i comandi save e restore.

Sitografia

Mia mamma usa Linux




Guida scritta da: Ferdybassi

Swirl-auth16.png Debianized 16%

Verificata da:
Estesa da:

Verificare ed estendere la guida | Cos'è una guida Debianized

Strumenti personali
Namespace
Varianti
Azioni
Navigazione
Risorse
Strumenti