Wiki Ubuntu-it

Indice
Partecipa
FAQ
Wiki Blog
------------------
Ubuntu-it.org
Forum
Chiedi
Chat
Cerca
Planet
  • Pagina non alterabile
  • Informazioni
  • Allegati
  • Differenze per "Virtualizzazione/Kvm/GestioneDiretta"
Differenze tra le versioni 35 e 36
Versione 35 del 09/02/2019 11.38.50
Dimensione: 6147
Commento: CategoryDaRevisionare
Versione 36 del 24/10/2025 22.00.53
Dimensione: 7533
Autore: jeremie2
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:
## page was renamed from Emulatori/Kvm/GestioneDiretta
## page was renamed from FabioMarconi/Prove11
## page updated 13-06-2011
Linea 5: Linea 2:
#language it #LANGUAGE it
Linea 8: Linea 5:
<<Informazioni(forum="http://forum.ubuntu-it.org/viewtopic.php?t=371617"; rilasci="10.04")>> <<Informazioni(forum="http://forum.ubuntu-it.org/viewtopic.php?t=371617"; rilasci="25.10 25.04 24.04 22.04 10.04")>>
Linea 12: Linea 9:
La documentazione trattata fino ad ora è focalizzata all'uso di '''KVM''' attraverso '''libvirt''', in questa pagina verrà spiegata la gestione diretta di '''KVM''', un metodo non raccomandabile, ma in alcuni casi, utile. 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 16: Linea 13:
'''KVM''' è molto simile a '''qemu''' e rende possibile l'esecuzione di macchine da riga di comando. '''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 18: Linea 15:
La sintassi di base è:{{{
kvm -m 512 -hda disk.img -cdrom ubuntu.iso -boot d -smp 2
}}}
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:
dove:

 * '''-m''': è la memoria (in MB)
 * '''-hda''': è il primo disco rigido. È possibile usare vari tipi di file immagine inclusi `.img`, `.cow`. Per avviare un disco rigido è necessario prestare attenzione nell'uso di questa opzione, se non si vuole avviare la partizione di root del host. La sintassi corretta è '''-hda /dev/sda'''. Questa 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''' o '''n''':
  * '''a''': avvio da floppy,
  * '''c''': avvio da disco rigido,
  * '''d''': avvio da CD-ROM,
  * '''n''': avvio da da rete.
 * '''-smp''': è il numero delle CPU.
 * '''-alt-grab''' cambia la combinazione per il grab del puntatore da '''Ctrl-Alt''' a '''Ctrl-Alt-Shift''' (molto pratico se si usano spesso combinazioni di tasti come '''Ctrl-Alt-Del''' o '''Windows-E''').

Per ulteriori opzioni digitare:{{{
kvm --help
Per ulteriori opzioni, digitare:{{{
qemu-system-x86_64 --help
Linea 41: Linea 38:
Prima di avviare '''KVM''' usando sistemi di connessione bridged come utente, sono necessarie alcune configurazioni. 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 43: Linea 56:
 0. Creare il bridge sulla scheda, come descritto nella [[Virtualizzazione/Kvm/Networking#bridge-sull-host|relativa pagina]]. === Avviare QEMU con'interfaccia Bridge ===
Linea 45: Linea 58:
 0. [[AmministrazioneSistema/InstallareProgrammi|Installare]] il pacchetto: [[apt://uml-utilities | uml-utilities]]

 0. Aprire con un [[Ufficio/EditorDiTesto|editor di testo]] il file `/etc/udev/rules.d/40-permissions.rules` e aggiugere alla fine del file la seguente riga:{{{
 KERNEL=="tun", GROUP="kvm", MODE="0660"
 }}}
 per impostare i permessi al dispositivo '''tun'''.

 0. Salvare e chiudere il file appena modificato.

 0. Riavviare la macchina per rendere visibili i dispositivi '''bridged''' e '''tun'''.

 0. Aprire con un [[Ufficio/EditorDiTesto|editor di testo]] il file `/etc/kvm/kvm-ifup` e aggiungere «sudo» davanti ai comandi «ip» e «brctl»:{{{
 #!/bin/sh

 switch=$(ip route ls | awk '/^default / { for(i=0;i<NF;i++) { if ($(i) == "dev") print $(i+1) }}')
 '''sudo''' /sbin/ip link set dev "$1" up
 '''sudo''' /usr/sbin/brctl addif ${switch} $1
 exit 0
 }}}
 0. Salvare e chiudere il file appena modificato.

 0. Per lanciare '''KVM''' è necessario uno script wrapper. È possibile inserirlo in `~/bin` e chiamarlo '''kvm-bridge''' e richiamarlo direttamene con il comando '''kvm-bridge'''.{{{
 #!/usr/bin/env bash.
 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'''.
 {{{
 #!/usr/bin/env bash
Linea 102: Linea 95:
Linea 104: Linea 96:
 chmod 0755 ~/bin/kvm-bridge
}}}

 0. Modificare '''sudoers''' per consentire ai membri del gruppo '''KVM''' di eseguire lo script '''wrapper kvm-bridge''' e creare una intefaccia di rete bridged senza l'esecuzione di '''KVM''' come superutente:{{{
 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.
 {{{
Linea 109: Linea 101:
}}}

 Aggiungere le seguenti righe alla fine del 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:
 # 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 '''KVM''' da riga di comando. Non è necessario dichiarare una interfaccia network.{{{
 kvm-bridge -m 512 -hda disk.img -cdrom ubuntu.iso -boot -d -smp 2
}}}
 qemu-bridge -m 512 -hda disk.img -cdrom ubuntu.iso -boot d -smp 2
 }}}
Linea 124: Linea 113:
Aggiungere le seguenti regole ad 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 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 131: Linea 122:
Sostituire «$IPADDR_FROM_GUEST_OS» con l'attuale indirizzo ip dell'ospite di '''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`.
##vedere anche [[http://help.ubuntu-it.org/current/ubuntu/serverguide/it/firewall.html|Ubuntu Sicurezza Firewall]].
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 139: Linea 127:
Linea 140: Linea 129:
CategoryVirtualizzazione CategoryDaRevisionare 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.

  1. Creare il bridge sull'interfaccia di rete dell'host, come descritto nella relativa pagina.

  2. Installare il pacchetto uml-utilities che fornisce lo strumento tunctl.

  3. 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.

  4. 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.
  5. 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 0
    Salvare e chiudere il file appena modificato.

Avviare QEMU con'interfaccia Bridge

  1. 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
  2. Rendere eseguibile lo script appena creato digitando in un terminale:

     chmod 0755 ~/bin/qemu-bridge
  3. 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
  4. 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 }}}

  5. 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.

Ulteriori risorse


CategoryVirtualizzazione