Installare KVM su Debian: differenze tra le versioni
m (rimosso collegamento obsoleto) |
|||
(6 versioni intermedie di 3 utenti non mostrate) | |||
Riga 1: | Riga 1: | ||
{{ | {{Versioni compatibili|Wheezy|Jessie}} | ||
== Prerequisiti == | == Prerequisiti == | ||
Kernel-based Virtual Machine ([http://www.linux-kvm.org KVM]) è un'infrastruttura di virtualizzazione del kernel Linux. KVM attualmente supporta una completa virtualizzazione usando Intel VT o AMD-V. | Kernel-based Virtual Machine ([http://www.linux-kvm.org KVM]) è un'infrastruttura di virtualizzazione del kernel Linux. KVM attualmente supporta una completa virtualizzazione usando Intel VT o AMD-V. | ||
Riga 24: | Riga 22: | ||
== Installazione == | == Installazione == | ||
=== Debian 7 ([[Wheezy]]) === | |||
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 Backports|il repository backport]] sia presente nel file <code>/etc/apt/sources.list</code>): | 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 Backports|il repository backport]] sia presente nel file <code>/etc/apt/sources.list</code>): | ||
<pre> | <pre> | ||
# apt-get -t wheezy-backports install qemu-kvm virtinst libvirt-bin bridge-utils screen debconf | # apt-get -t wheezy-backports install qemu-kvm virtinst libvirt-bin bridge-utils screen debconf acpi-support acpid | ||
</pre> | |||
=== Debian 8 ([[Jessie]]) === | |||
È sufficiente: | |||
<pre> | |||
# apt-get install qemu-kvm virtinst libvirt-bin bridge-utils screen debconf acpi-support acpid | |||
</pre> | </pre> | ||
== Preparazione del sistema == | |||
Diamo la possibilità all'utente con il quale siamo loggati (root) di gestire le macchine virtuali, aggiungendolo ai gruppi corretti: | Diamo la possibilità all'utente con il quale siamo loggati (root) di gestire le macchine virtuali, aggiungendolo ai gruppi corretti: | ||
<pre> | <pre> | ||
# adduser | # adduser $(id -un) libvirt | ||
# adduser | # adduser $(id -un) kvm | ||
</pre> | </pre> | ||
ed eventualmente estendiamo questa possibilità anche a uno o più altri utenti: | ed eventualmente estendiamo questa possibilità anche a uno o più altri utenti: | ||
Riga 116: | Riga 124: | ||
Riavviamo infine i servizi di rete: | Riavviamo infine i servizi di rete: | ||
<pre> | <pre> | ||
# | # service networking restart | ||
</pre> | </pre> | ||
Riga 131: | Riga 139: | ||
# adduser ferdy libvirt | # adduser ferdy libvirt | ||
</pre> | </pre> | ||
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 | 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 la [[SSH | guida]] nel nostro wiki. | ||
Una volta verificato il corretto funzionamento di SSH, possiamo aggiungere una connessione dalla nostra workstation al demone libvirt del server: | Una volta verificato il corretto funzionamento di SSH, possiamo aggiungere una connessione dalla nostra workstation al demone libvirt del server: | ||
<pre> | <pre> | ||
Riga 207: | Riga 214: | ||
e riavviare. | 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: | |||
<pre> | |||
# virsh --connect qemu:///system | |||
</pre> | |||
Si presenterà quindi una vera e propria shell interattiva: | |||
<pre> | <pre> | ||
Welcome to virsh, the virtualization interactive terminal. | |||
Type: 'help' for help with commands | |||
'quit' to quit | |||
# | |||
virsh # | |||
</pre> | </pre> | ||
Per | Per ottenere la lista dei comandi disponibili è sufficiente: | ||
<pre> | <pre> | ||
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 | |||
</pre> | |||
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. | |||
<br/> | |||
I comandi sicuramente più utilizzati sono quelli relativi alla gestione di un guest, cioè ''list'', ''start'', ''shutdown'', ''reboot'', destroy, ''suspend'' e ''resume''. | |||
* ''start'' permette di avviare la virtual machine. In aggiunta, è utile citare il comando ''autostart'' che permette di comunicare a libvirt di avviare automaticamente le virtual machine all’avvio del sistema. | |||
* ''shutdown'' permette di inviare al sistema guest un segnale di shutdown, simulando ciò che accade sulle macchine fisiche quando viene premuto il tasto di accensione | |||
* ''reboot'' invia alla macchina virtuale il segnale di reboot che avvierà un processo di riavvio pulito del sistema. | |||
* ''destroy'' fa in modo che il processo della virtual machine venga ucciso. Dal punto di vista della virtual machine questo è l’equivalente di un blackout, la corrente viene interrotta bruscamente. Ovviamente come succede per le macchine reali, questo comando potrebbe creare inconsistenze sul filesystem del guest anche se ovviamente non causerà alcun danno reale all’hardware | |||
* ''suspend'' fa in modo che l’esecuzione della virtual machine venga interrotta. La ram rimarrà comunque occupata, ma la macchina virtuale non occuperà più alcuna risorsa relativa a CPU, HD e rete fino al resume. | |||
* ''resume'' permette di far uscire la virtual machine dallo stato di ibernazione attivato con suspend | |||
Menzione particolare meritano anche i comandi ''save'' e ''restore''. | |||
* ''Save'' richiede, oltre al nome della virtual machine anche un parametro aggiuntivo, cioè il filename dove salvare lo stato del sistema guest. Al contrario di suspend, questo comando permette di salvare tutto ciò che concerne la virtual machine (ram, registri del processore, interrupts, eccetera, eccetera…) in un file, e terminare il processo del sistema guest. Questo fa si che una Virtual Machine possa essere spostata completamente da un host all’altro senza che il sistema e le applicazioni al suo interno ne risentano minimamente. | |||
* ''Restore'', come la sua controparte richiede come parametro aggiuntivo il file da cui leggere lo stato della virtual machine da ripristinare. | |||
== Sitografia == | |||
[http://www.miamammausalinux.org/2011/06/implementazione-di-un-server-di-virtualizzazione-con-kvm/ Mia mamma usa Linux] | |||
{{Autori | {{Autori | ||
Riga 229: | Riga 271: | ||
}} | }} | ||
[[Categoria:Virtualizzazione | [[Categoria:Virtualizzazione]] |
Versione attuale delle 10:58, 26 set 2015
Attenzione. Questa guida è da considerarsi abbandonata, per via del tempo trascorso dall'ultima verifica.
Potrà essere resa obsoleta, previa segnalazione sul forum, se nessuno si propone per l'adozione. |
Versioni Compatibili Debian 7 "wheezy" Debian 8 "jessie" |
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
Debian 7 (Wheezy)
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
Debian 8 (Jessie)
È sufficiente:
# apt-get install qemu-kvm virtinst libvirt-bin bridge-utils screen debconf acpi-support acpid
Preparazione del sistema
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:
# service 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 la guida nel 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:
- utilizzare l'interfaccia grafica di Virtual Machine Manager appena installata nella nostra workstation di appoggio
- 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:
- https://bugzilla.redhat.com/show_bug.cgi?id=570824
- https://bugzilla.redhat.com/show_bug.cgi?id=584310
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.
- start permette di avviare la virtual machine. In aggiunta, è utile citare il comando autostart che permette di comunicare a libvirt di avviare automaticamente le virtual machine all’avvio del sistema.
- shutdown permette di inviare al sistema guest un segnale di shutdown, simulando ciò che accade sulle macchine fisiche quando viene premuto il tasto di accensione
- reboot invia alla macchina virtuale il segnale di reboot che avvierà un processo di riavvio pulito del sistema.
- destroy fa in modo che il processo della virtual machine venga ucciso. Dal punto di vista della virtual machine questo è l’equivalente di un blackout, la corrente viene interrotta bruscamente. Ovviamente come succede per le macchine reali, questo comando potrebbe creare inconsistenze sul filesystem del guest anche se ovviamente non causerà alcun danno reale all’hardware
- suspend fa in modo che l’esecuzione della virtual machine venga interrotta. La ram rimarrà comunque occupata, ma la macchina virtuale non occuperà più alcuna risorsa relativa a CPU, HD e rete fino al resume.
- resume permette di far uscire la virtual machine dallo stato di ibernazione attivato con suspend
Menzione particolare meritano anche i comandi save e restore.
- Save richiede, oltre al nome della virtual machine anche un parametro aggiuntivo, cioè il filename dove salvare lo stato del sistema guest. Al contrario di suspend, questo comando permette di salvare tutto ciò che concerne la virtual machine (ram, registri del processore, interrupts, eccetera, eccetera…) in un file, e terminare il processo del sistema guest. Questo fa si che una Virtual Machine possa essere spostata completamente da un host all’altro senza che il sistema e le applicazioni al suo interno ne risentano minimamente.
- Restore, come la sua controparte richiede come parametro aggiuntivo il file da cui leggere lo stato della virtual machine da ripristinare.
Sitografia
Guida scritta da: Ferdybassi | Debianized 20% |
Estesa da: | |
Verificata da: | |
Verificare ed estendere la guida | Cos'è una guida Debianized |