doc:appunti:linux:sa:qemu_kvm
Differences
This shows you the differences between two versions of the page.
Next revision | Previous revisionNext revisionBoth sides next revision | ||
doc:appunti:linux:sa:qemu_kvm [2018/03/01 18:33] – created niccolo | doc:appunti:linux:sa:qemu_kvm [2020/04/10 12:39] – [Scheda di rete Virtio o RTL-8029(AS)] niccolo | ||
---|---|---|---|
Line 14: | Line 14: | ||
* **libosinfo-bin**, | * **libosinfo-bin**, | ||
+ | ===== Configurazione rete in modalità bridge ===== | ||
+ | |||
+ | È la configurazione necessaria per mettere la macchina **host e guest sulla stessa rete locale**. In pratica si configura una interfaccia **br0** che avrà l' | ||
+ | |||
+ | Vediamo come si configura il file **/ | ||
+ | |||
+ | < | ||
+ | iface eth0 inet manual | ||
+ | |||
+ | auto br0 | ||
+ | iface br0 inet static | ||
+ | address 10.0.0.55 | ||
+ | netmask 255.255.255.0 | ||
+ | gateway 10.0.0.189 | ||
+ | bridge_ports eth0 | ||
+ | bridge_stp off | ||
+ | bridge_maxwait 0 | ||
+ | bridge_fd 0 | ||
+ | </ | ||
+ | |||
+ | In questo secondo esempio la scheda di rete **eth2** della macchina host non è configurata (non ha indirizzo IP). Il device **br2** viene quindi usato come bridge virtuale dalle macchine guest, che potranno raggiungere gli altri host fisicamente connessi a eth2: | ||
+ | |||
+ | < | ||
+ | auto eth2 | ||
+ | iface eth2 inet manual | ||
+ | up / | ||
+ | down / | ||
+ | |||
+ | auto br2 | ||
+ | iface br2 inet manual | ||
+ | bridge_ports eth2 | ||
+ | bridge_stp off | ||
+ | bridge_maxwait 10 | ||
+ | up / | ||
+ | down / | ||
+ | </ | ||
+ | |||
+ | Potrebbe tornare utile un **bridge senza alcuna scheda Ethernet connessa**, ad esempio per attivare una interfaccia di rete in una macchina virtuale, ma senza dover occupare per forza una porta Ethernet. Ecco come attivare **br10** senza impegnare porte fisiche: | ||
+ | |||
+ | < | ||
+ | auto br10 | ||
+ | iface br10 inet manual | ||
+ | bridge_ports none | ||
+ | bridge_stp off | ||
+ | bridge_waitport 0 | ||
+ | bridge_maxwait 10 | ||
+ | up / | ||
+ | down / | ||
+ | </ | ||
+ | |||
+ | Ecco la sintassi **da riga di comando** per fare configurazioni analoghe: | ||
+ | |||
+ | < | ||
+ | brctl addbr br2 | ||
+ | brctl addif br2 eth2 | ||
+ | ifconfig br2 up | ||
+ | |||
+ | ifconfig br2 down | ||
+ | brctl delif br2 eth2 | ||
+ | brctl delbr br2 | ||
+ | </ | ||
+ | ===== Creazione di una macchina virtuale ===== | ||
+ | |||
+ | Si può procedere in **modalità manuale** oppure preparando dei **file di configurazione XML** e lasciare il lavoro di basso livello al framework **libvirt**. | ||
+ | |||
+ | ==== Modo manuale con network in modo bridge ==== | ||
+ | |||
+ | La configurazione con **rete in modalità bridge** è la più complessa, perché richiede che la macchina ospitante sia predisposta opportunamente. In breve la macchina ospitante dovrà avere l' | ||
+ | |||
+ | < | ||
+ | auto br0 | ||
+ | iface br0 inet static | ||
+ | address 10.0.1.2 | ||
+ | netmask 255.255.255.0 | ||
+ | gateway 10.0.1.252 | ||
+ | bridge_ports eth0 | ||
+ | bridge_stp off | ||
+ | bridge_maxwait 10 | ||
+ | </ | ||
+ | |||
+ | quindi l' | ||
+ | |||
+ | < | ||
+ | tunctl -t tap0 -u root | ||
+ | ifconfig tap0 up | ||
+ | brctl addif br0 tap0 | ||
+ | </ | ||
+ | |||
+ | A questo punto è possibile **avviare la macchina ospite** con qualcosa del tipo: | ||
+ | |||
+ | < | ||
+ | qemu-system-x86_64 -m 1024 -machine accel=kvm \ | ||
+ | -netdev tap, | ||
+ | -device e1000, | ||
+ | -cdrom ../ | ||
+ | -hda rootfs.img -boot c | ||
+ | </ | ||
+ | |||
+ | ==== Con libvirt ==== | ||
+ | |||
+ | Una macchina virtuale è definita da due file: il **file di configurazione** e il file **immagine del disco**. Ad esempio una macchina di nome **stretch-amd64** è definita da: | ||
+ | |||
+ | * **/ | ||
+ | * **/ | ||
+ | |||
+ | È possibile creare in maniera assistita tali file eseguento il tool **virt-install**. Ad esempio: | ||
+ | |||
+ | < | ||
+ | virt-install \ | ||
+ | --virt-type kvm --name stretch-amd64 \ | ||
+ | --network bridge=br0 \ | ||
+ | --cdrom / | ||
+ | --graphics vnc, | ||
+ | -v --os-variant debian9 \ | ||
+ | --disk size=40 --memory 512 | ||
+ | </ | ||
+ | |||
+ | dove i parametri sono il **nome** del guest (es. stretch-amd64), | ||
+ | |||
+ | **virt-install** crea i file necessari e avvia la macchina virtuale, la **console** è raggiungibile tramite **VNC sulla porta 5900** della macchina host. Nel file di configurazione il boot da CD-ROM e l' | ||
+ | |||
+ | <code xml> | ||
+ | <!-- <boot dev=' | ||
+ | <boot dev=' | ||
+ | </ | ||
+ | |||
+ | <code xml> | ||
+ | <!-- <driver name=' | ||
+ | <source file='/ | ||
+ | </ | ||
+ | |||
+ | In alternativa a **virt-install** è possibile creare manualmente il **file .xml di configurazione** e creare l' | ||
+ | |||
+ | < | ||
+ | qemu-img create -f qcow2 stretch-amd64.qcow2 40G | ||
+ | </ | ||
+ | |||
+ | Quando si cambiano i file di configurazione delle macchine guest è necessario riavviare il servizio (le macchine virtuali in esecuzione non sono toccate): | ||
+ | |||
+ | < | ||
+ | systemctl restart libvirtd.service | ||
+ | </ | ||
+ | |||
+ | quindi da virsh è possibile distruggere e far ripartire una macchina virtuale, nonché abilitiare l' | ||
+ | |||
+ | < | ||
+ | destroy stretch-amd64 | ||
+ | start stretch-amd64 | ||
+ | autostart stretch-amd64 | ||
+ | </ | ||
+ | |||
+ | L' | ||
+ | |||
+ | < | ||
+ | / | ||
+ | </ | ||
+ | ===== Immagine disco raw o qcow2 ===== | ||
+ | |||
+ | L' | ||
+ | |||
+ | Il file XML di configurazione differisce nei due casi: | ||
+ | |||
+ | <code xml> | ||
+ | <disk type=' | ||
+ | <driver name=' | ||
+ | <source file='/ | ||
+ | <target dev=' | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | <code xml> | ||
+ | <disk type=' | ||
+ | <source file='/ | ||
+ | <target dev=' | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ===== Scheda di rete Virtio o RTL-8029(AS) ===== | ||
+ | |||
+ | La scelta predefinita per l' | ||
+ | |||
+ | <code xml> | ||
+ | < | ||
+ | <model type=' | ||
+ | <mac address=' | ||
+ | <source bridge=' | ||
+ | <target dev=' | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | Il tipo **virtio** offre alla macchina guest un device Ethernet PCI con ID **1af4: | ||
+ | |||
+ | <code xml> | ||
+ | < | ||
+ | <model type=' | ||
+ | <mac address=' | ||
+ | <source bridge=' | ||
+ | <target dev=' | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | Il tipo **ne2k_pci** offre alla macchina guest una Ethernet PCI compatibile NE2000, per la precisione una **Realtek RTL-8029(AS)**. L'ID PCI in realtà è **1af4: | ||
+ | |||
+ | Per avere **due o più schede** Ethernet è sufficiente aggiungere altre sezioni **%%< | ||
+ | ===== Troubleshooting ===== | ||
+ | |||
+ | < | ||
+ | ERROR unsupported configuration: | ||
+ | domain on x86_64 host is not supported by hypervisor | ||
+ | </ | ||
+ | |||
+ | Errore durante il tentativo di avviare una macchina virtuale, risolto facendo reboot. Forse servizio non avviato? Moduli kernel non caircati? | ||
+ | |||
+ | < | ||
+ | ERROR Requested operation is not valid: network ' | ||
+ | </ | ||
+ | |||
+ | Errore durante il tentativo di avviare una macchina virtuale in modalità network NAT (modalità predefinita). Non era stata avviata la configurazione di rete //default// di libvirt. Dalla shell **virsh** si deve eseguire **net-start default**. | ||
+ | |||
+ | ===== Web References ===== | ||
+ | |||
+ | * **[[https:// | ||
+ | * **[[https:// |
doc/appunti/linux/sa/qemu_kvm.txt · Last modified: 2022/11/09 10:14 by niccolo