Virtualizzazione: XEN
Xen è un sistema di virtualizzazione open source, rilasciato gratuitamente sotto licenza GPL sviluppato presso il Computer Laboratory dell’Università di Cambridge. E’ un prodotto in fase di continuo sviluppo e sperimentazione, ma allo stesso tempo pronto per l’uso in ambiente di produzione.
Xen fa uso della paravirtualizzazione: non emula semplicemente l’hardware di un sistema x86, ma si frappone tra i sistemi emulati e l’hardware per regolare e distribuire l’accesso alle risorse fisiche disponibili.
Questo permette delle prestazioni decisamente superiori ai software che abbiamo valutato finora in questa serie di post dedicati alla virtualizzazione. Tuttavia, richiede che il sistema operativo guest venga modificato per essere reso compatibile con Xen, per cui la compatibilità non è così estesa. In particolare, sia le macchine host che quelle guest – va detto, tuttavia, che su Xen questa distinzione è meno netta – devono essere Linux e devono eseguire una particolare versione del kernel. Questa versione del kernel è comunque inclusa nelle principali distribuzioni.
Ovviamente, a causa della sua particolare architettura, l’installazione e configurazione di Xen non è facile e immediata come ad esempio Virtual Box, per cui questo prodotto è maggiormente indicato per un uso su server, piuttosto che per la virtualizzazione in ambiente desktop. Molti fornitori di hosting usano Xen per implementare i loro pacchetti VPS (Virtual Private Server).
Per i nostri test ho installato XEN su una Linux Ubuntu 8.04. Ho effettuato un’installazione di base, con l’aggiunta del demone ssh per poter amministrare la macchina dal mio notebook.
Il passo successivo è stata l’installazione di xen server:
apt-get install ubuntu-xen-server
Tale comando installa anche tutte le estensioni e i pacchetti necessari, incluso il kernel ubuntu-2.6.24-xen, che però ha un bug noto relativo al funzionamento della rete sulle macchine virtuali. Maggiori dettagli relativi al problema si possono trovare su https://bugs.launchpad.net/ubuntu/+source/xen-3.2/+bug/204010. Per aggirare il problema è sufficiente scaricare il kernel patchato dall’indirizzo al http://downloads.howtoforge.com/ubuntu_8.04_server_xen_from_repositories/ e installarlo con dpkg.
Va configurato il file /etc/xen-tools/xen-tools.conf, grazie al quale è possibile specificare il kernel di default del domain0 (ovvero della macchina ospitante), l’indirizzo ip della stessa, il mirror dal quale scaricare eventuali aggiornamenti o utilità. Dopo il riavvio, il nostro sistema è pronto per essere sfruttato come server di macchine virtuali.
Grazie a xen-tools abbiamo la possibilità di installare facilmente come macchine guest le distribuzioni Centos, Ubuntu e Fedora.
Ecco i comandi per creare ed avviare una macchina virtuale ubuntu 8.04 server:
xen-create-image –hostname=xen1.example.com –size=2Gb –swap=256Mb –ide \
–ip=192.168.0.101 –netmask=255.255.255.0 –gateway=192.168.0.1 –force \
–dir=/home/xen –memory=64Mb –arch=i386 –kernel=/boot/vmlinuz-2.6.24-16-xen \
–initrd=/boot/initrd.img-2.6.24-16-xen –install-method=debootstrap –dist=hardy \
–mirror=http://archive.ubuntu.com/ubuntu/ –passwd
Con questo comando, abbastanza autoesplicativo, creo in pochi minuti una macchina virtuale con le seguenti caratteristiche:
- 2 Gb di disco
- 64 Mb di ram
- ip fisso 192.168.0.101
- architettura 386
- Sistema operativo ubuntu Hardy (8.04)
- nome pc xen1.example.com
Per distribuzioni diverse da quelle citate, si deve effettivamente installare il sistema base (ma con kernel xen-compatibile) su una partizione separata, e poi associarlo al server xen.
Per avviare la macchina è sufficiente digitare:
xm create /etc/xen/xen1.example.com.cfg
xm console xen1.example.cfg
dove ovviamente il nome del file di configurazione corrisponde al nome host fornito in fase di creazione della macchina virtuale. Il nostro secondo server ubuntu è pronto all’uso.
Una nota non indifferente, è stato possibile effettuare tutte le operazioni da console ssh.
Riferimenti:
http://www.howtoforge.com/ubuntu-8.04-server-install-xen-from-ubuntu-repositories