Document-page-setup.png Attenzione: questo articolo è ancora incompleto e in fase di scrittura da parte del suo autore.

Sentitevi liberi di contribuire, proponendo modifiche alla guida tramite l'apposita pagina di discussione, in modo da non interferire con il lavoro portato avanti sulla voce. Per altre informazioni si rimanda al template.


Appunti per una guida su come installare, configurare e gestire KVM.

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

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:

  • ferdy è il nome utente
  • 192.168.1.1 è l'indirizzo IP del server
  • 22222 è la porta su cui è in ascolto SSH

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:

  • Utilizzando un CD-Rom come sorgente di installazione
# 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
  • Utilizzando un'immagine ISO come sorgente di installazione:
# 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:

  • -n: nome della virtual machine
  • -r: dimensione in MB della RAM
  • --vcpus: numero di CPU
  • --disk: il percorso sul server dove verrà salvato l'hard disk virtuale
  • -c: il percorso della sorgente di installazione
  • --vnc: abilitiamo il controllo tramite VNC
  • --os-type: le opzioni sono:
    • linux
    • windows
    • bsd
  • --os-variant: permette di specificare la versione del sistema operativo. Ad esempio:
    • win7 : Microsoft Windows 7
    • win8 : Microsoft Windows 8
    • vista : Microsoft Windows Vista
    • winxp64 : Microsoft Windows XP (x86_64)
    • winxp : Microsoft Windows XP
    • win2k8 : Microsoft Windows Server 2008
    • win2k3 : Microsoft Windows Server 2003
    • freebsd8 : FreeBSD 8.x
    • generic : Generic
    • debiansqueeze : Debian Squeeze
    • debianwheezy : Debian Wheezy

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.


Sul server:

# virsh list
# apt-get install acpi-support acpid
# virsh start my-guest-vm
# virsh shutdown my-guest-vm
# virsh destroy my-guest-vm

Per arrestare una VM Windows senza essere loggati:

HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\Shutdownwithoutlogon

0=disabled
1=enabled

Memo: http://www.miamammausalinux.org/2011/06/implementazione-di-un-server-di-virtualizzazione-con-kvm/




Guida scritta da: Ferdybassi   Debianized 20%
Estesa da:
Verificata da:

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