“Macchina Virtuale basata sul Kernel”: indica che la virtualizzazione è gestita direttamente dal kernel Linux.
KVM è una tecnologia di virtualizzazione integrata nel kernel Linux che trasforma il sistema operativo in un hypervisor. Consente di eseguire più macchine virtuali isolate ognuna con il proprio sistema operativo. È una soluzione nativa, efficiente e altamente integrata con le risorse hardware.
QEMU (Quick Emulator)
Tradotto “Emulatore Veloce”. È un emulatore e virtualizzatore che permette di eseguire sistemi operativi diversi su un’unica macchina fisica. QEMU è un emulatore e virtualizzatore open source che permette di eseguire sistemi operativi e applicazioni per diverse architetture hardware. In combinazione con KVM, sfrutta l’accelerazione hardware per offrire prestazioni quasi native. È uno strumento flessibile, usato sia per test che per ambienti di produzione.
Libvirt
Il nome deriva da “Library for Virtualization”, cioè “libreria per la virtualizzazione”. È una raccolta di strumenti e API per gestire hypervisor e macchine virtuali. Libvirt è una libreria API scritta in C che fornisce un’interfaccia unificata per interagire con diversi hypervisor come KVM, QEMU, Xen, VMware, ecc. Oltre alla libreria include anche strumenti di gestione come il comando virsh e il servizio libvirtd che usano proprio quella libreria per comunicare con i sistemi di virtualizzazione.
Libvirt può funzionare in due modalità diverse:
Modalità utente: session
$ echo "=== VM utente ==="
$ virsh list --all
Scopo: permettere a un utente normale di creare e usare VM senza privilegi di root. Ogni utente ha un piccolo ambiente libvirt personale. Le VM girano solo quando l’utente è loggato. Non possono danneggiare il sistema o interferire con altri utenti Le immagini e le configurazioni stanno nella home:/home/user_name/.local/share/libvirt/ Serve per test o uso personale in modo sicuro. È come avere un mini-hypervisor privato dentro il tuo account
Modalità sistema: system
$ echo "=== VM di sistema ==="
$ virsh -c qemu:///system list --all
Scopo: gestire VM per tutto il sistema come fa un server o un host Proxmox. Le VM continuano a funzionare anche se l’utente non è loggato. Le configurazioni stanno in: /etc/libvirt/ Possono usarle più utenti (se appartengono al gruppo libvirt). Servono privilegi amministrativi, perché controllano dispositivi reali (CPU, dischi, rete, ecc) È la modalità usata in ambienti server, laboratori, o da strumenti come CRC, OpenShift, Proxmox, ecc.
Verifica se il processore è Intel / AMD e supporta la virtualizzazione hardware:
$ lscpu | grep Virtualization
Virtualization: VT-x
Installazione
$ sudo apt install qemu-system-x86 libvirt-daemon-system virt-viewer dnsmasq vde2 bridge-utils ebtables dmidecode virtinst ovmf
Editare il file libvirtd.conf:
$ sudo nano /etc/libvirt/libvirtd.conf
decommentare le due righe:
unix_sock_group = "libvirt"
unix_sock_rw_perms = "0770"
Aggiungere l'utente corrente al gruppo libvirt, questo è utile quando si desidera consentire all'utente di interagire con l'hypervisor di virtualizzazione libvirt senza dover inserire il comando sudo ogni volta:
$ sudo usermod -aG libvirt $USER
Aggiungere l'utente corrente al gruppo kvm, questo è utile quando si desidera consentire all'utente di interagire con la virtualizzazione KVM (Kernel-based Virtual Machine) senza dover inserire il comando sudo ogni volta:
$ sudo usermod -aG kvm $USER
Configurare la rete in bridge:
$ sudo mv /etc/libvirt/qemu/networks/default.xml /etc/libvirt/qemu/networks/default.xml.bck
$ sudo virsh -c qemu:///system net-edit default
oppure
$ sudo nano /etc/libvirt/qemu/networks/default.xml
<network>
<name>default</name>
<forward mode="bridge"/>
<bridge name="br0"/>
</network>
$ sudo chmod 0600 /etc/libvirt/qemu/networks/default.xml
Avviare la rete virtuale ed avviarla automaticamente all'avvio del sistema:
$ sudo virsh -c qemu:///system net-start default
$ sudo virsh -c qemu:///system net-autostart default
Abilitare ed avviare il server libvirtd:
$ sudo systemctl enable --now libvirtd
$ sudo systemctl start libvirtd
$ sudo systemctl status libvirtd
$ virsh -c qemu:///system net-list --all
$ virsh -c qemu:///system list --all
Per verificare se l'installazione è avvenuta con successo:
$ virsh -c qemu:///system list
Id Name State
altrimenti la risposta sarà:
libvirt: Remote error : Permission denied
error: failed to connect to the hypervisor
I permessi del file libvirt-sock devono essere simili a:
$ sudo ls -la /var/run/libvirt/libvirt-sock
srwxrwx--- 1 root libvirtd 0 2010-08-24 14:54 /var/run/libvirt/libvirt-sock
Installazione di VirtManager sul PC client
$ sudo apt install virt-manager


