|
Dimensione: 5045
Commento:
|
← Versione 38 del 24/10/2025 22.02.01 ⇥
Dimensione: 7719
Commento:
|
| Le cancellazioni sono segnalate in questo modo. | Le aggiunte sono segnalate in questo modo. |
| Linea 1: | Linea 1: |
| #title Using KVM Directly <<Include(KVM/Header)>> ||<tablestyle="float:right; font-size: 0.9em; width:30%; background:#F1F1ED; margin: 0 0 1em 1em;" style="padding:0.5em;"><<TableOfContents(3)>>|| |
#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")>> |
| Linea 5: | Linea 7: |
| = Using KVM Directly = | = Introduzione = |
| Linea 7: | Linea 9: |
| While the rest of this documentation focuses on using KVM through libvirt, it is also possible to work with KVM directly. This is not the recommended way but can be useful in some cases. | 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. |
| Linea 9: | Linea 11: |
| KVM is very similar to qemu and it is possible to run machines from the command line. The basic syntax is : {{{ kvm -m 512 -hda disk.img -cdrom ubuntu.iso -boot d -smp 2 |
= 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 |
| Linea 13: | Linea 18: |
| * -m = memory (in MB) * -hda = first hard drive * You can use a number of image file types including .img, .cow * You can also boot a hard drive. '''Be careful with this option as you do not want to boot the host root partition''' * Syntax -hda /dev/sda * This will call your grub menu from your MBR when you boot kvm. * -cdrom can be an iso image or a CD/DVD drive. * -boot [a|c|d|n] boot on floppy (a), hard disk (c), CD-ROM (d), or network (n) * -smp = number of 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) |
* '''-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. |
| Linea 24: | 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 30: | Linea 36: |
| == Dispositivi di connessione bridged == | |
| Linea 31: | 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. 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. |
| Linea 33: | Linea 60: |
| In order to run KVM using bridged networking as a user we need to perform some configuration. | === Avviare QEMU con interfaccia Bridge === |
| Linea 35: | Linea 62: |
| 1. First bridge your network card as above [[KVM/Networking#Creating a network bridge on the host]] | 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. |
| Linea 37: | Linea 68: |
| 2. Install uml-utilities | # 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 39: | Linea 73: |
| {{{ sudo apt-get install uml-utilities }}} |
# impostazione di una interfaccia tap per qemu. # USERID - uid sotto il quale è in esecuzione qemu. USERID=`whoami` |
| Linea 43: | Linea 77: |
| 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 : | # generare un indirizzo macchina casuale peril nic di qemu . # shell script preso in prestito dall'utente pheldens @ qemu forum. |
| Linea 45: | Linea 80: |
| {{{ KERNEL=="tun", GROUP="kvm", MODE="0660" }}} |
ranmac=$(echo -n DE:AD:BE:EF ; for i in `seq 1 2` ; \ do echo -n `echo ":$RANDOM$RANDOM" | cut -n -c -3` ;done) |
| Linea 49: | Linea 83: |
| 4. Reboot (to bring up your bridge and tun device). | # 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 51: | Linea 88: |
| 5. Edit ''/etc/kvm/kvm-ifup'' adding sudo in front of the ifconfig and brctl commands | model=rtl8139 iface=`sudo tunctl -b -u $USERID` |
| Linea 53: | Linea 91: |
| {{{ #!/bin/sh |
# 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 $@ |
| Linea 56: | Linea 96: |
| 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 {{{ #!/usr/bin/env bash # script to manage tap interface allocation # for linux kernels >= 2.6.18 # 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 # set up a tap interface for qemu # USERID - uid qemu is being run under. USERID=`whoami` # generate a random mac address for the qemu nic # shell script borrowed from user 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) # 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 model=rtl8139 iface=`sudo tunctl -b -u $USERID` # 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 nohup kvm -net nic,vlan=0,macaddr=$ranmac -net tap,vlan=0,ifname=$iface $@ # kvm has stopped - no longer using tap interface sudo tunctl -d $iface &> /dev/null }}} 7. Set the executable bit on the new script you just created: {{{ chmod 0755 ~/bin/kvm-bridge }}} 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. {{{ visudo }}} Add these line at the end of the file : {{{ # 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 }}} 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 }}} |
# 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 }}} |
| Linea 128: | Linea 114: |
| Add these rules to 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. |
| Linea 130: | Linea 116: |
| {{{ # allow incoming packets for kvm guest IPTABLES -A FORWARD -d $IPADDR_FROM_GUEST_OS -j ACCEPT # allow outgoing packets from kvm IPTABLES -A FORWARD -s $IPADDR_FROM_GUEST_OS -j ACCEPT |
{{{#!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. |
| Linea 137: | Linea 120: |
| 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). | * 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. }}} |
| Linea 139: | Linea 130: |
| If you use ufw, add these rules to ''/etc/ufw/before.rules'' | = Ulteriori risorse = |
| Linea 141: | Linea 132: |
| * 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 145: | Linea 135: |
| ---- CategoryHomepage |
CategoryVirtualizzazione |
Guida verificata con Ubuntu: 22.04 24.04 25.10
Problemi in questa pagina? Segnalali in questa discussione
Introduzione
La guide linkate nella pagina 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 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..).
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 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.
Per impostare i permessi al dispositivo tun aprire con i privilegi di amministrazione e 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"
- Salvare e chiudere il file.
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.
Aprire con i privilegi di amministrazione e un 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- Salvare 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 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
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 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
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.
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.
Si raccomanda di configurare per gli ospiti un indirizzo IP statico.
