Gentoo Logo

Configurare Gentoo per utilizzare Xen

Indice:

1.  Introduzione

La tecnologia Xen permette l'esecuzione di più sistemi operativi su una stessa macchina, di gestire l'occupazione delle risorse ed anche di migrare domini (che sono gli ambienti virtuali nei quali un sistema operativo ospite viene eseguito) da un sistema Xen ad un altro. Il sistema operativo che ospiterà gli altri deve supportare Xen (supporto fornito dal kernel Linux) ma i sistemi ospite possono esser eseguiti senza modifiche se l'hardware in uso supporta l'Intel Virtualization Technology (VT-x) o l'AMD Virtualization Technology (SVM). In caso contrario, anche il sistema operativo ospite dovrà avere il supporto a Xen.

Attraverso questa guida si conosceranno tutti i passi necessari per ottenere un sistema Xen funzionante su Gentoo Linux. Non si discuterà di Xen in sé (il progetto Xen fornisce documentazione sufficiente) né di configurazioni specializzate che potrebbero essere interessanti ma non sono strettamente legate a Xen (come esportare Portage via NFS, avviare Linux usando PXE, ecc.).

2.  Preparare il Domain0

Introduzione

In ambiente Xen, Domain0 è il dominio primario e definisce il sistema operativo che ospiterà gli altri domini. In questo capitolo si preparerà una installazione esistente di Gentoo per farla diventare il sistema ospitante di questo dominio e si compilerà un kernel Xen in modo tale da permettere a Gentoo di ospitare altri domini Xen.

Ricompilare l'intero sistema Gentoo?

Un cambiamento drammatico che potrebbe essere necessario è la ricompilazione dell'intero sistema Gentoo con differenti CFLAGS, altrimenti i sistemi operativi ospite sotto Xen potrebbero avere un serio decadimento delle prestazioni. Comunque, se si sta solo pianificando di provare Xen, non lo si sta installando in un ambiente produttivo e non si ha l'ardente desiderio di ricompilare tutti i programmi, si può saltare questo passo. In questo caso si noteranno solo cali di prestazione, ma si potrà comunque usare Xen.

Importante: Si raccomanda, nel caso si vogliano modificare le CFLAGS> per ricompilare il sistema con una versione di gcc inferiore alla 4, di non aver impostato -Os in quanto si produrrebbe codice corrotto.

Codice 2.1: Modificare le CFLAGS e ricompilare Gentoo

~# nano -w /etc/make.conf
(Aggiungere -mno-tls-direct-seg-refs SOLO se si possiede un dom0 a 32-bit)
(Non c'è bisogno di questa flag se si possiede un dom0 a 64-bit)
CFLAGS="-O2 -march=pentium4 -pipe -mno-tls-direct-seg-refs"

~# emerge -e world

Se si avvia il sistema usando un ramdisk iniziale (initrd) sarà necessario rigenerarlo (operazione che è meglio fare eseguendo tutti i passi come se si stesse ricompilando il kernel).

Installare Xen

Attualmente Xen è composto da numerosi componenti, sarà quindi necessario installare alcuni pacchetti.

Codice 2.2: Installare Xen

~# emerge xen xen-tools xen-sources

Configurare e compilare il kernel

Si andrà ora a configurare e compilare il kernel col supporto a Xen. Questo kernel, i cui sorgenti sono disponibili in /usr/src/linux-2.6.x.z-xen, diverranno il kernel principale che verrà utilizzato (p.e. per il domain 0). Nella sezione XEN si trovano i driver per tutti i tipi di periferiche di input/output, ogni driver possiede una implementazione per backend e frontend. Per il kernel del domain 0 è necessario selezionare le implementazioni backend, queste verrano utilizzate dagli altri domini (che usano i driver frontend) per comunicare direttamente con l'hardware.

Naturalmente, non ci si dimentichi di selezionare Xen-compatible come Processor type and features. Ci si potrebbe meravigliare per quanto riguarda la gestione della rete: in un dominio ogni interfaccia possiede un link punto-punto ad un'interfaccia sul domain 0 (chiamata vifX.Y dove X è il numero del dominio e Y è il numero dell'interfaccia di tale dominio), in questo modo è possibile configurare la propria rete nel modo che si vuole (bridging, NAT, ecc.).

