Gentoo Logo

Avertissement : Ce document n'est plus valide ou plus maintenu.


Configurer Gentoo avec Xen

Table des matières :

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
(Ajoutez -mno-tls-direct-seg-refs)
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
    Uniquement requis pour les ponts réseaux.

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
    La désactivation du support SCSI libère les noms de périphériques
    /dev/sd* pour les utiliser en tant que périphériques de bloc virtuels
    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)

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
(Configurez le noyau)
~# 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"
(Établissez l'image du disque sur le périphérique virtuel /dev/sda1)
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

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

(Partition physique)
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

(Ajout d'une instruction vif)
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

(Commentez les lignes suivantes)
#(network-script network-bridge)
#(vif-script vif-bridge)

(Activez les lignes suivantes)
(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

(Ajout de l'instruction vif)
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

(Activez les lignes suivantes)
(network-script network-bridge)
(vif-script vif-bridge)

(Commentez les lignes suivantes si ce n'est pas déjà fait)
# (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

(Éditez la ligne network-script)
(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



Imprimer

Dernière mise à jour le 11 août 2008

La version originale de cette traduction n'est plus maintenue

Résumé : Ce guide explique comment utiliser Xen sur votre système Gentoo.

Sven Vermeulen
Auteur

Marion Agé
Traducteur

Donate to support our development efforts.

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