#format wiki #LANGUAGE it <
> <> <> = Introduzione = La guide linkate nella pagina '''[[Virtualizzazione/Kvm|KVM]]''' trattano principalmente la gestione di '''KVM''' attraverso '''libvirt'''. In questa pagina viene spiegata la gestione diretta di '''KVM''' tramite i comandi QEMU/KVM, un metodo non raccomandabile per la gestione quotidiana ma utile in alcuni casi specifici. = Gestione diretta di KVM = '''KVM''' è un modulo del kernel Linux che permette a [[Virtualizzazione/Qemu|QEMU]] di sfruttare le capacità di virtualizzazione hardware ''Intel VT-x/AMD-V''. L'esecuzione diretta delle macchine virtuali avviene tramite l'eseguibile `qemu-system-x86_64` (o equivalente per altre architetture) che ha sostituito il comando `kvm` nelle versioni più recenti di Ubuntu. La sintassi di base per avviare una macchina virtuale con `qemu-system-x86_64` è:{{{ qemu-system-x86_64 -m 512 -hda disk.img -cdrom ubuntu.iso -boot d -smp 2 }}} * '''-m''': quantità di memoria RAM in MB da allocare alla macchina virtuale. * '''-hda''': percorso del primo disco rigido virtuale. È possibile usare vari tipi di file immagine (`.img`, `.qcow2`, ecc..). {{{#!wiki important L'utilizzo diretto di partizioni o dischi fisici dell'host (es. `-hda /dev/sda`) è estremamente pericoloso e può portare alla perdita di dati o alla corruzione del sistema operativo host. Si raccomanda vivamente di utilizzare file immagine per i dischi delle macchine virtuali. }}} * '''-cdrom''': percorso di un'immagine ISO o di un lettore CD/DVD fisico per la macchina virtuale. * '''-boot a, c, d''' o '''n''' definiscono la sequenza di avvio: * '''a''': avvio da floppy, * '''c''': avvio da disco rigido, * '''d''': avvio da CD-ROM, * '''n''': avvio da rete. * '''-smp''': numero di processori virtuali (CPU) da allocare alla macchina virtuale. * '''-alt-grab''': cambia la combinazione di tasti per "afferrare" e "rilasciare" il puntatore del mouse dalla combinazione predefinita '''Ctrl-Alt''' a '''Ctrl-Alt-Shift'''. Questo può essere utile per evitare conflitti con altre scorciatoie del sistema operativo host. Per ulteriori opzioni, digitare:{{{ qemu-system-x86_64 --help }}} == Dispositivi di connessione bridged == Prima di avviare '''[[Virtualizzazione/Qemu|QEMU]]'''/'''[[Virtualizzazione/Kvm|KVM]]''' usando sistemi di connessione ''bridged'' come utente non root, sono necessarie alcune configurazioni. 0. Creare il bridge sull'interfaccia di rete dell'host, come descritto nella [[Virtualizzazione/Kvm/Networking#bridge-sull-host|relativa pagina]]. 0. [[AmministrazioneSistema/InstallareProgrammi|Installare]] il pacchetto [[apt://uml-utilities|uml-utilities]] che fornisce lo strumento '''tunctl'''. 0. Per impostare i permessi al dispositivo '''tun''' aprire con i [[AmministrazioneSistema/PrivilegiDiAmministrazione|privilegi di amministrazione]] e un [[Ufficio/EditorDiTesto|editor di testo]] il file `/etc/udev/rules.d/40-permissions.rules` e aggiungere alla fine del file la seguente riga:{{{ KERNEL=="tun", GROUP="kvm", MODE="0660" }}} 0. Salvare e chiudere il file. 0. Per rendere effettive le modifiche alle regole di '''udev''' e permettere la creazione di interfacce '''tun''', eseguire i comandi:{{{ sudo udevadm control --reload-rules }}}{{{ sudo udevadm trigger }}}Se queste operazioni non risolvono, un '''riavvio''' del sistema garantisce l'applicazione di tutte le modifiche. 0. Aprire con i [[AmministrazioneSistema/PrivilegiDiAmministrazione|privilegi di amministrazione]] e un [[Ufficio/EditorDiTesto|editor di testo]] il file `/etc/kvm/kvm-ifup` (o `qemu-ifup` a seconda della configurazione di QEMU) e aggiungere `sudo` davanti al comando `brctl` se QEMU/KVM non venisse eseguito come utente root:{{{ #! #!/bin/sh switch=(i) == "dev") print 1" up sudo /usr/sbin/brctl addif ${switch} $1 exit 0 }}} 0. Salvare e chiudere il file appena modificato. === Avviare QEMU con interfaccia Bridge === 0. Per lanciare '''QEMU/KVM''' con un'interfaccia bridged è utile uno script ''wrapper''. È possibile inserirlo in `~/bin` e nominarlo ad esempio '''qemu-bridge''', richiamandolo direttamente con il comando `qemu-bridge`.{{{ #! #!/usr/bin/env bash # script per gestire l'allocazione dell'interfaccia tap. # per kernels >= 2.6.18. # modificato da bodhi.zazen con l'ausilio di: # http://calamari.reverse-dns.net:980/cgi-bin/moin.cgi/FrequentlyAskedQuestions#head-2511814cb92c14dbe1480089c04f83c281117a86. # http://ubuntuforums.org/showthread.php?t=528046. # http://howtoforge.com/virtualization-with-kvm-on-ubuntu-9.10. # impostazione di una interfaccia tap per qemu. # USERID - uid sotto il quale è in esecuzione qemu. USERID=`whoami` # generare un indirizzo macchina casuale peril nic di qemu . # shell script preso in prestito dall'utente pheldens @ qemu forum. ranmac=$(echo -n DE:AD:BE:EF ; for i in `seq 1 2` ; \ do echo -n `echo ":$RANDOM$RANDOM" | cut -n -c -3` ;done) # specificare quale NIC usare - vedere qemu.org per altri NIC. # model=r8169. # impostare il modello di scheda di rete. # http://howtoforge.com/virtualization-with-kvm-on-ubuntu-9.10. model=rtl8139 iface=`sudo tunctl -b -u $USERID` # avviare kvm con questi parametri. # echo "rendere visibile l'interfaccia $iface con indirizzo macchina $ranmac". # nohup aggiunto per consentire a kvm di essere indipendente dal terminale. nohup kvm -net nic,vlan=0,macaddr=$ranmac -net tap,vlan=0,ifname=$iface $@ # kvm è stato fermato - non usare più l'interfaccia tap. sudo tunctl -d $iface &> /dev/null }}} 0. Rendere eseguibile lo script appena creato digitando in un terminale:{{{ chmod 0755 ~/bin/qemu-bridge }}} 0. Modificare '''sudoers''' per consentire ai membri del gruppo '''KVM''' di eseguire lo script '''wrapper qemu-bridge''' e gestire le interfacce di rete necessarie senza richiedere la password di superutente. Prestare attenzione, poiché l'editore visudo è sensibile agli errori di sintassi.{{{ visudo }}} 0. Aggiungere le seguenti righe alla fine del file per autorizzare i membri del '''gruppo KVM''' a configurare una interfaccia di rete bridged virtuale:{{{ %kvm ALL=(ALL) NOPASSWD: /sbin/ip, /usr/sbin/brctl, /usr/sbin/tunctl }}} 0. Avviare '''QEMU/KVM''' da riga di comando utilizzando lo script wrapper. Non è necessario dichiarare un'interfaccia network direttamente, poiché gestita dallo script.{{{ qemu-bridge -m 512 -hda disk.img -cdrom ubuntu.iso -boot d -smp 2 }}} == iptables == Aggiungere le seguenti regole a '''iptables''' se il firewall non è gestito da '''UFW''' o altri strumenti più recenti. Si ricorda che ad esempio in Ubuntu 22.04 '''nftables''' è il framework per la gestione del firewall predefinito, ma '''iptables''' è ancora supportato. {{{#!wiki note Se si utilizza '''UFW''' aggiungere le seguenti regole al file `/etc/ufw/before.rules` o configurare direttamente '''UFW''' per permettere il traffico di forwarding per le interfacce bridged. }}} * Autorizzare i pacchetti in ingresso per l'ospite kvm:{{{ IPTABLES -A FORWARD -d $IPADDR_FROM_GUEST_OS -j ACCEPT }}} * Autorizzare i pacchetti in uscita da kvm:{{{ IPTABLES -A FORWARD -s $IPADDR_FROM_GUEST_OS -j ACCEPT }}}Sostituire `$IPADDR_FROM_GUEST_OS` con l'attuale indirizzo IP dell'ospite di '''QEMU/KVM'''. {{{#!wiki tip Si raccomanda di configurare per gli ospiti un indirizzo IP statico. }}} = Ulteriori risorse = * [[https://help.ubuntu.com/community/KVM/Directly|Documento originale]] ---- CategoryVirtualizzazione