Codice 2.3: Abilitare il supporto a Xen per un kernel i386

Processor type and features  --->
      Subarchitecture Type (Xen-compatible)

Codice 2.4: Abilitare il supporto a Xen per un kernel x86_64

Processor type and features  --->
      Subarchitecture Type (PC-compatible)
  [*] Enable Xen compatible kernel
  [*] Support for hot-pluggable CPUs

Codice 2.5: Configurare il kernel per il Domain-0

Bus options (PCI etc.)  --->
  [*] PCI support
  [ ]   Xen PCI Frontend Debugging

Networking  --->
  Networking options  --->
    <*> 802.1d Ethernet Bridging
    Richiesto solo per una rete bridged.

XEN  --->
  [*] Privileged Guest (domain 0)
  <*> Backend driver support
  <*>   Block-device backend driver
  <*>   Network-device backend driver
  <*>   PCI-device backend driver
           PCI Backend Mode (Virtual PCI) --->
  [*] Scrub memory before freeing it to Xen
  [*] Disable serial port drivers
      Xen version compatibility (3.0.4 and later)

Codice 2.6: Configurare il kernel per un Domain-U

Bus options (PCI etc.)  --->
  [ ] PCI support

Device Drivers  --->
  SCSI device support  --->
    < > SCSI device support
    Disabilitando il supporto SCSI si liberano i nomi dei device /dev/sd*
    per utilizzarli come device a blocchi virtuali Xen.
    

XEN  --->
  [ ] Privileged Guest (domain 0)
  <*> Block-device frontend driver
  <*> Network-device frontend driver
  [*] Scrub memory before freeing it to Xen
  [*] Disable serial port drivers
      Xen version compatibility (3.0.4 and later)

Un utile suggerimento è quello di far sì che il processo di creazione del kernel salvi i file oggetto intermedi da qualche altra parte in modo da poter riutilizzare gli stessi sorgenti del kernel per configurazioni diverse:

Codice 2.7: Compilare il kernel

~# mkdir -p ~/build/dom0 ~/build/domU
~# make O=~/build/dom0 menuconfig
(Configurare il kernel)
~# make O=~/build/dom0 && make O=~/build/dom0 modules_install

Una volta compilato il kernel si troverà la sua immagine, chiamata vmlinuz, direttamente nella directory di compilazione (non dentro arch/ o in qualche altra directory). Copiarla in /boot e configurare il bootloader affinché usi l'hypervisor di Xen (uno dei componenti installati precedentemente) che è stato salvato come /boot/xen.gz. Nella configurazione del bootloader, indicare a Xen di effettuare il boot utilizzando il kernel appena generato. In GRUB, ad esempio:

Codice 2.8: Configurazione di GRUB per Xen

title Xen 3.0 / Gentoo Linux 2.6.x.y
root (hd0,0)
kernel /boot/xen.gz
module /boot/kernel-2.6.x.y-xen0 root=/dev/sda3

Una volta riavviato il sistema sarà necessario avviare il demone di Xen:

Codice 2.9: Avviare il demone di Xen

~# /etc/init.d/xend start

Controllare se il sistema funziona normalmente, nel qual caso si potrà modificare la configurazione del bootloader per rendere predefinito il kernel di Xen e aggiungere il demone di Xen al runlevel di default così che possa partire automaticamente ad ogni riavvio del sistema.

Nota: Se si vuol far partire automaticamente anche i domini ospite ad ogni riavvio, aggiungere xendomains al runlevel di default e creare un link simbolico in /etc/xen/auto ai file di configurazione di Xen per i domini che si vuol far partire.

3.  Creare un dominio non privilegiato (Domain-U)

Configurare e compilare il kernel

Si ritorni ai sorgenti del kernel precedentemente utilizzati per il domain 0 e si aggiorni la configurazione. È consigliabile mantenere la configurazione del nuovo kernel il più simile possibile al kernel principale eccetto per le impostazioni di XEN dove i driver selezionati dovrebbero essere quelli per l'implementazione frontend invece che backend. Compilare il kernel e spostare il file vmlinuz ottenuto dove si vuole (in questa guida si assume sia in /mnt/data/xen/kernel):

