Questo tutorial descrive come installare la libreria di virtualizzazioneKVM hypervisor e libvirt su Linux CentOS 6.2. Alla fine di questa guida avrete una scatola di CentOS (nome ospitano) con le seguenti funzionalità:
- la capacità di virtualizzazione: possibilità per gli ospiti più (Linux/Windows) in esecuzione e condivisione dell’hardware dell’host
- configurazione di rete di ponte: sarete in grado di accedere direttamente agli ospiti come se fossero macchine fisiche sulla stessa LAN e viceversa.
- gestione Visual: utilizzo di virt-manager (io uso Ubuntu 11.10 in questo howto) sarà in grado di in modalità remota admin le macchine virtuali nell’host di CentOS.
Cos’è cosa?
KVM:
“KVM (per Kernel-based Virtual Machine) è una soluzione di virtualizzazione completa per Linux su x86 hardware contenente le estensioni di virtualizzazione (Intel VT o AMD-V). Si compone di un modulo del kernel caricabili, KVM, che fornisce l’infrastruttura di virtualizzazione di base e un modulo specifico del processore, kvm-intel.ko o kvm-Ko…”
“Utilizzando KVM, si può eseguire più macchine virtuali in esecuzione non modificato Immagini Linux o Windows. Ogni macchina virtuale ha hardware virtualizzato privato: una scheda di rete, disco, scheda grafica, ecc. “
libvirt:
- “Un insieme di strumenti per interagire con le funzionalità di virtualizzazione delle versioni recenti di Linux… “
- “Un software gratuito disponibile sotto la GNU Lesser General Public License.”
- “Un lungo termine stabile C API”
- “Un insieme di associazioni per i linguaggi comuni”
Intel-VT e AMD-V
- Che cosa è Intel VT / AMD-V / hvm?.
- Come posso sapere se ho Intel VT o AMD-V?
Requisiti
- Hardware:
- Processore con supporto per la tecnologia Intel VT o AMD-V
- Un sacco di memoria RAM a seconda del numero di ospiti
- Connettività di rete
- Software:
- Un previosly installato Linux CentOS 6.2 con un kernel Linux recente. Su questo come:
$ uname -r
2.6.32-220.2.1.el6.x86_64
$ lsb_release -a
Versione LSB:: core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
ID Distributore: CentOS
Descrizione: CentOS versione 6.2 (finale)
Versione: 6.2
Codename: finale - Un client di Linux con un ambiente Desktop installato
- Specchio/repository CentOS disponibile
- Un previosly installato Linux CentOS 6.2 con un kernel Linux recente. Su questo come:
Procedura di installazione
-
- Accedere a CentOS con bozz (utente un sudoer) e verificare se l’hardware supporta per le estensioni di virtualizzazione, il mio hardware che è stato:
$ egrep '^flags.*(vmx|svm)' /proc/cpuinfo
bandiere: fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 popcnt lahf_lm ida dts tpr_shadow vnmi flexpriority ept vpid
flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 popcnt lahf_lm ida dts tpr_shadow vnmi flexpriority ept vpid
flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 popcnt lahf_lm ida dts tpr_shadow vnmi flexpriority ept vpid
flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 popcnt lahf_lm ida dts tpr_shadow vnmi flexpriority ept vpid
flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 popcnt lahf_lm ida dts tpr_shadow vnmi flexpriority ept vpid
flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 popcnt lahf_lm ida dts tpr_shadow vnmi flexpriority ept vpid
flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 popcnt lahf_lm ida dts tpr_shadow vnmi flexpriority ept vpid
flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 popcnt lahf_lm ida dts tpr_shadow vnmi flexpriority ept vpid
- Install kvm and libvirt packages:
$ sudo yum install kvm libvirt
- Update both packages to the latest version available on repositories/mirrors:
$ sudo yum update libvirt kvm
$ yum info libvirt
Installed Packages
Nome: libvirt
Arco: x86_64
Versione: 0.9.4
Versione: 23.el6_2.4$ yum info qemu-kvm
Pacchetti installati
Nome: qemu-kvm
Arco: x86_64
Epoca: 2
Versione: 0.12.1.2
Versione: 2.209.el6_2.1 - Riavviare il demone libvirtd :
$ sudo service libvirtd restart
- Verificare che se il modulo kvm viene caricato, si dovrebbe vedere amd o intel a seconda dell’hardware:
$ lsmod | grep kvm
kvm_intel 50380 0
KVM 305113 1 kvm_intel - Eseguire un comando virsh per garantire la connettività locale principale in primo luogo:
$ sudo virsh sysinfo
< sysinfo tipo = “smbios” >
… - [FACOLTATIVO] Per utilizzare KVM da un utente non –root verificare se è stato creato il gruppo di kvm su installazione:
$ cat /etc/group | grep kvm
kvm:x:36:qemu
Quindi aggiungere l’utente di bozz al gruppo kvm , quindi può accedere al hypervisor:
$ sudo usermod – un -G kvm bozz
$ logoutAccedere nuovamente come utente bozz e verificare l’appartenenza di kvm:
$ id
uid=500(bozz) gid=500(bozz) groups=500(bozz),10(wheel),36(kvm) context=...
e verificare se /dev/kvm è di proprietà di gruppo kvm:
$ ls -l /dev/kvm
crw-rw-rw-. 1 root kvm 10, 232 Jan 17 14:50 /dev/kvm
In un sistema che esegue udev, probabilmente sarà necessario aggiungere la seguente riga nella configurazione di udev, quindi darà automaticamente il gruppo di destra al dispositivo appena creato:
$ cat /etc/udev/rules.d/80-kvm.rules
KERNEL=="kvm", GROUP="kvm", MODE="0666"
- Per il gestore di libvirt con un account non –root è necessario utilizzare PolicyKit. Definire il controllo di accesso per un gruppo di libvirt :
$ sudo groupadd libvirt
$ sudo usermod – un -G libvirt bozz
$ logoutAccedi nuovamente come utente bozz e modificare un nuovo archivio:
$ sudo nano /etc/polkit-1/localauthority/50-local.d/50-libvirt-remote-access.pkla
con questo contenuto:
[libvirt Management Access] # For allowing access to specific user only: #Identity=unix-user:bozz # For allowing access to a group (like this guide): Identity=unix-group:libvirt Action=org.libvirt.unix.manage ResultAny=yes ResultInactive=yes ResultActive=yes
Riavviare il demone libvirtd :
$ sudo service libvirtd restart
Verificare se bozz utente può accedere localmente al qemu: / / / sistema (Nota: l’uso di qemu: / / / sessione è sconsigliato):
$ virsh -c qemu:///system sysinfo
< sysinfo tipo = “smbios” >
…Verificare se la Boe ‘ e ‘ utente può accedere in remoto a qemu + ssh://bozz@SERVER/system troppo. Così via il problema del client di Linux:
Per client di Ubuntu (come in questa guida):
$ sudo apt-get install libvirt-bin
Per client di CentOS:
$ sudo yum install libvirt
Quindi:
$ virsh -c qemu+ssh://bozz@SERVER/system sysinfo
< sysinfo tipo = “smbios” >
…Cambia il gruppo proprietario e autorizzazioni per la directory di immagini predefinite:
$ sudo chown root: libvirt /var/lib/libvirt/images.
$ sudo chmod g + rw /var/lib/libvirt/images. - [FACOLTATIVO] Quando libvirtd (> = 0.9.3) è in esecuzione come non –root tenta di leggere ~/.libvirt/libvirtd.conf(Vedi qui). Una soluzione è:
$ mkdir -p ~/.libvirt
$ touch ~/.libvirt/libvirtd.confQuindi è possibile emettere un comando virsh come utente bozz :
$ virsh list
ID nome stato
———————————- - Configurare rete Bridged creando un nuovo script di rete /etc/sysconfig/network-scripts/ifcfg-br0:
$ sudo nano /etc/sysconfig/network-scripts/ifcfg-br0
e configurare i parametri in base alle impostazioni LAN (Nota: le opzioni sono maiuscole/minuscole cioè ponte e ponte sono due diverse opzioni):
DEVICE="br0" TYPE=Bridge DELAY=0 ONBOOT="yes" BOOTPROTO=static IPADDR=192.168.11.12 NETMASK=255.255.255.0 NETWORK=192.168.11.0 GATEWAY=192.168.11.1 DNS1=192.168.11.2 PEERDNS="yes" NM_CONTROLLED=no
Quindi modificare gli script di rete Ethernet /etc/sysconfig/network-scripts/ifcfg-eth0:
$ sudo nano /etc/sysconfig/network-scripts/ifcfg-eth0
con il seguente contenuto (Nota: l’indirizzo hardware dipende dalla tua scheda di rete, un arbitrario indirizzo MAC viene utilizzato qui):
DEVICE="eth0" HWADDR="00:2C:C2:85:29:A3" ONBOOT="yes" BRIDGE=br0 NM_CONTROLLED=no
Riavviare il servizio di rete:
$ sudo service network restart
e verificare la configurazione del ponte:
$ brctl show
Ponte nome Ponte id STP abilitato interfacce
br0 8000.002cc28529a3 nessun eth0
…Configurare iptables per consentire tutto il traffico deve essere inoltrato attraverso il ponte:
$ sudo iptables-inoltrare -m physdev – physdev-è-a ponte – j ACCEPT
$ sudo servizio iptables salvare
$ sudo servizio iptables riavviareImpedire l’elaborazione di regole di iptables di traffico con bridging, questo migliora le prestazioni del ponte. In /etc/sysctl.conf aggiungere le seguenti righe:
net.bridge.bridge-nf-call-ip6tables = 0 net.bridge.bridge-nf-call-iptables = 0 net.bridge.bridge-nf-call-arptables = 0
Ricaricare i parametri del kernel configurati con sysctl:
$ sudo sysctl -p /etc/sysctl.conf
Riavviare il demone libvirt:
$ sudo service libvirtd reload
Passaggi post-installazione
Creazione di un virtual machine / ospite per mezzo di Virtual Machine Manager (virt-manager) dalla macchina client Linux. Il sistema operativo guest sarà un Server di Ubuntu 11.10 Oneiric Ocelot:
Per client di Ubuntu (come in questa guida):
$ sudo apt-get install virt-manager
Per client di CentOS:
$ sudo yum install virt-manager
Quindi scaricare onirico-server-amd64. ISO dal sito sul client Linux Ubuntu:
$ wget http://releases.ubuntu.com/11.10/ubuntu-11.10-server-amd64.iso
Copiare la ISO scaricata al SERVER:
$ scp ubuntu-11.10-server-amd64.iso bozz@SERVER:/var/lib/libvirt/images/
Sul client Linux eseguire virt-manager:
$ virt-manager &
Vai a “File” / “Aggiungi connessione…” con queste impostazioni:
- Hypervisor: QEMU/KVM
- Metodo: ssh
- Nome utente: bozz
- Host: SERVER
Una volta connesso clicca sul pulsante “Crea una nuova macchina virtuale”.
- Impostare il nome su ubuntu-onirico e scegliere “Locale installare media (immagine ISO o CDROM)”:
- Sfoglia e selezionare la ISO che si trova a /var/lib/libvirt/images/ubuntu-11.10-server-amd64.iso, OS tipo “Linux” e versione “Ubuntu 11.10 (Oneiric Ocelot)”:
- Scegliere la memoria e CPU impostazione come si desidera:
- Scegliere impostazioni di archiviazione:
- Scegliere il dispositivo di rete creato in precedenza ponte “Host dispositivo eth0 (ponte ‘br0’)”, Virt digitare “kvm” e architettura “x86_64”:
Premere il pulsante “Finish” e installare il sistema operativo guest.
Riferimenti
- KVM
- KVM FAQ
- libvirt
- CentOS / Redhat: KVM rete configurazione a ponte
- HOWTO/KVM
- Bridged networking con libvirt