Da qualche anno la virtualizzazione è diventata uno degli argomenti caldi del mondo IT. Le parole d'ordine sono: consolidare le infrastrutture, ridurre il consumo energetico, sfruttare le risorse hardware sotto utilizzate. L'idea di fondo, per i pochi che non lo sapessero, consiste nell'eseguire contemporaneamente più di un sistema operativo su un medesimo server fisico. È dunque necessario un sistema operativo di base, detto host, su cui venga installato ed eseguito un programma di virtualizzazione. Mediante tale software si potranno creare una o più Macchine Virtuali (VM) dotate di un sistema operativo ospite, guest, che può essere del tutto diverso dal sistema host. Le VM comunicano con l'hardware tramite il software di virtualizzazione e si comportano come se fossero normali programmi che possono essere lanciati o chiusi dal sistema ospitante.
In questo modo potremmo avere un host Linux o MacOSX su cui giri un guest Windows o viceversa. Ma anche un guest Linux su host Linux o Windows su Windows.
Esula dagli scopi di quest'articolo l'approfondimento degli aspetti tecnici relativi alla virtualizzazione, così come il confronto tra le diverse soluzioni disponibili, commerciali o libere che siano. Si vuole semplicemente fornire una soluzione pratica che sia semplice e a basso costo.
Immaginiamo di trovarci in questa situazione, per altro riscontrabile nella realtà: dopo molti sforzi abbiamo finalmente convinto il nostro cliente o capo ad installare un server Linux. Abbiamo impiegato un po' di ore di lavoro per integrarlo con i client di casa Microsoft e ci sentiamo soddisfatti. Ma ecco che salta fuori quel programma "insostituibile" disponibile solo per Windows e che neppure con wine riusciamo a far girare. Non sarebbe nemmeno necessario un sistema operativo server, ma ci basterebbe un semplice Windows XP o Seven. A questo punto, per trarci d'impaccio, possiamo ricorrere alla virtualizzazione, ma dobbiamo trovare una soluzione che minimizzi i tempi e soprattutto i costi.
Una possibile scelta può essere VirtualBox, ex prodotto Sun ora passato ad Oracle, come del resto il nostro database di riferimento MySQL. Il programma è disponibile gratuitamente e rilasciato sotto licenza GNU General Public License (GPL) versione 2, supporta vari sistemi operativi per cui l'esperienza maturata in un ambiente può essere sfruttata successivamente su altre piattaforme. I sistemi operativi host ufficialmente possono essere: Windows, MacOSX su hardware Intel, Linux e Solaris. Il sito dedicato al prodotto riporta informazioni dettagliate relative alle versioni ed eventuali possibili limitazioni. Il panorama, per quanto riguarda i sistemi guest, è ancora più ampio: Windows, Linux, MacOSX, OpenSolaris, FreeBSD, DOS e la lista sarebbe ancora lunga. Per l'elenco completo potete consultare la pagina dedicata.
Di seguito considereremo come sistema operativo host di riferimento Linux Fedora 14 a 64 bit, in lingua italiana, gestibile tramite interfaccia grafica con ambiente desktop Gnome. Il nostro obbiettivo sarà installare il software VirtualBox e quindi creare una macchina virtuale con sistema operativo guest Windows XP Pro, ma potrebbe benissimo essere un più moderno Windows 7 o Windows Server 2008.
I prerequisiti
È consigliabile partire con un sistema aggiornato, in particolare per quanto riguarda il kernel. Quindi, aperta una console ed assunti i privilegi di root, installiamo l'ultima versione del kernel disponibile per la nostra distribuzione. Dotiamoci anche dei pacchetti kernel-devel e kernel-headers o aggiorniamoli se sono già presenti. Come di consueto l'operazione risulta immediata ricorrendo a YUM:
$ yum install kernel kernel-devel kernel-headers
Gli header sono necessari perchè VirtualBox cercherà d'installare alcuni specifici moduli del kernel vboxdrv, vboxnetflt e vboxnetadp. Senza il primo saremmo in grado di usare il software per configurare una macchina virtuale, ma non riusciremmo a farla funzionare. Gli ultimi due, invece, sono dedicati ad alcune funzioni avanzate di networking.
È caldamente consigliato installare il pacchetto dkms (Dynamic Kernel Module Support). Con i futuri aggiornamenti del kernel i moduli saranno automaticamente ricostruiti senza particolari interventi da parte nostra:
$ yum install dkms
Per la costruzione dei moduli saranno sicuramente necessari GNU compiler e GNU Make. Potrebbe essere la buona occasione per installare o aggiornare i pacchetti: gcc, make, binutils, automake, autoconf.
Poiché vogliamo sfruttare l'interfaccia grafica di configurazione, scelta consigliabile almeno per i primi esperimenti, dobbiamo poter utilizzare le librerie Qt versione 4.4.0 o superiore e SDL versione 1.2.7 o superiore. In realtà esiste una GUI semplificata per la quale sono necessarie solo le librerie SDL. Procediamo quindi con il comando:
$ yum install gcc make binutils automake autoconf qt SDL
YUM si occuperà d'installare ciò che manca o aggiornare ciò che è già presente nel nostro sistema. A questo punto il il lavoro preparatorio è terminato ed il terreno è pronto per VirtualBox.
Installiamo VirtualBox
Tralasciamo la possibilità di compilazione dei sorgenti ed indirizziamoci sulla via dei pacchetti precompilati, fortunatamente disponibili per la nostra distribuzione. Di seguito vedremo due modi alternativi di procedere, scegliete quello che più vi aggrada.
Il primo consiste nel prelevare l'rpm dal sito del produttore. Accediamo alla pagina di download, cerchiamo Fedora 14 nell'elenco delle distribuzioni e selezioniamo il link appropriato. Se utilizziamo una versione a 64 bit sarà AMD64, indipendentemente dal fatto che il nostro processore sia Intel o AMD, in caso contrario scegliamo i386. Al momento della stesura dell'articolo l'ultima versione disponibile è VirtualBox-4.0-4.0.4_70112_fedora14-1.x86_64.rpm.
Possiamo verificare eventuali corruzioni o manipolazioni del pacchetto scaricato, ottenendo dal sito del produttore il suo checksum SHA256 (o MD5) e confrontandolo con quello ricavato dal file in nostro possesso:
$ sha256sum VirtualBox-4.0-4.0.4_70112_fedora14-1.x86_64.rpm
Superato il test possiamo procedere con l'installazione:
$ rpm -ivh VirtualBox-4.0-4.0.4_70112_fedora14-1.x86_64.rpm
Durante il processo riceveremo alcuni messaggi tra cui l'avviso che è stato creato il gruppo vboxusers. È importante che l'utilizzatore di VirtualBox appartenga a tale gruppo.
Inoltre potremo consultare le informazioni registrate durante la compilazione dei moduli del kernel aprendo il file /var/log/vbox-install.log. La presenza di tali moduli nel nostro sistema è verificabile con il comando:
$ lsmod | grep vbox
esso dovrà restituire alcune informazioni relative a vboxdrv, vboxnetadp, vboxnetflt.
Il secondo metodo d'installazione, utile anche per i successivi aggiornamenti del programma, consiste nell'aggiungere alla configurazione di YUM il repository messo a disposizione da Oracle. Creiamo nella directory /etc/yum.repos.d/ un file di testo che potremo chiamare virtualbox.repo. Al suo interno inseriamo:
[virtualbox] name=Fedora $releasever - $basearch - VirtualBox baseurl=http://download.virtualbox.org/virtualbox/rpm/fedora/$releasever/$basearch enabled=1 gpgcheck=1 gpgkey=http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc
A questo punto YUM si occuperà di scegliere l'rpm corretto per la nostra distribuzione, di scaricare ed importare la chiave pubblica, di controllare la firma del pacchetto.
$ yum install virtualbox
Se tutto è andato per il verso giusto potremo lanciare la GUI di VirtualBox selezionando Applicazioni / Strumenti di sistema / Oracle VM VirtualBox. Ci si presenterà una finestra, al momento vuota, suddivisa in due sezioni: la parte sinistra dedicata all'elenco delle macchine virtuali, la parte destra dedicata alle configurazioni relative alla VM selezionata. Ora possiamo procedere alla creazione della nostra prima macchina virtuale e all'installazione del sistema operativo guest Windows XP.
Creiamo la prima VM
Cliccando sul pulsante Nuova, in alto a sinistra, partirà una procedura guidata che ci condurrà per mano offrendoci ad ogni passo utili suggerimenti. Le prime scelte che ci vengono richieste riguardano il nome da assegnare alla nuova VM, ad esempio "winxp", il tipo di sistema operativo e la versione.
La successiva scelta riguarda la quantità di RAM da assegnare alla VM. Ovviamente dipende dalle risorse hardware disponibili sul nostro server, dal s.o. scelto e dalle applicazioni che dovranno essere eseguite all'interno del guest. Tranquilli, il valore indicato non è definitivo, ma potrà essere modificato in futuro a patto che si fermi temporaneamente la macchina virtuale.
Si passa poi al disco fisso, nel nostro caso selezioniamo l'opzione Crea un nuovo disco fisso. La creazione guidata del disco virtuale ci metterà di fronte a due alternative: unità ad espansione dinamica o unità fissa. Nel primo caso il file che rappresenta virtualmente il disco fisso potrà avere dimensioni iniziali limitate e poi man mano ampliarsi secondo le necessità, fino al raggiungimento della dimensione massima prefissata. Nel secondo caso, invece, verrà subito allocato tutto lo spazio richiesto. Procedendo viene domandata la posizione di memorizzazione ed il nome da assegnare al file. Viene proposto un nome uguale a quello scelto per la VM con l'aggiunta dell'estensione .vdi e, come directory, VirtualBox VMs automaticamente creata dal programma nella home dell'utente. Confermiamo le scelte per il disco fisso e, nella successiva finestra, confermiamo il riepilogo delle opzioni relative alla macchina virtuale. La procedura guidata termina finalmente con la sua creazione.
Selezionando nella finestra di gestione il nome della nuova VM, a destra potremo visualizzare le sue opzioni di configurazione. A macchina virtuale ferma queste possono anche essere modificate. Oltre ai parametri impostati durante la creazione guidata avremo a disposizione molte altre voci come audio, rete, cartelle condivise, porte seriali, usb etc.. Non c'è lo spazio per esplorarle tutte ci soffermeremo brevemente solo sulle impostazioni di rete.
La modalità operativa predefinita è Network Address Translation (NAT). Il sistema guest si collegherà all'esterno attraverso l'interfaccia di rete del sistema host come farebbe un computer collegato alla rete tramite un router. Il tutto potrebbe già funzionare senza toccare la configurazione della VM. Purtroppo, risultando invisibile ai computer della rete, non potrà fornire servizi se non impostando il "port forwarding". VirtualBox si metterà in ascolto su una o più porte del sistema host e ridirigerà i pacchetti al sistema guest, sulla medesima o altra porta. Chiaramente entrambi i sistemi non potranno fornire servizi sulla medesima porta, ad esempio non ci potranno essere due web server, uno host ed uno guest, entrambi in attesa di connessioni sulla porta 80. Di seguito un esempio di impostazione di port forwarding:
$ VBoxManage modifyvm "winxp" --natpf1 "guestservice,tcp,,1222,,3222"
Notiamo subito il comando VBoxManage, molto importante, perché permette di impostare via riga di comando tutto ciò che possiamo configurare tramite interfaccia grafica ed anche di più. Nell'esempio riconosciamo tra virgolette il nome assegnato alla macchina virtuale, mentre il numero dopo --natpf individua l'interfaccia di rete. Con "guestservice" assegniamo un nome descrittivo alla regola di forwarding che ci permetterà di manipolarla in futuro. Ovviamente tcp indica il protocollo ed i restanti numeri stanno a significare che tutto il traffico TCP in arrivo sulla porta 1222 dell'host verrà ridiretto sulla 3222 del guest.
Come modalità alternativa possiamo scegliere il bridging (scheda con bridge). In tal caso il sistema guest si comporterà come se fosse fisicamente collegato alla rete mediante cavo. Per ottenere ciò VirtualBox crea via software una vera e propria interfaccia di rete ed intercetta i dati in arrivo sulla scheda fisica dell'host immettendoli in quest'ultima. Il sistema guest risulterà perfettamente visibile al sistema host e agli altri computer della rete e raggiungibile mediante il proprio indirizzo IP.
Installiamo il sistema ospite
Apportate le prime configurazioni che, ribadisco, potremo poi modificare ed integrare successivamente, passiamo all'installazione del sistema operativo ospite. Supponiamo di voler utilizzare come media un cd di Windows XP, inseriamo dunque il supporto nel lettore CD/DVD e clicchiamo sul pulsante Avvia. Anche in questo caso un comodo wizard, denominato Assistente di primo avvio, ci guiderà nella selezione della corretta fonte d'installazione, che nel nostro caso sarà il lettore host. Pochi click ed ecco visualizzata la schermata d'installazione di Windows XP, proprio come se avessimo fatto il boot da cd.
Da questo momento procediamo come se ci trovassimo su un nuovo computer privo di sistema operativo. Terminata la procedura il sistema guest farà bella mostra di se' nella finestra di VirtualBox.
Se al posto di un cd/dvd fisico fossimo in possesso di un'immagine ISO, situazione comune per i sistemi Linux downlodati, non sarebbe necessario masterizzarla. Nella finestra dell'Assistente di primo avvio clicchiamo sull'iconcina che rappresenta una cartella, accanto al menù di selezione. Nella successiva finestra di dialogo selezioniamo dal nostro disco il file immagine. Questo verrà presentato alla macchina virtuale come se fosse un normale cd/dvd. Sfrutteremo in seguito questa caratteristica per installare un utilissimo software denominato Guest Additions.
Per spegnere la macchina virtuale dal sistema guest possiamo procedere come di consueto utilizzando il pulsante Start. Se invece clicchiamo sul pulsante di chiusura della finestra (x) ci verranno proposte tre opzioni:
- Salvare lo stato della macchina: simile all'ibernazione di un portatile, quando la faremo ripartire si troverà nelle esatte condizioni in cui l'avevamo lasciata.
- Inviare il segnale di arresto: ha lo stesso effetto della pressione del pulsante di spegnimento che, nelle macchine moderne, dovrebbe lanciare il corretto shutdown del sistema.
- Spegni la macchina: equivale a staccare il cavo di alimentazione, la macchina verrà spenta senza effettuare un corretto shutdown.
Guest Additions
Occupiamoci ora di questo software che, come si desume dal nome, consiste in alcuni drivers e applicazioni aggiuntive che ottimizzeranno il funzionamento del sistema guest. Tra l'altro con l'installazione risolveremo un problemino piuttosto noioso che, se siete arrivati sin qui, avrete sicuramente sperimentato: la cattura di mouse e tastiera. Al momento, infatti, il "possesso" di tali dispositivi può essere o del sistema host o della macchina virtuale. Cliccando sulla finestra della VM otteniamo la cattura di tastiera e mouse da parte del guest, come una finestra di alert ci sottolinea. Per liberarli sarà necessario utilizzare l'"host key", per default il tasto CTRL di destra, operazione a lungo andare fastidiosa. L'installazione di Guest Additions renderà il comportamento della finestra maggiormente interattivo ed analogo a quello di tutti gli altri programmi: spostando il focus automaticamente verranno rilasciati i dispositivi di input evitando il ricorso all'host key.
Supponendo che la VM sia ferma, nella finestra principale di gestione scegliamo la voce Archiviazione e nell'Albero di archiviazione selezioniamo l'icona del lettore CD/DVD. Clicchiamo ora sull'iconcina alla destra del menù a discesa Lettore CD/DVD e selezioniamo la voce Scegli un file di disco CD/DVD virtuale. Navighiamo le directory del nostro disco fisso sino ad arrivare in /usr/share/virtualbox dove troveremo il file VBoxGeustAdditions.iso.
Riavviamo la macchina virtuale con un doppio click o selezionando il pulsante Avvia e, terminato il boot, l'immagine ISO risulterà montata dal sistema guest come un comune cd da cui potremo far partire l'installazione, se già non ci avrà pensato l'autorun.
L'integrazione dei dispositivi di input non è che una delle proprietà introdotte da Guest Additions, queste spaziano dal miglioramento del supporto alle schede video, all'utilizzo di cartelle condivise, alla condivisione tra guest e host degli appunti (clipboard).
Notate che il mount di un'immagine ISO si può eseguire anche a macchina avviata dal menù Dispositivi / Dispositivi CD/DVD / Scegli un file di disco CD/DVD virtuale.
Bene, a questo punto non ci resta che predisporre il sistema guest allo svolgimento dei compiti per cui lo abbiamo installato.
Termina qui la trattazione, naturalmente non abbiamo visto che la punta dell'iceberg, moltissime altre sarebbero le caratteristiche da prendere in considerazione come Snapshots, Importazione ed Esportazione di VM per non parlare delle tante opzioni di configurazione accessibili dalla finestra di gestione. Fortunatamente la documentazione sul sito del produttore è abbondante e dettagliata e vi consentirà di sviscerare gli aspetti più utili alle vostre applicazioni. La soluzione offerta da VirtualBox, oltre ad essere multipiattaforma, risulta anche scalabile potendo soddisfare le esigenze aziendali così come quelle personali di chi voglia sperimentare più sistemi operativi sul proprio personal computer.
Un capitolo a parte è rappresentato dalla completa gestione del software tramite riga di comando che ci consente di operare anche su server privi d'interfaccia grafica. Anzi, come accennato, tale modalità risulta anche più potente della GUI. In tal modo potremmo installare e gestire una VM Windows su un server Linux remoto, accessibile solo via ssh. Basterà poi utilizzare Desktop Remoto per accedere al sistema operativo guest......ma questo potrebbe essere argomento di un prossimo articolo.