Pillole di Virtualbox

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?

#virtualbox #vm #hypervisor #kvm #qemu #vagrant