Anche su Linux e MacOS è disponibile VirtualBox, che già conosciamo bene, allora perché dovremo prendere in considerazione Quickemu, che tra l'altro è uno strumento che funziona da linea di comando, senza interfaccia grafica? Perché come si può intuire dal nome è molto veloce, non solo nell'emulazione delle macchine virtuali (dato che alla sua base c'è il fantastico Qemu, abbreviazione che sta per Quick Emulator, emulatore veloce) ma anche e soprattutto per la creazione delle stesse! Non ci credete? Continuate a leggere!
» Leggi: La virtualizzazione dei sistemi operativi non sarà più un problema: guida a VirtualBox
Veloce, ma quanto veloce?
Volete sapere quanto è veloce creare una macchina virtuale con Quickemu? Basta un solo comando per creare, partendo da zero una macchina virtuale con una configurazione già ottimizzata, ad esempio, di Windows 11:
quickget windows 11
Non è necessario cercare e scaricare una ISO di installazione e montarla sul sistema virtuale, ci penserà Quickemu a farlo per noi. Non solo: l'installazione del sistema che seguirà appena lanciata la nuova macchina virtuale sarà del tipo "non presenziata" (unattend), creerà un account Amministratore con nome Quickemu
e password quickemu
, così che potremo saltare tutta la parte di configurazione!
E con la stessa facilità potremo installare quasi altri mille sistemi operativi compresi diverse distribuzioni Linux, diverse versioni di Windows ma anche di MacOS, BSD e altri! E se quelli preconfigurati non vi bastano, potete anche aggiungerne altri (ma dovrete fare la configurare della macchina virtuale da soli).
Il vantaggio nell'utilizzo di Quickemu non è "solo" la velocità di creazione di una macchina virtuale, c'è molto di più: quando possibile viene attivata da subito la condivisione della clipboard (per il copia/incolla) e di una cartella per facilitare lo scambio di file tra sistema host e guest, è possibile far vedere le periferiche USB al sistema virtualizzato, c'è il supporto per l'audio full-duplex, è possibile inoltrare le porte di rete tra i sistemi e la porta per SSH viene inoltrata automaticamente.
Installazione di Quickemu
Ma procediamo in ordine; la prima cosa da fare è installare Quickemu sul nostro sistema e qui la prima nota dolente (ma non vi preoccupate troppo, continuare a leggere!): infatti si trova nei repository di solo una manciata di particolari distribuzioni Linux, tra cui non ci sono Debian né tutte le sue derivate. La buona notizia è che lo sviluppatore mette a disposizione un pacchetto .deb per Debian e anche un repository per Ubuntu (che può essere utilizzato anche su Linux Mint). Gli altri non devono però disperare perché l'installazione è possibile su qualunque distribuzione ed è piuttosto semplice: dato che non è richiesta compilazione ma basta un semplice comando. In questa guida vedremo l'installazione sulla mia distro preferita, OpenSUSE.
» Leggi: OpenSUSE Tumbleweed: buon divertimento con la migliore distro!
Per prima cosa assicuriamoci di avere i giusti requisiti per poter far funzionare Quickemu, verifichiamo di aver installato i programmi e le librerie necessarie al corretto funzionamento di Quickemu. Una lista è disponibile sul Github ufficiale e riporto un immagine anche qui per comodità.
Su OpenSUSE andranno aggiustati alcuni nomi dei pacchetti e in particolare: python3 sarà python312
, EDK II sarà ovmf-tools
, glxinfo sarà Mesa-demo-x
, spicy sarà spice-client-gtk
. Il comando da impartire è quindi:
sudo zypper in qemu coreutils curl ovmf-tools gawk grep Mesa-demo-x jq pciutils procps python312 mkisofs usbutils util-linux sed socat spice-gtk swtpm xdg-user-dirs xrandr zsync unzip
Potrebbe essere necessari ulteriori pacchetti e vi accorgerete della loro mancanza al momento della creazione o dell'avvio della macchina virtuale: se il processo si interromperà per la mancanza di qualcosa dovremo interpretare l'errore e cercare quale pacchetto è necessario. Durante le mie prove, ad esempio, ho notato la mancanza di qemu-audio-pa
richiesta per la corretta funzione dell'audio del sistema guest.
Su altre distro il nome dei pacchetti potrebbe variare ma basterà una veloce ricerca su Internet e/o nei repository per trovare il nome del giusto pacchetto da installare.
Su MacOS, possiamo utilizzare Homebrew
per installare i pacchetti necessari con il seguente comando; l'installazione di quickemu invece sarà del tutto simile a quella che vedremo tra breve:
brew install bash cdrtools coreutils jq python3 qemu usbutils samba socat swtpm zsync
» Leggi: Guida a Homebrew: il gestore pacchetti mancanti per MacOS
Adesso il nostro sistema è pronto per l'installazione di Quickemu; scarichiamo quindi l'ultima versione disponibile direttamente da Github, possiamo farlo con un semplice comando da terminale:
git clone --filter=blob:none https://github.com/quickemu-project/quickemu
Questo scaricherà tutti i file necessari (e anche qualcuno in più, specifico solo per particolari distro) in una nuova cartella chiamata quickemu
. All'interno di questa cartella troveremo, tra gli altri file, i due eseguibili (o meglio, script!) principali quickget
e quickemu
che dovremo invocare da terminale rispettivamente per creare e lanciare la macchina virtuale. Dato che non si trovano in un percorso conosciuto dal sistema dovremo invocarli specificando ogni volta il percorso (relativo o assoluto) dove risiedono. Per ovviare a ciò possiamo creare un collegamento a questi nel percorso /usr/locale/bin/
con i seguenti comandi (nel caso in esempio la cartella quickemu
è stata creata nel home
del mio utente):
sudo ln -s ~/quickemu/quickget /usr/local/bin/quickget
sudo ln -s ~/quickemu/quickemu /usr/local/bin/quickemu
A questo punto siamo pronti per creare la nostra prima macchina virtuale!
Creazione della macchina virtuale
Abbiamo già visto il semplice comando per la creazione di una macchina virtuale, adesso approfondiamolo un po'. Lo script che si occupa della creazione della macchina virtuale è quickget
e a questo dobbiamo passare come parametri, il sistema operativo, la versione e per alcuni la lingua desiderata. Per vedere la lista dei sistemi operativi e delle versioni supportate possiamo utilizzare il seguente comando; dato l'output molto lungo possiamo impaginarlo passandolo con un pipe a less:
quickget --list | less
Una volta individuato il sistema operativo (compreso versione e lingua) possiamo passarlo a quickget
come visto in precedenza e attendere pazientemente il termine dell'operazione la cui durata può variare a secondo di vari fattori, uno su tutti la nostra velocità di connessione. Io scelgo di virtualizzare Mac OS Sonoma (attenzione: per emulare questo sistema operativo è richiesta una quantità di ram superiore agli 8 GB, meglio se superiore a 16 GB); dato che quickget
creerà una cartella e un file con il nome del sistema scelto nel percorso dove viene eseguito, consiglio di eseguirlo sempre all'interno di una stessa cartella che può anche essere la home del nostro utente ma ritengo più ordinato creare una nuova cartella (ad esempio, VM
) ed eseguirlo sempre da lì.
NB: se abbiamo Btrfs come file system può essere una buona idea disabilitare il Copy-On-Write (con il secondo comando qui sotto) per questa cartella perché diminuirà la frammentazione del disco virtuale migliorando leggermente le prestazioni; questa operazione va fatta prima della creazione del disco o il Copy-On-Write non verrà disattivato!
» Leggi: [LINUX] Come e quando passare da ext4 a btrfs (anche con partizione criptata!)
I comandi saranno quindi:
mkdir VM
chattr +C VM
cd VM
quickget macos sonoma
In questo caso, quickget
si preoccuperà non solo di scaricare l'immagine per l'installazione del sistema Mac ma anche di scaricare il bootloader OpenCore, necessario per avviare questo sistema operativo su macchine diverse da quelle di Apple.
Una volta terminata l'operazione, ci viene suggerito il comando per avviare la macchina virtuale in modo da poter procedere con l'installazione del sistema (per la quale vi rimando alla guida specifica sul Github di Quickemu):
quickemu --vm macos-sonoma.conf
Chi ha osservato attentamente l'immagine sopra potrebbe aver notato un altro argomento passato al comando quickemu
, --display gtk
, opzione che serve per utilizzare un diverso tipo di display, è un opzione propria di Qemu ed ho dovuto specificarla perché il display utilizzato per impostazione predefinita (sdl) non funzionava.
Questo ci offre la possibilità di parlare di altre opzioni che si possono specificare all'avvio della macchina virtuale e che si possono vedere con il comando
quickemu --help
Tutte queste opzioni sono da specificare dopo aver indicato a quickemu a quale macchina virtuale vogliamo applicarle, sarà quindi indispensabile farle precedere da --vm nomemacchinavirtuale.conf
e potranno essere concatenate in modo da poterne specificare più di una.
Alcune delle più utili riguardano la possibilità di modificare la grandezza dello finestra della macchina virtuale, rendendola "a tutto schermo" (con l'opzione --fullscreen
) o personalizzando larghezza e altezza con le opzioni --width
e --height
seguite da un valore che rappresenta i pixel e da utilizzare insieme.
Altre opzioni riguardano la possibilità di creare delle istantanee dello stato della macchina virtuale con l'opzione --snapshot create
seguita dal nome con cui vogliamo identificare quell'istantanea; l'opzione --snapshot info
consente di avere informazioni su tutte le istantanee create per quella determinata macchina virtuale, --snapshot delete nome
consente di cancellare l'istantanea nome mentre --snapshot apply nome
consente di ripristinare lo stato della macchina virtuale a quell'istantanea.
Ancora --public-dir
seguito dal percorso ad una cartella consente di condividerla con la macchina virtuale, --offline
consente di avviale la VM senza connessione ad internet e --kill
di terminare il processo della macchina virtuale se rimanesse attivo.
Ci sono poi le opzioni per la cancellazione --delete-vm
consente di eliminare disco virtuale e configurazione della VM interessata, mentre --delete-disk
rimuoverà solo il disco virtuale.
Un'altra opzione interessante è --extra_args
che consente di passare argomenti direttamente a qemu.
L'ultimo comando che vi segnalo, estremamente utile per evitare di dover aprire il terminale ogni volta che vogliamo avviare la macchina virtuale, è --shortcut
che consente di creare un avviatore nel menu dei programmi per poter avviare la VM con un click del mouse.
Interfaccia grafica
Per chi proprio non digerisce la linea di comando, anche per programmi semplicei come quickemu, è disponibile un interfaccia grafica da aggiungere a quickemu: QuickGUI. Per i sistemi basati su Debian vengono rilasciati pacchetti .deb ed è disponibile anche un repository dedicato. Per tutti gli altri è comunque possibile installarlo ma va compilato perché il pacchetto contenente il binario già compilato non sembra più essere disponibile (l'ultimo risale alla versione 1.2.4). La compilazione richiede di preparare un ambiente di sviluppo per Flutter (linguaggio con il quale è scritto QuickGUI) e questo fa sì che la complessità per la compilazione renda vana la semplificazione nell'utilizzo di Quickemu tramite GUI.
Un'alternativa è qqX non una vera e propria GUI ma utilizza il terminale per mostrare varie opzioni con chiari messaggi tra cui poter scegliere per gestire le VM tramite quickget
e quickemu
. L'installazione è semplice: basta scaricare l'ultima versione disponibile dal Github, scompattare l'archivio (magari nella stessa cartella di quickemu) e lanciare tramite terminale l'eseguibile qqX_setup_and_install
e seguire le istruzioni facendo le scelte necessarie a personalizzare la nostra installazione.
Se avete seguito passo passo la mia guida, dovrete cambiare la cartella della macchine virtuali configurata in qqX che per impostazione predefinita è ~/VQMS in ~/VM
; sarà possibile farlo nella nuova finestra che si aprirà alla fine della procedura di installazione automatica, premendo Invio
e modificando la stringa indicata nella seguente immagine con il proprio percorso alle macchine virtuali; ricordatevi di salvare prima di chiudere l'editor di testo!
A questo punto potremo riavviare qqX
, questa volta potremo farlo direttamente dal nostro menu dei programmi e le macchine virtuali precedentemente create saranno disponibili per essere avviate.