Eccoci di nuovo a parlare di virtualizzazione utilizzando il software Oracle VM VirtualBox. Nel precedente articolo avevamo visto come installare e configurare una macchina virtuale (VM) Windows XP su sistema operativo host Linux Fedora 14 a 64 bit, in lingua italiana, con desktop Gnome. Avevamo largamente sfruttato la comoda interfaccia grafica messa a disposizione dal programma.
Spesso però i server Linux non hanno un ambiente desktop e sono gestiti da remoto sfruttando il protocollo SSH. Per fortuna VirtualBox rende disponibile un front-end alternativo, denominato VBoxHeadless, che non produce alcun output visibile sul sistema host, ma consente di connettersi alle macchine virtuali attraverso il protocollo RDP (Remote Desktop Protocol). Prima di procedere potrebbe esservi utile la lettura di Utilizzare il Desktop Remoto di Microsoft con Linux.
Di seguito ripercorreremo le tappe del precedente articolo: installazione del software VirtualBox, creazione di una macchina virtuale Windows XP (poco cambierebbe se fosse Windows 7 o Windows Server 2008) ed infine installazione del sistema operativo guest. Non approfondiremo aspetti già trattati in dettaglio, quindi, se non l'avete fatto, consiglio per lo meno una lettura veloce di Windows dentro Linux: la virtualizzazione con VirtualBox.
Installiamo VirtualBox
Immaginiamo di accedere da remoto al nostro server Fedora 14 tramite SSH con un account utente non privilegiato. Naturalmente per l'installazione dovremo poter assumere i privilegi di root. Tra i prerequisiti ricordo brevemente l'aggiornamento, consigliato, del kernel e la necessaria presenza degli header del kernel medesimo per l'installazione dei moduli vboxdrv, vboxnetflt, vboxnetadp. Per facilitare futuri aggiornamenti, inoltre, risulterà utile il pacchetto dkms, mentre in questo caso non sono necessarie le librerie grafiche Qt e SDL.
Dovremo sicuramente installare, se assenti dal sistema, i pacchetti GNU compiler e GNU Make:
$ yum install gcc make
A questo punto posizioniamoci in una directory di lavoro e preleviamo dal sito del produttore l'rpm corrispondente alla nostra distribuzione: Fedora 14 64 bit.
$ cd /home/ermanno/vbox $ wget http://download.virtualbox.org/virtualbox/4.0.4/VirtualBox-4.0-4.0.4_70112_fedora14-1.x86_64.rpm
Calcoliamo il checksum SHA256 del file appena scaricato:
$ sha256sum VirtualBox-4.0-4.0.4_70112_fedora14-1.x86_64.rpm
e confrontiamolo con quello fornito dal sito
Virtualbox Extension Pack
Sin qui non ci sono sostanziali differenze con la procedura già analizzata, ma ora dobbiamo discostarcene per occuparci dell'Extension Pack. Infatti dalla versione 4.0 il software è stato scomposto in un pacchetto base, rilasciato con licenza GNU General Public License V2, ed un Extension Pack di cui sono disponibili solo i binari, rilasciato con licenza VirtualBox Personal Use and Evaluation License (PUEL). Lo scopo delle estensioni è introdurre alcune funzionalità aggiuntive, tra queste prenderemo in considerazione solo il VirtualBox Remote Desktop Protocol (VRDP). Altro non è che l'implementazione di Oracle all'interno del proprio prodotto del protocollo RDP di Microsoft. Preleviamo, dunque, il corrispondente file:
ed installiamolo:
$ VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-4.0.4-70112.vbox-extpack
Abbiamo fatto ricorso al comando VBoxManage
$ VBoxManage --help
A questo punto, prima di lasciare i panni di root, aggiungiamo l'utente non privilegiato con cui abbiamo fatto il login e con cui presumibilmente vogliamo gestire la macchina virtuale, al gruppo vboxusers
Creiamo la VM
Ora come utente non privilegiato creiamo la nuova macchina virtuale che chiameremo winxp.
Nella creazione, createvm
, abbiamo usato due ulteriori opzioni --ostype
--register
registrare
VBoxManage registervm
L'output del comando fornisce alcuni dettagli che è utile analizzare. Innanzitutto possiamo osservare che alla macchina virtuale viene assegnato un identificativo univoco, UUID. Questo può essere utilizzato al posto del nome descrittivo, winxp, anche se risulta alquanto scomodo. Inoltre ci viene segnalato che il file di configurazione, denominato winxp.vbox VirtualBox VMs/winxp
Ora inseriamo qualche opzione di configurazione ad hoc:
VBoxManage modifyvm "winxp" --memory 256 --acpi on --boot1 dvd --nic1 bridged --bridgeadapter1 eth0
Abbiamo modificato, modifyvm
, la macchina virtuale aggiungendo alcuni parametri di immediata interpretazione. Per completezza però analizziamoli velocemente: --memory
--acpi
--boot1
Ricordo la possibilità di adottare altri tipi di configurazione, tra cui il predefinito NAT, --nic1 nat
Passiamo ora alla creazione del disco fisso virtuale al quale corrisponderà un file con estensione .vdi
$ VBoxManage createhd --filename "winxp.vdi" --size 10000
Aggiungiamo una controller IDE:
$ VBoxManage storagectl "winxp" --name "IDE Controller" --add ide --controller PIIX4
Impostiamo il disco fisso winxp.vdi
A questo punto creiamo un'immagine ISO del sistema operativo Windows XP che chiameremo winxp.iso, e trasferiamola via scp sul server. Per comodità utilizziamo la medesima directory di lavoro vista il precedenza. Colleghiamo il file winxp.iso in modo che la VM lo veda come un cd inserito nel lettore CD/DVD e possa così effettuare il boot da quest'ultimo:
Avvio della VM
Prima di lanciare la nostra macchina virtuale apportiamo ancora qualche piccolo ritocco. Sappiamo che ci collegheremo da remoto utilizzando il protocollo VRDP e che per impostazione predefinita il server VRDP accetterà connessioni sulla porta TCP 3389. Potrebbe essere utile, per alcune considerazioni successive, utilizzare una porta diversa ad esempio la 5000:
È giunto il momento della verità: dobbiamo avviare la VM. Possiamo farlo in due modi, il primo ricorrendo all'onnipresente VBoxManage e specificando con l'opzione --type
$ VBoxManage startvm "winxp" --type headless
Il secondo metodo, da preferire per un debug degli errori più accurato, prevede l'utilizzo di VBoxHeadless
Supponendo di non aver ricevuto alcun errore all'avvio possiamo procedere con l'installazione del sistema guest.
Una piccola nota a margine: se invece di un sistema Windows volessimo installare Linux potrebbe essere sufficiente una console ssh per gestirlo. In tal caso il server VRDP risulterebbe inutile:
Nella prossima parte dell'articolo vedremo come installare il sistema ospite, come migliorare la sicurezza della nostra installazione e tutti i comandi per gestire la macchina virtuale.
Installiamo il sistema ospite
Il primo problema da affrontare è l'accesso alla macchina virtuale. Per forza di cose ci sarà necessario un programma client RDP. Se il nostro pc è dotato di un sistema Windows (XP o successivo) tra il software di base troviamo già "Connessione desktop remoto" che fa' al caso nostro. Se invece usiamo Linux sarà necessario installare il client open source rdesktop.
Possiamo ora collegarci dal nostro pc utilizzando il numero IP o l'hostname del server e specificando la porta:
$ rdesktop -a 16 -g 1024x768 server.miodominio.it:5000
le opzioni aggiuntive servono solo a specificare una profondità del colore limitata a 16 bit ed una geometria del desktop pari a 1024x768.
Se tutto funziona a dovere ci troveremo di fronte alla schermata blu d'installazione di Windows XP e potremo procedere come di consueto. Per ulteriori approfondimenti relativi alla post-installazione, in particolare Guest Additions, vi rimando al precedente articolo
Penso che qualcuno di voi abbia già storto il naso per il tipo di licenza dell'Extension Pack
Nel caso di Windows XP è possibile attivarlo con tasto destro su Risorse Del Computer
Proprietà
Connessione Remota
Consenti agli utenti di connettersi in modo remoto al computer
collegarci al sistema guest
Per disinstallare l'Extension Pack basta il comando:
In alternativa sarebbe possibile creare e configurare una macchina virtuale Windows su un host locale avendo cura di abilitare il servizio RDP. Successivamente trasferirla sull'host remoto effettuandone l'importazione. Purtroppo lo spazio a disposizione non ci permette di approfondire l'argomento.
Alcune considerazioni sulla sicurezza
Nella procedura che abbiamo seguito la connessione al server VRDP non richiede alcuna autenticazione il che, salvo trovarci in ambienti operativi particolarmente sicuri, non è una buona cosa. Oltre al momento dell'installazione, pensate al richio di lasciare per dimenticanza una sessione di Windows aperta. Chiunque collegandosi prima del lock automatico potrebbe avere accesso al nostro sistema.
Meglio ricorrere alla libreria VBoxAuth che, per impostazione predefinita, si appoggia al sistema di gestione delle utenze dell'host. In particolare su Linux opererà tramite PAM. In tal modo, previa comunicazione delle proprie credenziali d'accesso, ciascun utente presente sull'host, anche non corrispondente a quello con cui gira la VM, potrà collegarsi ad essa.
Un'altra utile libreria VBoxAuthSimple consente invece di astrarre l'autenticazione dal particolare sistema operativo, utilizzando credenziali inserite nella sezione "extradata" del file di configurazione. Per abilitarla digitiamo:
successivamente agiamo sulla VM:
le opzioni possibili sono null, external, guest. La prima non prevede autenticazione, la seconda è quella da noi utilizzata, mentre la terza è ancora in fase di test.
Generiamo ora una password criptata mediante l'utility resa disponibile da VirtualBox:
aggiungiamo utente e password alla sezione extradata:
Per la connessione ora saremo obbligati a fornire le nostre credenziali:
Comandi utili per la gestione
Di seguito vediamo i principali comandi che ci permettono di gestire la/le VM installate sul nostro server. Innanzitutto possiamo ottenere l'elenco di quelle registrate:
Se volessimo la lista delle macchine virtuali attive:
$ VBoxManage list runningvms
Per visualizzare le caratteristiche di una specifica macchina:
$ VBoxManage showvminfo "winxp"
Per fermare la VM "staccando il cavo di alimentazione":
$ VBoxManage controlvm "winxp" poweroff
per una chiusura del sistema controllata:
VBoxManage controlvm "winxp" acpipowerbutton
per farlo invece salvando lo stato su disco:
VBoxManage controlvm "winxp" savestate
per resettarla:
$ VBoxManage controlvm "winxp" reset
per metterla in pausa e risvegliarla:
$ VBoxManage controlvm "winxp" pause $ VBoxManage controlvm "winxp" resume
Ovviamente la lista delle possibili opzioni sarebbe ancora lunga, in caso di necessità potete consultare da console l'help dei comandi stessi oppure, per maggiori approfondimenti, il manuale
In chiusura, come già fatto nel precedente articolo, vi ricordo che abbiamo mosso solo i primi passi nel mondo di VirtualBox ricco di numerose altre caratteristiche come importazione ed esportazione di VM, snapshots, condivisioni host/guest, supporto per dischi virtuali di terzi ad esempio VMware VMDK o Microsoft VHD. Per nostra fortuna la dettagliata documentazione fornita da produttore rappresenta una miniera inesauribile di informazioni.