Pillole di Virtualbox
VirtualBox è una buona soluzione di virtualizzazione, comoda per tirare su velocemente e con poco sforzo, piccoli laboratori di test anche relativamente articolati (cfr. fwknop: proteggere servizi con Single Packet Authorization (SPA)).
A differenza di kvm+qemu, VirtualBox è un hosted hypervisor (Tipo-2), meno efficiente ma con un'ottima cli che viene rimappata integralmente dalla gui. È uno di quei rari casi in cui l'uso di una gui non comporta perdita di funzionalità.
La cli di VirtualBox e ben strutturata e ordinata e si basa fondamentalmente sul tool VBoxManage
. VBoxManage
a sua volta ha una lista infinita di sottocomandi con i quali coprono ogni aspetto della manipolazione di una vm, dalla sua creazione alla gestione di tutti i suoi dispositivi, passando per clonazion, snapshot, encrypting ecc.
Di seguito, un elenco, assolutamente non esaustivo, dei principali comandi utilizzabili per avere informazioni sull'host o per agire in maniera elementare sulle vm (stop, start, savestate ecc..)
Host info
Elenca tutte le vm dell'host:
VBoxManage list vms
Elenca le vm in esecuzione:
VBoxManage list runningvms
Elenca le extension pack installate:
VBoxManage list extpacks
Elenca le info sull'host:
VBoxManage list hostinfo
Elenca le info dell'hypervisor:
VBoxManage list systemproperties
Installa l'extension pack scaricato sull'host:
VBoxManage extpack install --accept-license=sha256 /tmp/Oracle_VirtualBox_Extension_Pack-7.1.6.vbox-extpack
VM operations
Mostra le info della vm:
VBoxManage showvminfo "debian"
Restituisce lo stato della vm:
VBoxManage controlvm "debian" status
Pause vm:
VBoxManage controlvm "debian" pause
Resume vm:
VBoxManage controlvm "debian" resume
Restart vm:
VBoxManage controlvm "debian" reboot
Spegne la vm:
VBoxManage controlvm "debian" poweroff
Greaceful shutdown:
VBoxManage controlvm "debian" acpipowerbutton
Hibernate:
VBoxManage controlvm savestate "debian"
Avvio “headless” (senza finestra) della vm:
VBoxManage startvm -t headless "debian"
Avvio “headless” in modalità debug:
VBoxHeadless -s Debian
Ora vediamo qualcosa di leggermente più complesso come la creazione di una vm.
Esempio
Passo 1: Creare una vm con debian, disco da 20GB , scheda di rete nat , 1 cpu e 1 GB di ram. Passo 2: Clonazione della vm e aggiunta di una interfaccia host-only
# Creazion VM
VBoxManage createvm --name "myDebian" --ostype "Debian12_64" --register
# Configurazione ram e cpu
VBoxManage modifyvm "myDebian" --memory 512 --cpus 1
# Creazione HD da 20GB
VBoxManage createhd --filename "~/VirtualBox VMs/myDebian/myDebian.vdi" --size 20000 --format VDI
# Creazione e attach del controller SATA
VBoxManage storagectl "myDebian" --name "SATA Controller" --add sata --controller IntelAhci
VBoxManage storageattach "myDebian" --storagectl "SATA Controller" --port 0 --device 0 --type hdd --medium "~/VirtualBox VMs/myDebian/myDebian.vdi"
# Configurazione rete (NAT)
VBoxManage modifyvm "myDebian" --nic1 nat
# Aggiunta di un lettore CD per l'installer su iso
VBoxManage storagectl "myDebian" --name "IDE Controller" --add ide
VBoxManage storageattach "myDebian" --storagectl "IDE Controller" --port 0 --device 0 --type dvddrive --medium "~/VirtualBox VMs/iso/debian-12.8.0-amd64-netinst.iso"
# Start VM
VBoxManage startvm "myDebian" -t headless
E procedo con l'installazione. Una volta finito, posso clonarla aggiungendo la seconda interfaccia di rete.
# Clona la VM in modo che gli UUID di tutti gli oggetti clonati siano diversi
VBoxManage clonevm "myDebian" --name "myDebian_clone" --register --mode all
# Aggiungo una scheda di rete "Solo Host"
VBoxManage hostonlyif create
# Configuro la rete "Solo Host"
VBoxManage modifyvm "myDebian_clone" --nic2 hostonly --hostonlyadapter2 "vboxnet0"
Si può capire quanto sia facile a questo punto “codificare” la creazione/gestione di una o più vm.
Talmente facile che approdare ad un paradigma di tipo IAC (Infrastructure As Code) anche con VirtualBox non sembra così irrealizzabile.
Qualcuno ha detto vagrant?