|
Dimensione: 5007
Commento: Iniziata traduzione
|
Dimensione: 7533
Commento: importato da ivantu/Virtualizzazione/Kvm/GestioneDiretta
|
| Le cancellazioni sono segnalate in questo modo. | Le aggiunte sono segnalate in questo modo. |
| Linea 1: | Linea 1: |
| #title Using KVM Directly | #format wiki #LANGUAGE it <<BR>> <<Indice(depth=2)>> <<Informazioni(forum="http://forum.ubuntu-it.org/viewtopic.php?t=371617"; rilasci="25.10 25.04 24.04 22.04 10.04")>> = Introduzione = La documentazione trattata fino ad ora è focalizzata all'uso di '''[[Virtualizzazione/Kvm|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. |
| Linea 5: | Linea 13: |
| Siccome il resto di questa documentazione è focalizzato sull'uso di KVM attraverso libvirt, ricordiamo che è possibile anche la gestione diretta di KVMW. Non è un metodo raccomandabile, ma in alcuni casi può tornare utile. | '''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. |
| Linea 7: | Linea 15: |
| KVM è molto simile a qemu e rende possibile l'esecuzione di macchine da riga di comando. La sintassi di base è: {{{ kvm -m 512 -hda disk.img -cdrom ubuntu.iso -boot d -smp 2 }}} * -m = memoria (in MB) * -hda = primo disco rigido * Si possono usare vari tipi di file immagine inclusi .img, .cow * È possibile avviare un disco rigido. '''Prestare attenzione nell'uso di questa opzione se non si vuole avviare la partizione di root del host''' * Sintassi -hda /dev/sda * Questo richiama il menu di grub dal MBR quando viene lanciato KVM. * -cdrom può essere sia un'immagine iso che un lettore CD/DVD. * -boot [a|c|d|n] avvio da floppy (a), disco rigido (c), CD-ROM (d), oppure rete (n) * -smp = numbero delle CPU * -alt-grab change Ctrl-Alt mouse grab combination for Ctrl-Alt-Shift (very practical if you often use some control key combinations like Ctrl-Alt-Del or Windows-E) |
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 }}}dove le opzioni principali includono: * '''-m''': la quantità di memoria RAM (in MB) da allocare alla macchina virtuale. * '''-hda''': il percorso del primo disco rigido virtuale. È possibile usare vari tipi di file immagine (es. .img, .qcow2). {{{#!wiki important L'uso 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''': specifica il percorso di un'immagine ISO o di un lettore CD/DVD fisico per la macchina virtuale. * '''-boot a, c, d''' o '''n''': definisce la sequenza di avvio: * '''a''': avvio da floppy, * '''c''': avvio da disco rigido, * '''d''': avvio da CD-ROM, * '''n''': avvio da rete. * '''-smp''': il 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. |
| Linea 22: | Linea 32: |
| There are a number of additional options and additional help is available with : {{{ kvm --help |
Per ulteriori opzioni, digitare:{{{ qemu-system-x86_64 --help |
| Linea 28: | Linea 36: |
| == Dispositivi di connessione bridged == | |
| Linea 29: | Linea 38: |
| == Bridged Networking == | 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. Aprire con 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" }}}per impostare i permessi al dispositivo '''tun'''. Salvare e chiudere il file appena modificato. 0. Per rendere effettive le modifiche alle regole udev e permettere la creazione di interfacce tun, riavviare il sistema o eseguire:{{{ sudo udevadm control --reload-rules sudo udevadm trigger }}}Se queste operazioni non risolvono, un riavvio completo del sistema garantisce l'applicazione di tutte le modifiche. 0. Aprire con 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 ai comandi «ip» e «brctl» se QEMU/KVM non viene eseguito come utente root:{{{ #!/bin/sh switch=(i) == "dev") print 1" up '''sudo''' /usr/sbin/brctl addif ${switch} $1 exit 0 }}}Salvare e chiudere il file appena modificato. |
| Linea 31: | Linea 56: |
| In order to run KVM using bridged networking as a user we need to perform some configuration. | === Avviare QEMU con'interfaccia Bridge === |
| Linea 33: | Linea 58: |
| 1. First bridge your network card as above [[KVM/Networking#Creating a network bridge on the host]] 2. Install uml-utilities {{{ sudo apt-get install uml-utilities }}} 3. Set permissions on your tun device. Using any editor, edit ''/etc/udev/rules.d/40-permissions.rules'', add this line at the bottom of the file : {{{ KERNEL=="tun", GROUP="kvm", MODE="0660" }}} 4. Reboot (to bring up your bridge and tun device). 5. Edit ''/etc/kvm/kvm-ifup'' adding sudo in front of the ifconfig and brctl commands {{{ #!/bin/sh switch=$(ip route ls | awk '/^default / { for(i=0;i<NF;i++) { if ($(i) == "dev") print $(i+1) }}') '''sudo''' /sbin/ifconfig $1 0.0.0.0 up '''sudo''' /usr/sbin/brctl addif ${switch} $1 exit 0 }}} 6. We need a wrapper script for launching kvm. I put this script in ~/bin and call it '''kvm-bridge'''. If ~/bin is on your path you can call the command directly with '''kvm-bridge'''. This script was modified from a number of sources |
0. Per lanciare '''QEMU/KVM''' con un'interfaccia bridged, è utile uno script wrapper. È possibile inserirlo in `~/bin` e chiamarlo ad esempio '''qemu-bridge''', richiamandolo direttamente con il comando '''qemu-bridge'''. |
| Linea 64: | Linea 61: |
| # script to manage tap interface allocation # for linux kernels >= 2.6.18 |
# script per gestire l'allocazione dell'interfaccia tap. # per kernels >= 2.6.18. |
| Linea 67: | Linea 64: |
| # modified by bodhi.zazen from : # http://calamari.reverse-dns.net:980/cgi-bin/moin.cgi/FrequentlyAskedQuestions#head-2511814cb92c14dbe1480089c04f83c281117a86 # http://ubuntuforums.org/showthread.php?t=528046 # http://www.howtoforge.com/using-kvm-on-ubuntu-gutsy-gibbon |
# 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. |
| Linea 72: | Linea 69: |
| # set up a tap interface for qemu # USERID - uid qemu is being run under. |
# impostazione di una interfaccia tap per qemu. # USERID - uid sotto il quale è in esecuzione qemu. |
| Linea 76: | Linea 73: |
| # generate a random mac address for the qemu nic # shell script borrowed from user pheldens @ qemu forum |
# generare un indirizzo macchina casuale peril nic di qemu . # shell script preso in prestito dall'utente pheldens @ qemu forum. |
| Linea 82: | Linea 79: |
| # specify which NIC to use - see qemu.org for others # model=r8169 # Set model based on this how-to # http://www.howtoforge.com/using-kvm-on-ubuntu-gutsy-gibbon |
# 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. |
| Linea 90: | Linea 87: |
| # start kvm with our parameters # echo "Bringing up interface $iface with mac address $ranmac" # nohup added to allow kvm to run independent of the terminal |
# 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. |
| Linea 95: | Linea 92: |
| # kvm has stopped - no longer using tap interface | # kvm è stato fermato - non usare più l'interfaccia tap. |
| Linea 98: | Linea 95: |
7. Set the executable bit on the new script you just created: {{{ chmod 0755 ~/bin/kvm-bridge |
0. Rendere eseguibile lo script appena creato digitando in un terminale:{{{ chmod 0755 ~/bin/qemu-bridge |
| Linea 104: | Linea 98: |
8. Modify sudoers to allow members of the kvm group to run the wrapper kvm-bridge and create a bridged network interface without running KVM as root. |
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. |
| Linea 110: | Linea 102: |
Add these line at the end of the file : |
0. Aggiungere le seguenti righe alla fine del file:{{{ 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. |
| Linea 113: | Linea 108: |
| # Allow members of the kvm group to configure a bridged virtual network interface %kvm ALL=(ALL) NOPASSWD: /sbin/ifconfig, /usr/sbin/brctl, /usr/sbin/tunctl |
qemu-bridge -m 512 -hda disk.img -cdrom ubuntu.iso -boot d -smp 2 |
| Linea 116: | Linea 110: |
9. Now start kvm from the command line. '''You do not need to declare a network interface''' {{{ kvm-bridge -m 512 -hda disk.img -cdrom ubuntu.iso -boot -d -smp 2 }}} |
|
| Linea 126: | Linea 113: |
| Add these rules to iptables : | Aggiungere le seguenti regole ad iptables se il firewall non è gestito da UFW o altri strumenti più recenti. Si ricorda che in Ubuntu 22.04 '''nftables''' è il framework di firewall predefinito, ma iptables è ancora supportato. |
| Linea 129: | Linea 116: |
| # allow incoming packets for kvm guest | # autorizza i pacchetti in ingresso per l'ospite kvm. |
| Linea 131: | Linea 118: |
| # allow outgoing packets from kvm | # autorizza i pacchetti in uscita da kvm. |
| Linea 133: | Linea 120: |
| }}} | }}}Sostituire «$IPADDR_FROM_GUEST_OS» con l'attuale indirizzo IP dell'ospite di '''QEMU/KVM'''. (Si raccomanda di configurare gli ospiti all'uso di un indirizzo IP statico). |
| Linea 135: | Linea 122: |
| Change "$IPADDR_FROM_GUEST_OS" to the actual ip address of the kvm guest (I advise you configure your guests to have a static IP address). | Se si usa '''ufw''', aggiungere queste regole al file `/etc/ufw/before.rules` o configurare direttamente UFW per permettere il traffico di forwarding per le interfacce bridged. |
| Linea 137: | Linea 124: |
| If you use ufw, add these rules to ''/etc/ufw/before.rules'' | = Ulteriori risorse = |
| Linea 139: | Linea 126: |
| * See [[https://help.ubuntu.com/8.04/serverguide/C/firewall.html | Ubuntu Server Guide Firewall]] |
* [[https://help.ubuntu.com/community/KVM/Directly|Documento originale]] |
| Linea 143: | Linea 129: |
| ---- CategoryHomepage CategoryInTraduzione |
CategoryVirtualizzazione |
Guida verificata con Ubuntu: 22.04 24.04 25.10
Problemi in questa pagina? Segnalali in questa discussione
Introduzione
La documentazione trattata fino ad ora è focalizzata all'uso 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 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
dove le opzioni principali includono:
-m: la quantità di memoria RAM (in MB) da allocare alla macchina virtuale.
-hda: il percorso del primo disco rigido virtuale. È possibile usare vari tipi di file immagine (es. .img, .qcow2).
L'uso 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: specifica il percorso di un'immagine ISO o di un lettore CD/DVD fisico per la macchina virtuale.
-boot a, c, d o n: definisce la sequenza di avvio:
a: avvio da floppy,
c: avvio da disco rigido,
d: avvio da CD-ROM,
n: avvio da rete.
-smp: il 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 QEMU/KVM usando sistemi di connessione bridged come utente non root, sono necessarie alcune configurazioni.
Creare il bridge sull'interfaccia di rete dell'host, come descritto nella relativa pagina.
Installare il pacchetto uml-utilities che fornisce lo strumento tunctl.
Aprire con un 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"
per impostare i permessi al dispositivo tun. Salvare e chiudere il file appena modificato.
Per rendere effettive le modifiche alle regole udev e permettere la creazione di interfacce tun, riavviare il sistema o eseguire:
sudo udevadm control --reload-rules sudo udevadm trigger
Se queste operazioni non risolvono, un riavvio completo del sistema garantisce l'applicazione di tutte le modifiche.Aprire con un editor di testo il file /etc/kvm/kvm-ifup (o qemu-ifup a seconda della configurazione di QEMU) e aggiungere «sudo» davanti ai comandi «ip» e «brctl» se QEMU/KVM non viene eseguito come utente root:
#!/bin/sh switch=(i) == "dev") print 1" up '''sudo''' /usr/sbin/brctl addif ${switch} $1 exit 0Salvare e chiudere il file appena modificato.
Avviare QEMU con'interfaccia Bridge
Per lanciare QEMU/KVM con un'interfaccia bridged, è utile uno script wrapper. È possibile inserirlo in ~/bin e chiamarlo 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
Rendere eseguibile lo script appena creato digitando in un terminale:
chmod 0755 ~/bin/qemu-bridge
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
Aggiungere le seguenti righe alla fine del file:{{{ 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 }}}
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 ad iptables se il firewall non è gestito da UFW o altri strumenti più recenti. Si ricorda che in Ubuntu 22.04 nftables è il framework di firewall predefinito, ma iptables è ancora supportato.
# autorizza i pacchetti in ingresso per l'ospite kvm. IPTABLES -A FORWARD -d $IPADDR_FROM_GUEST_OS -j ACCEPT # autorizza 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. (Si raccomanda di configurare gli ospiti all'uso di un indirizzo IP statico).
Se si usa ufw, aggiungere queste regole al file /etc/ufw/before.rules o configurare direttamente UFW per permettere il traffico di forwarding per le interfacce bridged.