Codice 3.1: Compilare il kernel per il sistema ospite

~# make O=~/build/domU
~# cp ~/build/domU/vmlinuz /mnt/data/xen/kernel/kernel-2.6.x.y-xen

È possibile anche creare una singola immagine del kernel per entrambi i domini (quello amministrativo e quello non privilegiato). Maggiori informazioni possono venire trovate nel manuale utente di Xen.

Creare i dischi per un dominio

Per avere maggiori prestazioni è consigliabile dedicare una partizione (o un volume logico) ad un dominio piuttosto che un filesystem creato su file. Comunque, se si vuole usare Xen solo per scopi di test, usare una filesystem creato su file ha i suoi vantaggi (specialmente per quello che riguarda la manutenzione).

Si può creare un filesystem su file usando dd e mke2fs (o qualsiasi altro strumento di creazione di filesystem). Per esempio, per creare un filesystem ext3 di 2 Gbyte:

Codice 3.2: Creare un filesystem su file

~# dd if=/dev/zero of=/mnt/data/xen/disks/ext3root.img bs=1M count=2048
~# mke2fs -j /mnt/data/xen/disks/ext3root.img

Configurare un dominio

Si crei ora un file di configurazione per un dominio Xen. Si possono salvare questi file di configurazione dove si vuole, per esempio in /mnt/data/xen/configs. Come esempio, si creerà in file di configurazione per un piccolo ambiente Gentoo che usi l'immagine del disco creata precedentemente:

Codice 3.3: Creare un file di configurazione per un dominio

~# nano -w /mnt/data/xen/configs/gentoo

kernel = "/mnt/data/xen/kernel/kernel-2.6.x.y-xen"
memory = 512
name   = "gentoo"
(Mappa l'immagine del disco alla partizione virtuale /dev/sda1)
disk   = ['file:/mnt/data/xen/disks/ext3root.img,sda1,w']
root   = "/dev/sda1 ro"

Se come disco si sta usando un device a blocchi (come un volume lvm o una partizione), usare 'phy:' invece di 'file:' e omettere /dev. Per esempio:

Codice 3.4: Usare un device a blocchi

(Volume LVM)
disk = [ 'phy:lvm/xen-guest-root,sda1,w' ]

(Partizione fisica)
disk = [ 'phy:sdb6,sda1,w' ]

Si possono trovare esempi di file di configurazione in /etc/xen.

Far partire il nuovo dominio

Terminata la fase di configurazione, si può far partire il nuovo dominio. Se l'immagine del disco contiene un sistema operativo, si potrebbe creare e far partire il dominio usando il comando xm (Xen manager):

Codice 3.5: Creare e far partire un nuovo dominio

~# xm create /mnt/data/xen/configs/gentoo -c

Il dominio dovrebbe partire all'interno del terminale nel quale è stato eseguito il comando. Nel caso in esempio, comunque, l'immagine del disco è vuota per cui il dominio non si avvierà. Per ovviare a questo, si può montare l'immagine in loop ed installarvi Gentoo come fosse un sistema nuovo.

Per scollegarsi dal dominio, premere Ctrl+]. Per ottenere una nuova connessione alla console del dominio usare xm console gentoo. Dato che si può avere una sola console per dominio, la si usi solo se non si può accedere altrimenti (per esempio attraverso SSH).

4.  La rete su un dominio non privilegiato

Introduzione

Xen supporta almeno due metodi per configurare la propria rete (virtuale) routed e bridged.

Scegliendo un approccio di tipo routed, l'interfaccia all'interno del dominio non privilegiato verrà connessa all'interfaccia virtuale del dominio amministrativo. Sul dominio amministrativo (domain 0), l'interfaccia virtuale sarà collegata alla eth0. L'interfaccia interna al dominio non privilegiato dovrebbe avere un indirizzo IP sulla stessa rete dell'interfaccia del dominio amministrativo. Qualsiasi comunicazione a tale indirizzo IP potrà avvenire solo dal dominio amministrativo a meno di non configurare specifiche regole di instradamento (NdT. routing).

