## last update 17/10/2025 #format wiki #LANGUAGE it <
> <> <> <> <
> = Introduzione = Questa pagina fornisce una guida completa all'installazione e alla configurazione di '''KVM''' (Kernel-based Virtual Machine), la soluzione di virtualizzazione nativa del kernel Linux, su '''Ubuntu 22.04''' e versioni successive. '''KVM''' offre prestazioni quasi native ed è la tecnologia di virtualizzazione preferita su Linux. = Preparativi = == CPU: verifica supporto virtualizzazione == Per utilizzare appieno le prestazioni di '''KVM''', è indispensabile che il processore supporti le estensioni di virtualizzazione hardware. Queste sono note come '''Intel VT-x''' (per processori Intel, nome in codice Vanderpool) e '''AMD-V''' (per processori AMD, nome in codice Pacifica). Per verificare il supporto digitare nel [[AmministrazioneSistema/Terminale|terminale]]:{{{ lscpu | grep Virtualization }}} * Se il comando restituisce '''VT-x''' o '''AMD-V''', il supporto hardware è presente. * Se non viene visualizzata alcuna riga relativa alla virtualizzazione o se il comando precedente non restituisce nulla, la CPU potrebbe non supportarla o l'opzione potrebbe essere disabilitata nel BIOS/UEFI. == Verifica avanzata e stato di /dev/kvm: == Un modo più diretto per verificare la disponibilità di '''KVM''' si ha utilizzando `kvm-ok`. {{{#!wiki note Se il comando `kvm-ok` è assente installare il pacchetto [[apt://cpu-checker|cpu-checker]]. }}} Digitare nel [[AmministrazioneSistema/Terminale|terminale]]:{{{ kvm-ok }}} * Se il supporto è presente restituirà una risposta simile a:{{{ INFO: Your CPU supports KVM extensions INFO: /dev/kvm exists KVM acceleration can be used }}} * In caso contrario l'output sarà del tipo:{{{ INFO: Your CPU does not support KVM extensions KVM acceleration can NOT be used }}}e significa che le estensioni hardware non sono disponibili. Senza le estensioni '''KVM''' sarà comunque possibile eseguire macchine virtuali, ma risulteranno significativamente più lente. {{{#!wiki note Potrebbe essere necessario abilitarle nel BIOS/UEFI del sistema (spesso sotto voci come "Virtualization Technology", "Intel VT-d", "AMD-V"). }}} == Kernel a 64 bit (raccomandato) == L'esecuzione di un kernel a 64 bit sul sistema host è fortemente raccomandata per sfruttare al meglio KVM. * Un sistema a 64 bit può ospitare sia macchine virtuali a 64 bit che a 32 bit. * Un sistema a 32 bit può ospitare solo macchine virtuali a 32 bit e ha una limitazione di RAM per VM a circa 2 GB. * Per offrire più di 2047 MB di RAM a una macchina virtuale, si deve usare un [[Hardware/Architettura64Bit|kernel a 64 bit]] sul sistema host. Per verificare che il kernel sia a 64 bit, digitare il seguente comando in una finestra di [[AmministrazioneSistema/Terminale|terminale]]:{{{ uname -m }}} Il risultato '''x86_64''' indica che è in uso un kernel a 64-bit. {{{#!wiki note Risultati come '''i386''', '''i486''', '''i586''' o '''i686''' indicano un kernel a 32 bit. }}} ##Se si utilizza un kernel XEN per visualizzare i flag vmx e svm utilizzare il comando:{{{ ##cat /sys/hypervisor/properties/capabilities ##}}} = Installazione = Per le seguenti impostazioni si assume una configurazione standard adatta sia per desktop che per server (anche senza ambiente grafico, sebbene si consigli `virt-manager` per la facilità di utilizzo). [[AmministrazioneSistema/InstallareProgrammi|Installare]] i seguenti pacchetti:{{{ sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virtinst virt-manager }}} Descrizione dei pacchetti: * '''qemu-kvm''': il backend principale che fornisce l'accelerazione hardware '''KVM''' tramite '''QEMU'''. [[Virtualizzazione/Qemu|Guida]]. * '''libvirt-daemon-system''': il demone libvirtd che gestisce le istanze '''KVM''' e '''QEMU'''. È l'interfaccia principale per KVM. * '''libvirt-clients''': contiene gli strumenti client (come '''virsh''') per interagire con '''libvirtd'''. * '''bridge-utils''': utilità per la configurazione del networking in bridge, utile per integrare le VM nella rete fisica. * '''virtinst''': strumenti a riga di comando per la creazione rapida di macchine virtuali. * '''virt-manager''': un'interfaccia grafica molto intuitiva e potente per la gestione delle macchine virtuali '''KVM'''. Fortemente raccomandato per la maggior parte degli utenti. == Aggiungere utenti ai gruppi == Per poter gestire le macchine virtuali '''KVM''' senza dover utilizzare [[AmministrazioneSistema/PrivilegiDiAmministrazione|privilegi di amministrazione]] per ogni comando o per avviare '''virt-manager''', è necessario che l'utente appartenga al gruppo '''libvirt'''. Durante l'installazione di ''libvirt-daemon-system'' l'utente dovrebbe essere aggiunto automaticamente al gruppo '''libvirt'''. Tuttavia, per sicurezza e per rendere la modifica effettiva, è buona norma aggiungere l'utente manualmente e poi riautenticarsi. 0. Aggiungere il nome utente al gruppo '''libvirt''':{{{ sudo usermod -a -G libvirt $(whoami) }}} 0. Dopo aver eseguito questo comando disconnettersi e accedere nuovamente (o riavviare il sistema) affinché l'appartenenza al gruppo sia attiva. In alternativa è possibile utilizzare il comando `newgrp libvirt` per applicare la modifica solo nella sessione corrente. 0. Per ottenere l'elenco dei gruppi digitare:{{{ groups }}}Verificare la presenza di `libvirt` tra i gruppi elencati. == Verifica dell'installazione == Per verificare se l'installazione è avvenuta con successo e che il demone `libvirtd` sia in esecuzione e accessibile, digitare:{{{ virsh -c qemu:///system list --all }}}Se l'installazione è corretta e i permessi sono corretti, si vedrà un output simile a:{{{ Id Name State -------------------- }}}o un elenco delle macchine virtuali, se ne sono già state create. == Avvio del servizio libvirt == Dopo l'installazione il servizio '''libvirtd''' dovrebbe essere configurato per avviarsi automaticamente a ogni boot. È possibile verificarne lo stato digitando:{{{ sudo systemctl status libvirtd }}}Dovrebbe mostrare restituire:{{{ active (running) }}} = Configurazione Rete (Opzionale: Bridge) = Per impostazione predefinita '''KVM''' con '''libvirt''' configura una rete '''NAT''' per le macchine virtuali. Questo significa che le VM possono accedere a internet ma non sono direttamente accessibili dalla rete fisica (a meno che non si configuri il ''port forwarding''). Se si desidera che le VM ottengano un indirizzo IP direttamente dalla rete locale e siano visibili come host separati, è consigliabile configurare una rete in bridge. Questo è un processo più avanzato che richiede la modifica dei file di configurazione di rete del sistema host. == Configurazione di un Bridge (Netplan su Ubuntu 22.04) == 0. Identificare l'interfaccia di rete digitando:{{{ ip a }}} Individuare il nome dell'interfaccia di rete Ethernet (es. enp0s31f6, eth0). 0. Modificare il file '''Netplan'''. I file di configurazione si trovano solitamente nella cartella di sistema `/etc/netplan/`. Trovare il `file.yaml` (es. `00-installer-config.yaml`) e modificarlo con un [[Ufficio/EditorDiTesto|editor di testo]] e i [[AmministrazioneSistema/PrivilegiDiAmministrazione/Sudo|privilegi di amministrazione]]:{{{ sudo nano /etc/netplan/00-installer-config.yaml }}} 0. Adattare i nomi delle interfacce. Sostituire il contenuto esistente con qualcosa di simile a questo (adattare `enp0s31f6` al nome dell'interfaccia e il server DHCP):{{{ network: ethernets: enp0s31f6: # <<-- Sostituire con il nome dell'interfaccia fisica dhcp4: no dhcp6: no bridges: br0: interfaces: [enp0s31f6] # <<-- Sostituire con il nome dell'interfaccia fisica dhcp4: yes dhcp6: no parameters: stp: true forward-delay: 0 version: 2 }}} {{{#!wiki note L'interfaccia fisica (enp0s31f6) non ottiene più un IP direttamente. Viene creato un bridge '''br0''' che include l'interfaccia fisica. Il bridge '''br0''' ottiene l'indirizzo IP via DHCP, diventando l'interfaccia principale del sistema host. }}} 0. Applicare le modifiche digitando:{{{ sudo netplan apply }}}Si potrebbe perdere temporaneamente la connessione di rete. 0. Verificare il bridge:{{{ ip a show br0 }}}Dovrebbe essere visualizzato un indirizzo IP per '''br0'''. Creando una nuova VM con '''virt-manager''' sarà possibile selezionare '''br0''' come interfaccia di rete. = Risoluzione problemi = == libvir: Remote error : Permission denied == Il messaggio di errore:{{{ libvir: Remote error : Permission denied error: failed to connect to the hypervisor }}}può significare che non si è ancora autenticati dopo aver aggiunto l'utente al gruppo '''libvirt'''. == Permessi sul socket libvirt-sock == È possibile verificare i permessi del socket con:{{{ sudo ls -la /var/run/libvirt/libvirt-sock }}}L'output atteso dovrebbe essere simile a:{{{ srwxrwx--- 1 root libvirt 0 [DATA E ORA] /var/run/libvirt/libvirt-sock }}}Questo indica che il socket è di proprietà di '''root''' e del gruppo '''libvirt''', con [[AmministrazioneSistema/PermessiFile|permessi]] di lettura/scrittura per i membri del gruppo. = Ulteriori risorse = * [[https://help.ubuntu.com/community/KVM/Installation|Documento originale]] * [[https://www.libvirt.org/|Sito ufficiale di Libvirt]] * [[https://www.qemu.org/|Sito ufficiale di QEMU]] ---- CategoryHomepage CategoryNuoviDocumenti