|
Dimensione: 5045
Commento:
|
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 <<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 10.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 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 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 }}} * -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) |
= Gestione diretta di KVM = |
| Linea 24: | Linea 13: |
| There are a number of additional options and additional help is available with : | '''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 26: | Linea 15: |
| {{{ kvm --help |
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. 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. 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 33: | 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 35: | 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 66: | 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 69: | 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 74: | 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 78: | 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 84: | 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 92: | 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 97: | Linea 92: |
| # kvm has stopped - no longer using tap interface | # kvm è stato fermato - non usare più l'interfaccia tap. |
| Linea 100: | 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 106: | 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 112: | 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 115: | 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 118: | 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 128: | 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 131: | Linea 116: |
| # allow incoming packets for kvm guest | # autorizza i pacchetti in ingresso per l'ospite kvm. |
| Linea 133: | Linea 118: |
| # allow outgoing packets from kvm | # autorizza i pacchetti in uscita da kvm. |
| Linea 135: | 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 137: | 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 139: | Linea 124: |
| If you use ufw, add these rules to ''/etc/ufw/before.rules'' | = Ulteriori risorse = |
| Linea 141: | 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 145: | Linea 129: |
| ---- CategoryHomepage |
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.