Scegliendo un approccio di tipo bridged, l'interfaccia predefinita sul dominio amministrativo diventerà un bridge (NdT: ponte) che accetta connessioni al dominio virtuale attraverso l'IP del dominio amministrativo.

Interfacce routed

Prima di configurare l'interfaccia del dominio non privilegiato, assicurarsi che siano caricati i driver Xen netloop e netbk. Un suggerimento veloce: se si ha netloop come modulo, caricarlo con nloopbacks=0 in modo che non crei interfacce che puntano alla periferica di loopback. Modificare quindi il file di configurazione del dominio ed aggiungervi un istruzione vif come segue.

Codice 4.1: Configurare un'interfaccia virtuale

~# nano -w /mnt/data/xen/configs/gentoo

(Aggiungere l'istruzione vif)
vif    = [ 'ip=192.168.1.101, vifname=veth1' ]

Nel precedente esempio, l'interfaccia verrà creata per il dominio non privilegiato (nel quale verrà chiamata eth0) e Xen assicurerà che l'indirizzo 192.168.1.101 sia raggiungibile dal dominio amministrativo attraverso l'interfaccia veth1.

Questo non significa che all'interfaccia virtuale eth0 verrà automaticamente assegnato l'indirizzo IP 192.168.1.101, ma piuttosto che, se non gli si darà tale IP, non verrà connessa con il dominio amministrativo e quindi non potrà essere raggiunta.

Modificare /etc/xen/xend-config.sxp come segue per configurare la rete:

Codice 4.2: modificare xend-config.sxp

~# nano -w /etc/xen/xend-config.sxp

(Commentare le seguenti righe)
#(network-script network-bridge)
#(vif-script vif-bridge)

(Abilitare le seguenti righe)
(network-script network-route)
(vif-script vif-route)

Interfacce bridged

A differenza delle interfacce routed è ora necessario caricare il driver netloop con nloopbacks=1 (o maggiore) in modo tale che le periferiche di loopback addizionali verranno usate per creare il bridge. Per quanto riguarda gli altri moduli, netbk è sempre necessario così come la funzionalità di bridging (il modulo bridge se compilato in tal modo).

Modificare il file di configurazione del dominio virtuale e aggiungere il seguente costrutto vif:

Codice 4.3: Configurare un'interfaccia virtuale

~# nano -w /mnt/data/xen/configs/gentoo

(Aggiungere l'istruzione vif)
vif    = [ 'ip=192.168.1.101, vifname=veth0' ]

Modificare /etc/xen/xend-config.sxp come segue per configurare la rete:

Codice 4.4: modificare xend-config.sxp

~# nano -w /etc/xen/xend-config.sxp

(Abilitare le seguenti righe)
(network-script network-bridge)
(vif-script vif-bridge)

(Se non lo sono già, commentare le seguenti righe)
# (network-script network-route)
# (vif-script vif-route)

Di default, il bridge conterrà qualsiasi interfaccia configurata per essere l'interfaccia predefinita (la periferica che viene elencata come default utilizzando il comando ip route list). Se si vuole cambiare questo comportamento, modificare xend-config.sxp come segue:

Codice 4.5: Modificare xend-config.sxp per cambiare la configurazione del bridge

~# nano -w /etc/xen/xend-config.sxp

(modificare la riga network-script)
(network-script 'network-bridge netdev=eth0 bridge=xenbr0 vifnum=0')

Una volta modificata la configurazione, andrà fatto ripartire xend per far riflettere le modifiche a Xen:

Codice 4.6: Far ripartire il demone xend

~# /etc/init.d/xend restart

5.  Ulteriori risorse

La documentazione di Xen

Strumenti per Xen



Stampa

Aggiornato il 26 dicembre 2011

Oggetto: Questa guida descrive come iniziare ad usare Xen su un sistema Gentoo

Sven Vermeulen
Autore

Joshua Saddler
Redazione

Enrico Morelli
Traduzione

Donate to support our development efforts.

Copyright 2001-2012 Gentoo Foundation, Inc. Questions, Comments? Contact us.