Virtualizzazioni con VirtualBox
by admin on Jul.22, 2009, under Hacking, Linux
Quando si ha la necessità, per professione o interesse personale, di testare differenti piattaforme, o osservare come interagiscano tra loro, una soluzione di virtualizzazione rappresenta una scelta oramai obbligata, irrinunciabile in termini di comodità e rapidità di realizzazione.
Parlando di virtualizzazione il primo persiero va normalmente a Vmware, che tuttavia non rappresenta l’unica scelta possibile, e inoltre, pur essendo validissima, è liberamente disponibile senza limiti di tempo solo nella versione server, che personalmente ho trovato un po’ pesante e lenta nella interfaccia grafica.
Tra le possibili alternative, una assolutamente valida è VirtualBox, della tedesca Innotek GmbH (ora acquisita da Sun), una potente soluzione di virtualizzazione x86 adatta sia ad un uso aziendale di classe enterprise che ad un uso personale e amatoriale. VirtualBox è infatti l’unica soluzione professionale di questo tipo liberamente disponibile come software opensource regolato dalla GNU General Public License (GPL).
In realtà del software esistono due versioni, la VirtualBox Open Source Edition (OSE), rilasciata appunto secondo i termini della GNU General Public License, e quella closed, disponibile comunque liberamente per uso personale o valutativo entro i termini di una licenza specifica, la “VirtualBox Personal Use and Evaluation License”.
Le differenze consistono nel fatto che la edizione Open Source è priva di alcune caratteristiche presenti invece nella edizione full, tra le quali il supporto USB e le directory condivise, mediante le quali le directory del sistema host possono essere condivise con quello guest.
Entrambe le edizioni sono disponibili sotto forma di package specifici per le più diffuse distribuzioni, ma dell’ultima versione (la 3.02), forse perché appena uscita (a luglio), non è ancora disponibile l’ edizione open source.
Senza osare minimamente pensare di trattare l’argomento virtualizzazione, che è estremamente complesso, penso possa comunque essere interessante dare una occhiata dall’esterno ad alcune sue caratteristiche, come ad esempio il fatto che, dal punto di vista del SO del sistema host, una macchina virtual è solo un processo fra tanti altri.
Quando viene avviata la interfaccia GUI di VirtualBox, un altro processo almeno viene avviato, il processo di servizio denominato VBoxSVC.
Quando, nella stessa interfaccia, viene avviata una virtual machine, si hanno due finestre (quella principale e quella propria della virtual machine), ma tre processi in esecuzione:
- VirtualBox, relativo alla GUI della finestra principale;
- un altro processo VirtualBox avviato col parametro -startvm, il che significa che agisce da shell per una VM;
- VBoxSVC, che opera in background per tenere traccia di tutti i processi coinvolti.
Su Linux è poi presente un ulteriore processo daemon denominato VBoxXPCOMIPCD, necessario a far funzionare l’implementazione XPCOM.
La situazione è riassunta di seguito:
PID PPID COMMAND
4258 1 /usr/lib/virtualbox/VirtualBox ...
4273 4258 /usr/lib/virtualbox/VBoxXPCOMIPCD ...
4282 1 /usr/lib/virtualbox/VBoxSVC --automate ...
4934 4282 /usr/lib/virtualbox/VirtualBox --comment xp --startvm ...
dove la VM che “risiede” all’interno della seconda finestra appare al sistema operativo del sistema cha la ospita come un programma ordinario.
Sono quindi individuabili due tipi di incapsulamento in essere tra i vari files e processi relativi a VirtualBox:
1. Architettura Client/server. Tutti gli aspetti di VirtualBox compre le VMs in esecuzione possono essere controllati tramite una semplice, ma potente, COM/XPCOM API. Per esempio, vi è una utility a linea di comando denominata VBoxManage che permette un controllo più completo di quanto consenta la GUI. Si può ad esempio abilitare il network tracing sfruttando la capacità propria di VirtualBox di creare files pcap:
# VBoxManage modifyvm "virtualXP" -nictrace1 on -nictracefile1 file.pcap
# VirtualBox -startvm "virtualXP"
2. Architettura Frontend/backend. Gli aspetti relativi alla complessa virtualizzazione x86 son celati in una shared library, VBoxVMM.dll su Windows, o VBoxVMM.so su Linux. Se quest’ultima va intesa come “backend”, o black box, per sua natura statica, è relativamente facile creare un differente frontend senza doversi preoccupare dei dettagli relativi alla virtualizzazione x86.
Infatti, VirtualBox viene fornito già con differenti frontends:
- La Qt GUI.
- VBoxManage, a command-line utility that allows you to control all of VirtualBox’s powerful features.
- Una UI alternativa, con meno features rispetto a quella basata su Qt. Per controllare le VMs, si utilizza poi VBoxManage.
- Un server Remote Desktop Protocol (RDP), solo testuale, che non produce alcun output grafico sull’ host, ma consente a computers remoti di connettervisi.
Dal punto di vista dell’ utilizzatore finale, pochi software sono così semplici da maneggiare, al punto che, data anche la presenza di un efficiente wizard, è assolutamente superfluo elencare i passi necessari a creare una qualsiasi macchina virtuale.
VirtualBox supporta i file VMDK di VMware, per cui diventa possibile riutilizzare macchine virtuali generate in precedenza per tale ambiente.
Di seguito, comunque, alcune videate relative a macchine virtuali in esecuzione sul mio portatile grazie a VirtualBox.






