In questo articolo vediamo
l'installazione e configurazione di XEN
(1) (2), una
macchina
paravirtuale dalle ottime prestazioni che permette di far girare
più sistemi operativi (detti GuestOS o domU) al di sopra di un
sistema Linux (detto HostOS o dom0).
1. Terminologia
Di seguito sono riportate le descrizioni dei termini più
utilizzati nell'articolo:
Virtual
Machine (VM): è il termine generico che indica l'ambiente
di esecuzione di un Sistema Operativo, cioè un ambiente in cui
le risorse hardware sono "virtualizzate" e rese disponibili/visibili ai
Sistemi Operativi ospiti.
Virtual
Machine Monitor (VMM o Hypervisor): è lo strato del
Kernel che permette il monitoraggio/gestione delle VM e che
crea, quindi, un livello "monitor" intermedio fra l'HostOS e i GuestOS
garantendo isolamento e compatibilità.
HostOS
o dom0 (domain privileged): è il sistema operativo su cui
è installato XEN. Si tratta di una certa versione di Linux
(Debian, Ubuntu, Slackware, Fedora, etc...) su cui è installato
il XEN-Kernel che permette la creazione di altre Virtual Machine su cui
installare altri Sistemi Operativi (GuestOS). Generalmente ci si
riferisce a dom0 anche come "prima Macchina Virtuale" o "Macchina
Virtuale privilegiata".
GuestOS
o domU (domain unprivileged): è il sistema operativo
installato su una VM e quindi "Ospite" dal punto di vista dell'HostOS.
Ci si riferisce a questi OS anche come domU, cioè "dominio NON
privilegiato" per distinguerli nettamente da dom0. Ad un eventuale
Kernel compilato appositamente per un GuestOS Linux ci si riferisce con
il termine xenU-Kernel.
2. Installazione dai Sorgenti
Potete installare XEN sia dai sorgenti sia da pacchetti preconfezionati
per la vosta distribuzione. Il secondo caso è conveniente sotto
sistemi debian-like (come Ubuntu) poichè il processo è
generalmente più veloce anche se meno flessibile ai cambiamenti
e alle correzioni di errori rispetto all'installazione dai sorgenti.
Visto che l'installazione dal sorgente è il metodo più
universale, adottabile senza problemi su qualsiasi distribuzione,
procederemo alla descrizione di questo tipo d'installazione. Per una
trattazione sull'installazione di XEN su sistemi debian-like vedasi il
seguente link:
https://help.ubuntu.com/community/Xen.
Scaricate i sorgenti dell'ultimo XEN disponibile
QUI. Dopo aver scaricato
il sorgente è sufficiente compilarlo come un normale kernel
Linux ma NON prima di aver scaricato la versione del Kernel di Linux
originale corrispondente. Per la versione 3.1 di XEN è
necessario scaricare il kernel 2.6.18
QUI. E'
necessario scaricare la versione in bz2 e posizionarla sotto la
directory creata dopo la scompattazione di XEN (la directory dovrebbe
avere un nome come
xen-3.1.0-src).
Il processo di configurazione/compilazione di XEN altro non fa che
modificare il Kernel originale 2.6.18 di Linux applicando una serie di
"patch" che "virtualizzano" il Kernel rendendolo in grado di gestire
delle VM su cui saranno installati i GuestOS.
Generalmente è necessario riconfigurare il Kernel prima
dell'installazione poichè la maggior parte delle volte mancano
le opzioni per i ponti IDE/ISA che non permettono di avviare
correttamente il XEN-Kernel ritornando errori molto comuni in fase di
avvio quali:
"Please append a correct "root=" boot
option
Kernel panic: VFS: Unable to mount
root fs on unknown-block(0,0)"
Quindi, dalla directory dei sorgenti di XEN digitare:
make linux-2.6-xen-config CONFIGMODE=menuconfig (or xconfig)
A questo punto potete configurare il XEN-Kernel come un normale
Kernel Linux. Potete, ovviamente, caricare anche un file di
configurazione precedentemente confezionato. Potete scaricare
QUI
un config abbastanza universale che dovrebbe permettervi di far avviare
il XEN-Kernel sulla maggior parte delle macchine comuni.
NOTA:
questo config è valido SOLO per la versione del kernel 2.6.18.
Una volta salvata la nuova configurazione, uscite e digitate i comandi:
make
Avvia il processo di compilazione. Errori in questa fase sono
dovuti a mancanza di componenti e librerie sulla vostra Linux-Box come
ad esempio gettext, Latec o estensioni gcc.
make install
Provvede all'installazione del XEN-Kernel nella directory
/boot del vostro sistema e dei tool
necessari alla gestione di XEN.
Prima di procedere oltre è necessaro verificare che il sistema
possa avviarsi correttamente con il XEN-Kernel. E' necessario, quindi,
configurare il proprio boot-loader per avviare XEN.
3. Configurare il boot-loader
E' necessario che abbiate installato GRUB come boot-loader sul vostro
sistema. Sfortunatamente nessun altro boot-loader (come, ad esempio,
LILO) è in grado di caricare il XEN-Kernel. Supponendo che
abbiate già installato GRUB, è sufficiente modificare
il file
menu.lst
generalmente presente sotto
/boot/grub:
title ->XEN3.1-2.6.18
kernel /boot/xen-3.1.gz
module /boot/vmlinuz-2.6.18-xen
root=<your_root> ro console=tty0
#Per l'uso di un'immagine di avvio (riga seguente) continuare a
leggere!!
module
/boot/initrd-2.6-xen.img
A seconda di come avete compilato il Kernel non avete bisogno
dell'initrd che, inoltre, è generalmente fonte di problemi. Ad
ogni
modo, se dopo tutti i tentativi di ricompilazione del caso (componenti
FS
compilate statiche, BUS Option IDE/ISA compilate statiche per la vostra
architettura, etc...) incontrate ancora problemi al boot, potete
generare una
immagine di avvio con i comandi seguenti (adattati alla vostra versione
di Xen):
depmod 2.6.18-xen
mkinitrd -o /boot/initrd-2.6-xen.img 2.6.18-xen
In caso stiate utilizzando una distribuzione recente (ultime versioni
di Ubuntu, Fedora o simili...) potreste
non avere a disposizione il comando mkinitrd ma bensì
mkinitramfs. In questo caso la sintassi resta comunque
invariata:
depmod 2.6.18-xen
mkinitramfs -o /boot/initrd-2.6-xen.img 2.6.18-xen
il parametro
<your_root>
deve essere rimpiazzato con la vostra root partition, cioè la
partizione di "/" su cui è installato il vostro Linux HostOS
(tipo /dev/hda1).
A questo punto dovreste essere in grado di riavviare il sistema
utilizzando il XEN-Kernel dal menu di GRUB all'avvio.
4. Istanziare le VM ed "installare" i GuestOS
Una volta avviato dom0 dovrebbe essere possibile utilizzare il sistema
Linux normalmente, avviando anche il vostro WM preferito. Fate un
controllo preliminare sulle risorse riconosciute quali schede di rete,
schede audio, mouse, etc...Se manca qualcosa è necessaria una
riconfigurazione del Kernel o un caricamento dei moduli adeguato. Ad
ogni modo, se esistono i supporti compilati nel Kernel (o staticamente
o come modulo), non dovreste incontrare problemi poichè nelle
fasi di avvio del sistema vengono processati i medesimi script di init
che utilizzate per il sistema Linux su cui non è installato XEN.
Per gestire le VM è necessario avviare un demone dal nome
xend che è consigliabile
inserire in qualche script di avvio in modo da averlo avviato sempre
automaticamente quando caricate il XEN-Kernel.
Vedasi successivamente per un esempio di
script di avvio con tutte le configurazioni necessarie al corretto
funzionamento delle VM e del dom0.
Lanciato il demone
xend potete
verificare lo stato della prima macchina virtuale digitando:
xm list
xm è il comando principale di XEN che permette, con vari
parametri, di gestire le VM. E' possibile crearle, distruggerle,
riavviarle, etc...E' sufficiente digitare
xm senza parametri per verificare
le differenti possibilità di utilizzo. Il comando precedente
visualizza lo stato di tutte le macchine virtuali correntemente in uso.
Inizialmente dovreste visualizzare soltanto le informazioni relative a
dom0.
4.1 Linux domU
E' il momento di installare qualche GuestOS Linux per il test delle VM.
Questa parte è notevolmente dipendente dalla distribuzione di
Linux installata come HostOS poichè possono essere possibili
diverse modalità di installazione/creazione di un GuestOS. Ad
esempio, per i sistemi Debian-like è consigliato l'utilizzo di
debootstrap,
mentre per i sistemi Red-Hat-Based si utilizza
rpmstrap che permettono di
creare delle immagini di un OS che verrà caricato all'interno di
una VM.
E' possibile velocizzare e semplificare questo passaggio recuperando
delle immagini preconfezionate di diversi LinuxOS (GuestOS-Image)
direttamente da
Jailtime.
Qui sono
disponibili varie immagini di Linux OS quali Debian 3.1, Slackware 11 o
Fedora Core 6. E' sufficiente scompattarle e modificarne la dimensione
poichè, inizialmente, hanno una dimensione pari ad 1GB che
generalmente non è sufficiente se si vuole installare altro
software nei GuestOS (si deve considerare che queste immagini sono
minimali e quindi prive di qualsiasi software aggiuntivo. Manca anche
l'ambiente grafico che deve essere installato a parte, come non sono
presenti altri tool solitamente utili/necessari come apache, postfix,
clamav, etc...soprattutto in ambito Server).
A tal scopo potete utilizzare questo script (copiate ed incollate
questo script in un file dal nome
resize_script
dandogli i permessi di esecuzione con
chmod
775 resize_script):
#!/bin/sh
dd if=/dev/zero
of=$1 bs=1M conv=notrunc count=1 seek=$2
losetup /dev/loop0
$1
e2fsck -f
/dev/loop0
resize2fs
/dev/loop0
e2fsck -f
/dev/loop0
losetup -d
/dev/loop0
Passando come primo parametro il nome dell'immagine da ridimensionare e
come secondo parametro la nuova dimensione dell'immagine in MB, come da
esempio seguente:
./resize_script debianGuest.img 2500
Ovviamente lo script va eseguito da root.
All'interno di queste immagini trovate anche i file di configurazione
necessari all'avvio della VM in cui girerà l'OS scelto. Per
default tali file devono essere posizionati sotto la cartella "
/etc/xen". Il file di
configurazione è simile al seguente:
kernel =
"/boot/vmlinuz-2.6.18-xen" #Ovviamente, adattate la
configurazione alla vostra versione di XEN.
memory = 128
name = "debian.3-1-guest01"
vif = [ 'bridge=xenbr0' ]
dhcp = "dhcp"
disk =
['file:/path/debian.3-1-guest01.img,sda1,w','file:/path/debian-guest01.swap,sda2,w' ]
root = "/dev/sda1 ro"
- Come opzione "kernel"
potete passare direttamente il Kernel di XEN che utilizzate
in dom0. XEN, essendo una macchina paravirtuale, non permette di
avviare Kernel NON modificati (a meno di non disporre di una macchia
con supporto per la virtualizzazione ad hardware [HVM]) e quindi
necessita di avviare uno
XEN-Kernel anche per i GuestOS.
- NOTA:
In alternativa al kernel di XEN, è possibile compilare un Kernel
minimale apposito per il domU. A questo scopo esistono dei comandi
appositi per compilare un xenU-Kernel che non modifichi la
configurazione dello XEN-Kernel presente in dom0. Dalla directory dei
sorgenti di XEN digitare:
make linux-2.6-xenU-config
CONFIGMODE=menuconfig [
OPZIONALE,
solo se si vuole una
configurazione particolare del xenU kernel]
make linux-2.6-xenU-build
depmod
make linux-2.6-xenU-install
- Dopo aver compilato il xenU-Kernel è sufficiente copiare
la cartella dei moduli presente in dom0 in /lib/modules/2.6.[...]-xenU nella
directory /lib/modules del
domU e sostituire la riga 'kernel'
del file di configurazione mostrato sopra con l'immagine al nuovo
kernel creato. L'immagine si trova, di default, nella directory /boot con il nome vmlinuz_2.6.[...]-xenU. Se
utilizzate un'immagine per il guestOS, come descritto precedentemente,
è necessario montarla come partizione per copiarvi la cartella
dei moduli. A tale scopo utilizzate il seguente comando:
mount
/path/immagine.img
/mnt/punto_mount -o loop
- Scaricate questi 2 script per automatizzare il procedimento (il
primo effettua la compilazione e chiede se copiare i moduli in domU
lanciando lo script 2): LINK1,
LINK2
(cambiate i path nel secondo script).
- L'opzione principale è "disk"
che è della forma: ['immagine_GuestOS,
partizione_root_virtuale, modalità' , 'file_swap_GuestOS,
partizione_swap_virtuale, modalità'].
- L'opzione "vif" è
relativa alla configurazione della rete. Vedasi successivamente per
tale configurazione.
Ipotizzando di aver una GuestOS-Image di debian possiamo salvare la
configurazione precedente in un file dal nome
debianGuest01 sotto la direcotry "
/etc/xen". A questo punto
dovreste essere in grado di avviare una VM con il seguente comando:
xm create -c debianGuest01 vmid=1
Nella console avrete, quindi, un'altra distribuzione di Linux a
tutti gli effetti funzionante e isolata dal dom0. Potete quindi
installare ciò che preferite (X compreso, vedasi successivamente
per l'utilizzo dell'ambiente grafico nelle VM) utilizzando i consueti
strumenti della distribuzione scelta.
4.2 Windows domU
NOTA:
Per far girare un sistema Windows tramite XEN è necessario che
il vostro hardware supporti la tecnologia HVT (Hardware
Virtualization). Nello specifico è il processore che deve
possedere il set di istruzioni necessario per la virtualizzazione.
Esempi sono IVT di intel e Pacifica di AMD. Se il vostro processore NON
possiede questo supporto NON potete far girare sistemi Windows, come
GuestOS, sulla vostra macchina utilizzando XEN.
Per utilizzare Windows come GuestOS è necessario installarlo,
solitamente in un file d'immagine, a partire dal file iso o dal cdrom.
Il file di configurazione necessario per creare una macchina virtuale
in cui lanciare l'installazione di Windows è riportato di
seguito.
NOTA:
All'atto dell'installazione dovete utilizzare il seguente file
specificando l'opzione
"boot = 'd'".
kernel = "/usr/lib/xen/boot/hvmloader"
#builder='linux'
builder='hvm'
memory = 256
name = "WinXPGuest"
vif = [ 'bridge=xenbr0' ]
disk = [
'file:/path/winxp.img,hda3,w',
'file:/path/winiso.iso,hdc:cdrom,r' ]
boot = 'd'
device_model =
'/usr/lib/xen/bin/qemu-dm'
cdrom = '/home/winiso.iso'
root = "/dev/hda3 ro"
extra = "4"
vnc = 1
vncviewer = 1
sdl = 0
stdvga = 0
serial = 'pty'
ne2000 = 0
Terminata l'installazione cambiate il parametro boot in "boot =
'c'". Prestate attenzione alle voci "
kernel"
e "
builder" che sono
differenti rispetto al caso precedente (l'opzione "
builder" era omessa nella
configurazione precedente poichè "
linux" è il parametro di
default).
Tricks:
1]
Per creare una immagine di WindowsXP avviabile potete usare il seguente
comando:
dd
if=/dev/cdrom of=winiso.iso
Dove, ovviamente,
/dev/cdrom
è il device in cui è presente il CD di installazione di
WindowsXP (NON montato).
2]
Potete avviare come macchina virtuale anche un WindowsXP
precedentemente installato sulla vostra macchina senza, quindi,
installarlo in un fiile immagine locale come visto in precedenza. In
questo caso, è sufficiente modificare l'opzione disk in modo
simile al seguente:
disk = ['phy:/dev/hda2,sda1,w']
Specificando che la partizione hda2 di WindowsXP vista dal Dom0 deve
essere esportata read-write in un nuovo dominio sda1. Ovviamente,anche
il parametro
root deve essere
impostato a /dev/hda2.
5. Configurare la Rete
La configurazione della rete è uno degli aspetti più
delicati ed importanti di XEN. Il corretto funzionamento della rete
avviene utilizzando le cosiddette interfacce dummy che permettono di
creare un ponte "trasparente" tra i domU e dom0, mantenendo inalterata
la capacità di connessione di dom0 stesso (esistono altri
sistemi forse più rapidi di bridging diretto fra domU e dom0
che, però, impediscono il corretto funzionamento della rete da
parte di dom0 stesso...). Una volta eseguito xend, se digitate il
comando "
ifconfig" da dom0
dovrebbe apparirvi un output simile al seguente:
eth0 Link encap:Ethernet HWaddr
00:C0:9F:82:EA:80
inet
addr:192.168.0.4 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr:
fe80::2c0:9fff:fe82:ea80/64 Scope:Link
UP BROADCAST
RUNNING MULTICAST MTU:1500 Metric:1
RX packets:51
errors:0 dropped:0 overruns:0 frame:0
TX packets:42
errors:0 dropped:0 overruns:0 carrier:0
collisions:0
txqueuelen:1000
RX bytes:7864
(7.6 KiB) TX bytes:3047 (2.9 KiB)
Interrupt:20
Base address:0xe000
lo Link encap:Local
Loopback
inet
addr:127.0.0.1 Mask:255.0.0.0
inet6 addr:
::1/128 Scope:Host
UP LOOPBACK
RUNNING MTU:16436 Metric:1
RX packets:0
errors:0 dropped:0 overruns:0 frame:0
TX packets:0
errors:0 dropped:0 overruns:0 carrier:0
collisions:0
txqueuelen:0
RX bytes:0 (0.0
b) TX bytes:0 (0.0 b)
vif0.0 Link encap:Ethernet HWaddr
FE:FF:FF:FF:FF:FF
inet6 addr:
fe80::fcff:ffff:feff:ffff/64 Scope:Link
UP BROADCAST
RUNNING NOARP MTU:1500 Metric:1
RX packets:10624
errors:0 dropped:0 overruns:0 frame:0
TX packets:15792
errors:0 dropped:0 overruns:0 carrier:0
collisions:0
txqueuelen:0
RX bytes:787766
(769.3 KiB) TX bytes:19487567 (18.5 MiB)
vif1.0 Link encap:Ethernet HWaddr
FE:FF:FF:FF:FF:FF
inet6 addr:
fe80::fcff:ffff:feff:ffff/64 Scope:Link
UP BROADCAST
RUNNING NOARP MTU:1500 Metric:1
RX packets:3685
errors:0 dropped:0 overruns:0 frame:0
TX packets:3670
errors:0 dropped:2 overruns:0 carrier:0
collisions:0
txqueuelen:32
RX
bytes:14173450 (13.5 MiB) TX bytes:262684 (256.5 KiB)
vif2.0 Link encap:Ethernet HWaddr
FE:FF:FF:FF:FF:FF
inet6 addr:
fe80::fcff:ffff:feff:ffff/64 Scope:Link
UP BROADCAST
RUNNING NOARP MTU:1500 Metric:1
RX packets:12104
errors:0 dropped:0 overruns:0 frame:0
TX packets:6953
errors:0 dropped:1 overruns:0 carrier:0
collisions:0
txqueuelen:32
RX bytes:5092861
(4.8 MiB) TX bytes:524908 (512.6 KiB)
xenbr0 Link encap:Ethernet HWaddr
FE:FF:FF:FF:FF:FF
UP BROADCAST
RUNNING MULTICAST MTU:1500 Metric:1
RX packets:8
errors:0 dropped:0 overruns:0 frame:0
TX packets:3
errors:0 dropped:0 overruns:0 carrier:0
collisions:0
txqueuelen:0
RX bytes:440
(440.0 b) TX bytes:238 (238.0 b)
xenbr1 Link encap:Ethernet HWaddr
00:00:00:00:00:00
inet6 addr:
fe80::200:ff:fe00:0/64 Scope:Link
UP BROADCAST
RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0
errors:0 dropped:0 overruns:0 frame:0
TX packets:6
errors:0 dropped:0 overruns:0 carrier:0
collisions:0
txqueuelen:0
RX bytes:0 (0.0
b) TX bytes:468 (468.0 b)
Oltre ad eth0 e lo, le interfacce che vedete sono "interfacce di rete
virtuali" create automaticamente da XEN. Lo scopo è quello di
eseguire un "ponte" ("bridge", appunto) fra dom0 e domU usando i
xenbr (XEN Bridge) messi a
disposizione da XEN.
NOTA: Se non visualizzate nulla al di fuori di eth0/lo, è
probabile che
non siano installati i pacchetti per il bridge-control (brctl). Se
controllate
nel file di log
/var/log/xen/xend.log
dovreste trovare degli errori che riguardano proprio brctl. Su Ubuntu
ed i sistemi Debian-Like dovreste trovare le utility necessarie nel
pacchetto
bridge-utils.
E' necessario, prima di tutto, creare l'interfaccia dummy come segue:
1. Inserite i seguenti parametri in /etc/modprobe.conf:
alias dummy dummy0
options dummy
numdummies=1
2. Caricate il modulo dummy (inserite il seguente comando in qualche
script di avvio in modo da essere certi che il modulo sia caricato ad
ogni avvio della macchina):
modprobe dummy
3. Assegnate alla nuova dummy-interface un indirizzo IP differente da
quello della vostra interfaccia fisica. Ad esempio, se eth0 ha
indirizzo IP 192.168.0.4 potete digitare:
ifconfig dummy0 192.168.10.10
4. A questo punto create un file con nome, ad esempio,
my-scriptnet con il seguente
contenuto:
#!/bin/bash
dir=$(dirname "$0")
"$dir/network-bridge" "$@" vifnum=0 netdev=dummy0 bridge=xenbr0
fornitegli i permessi di esecuzione:
chmod 775
my-scriptnet
e spostatelo nella cartella
"/etc/xen/scripts".
5. Editate il file
"/etc/xen/xend-config.sxp" come segue:
#
# Xend configuration file.
#
(xend-relocation-server yes)
# The hosts allowed to talk to the relocation port. If this is
empty (the
# default), then all connections are allowed (assuming that the
connection
# arrives on a port and interface on which we are listening; see
# xend-relocation-port and xend-relocation-address above).
Otherwise, this
# should be a space-separated sequence of regular expressions.
Any host with
# a fully-qualified domain name or an IP address that matches one of
these
# regular expressions will be accepted.
#
# For example:
# (xend-relocation-hosts-allow '^localhost$ ^.*\.example\.org$')
#
#(xend-relocation-hosts-allow '')
(xend-relocation-hosts-allow '^localhost$')
##
# To bridge network traffic, like this:
#
# dom0: fake eth0 -> vif0.0 -+
#
|
#
bridge
-> real eth0 -> the network
#
|
# domU: fake eth0 -> vifN.0 -+
#
# use
#
(network-script my-scriptnet)
# The script used to control virtual interfaces. This can be
overridden on a
# per-vif basis when creating a domain or a configuring a new
vif. The
# vif-bridge script is designed for use with the network-bridge script,
or
# similar configurations.
#
# If you have overridden the bridge name using
# (network-script 'network-bridge bridge=<name>') then you may
wish to do the
# same here. The bridge name can also be set when creating a
domain or
# configuring a new vif, but a value specified here would act as a
default.
#
# If you are using only one bridge, the vif-bridge script will discover
that,
# so there is no need to specify it explicitly.
#
(vif-script vif-bridge)
# Dom0 will balloon out when needed to free memory for domU.
# dom0-min-mem is the lowest memory level (in MB) dom0 will get down to.
# If dom0-min-mem=0, dom0 will never balloon out.
(dom0-min-mem 196)
# In SMP system, dom0 will use dom0-cpus # of CPUS
# If dom0-cpus = 0, dom0 will take all cpus available
(dom0-cpus 0)
6. A questo punto potete riavviare il demone di xen digitando il
comando:
xend restart
Nell'output di "
ifconfig"
devono apparire, ora, 2 nuove voci:
dummy0 Link encap:Ethernet HWaddr
66:6B:32:F4:4E:78
inet
addr:192.168.10.10 Bcast:0.0.0.0 Mask:255.255.255.0
inet6 addr:
fe80::646b:32ff:fef4:4e78/64 Scope:Link
UP BROADCAST
RUNNING MULTICAST MTU:1500 Metric:1
RX packets:15791
errors:0 dropped:0 overruns:0 frame:0
TX packets:10624
errors:0 dropped:0 overruns:0 carrier:0
collisions:0
txqueuelen:0
RX
bytes:19487497 (18.5 MiB) TX bytes:787766 (769.3 KiB)
pdummy0 Link encap:Ethernet HWaddr
FE:FF:FF:FF:FF:FF
inet6 addr:
fe80::fcff:ffff:feff:ffff/64 Scope:Link
UP BROADCAST
RUNNING NOARP MTU:1500 Metric:1
RX packets:0
errors:0 dropped:0 overruns:0 frame:0
TX packets:13
errors:0 dropped:0 overruns:0 carrier:0
collisions:0
txqueuelen:0
RX bytes:0 (0.0
b) TX bytes:882 (882.0 b)
In questo modo si è eseguito un ponte "trasparente" tra
dummy0 e xenbr0 che è, di default, "collegato" ad eth0. In
questo modo è quindi possibile creare una sorta di LAN fra i
domU e dom0 utilizzando dom0 come gateway per la rete esterna, avendo
anche il vantaggio di non modificare alcuna configurazione di rete per
i domU qualora si cambi indirizzo di rete per eth0.
7. E', quindi, necessario configurare l'interfaccia di rete per i domU
settando come gateway l'interfaccia dummy0 configurata in dom0. Con
GuestOS Debian potete modificare direttamente il file "
/etc/network/interfaces" come segue:
auto eth0
iface eth0 inet static
address 192.168.10.11
netmask 255.255.255.0
network 192.168.10.0
broadcast 192.168.10.255
# dns-* options are implemented by the resolvconf package, if installed
dns-nameservers <dns_server>
gateway 192.168.10.10 #DEVE ESSERE L'INDIRIZZO DELL'INTERFACCIA DUMMY0
IN DOM0.
8. Per finire è necessario inserire qualche regola di
iptables e raffinare qualche configurazione di rete per permettere il
FORWARD fra le interfacce di rete fisiche<->virtuali.
Le operazioni necessarie da eseguirsi sono le seguenti (Vedasi
paragrafo 7 per uno script riassuntivo):
#Disabilita il blocco del bridging a
livello di iptables.
/sbin/sysctl -w
net.bridge.bridge-nf-call-iptables="0"
#Se il comando precedente non
funziona (non disponete di sysctl) utilizzate il comando seguente
assicurandovi di aver caricato il modulo bridge con "modprobe bridge":
#echo "0" >
/proc/sys/net/bridge/bridge-nf-call-iptables
echo "1" >
/proc/sys/net/ipv4/ip_dynaddr
echo "1" >
/proc/sys/net/ipv4/ip_forward
/usr/sbin/iptables -t nat -F
/usr/sbin/iptables -F
/usr/sbin/iptables -t nat -A
POSTROUTING -o eth0 -j MASQUERADE
6. Emulare il ServerX tramite VNC (Linux GuestOS)
Per utilizzare il server X sotto un domU è necessario
appoggiarsi ad un sistema di virtualizzazione dei display grafici
esterno a XEN. Non è possibile lanciare direttamente il comando "
startx" all'interno di domU,
poichè con questo comando si cerca di collegarsi direttamente al
device fisico (scheda video) che, ovviamente, è già
lockato dal dom0.
Per abilitare l'accesso ad un WM su un domU dovete seguire i seguenti
passi:
-
Su
Dom0
E' necessario installare il viewer che realizza il ponte fra il
"display virtuale" del domU e il "display reale" di dom0.
Sotto sistemi Debian-Like potete installare
xvncviewer:
apt-get install xvncviewer
Sotto Slackware o altri sistemi è più facile
reperire il pacchetto
TightVNC.
-
Su
DomU
E' necessario installare prima di tutto il sistema X. Questo è
dipendente dalla distribuzione che avete scelto come GuestOS (XFree o
Xorg). Ad esempio, sotto Debian Sarge è necessario digitare:
apt-get install x-window-system-core
Successivamente installate i seguenti pacchetti:
rxvt, vncserver, xdm.
Dovete installare uno o più WM leggeri quali:
xfce4, fluxbox o icewm-experimental. Nessuno vieta di installare
anche
Gnome o KDE ma sono
generalmente WM troppo pesanti per essere eseguiti su una VM.
L'utility d'installazione per la vostra distribuzione dovrebbe
risolvere automaticamente tutte le dipendenze. Per questo è
consigliato di scegliere GuestOS semplici da gestire da questo punto di
vista come Debian (apt-get) o Fedora (yum).
A questo punto è sufficiente configurare XDM per essere eseguito
via VNC digitando:
echo ':0 /usr/bin/Xvnc /usr/bin/Xvnc
-geometry 1024x768 -depth 24' \ > /usr/X11R6/lib/X11/xdm/Xservers
L'opzione "
geometry" indica la
risoluzione dello schermo virtuale che verrà visualizzato
all'avvio di X per un domU. Scegliete quella più opportuna in
relazione alla vostra risoluzione su dom0.
Infine fermate e riavviate XDM:
/etc/init.d/xdm stop
/etc/init.d/xdm start
A questo punto è necessario soltanto collegare il display
reale a quello virtuale tramite il comando
xvncviewer (o
vncviewer se si è installato
TightVNC).
Quindi da dom0 digitate:
xvncviewer <ip_domU>
o
vncviewer <ip_domU>
In questo modo dovrebbe visualizzarsi una nuova finestra in cui
appare XDM che vi abilita al login grafico.
6.1 Tips&Tricks Grafici
- Cambiare
WM: XDM non vi permette in modo grafico di cambiare il WM da
utilizzarsi. Vi sono vari modi per pilotare la scelta del WM da far
avviare a XDM. Il più rapido consiste nell'utilizzare il
seguente comando: "/usr/sbin/update-alternatives
--config x-session-manager" che vi permette di scegliere da riga
di comando il WM da avviare.
- Gestire
i Fonts: dopo aver installato dei
WM minimali (Fluxbox,
XFCE, ICEWM) capita che, per accattivare maggiormente l'aspetto grafico
del sistema, si vadano ad installare delle estensioni GNOME. Questo
accade, ad esempio, installando lo "gnome-terminal".
Quando vengono installate anche le dipendenze di questi componenti,
può accadere che il controllo dei fonts del sistema passi sotto
alcuni componenti delle GTKLib, appunto di GNOME. I fonts potrebbero
apparire più grandi e/o sproporzionati. Se il WM scelto non
mette a disposizione tool per modificarne l'aspetto (ad esempio diventa
difficile sotto IceWM o Fluxbox, più facile sotto XFCE),
è necessario chiamare direttamente da console il font-manager di
GNOME con il comando: gnome-font-properties.
In questo modo potete cambiare le dimensioni dei caratteri delle
finestre, desktop, etc...
6.2 Problemi di avvio del ServerX in Dom0
Può accadere che il ServerX non parta in dom0 dopo
l'installazione di Xen o che appaia sensibilmente lento ed inusabile.
In questi casi effettuate le seguenti operazioni:
- Spostate la libreria di supporto al TLS in modo che non venga
caricata (questo
suggerimento vi viene dato anche all'avvio di Xen): mv /lib/tls /lib/tls.disabled
- Se state utilizzando dei driver propietari o, comunque, specifici
per la vostra scheda video
(i.e. Nvidia GeForce, ATI, Matrox, etc...) dovete ricordarvi di
compilarli per il Kernel usato da Xen
(nel mio esempio parliamo della versione 2.6.18). Per una
configurazione veloce potete utilizzare i
classici Driver VESA modificando il file /etc/X11/xorg.conf nella sezione
"Device":
Section "Device"
Identifier
"Intel 915GM"
Driver
"vesa" #al posto di nv, i810, glx-new, etc...
7. Script di avvio per la configurazione di XEN
Di seguito riportiamo uno script che potete far caricare al sistema
direttamente all'avvio. Lo script riconosce automaticamente la versione
del Kernel caricata e quindi si comporta di conseguenza effettuando le
configurazioni necessarie qualora si avvii uno XEN-Kernel. Sotto
Slackware potete inserire questo script in "
/etc/rc.local", su sistemi
Debian-like potete inserirlo in uno script in "
/etc/init.d".
KERNEL=$(uname -r)
if [ ! $KERNEL = "2.6.18-xen" ]; then
echo ondemand >
/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
#Others your
personal options for NON-XEN_Kernel
else #XEN_Kernel
#Modules
modprobe dummy
#modprobe bridge
#DUMMY INTERFACE
UP.
echo "Setting up
dummy Interface for bridge..."
ifconfig dummy0
192.168.10.10
#XEN start.
echo "Load XEND
Daemon..."
xend start >
/dev/null
#DUMMY/NET OPTIONS
/sbin/sysctl -w
net.bridge.bridge-nf-call-iptables="0"
#echo "0" >
/proc/sys/net/bridge/bridge-nf-call-iptables
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" >
/proc/sys/net/ipv4/ip_dynaddr
/usr/sbin/iptables
-t nat -F
/usr/sbin/iptables
-F
/usr/sbin/iptables
-t nat -A POSTROUTING -o eth0 -j MASQUERADE
fi
8. Un Esempio di esecuzione di VM
Nello snapshot seguente si vedono 2 Debian Sarge che girano come domU
(WM utilizzati: XFCE4 e Fluxbox) sopra ad una Slackware 12 dom0 (XFCE4).
http://necrosoft.altervista.org/immagini/screen1.jpg
Dario Maggiari aKa
nEcR0SoFt - 2007