====== Virtualizzazione con Linux ====== Sistemi di virtualizzazione provati: * [[qemu]] * [[xen]] * [[qemu_kvm]] ===== Linux kernel KVM ===== Una soluzione **più semplice** (perché integrata nel kernel) e **più performante** (perché realizzata in hardware) è costituita dal **[[http://kvm.qumranet.com/kvmwiki|Kernel Based Virtual Machine]]**. Per attivarla bisogna avere un kernel >= 2.6.20 e un processore con le estensioni **Intel VT** oppure **AMD-V**. Per vedere se il processore ha tali estensioni controllare che in **''/proc/cpuinfo''** sia presente il flag **vmx** (per i processori Intel) **svm** (per i processori AMD). Per utilizzare KVM in Debaian Lenny si installa il **pacchetto kvm**, i moduli kernel necessarie vanno compilati manualmente grazie ai pacchetti **kvm-source** e **module-assistant**: module-assistant auto-install --force kvm Se si sta usando un kernel compilato in casa alla //Debian way//, il programma **make-kpkg** provvede a creare insieme al pacchetto del kernel anche il pacchetto con i moduli **kvm-modules**. Vedere le istruzioni **/usr/share/doc/kvm/README.Debian**. Dopo aver installato i moduli si caricano (esempio per processore AMD): modprobe kvm modprobe kvm_amd ===== Configurazione host virtuale KVM ===== Installando la libreria **libvirt** si controllano in modo uniforme e trasparente macchine virtuali di tipo diverso: Qemu, KVM, Xen, ecc. La libreria fornisce tool grafici o testuali Un host virtuale (detto anche //dominio// nella terminologia KVM) si configura in libvirt tramite un file .xml, la cui sintassi è documentata su **[[http://libvirt.org/formatdomain.html|libvirt.org]]**. Nella pagina **[[http://wiki.libvirt.org/page/QEMUSwitchToLibvirt|Switching to libvirt managed QEMU instances]]** sono documentati alcune funzioni di qemu/kvm e i corrispondenti comandi della **''virsh''** e le opzioni di configurazione per il file .xml. In questa pagina trovate alcuni esempi di configurazione. ===== Configurazione network ===== Esistono due modalità per il networking delle macchine guest (macchine virtuali). La modalità **bridge** è più potente e flessibile, ma richiede una configurazione speciale del networking sulla macchina host (macchina ospitante). La modalità **network** è invece più semplice da attivare, offre alle macchine guest un ambiente DHCP ed un NAT virtualizzato dalla macchina ospitante. ==== Modalità bridge ==== L'host (macchina ospitante) deve modificare la configurazione della propria scheda Ethernet (**eth1** nel nostro esempio) in un bridge, mentre l'interfaccia eth1 rimane non configurata. Il tutto si ottiene con una entry di questo tipo in **''/etc/network/interfaces''**: auto br0 iface br0 inet static address 192.168.3.1 netmask 255.255.255.0 network 192.168.3.0 broadcast 192.168.3.255 bridge_ports eth1 bridge_stp off bridge_maxwait 10 Bisogna aver installato il pacchetto **bridge-utils** e si può consultare la man page di **''bridge-utils-interfaces(5)''** per i vari parametri. Un guest virtuale dovrà avere nella propria configurazione, nella sezione ''%%%%'', una sezione del tipo: