Avertissement :
Ce document n'est plus valide ou plus maintenu.
|
Configurer Gentoo avec Xen
1.
Introduction
La technologie Xen vous permet de
lancer plusieurs systèmes d'exploitation sur une même machine physique, de
contrôler les ressources utilisées et même les domaines émigrants (qui sont les
environnements virtuels dans lesquels un système d'explotation invité
fonctionne) depuis un système utilisant Xen vers un autre. Xen nécessite d'être
supporté par le système d'exploitation hôte (qui, dans notre cas, sera le noyau
Linux), tandis que les systèmes d'exploitation invités peuvent fonctionner sans
être modifiés si votre matériel supporte la technologie de
virtualisation Intel (VT-x) ou la technologie de virtualisation AMD (SVM).
Sinon votre système invité devra également posséder le support de Xen.
Ce guide va vous expliquer les étapes de configuration nécessaires afin de
faire fonctionner Xen sous Gentoo Linux. Nous ne parlerons pas de Xen en
lui-même (une documentation
décente du projet Xen est disponible) ni des configurations spécialisées qui
pourraient être très intéressantes dans notre cas mais qui ne sont pas en
relation directe avec Xen (comme l'exportation de Portage à travers le NFS, le
démarrage de Linux en PXE, etc.).
2.
Préparation du domaine 0
Introduction
Le domaine 0 est le domaine primaire sous Xen, hébergeant le système
d'exploitation hôte qui régit tous les autres domaines. Dans ce chapitre, nous
allons préparer une installation existante de Gentoo à devenir le système
d'exploitation hôte de ce domaine et construire le noyau avec le support de Xen
afin que Gentoo soit prête à héberger d'autres domaines Xen.
Refaire l'installation de Gentoo ?
Il est possible que vous vous retrouviez face à un « drame », celui
de devoir reconstruire entièrement l'installation de Gentoo avec un paramètre
CFLAGS différent.
Les systèmes d'exploitation invités fonctionnant sous Xen peuvent sinon subir
des dégradations importantes en terme de performances. Si toutefois vous
projetez de tester Xen plutôt que de l'installer à des fins de production et
que vous n'êtes pas emballé à l'idée de recompiler tous les programmes, vous
pouvez passer cette étape. Dans ce cas, vous pourrez utiliser Xen, mais vous
êtes averti des risques de dégradation de performances.
Important :
Il est conseillé, si vous changer votre CFLAGS et que vous construisez
votre système avec une version de GCC inférieure à la version 4, de ne pas
mettre le paramètre -Os car il risque de corrompre des parties du code.
|
Exemple de code 2.1 : Édition des CFLAGS et reconstruction de l'installation Gentoo |
~# nano -w /etc/make.conf
CFLAGS="-O2 -march=pentium4 -pipe -mno-tls-direct-seg-refs"
~# emerge -e world
|
Si vous démarrez votre système en utilisant un disque RAM initialisé au
démarrage du système (initrd), vous avez besoin de reconstruire votre initrd
également (le meilleur moyen pour cela est d'exécuter toutes les étapes de
recompilation du noyau).
Installation de Xen
Xen contient en fait plusieurs composants, vous aurez donc besoin d'installer
plusieurs paquets. Comme ceux-ci sont toujours estampillés
en instable, vous devrez d'abord les démasquer en ajoutant les lignes
nécessaires au fichier /etc/portage/package.keywords avant de les
installer.
Exemple de code 2.2 : Démasquer et installer Xen |
~# nano -w /etc/portage/package.keywords
app-emulation/xen
app-emulation/xen-tools
sys-kernel/xen-sources
~# emerge xen xen-tools xen-sources
|
Compilation du noyau
Ensuite, nous allons compiler le noyau Linux avec le support de Xen. Ce noyau,
dont les sources sont disponibles dans /usr/src/linux-2.6.x.z-xen,
sera notre noyau principal en fonctionnement (i.e. celui fonctionnant en
domaine 0). Dans la section XEN, vous trouverez les pilotes pour toutes
sortes de périphériques d'entrées/sorties, chaque pilote ayant une implémentation
dorsale et une implémentation frontale (N.D.T. :
backend et frontend) : ils sont utilisés par les autres
domaines (qui utilisent les pilotes frontaux) pour communiquer
directement avec le matériel.
Bien sûr, n'oubliez pas de sélectionner Xen-compatible dans la section
Processor type and features. Si vous vous interrogez au sujet du
réseau : chaque interface dans un domaine a une connexion point à point
vers une interface du domaine 0 (appelée vifX.Y où le X est le
numéro du domaine et le Y la Yème interface de ce domaine), ainsi vous pouvez
configurer votre réseau de la manière que vous voulez (pont réseau, NAT, etc.)
Exemple de code 2.3 : Activation du support de XEN pour les noyaux i386 |
Processor type and features --->
Subarchitecture Type (Xen-compatible)
|
Exemple de code 2.4 : Activation du support de XEN pour les noyaux x86_64 |
Processor type and features --->
Subarchitecture Type (PC-compatible)
[*] Enable Xen compatible kernel
|
Exemple de code 2.5 : Configuration du noyau du Domaine 0 |
Bus options (PCI etc.) --->
[*] PCI support
[ ] Xen PCI Frontend Debugging
Networking --->
Networking options --->
<*> 802.1d Ethernet Bridging
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)
|
Exemple de code 2.6 : Configuration du noyau du Domaine U |
Bus options (PCI etc.) --->
[ ] PCI support
Device Drivers --->
SCSI device support --->
< > SCSI device support
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)
|
Une bonne astuce est de laisser le noyau procéder au stockage de ses fichiers
d'exécution intermédiaires ailleurs, ainsi vous pourrez réutiliser le même
noyau pour construire les différentes configurations :
Exemple de code 2.7 : Compilation du noyau |
~# mkdir -p ~/build/dom0 ~/build/domU
~# make O=~/build/dom0 menuconfig
~# make O=~/build/dom0 && make O=~/build/dom0 modules_install
|
Une fois que le noyau est compilé, vous trouverez son image directement dans le
répertoire de compilation (et non dans arch/ ou ailleurs), appelée
vmlinuz. Copiez-la dans /boot puis configurez votre
chargeur de démarrage afin d'utiliser l'hyperviseur Xen (l'un des composants
installés précédemment) qui est enregistré comme /boot/xen.gz.
Dans la configuration du chargeur de démarrage, ajoutez votre noyau fraîchement
compilé en tant que noyau que Xen devra initialiser. Par exemple, pour
GRUB :
Exemple de code 2.8 : Configuration de GRUB pour 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/hda3
|
À présent, réamorcez votre système dans Xen. Une fois que vous avez démarré,
vous devez charger le démon Xen :
Exemple de code 2.9 : Démarrage du démon Xen |
~# /etc/init.d/xend start
|
À présent, vérifiez que vous pouvez faire tout ce que vous faites normalement
sur votre système. Si c'est le cas, vous pouvez éditer votre configuration du
chargeur de démarrage pour toujours démarrer dans Xen et ajouter le démon Xen
au niveau d'exécution « default », ainsi il sera lancé
automatiquement au prochain démarrage du système.
Note :
Si vous désirez démarrer les domaines invités automatiquement au démarrage,
ajoutez xendomains au niveau de démarrage « default »
également et créez un lien symbolique dans /etc/xen/auto/ vers
les fichiers de configuration Xen pour les domaines que vous désirez démarrer.
|
3.
Création d'un domaine non privilégié
Compilation du noyau
Rendez-vous dans le répertoire des sources du noyau Linux ayant le support de
Xen et mettez à jour la configuration. Il est sage de garder des options
similaires au noyau principal autant que possible à l'exception des paramètres
XEN dans lesquels les pilotes doivent maintenant avoir leur
implémentation frontale sélectionnée à la place de l'implémentation
dorsale. Ensuite, compilez le noyau et placez l'image
vmlinuz résultante où vous désirez (nous supposerons ici qu'elle
sera copiée dans /mnt/data/xen/kernel) :
Exemple de code 3.1 : Compilation du noyau invité |
~# make O=~/build/domU
~# cp ~/build/domU/vmlinuz /mnt/data/xen/kernel/kernel-2.6.x.y-xen
|
Il est également possible de créer une seule image du noyau à la fois pour le
domaine principal et le domaine non privilégié. Le manuel de l'utilisateur Xen
propose plus d'informations à ce sujet.
Création des disques du domaine
Pour de meilleures performances, il est recommandé de dédier une partition (ou
un volume logique) à un domaine plutôt que d'utiliser un système de fichiers
basé sur un fichier. Toutefois, si vous souhaitez utiliser Xen dans un premier
temps pour faire des tests, l'utilisation d'un fichier a ses avantages
(particulièrement concernant la maintenance).
Vous pouvez créer un système de fichiers basé sur un fichier en utilisant
dd et mke2fs (ou tout autre utilitaire de création de système de
fichiers). Par exemple, pour créer un système de fichiers de 2 Go en ext3 :
Exemple de code 3.2 : Création d'un système de fichiers basé sur un fichier |
~# dd if=/dev/zero of=/mnt/data/xen/disks/ext3root.img bs=1M count=2048
~# mke2fs -j /mnt/data/xen/disks/ext3root.img
|
Configuration d'un domaine
Ensuite, nous allons créer le fichier de configuration Xen pour un domaine.
Vous pouvez enregistrer ces fichiers de configuration où vous le désirez, par
exemple dans /mnt/data/xen/configs. À titre d'exemple, nous allons
créer un fichier de configuration pour un petit environnement Gentoo qui va
utiliser l'image disque créée précédemment :
Exemple de code 3.3 : Création du fichier de configuration d'un domaine |
~# nano -w /mnt/data/xen/configs/gentoo
kernel = "/mnt/data/xen/kernel/kernel-2.6.x.y-xen"
memory = 512
name = "gentoo"
disk = ['file:/mnt/data/xen/disks/ext3root.img,sda1,w']
root = "/dev/sda1 ro"
|
Si vous utilisez un périphérique de bloc (en tant que volume LVM ou que
partition) pour le disque, utilisez 'phy:' à la place de 'file:' et laissez le
/dev. Par exemple :
Exemple de code 3.4 : Utilisation d'un périphérique de type bloc |
disk = [ 'phy:lvm/xen-guest-root,sda1,w' ]
disk = [ 'phy:sdb6,sda1,w' ]
|
Vous pouvez trouver quelques exemples de fichiers de configuration dans
/etc/xen.
Démarrage du nouveau domaine
À présent, nous avons tout paramétré et nous pouvons lancer le nouveau domaine.
Si l'image disque contient un système d'exploitation, on peut juste créer et
attacher le domaine en utilisant la commande xm (gestionnaire Xen) :
Exemple de code 3.5 : Création et démarrage du nouveau domaine |
~# xm create /mnt/data/xen/configs/gentoo -c
|
Le domaine devra être démarré à l'intérieur du terminal depuis lequel vous
exécutez la commande. Toutefois, dans notre cas, l'image disque est vide donc
le domaine ne va pas initialiser quelque chose d'intéressant. Pour éviter cela,
vous pouvez monter l'image en boucle (N.D.T. : « loop-mount »)
et installer Gentoo comme vous en avez l'habitude.
Si vous voulez vous déconnecter du domaine, appuyez sur Ctrl+].
Vous pouvez toujours vous reconnecter à la console des domaines en utilisant
xm console gentoo. Toutefois, il n'y a qu'une seule console par domaine,
n'utilisez donc cette commande que lorsque vous ne pouvez pas accéder au
domaine autrement (par exemple, à travers SSH).
4.
Le réseau sur les domaines non privilégiés
Introduction
Xen propose au moins deux façons de configurer votre réseau (virtuel) :
le routage et le pont réseau.
En choisissant la méthode du routage, l'interface interne au domaine non
privilégié est connectée à l'interface virtuelle de votre domaine principal.
Sur votre domaine privilégié (domaine 0), l'interface virtuelle est reliée avec
eth0. L'interface de votre domaine non privilégié devra avoir une
adresse IP contenue dans le même réseau que l'interface de votre domaine 0.
Toute communication utilisant cette adresse IP peut seulement passer par le
domaine privilégié à moins que vous ayez défini des règles de routage
spécifiques.
Avec le mode pont réseau, votre interface réseau par défaut sur le
domaine principal devient un pont qui accepte les connexions aux domaines
virtuels ainsi qu'à l'adresse IP de votre domaine privilégié.
Les interfaces routées
Avant de paramétrer l'interface sur votre domaine non privilégié, assurez-vous
que les pilotes netloop et netbk de Xen sont chargés.
Un petit conseil : si vous avez mis netloop en tant que
module, chargez-le avec nloopbacks=0 afin qu'il ne crée pas d'interfaces
inutiles vers le périphérique de boucle locale. Ensuite, éditez votre fichier
de configuration de domaine et ajoutez-lui une instruction vif.
Exemple de code 4.1 : Configuration d'une interface virtuelle |
~# nano -w /mnt/data/xen/configs/gentoo
vif = [ 'ip=192.168.1.101, vifname=veth1' ]
|
Dans l'exemple ci-dessus, l'interface sera créée pour le domaine non privilégié
(dans lequel elle s'appellera eth0) et Xen va s'assurer que
l'adresse 192.168.1.101 est bien joignable depuis le domaine d'administration
à travers l'interface veth1.
Cela ne signifie pas que l'interface virtuelle eth0 se verra
automatiquement assigner l'adresse IP 192.168.1.101, mais plutôt que si vous
ne lui donnez pas cette adresse IP, elle ne sera pas connectée au domaine
principal et donc ne sera pas joignable.
À présent, éditez le fichier /etc/xen/xend-config.sxp comme suit
afin de sélectionner la configuration du réseau par routage :
Exemple de code 4.2 : Édition du fichier xend-config.sxp |
~# nano -w /etc/xen/xend-config.sxp
#(network-script network-bridge)
#(vif-script vif-bridge)
(network-script network-route)
(vif-script vif-route)
|
Les interfaces pontées
Contrairement aux interfaces routées, vous avez besoin de charger le pilote
netloop avec nloopbacks=1 (ou plus) ainsi que les pilotes
additionnels de boucle locale qui seront utilisés pour créer le pont réseau.
Pour les autres modules, vous avez encore besoin du module netbk
ainsi que des fonctionnalités de pont réseau (module bridge si
compilé en tant que tel).
Maintenant, éditez votre domaine virtuel et ajoutez-lui l'instruction
vif :
Exemple de code 4.3 : Configuration d'une interface virtuelle |
~# nano -w /mnt/data/xen/configs/gentoo
vif = [ 'ip=192.168.1.101, vifname=veth0' ]
|
À présent, éditez /etc/xen/xend-config.sxp comme suit afin de
sélectionner la configuration par pont réseau :
Exemple de code 4.4 : Édition du fichier xend-config.sxp |
~# nano -w /etc/xen/xend-config.sxp
(network-script network-bridge)
(vif-script vif-bridge)
# (network-script network-route)
# (vif-script vif-route)
|
Par défaut, le pont va contenir n'importe quelle interface qui est configurée
comme étant l'interface par défaut (le périphérique qui est listé sous la
passerelle par défaut à travers ip route list). Si vous voulez
éviter ce comportement, éditez le fichier xend-config.sxp comme
ceci :
Exemple de code 4.5 : Édition du fichier xend-config.sxp pour changer la configuration du pont réseau |
~# nano -w /etc/xen/xend-config.sxp
(network-script 'network-bridge netdev=eth0 bridge=xenbr0 vifnum=0')
|
Une fois que la configuration est faite, redémarrez le script d'exécution
xend pour que Xen construise le pont réseau :
Exemple de code 4.6 : Redémarrage du démon xend |
~# /etc/init.d/xend restart
|
5.
Des ressources pour aller plus loin
Documentation de Xen
Les outils pour Xen
Ce document est protégé par la licence Creative
Commons : Paternité - Partage des Conditions Initiales à
l'Identique 2.5.
|