Le Xen sous Mandriva 2007 pour les nuls (ou presque)

par Yves-Gaël Chény aka nantes_geek

xen@antredugeek.fr

site perso : www.antredugeek.fr

irc : zelazny.freenode.net

channel : ##xen

INTRODUCTION :

Mais pourquoi le Xen ? C'est vrai, il faut vraiment une bonne raison pour perdre son temps pendant environ une heure sur cette page ....

En fait le Xen (site officiel : http://www.xensource.com/ ) vous permet de faire toutes sortes de choses sans la perte de performance habituellement liée à une virtualisation et avec quelques avantages en plus .

Avec Xen, vous pouvez : faire fonctionner plusieurs système/noyau Linux en même temps sur le même ordinateur physique, attribuer des ressources physiques à ces machines ( mémoire vive, disque dur, cpu, carte pci ), si vous avez la chance d'avoir un processeur qui supporte les instructions Virtual Machine Extensions (VMX) pour intel (http://www.intel.com/cd/ids/developer/asmo-na/eng/197668.htm) ou l'équivalent AMD, vous pouvez même prétendre faire fonctionner un Windows ® ( chacun est libre de faire ce qui lui plaît après tout) sans en modifier le noyau ( ce qui est bien sûr interdit de toute façon ).

Bref un monde nouveau s'ouvre à vous et je vais essayer de vous donner les bases pour vous en sortir.

Explications de base sur le Xen :

Pour que vous soyez capable de comprendre ce qui va suivre, je vais commencer par vous expliquer les termes les plus souvent employés avec XEN.

Les Domaines :

Les domaines sont en fait tout simplement les « environnements » virtuels dans lesquels vont fonctionner les systèmes d'exploitations virtualisés, il y a deux types de domaines : le domaine 0 et les domaines U (que j'appellerai respectivement dom0 et domU). Le dom0 est la couche la plus basse. Son kernel est compilé de façon spécifique avec une priorité d'accès sur la partie physique de la machine. C'est de son système que l'on contrôle les domU, qui eux sont les différentes machines virtuelles.

Dans un système de virtualisation « normal », le dom0 serait votre installation de base mais dans le cas du xen, le dom0 auquel vous avez accès est déjà une couche de virtualisation mais qui a les accès prioritaires et complet (sauf cas que nous verrons plus tard) à la machine physique.

Le réel noyau non virtuel est un micro-kernel, en général nommé xen-laversion.gz

Vous le verrez lors de la configuration du GRUB.

Les interfaces réseaux virtuelles ou VIF :

Le xen étant en général tout particulièrement destiné à des serveurs, les interfaces réseaux virtuelles ou vif sont nécessaires. Les vifs sont auto générés sauf instruction contraire de votre part lors du démarrage du démon xen ( /etc/init.d/xend ) puis lors du démarrage de chaque machine virtuelle (domU si vous avez suivis).

Pour faire simple :

Vous avez par défaut eth0 de votre machine physique qui est eth0 de votre dom0.

Cet eth0 dupliqué virtuellement en peth0 et en vif0.0 .

ils sont bridgés en xenbr0.

Puis chaque domU reçoit un vif numéroté en fonction de son id (1,2,3 ...) qui représente leur eth0/eth1 ... virtuels et qui sont bridgé par défaut sur xenbr0.

Voilà le résultat sur un serveur xen d'un brctl show


et celui d'un xm list



Vous voyez bien : vif1.0 pour le Xen1 ayant l'ID 1 , vif2.0 pour le Xen2 ayant l'ID 2 etc ...

(Petit jeu : cherchez le domaine intru ^^)


Xend :

J'ai parlé plus haut de /etc/init.d/xend .

En effet xen est à la fois dans le kernel et un daemon qui se lance au démarrage du dom0.

ce xend sert à générer les différentes interfaces, à gérer les domaines et leurs attributions. Pour cela il se sert d'un ensemble de scripts situés dans le /etc/xen/scripts (c'était logique ;) )

il permet l'utilisation de l'instruction xm

sur laquelle nous reviendrons à la fin.


Partie 1 – Installation des bases .

Mon serveur est un bi-xeon avec 4 Go de RAM et un raid 5 de 3 disques de 250 Go + un spare de 250Go

Il est partitionné comme ça :



L'explication que je vais donner va utiliser des partitions et pas des fichiers donc ça a son importance.

Nous allons partir du principe que vous savez installer une mandriva2007 et installer les mirroirs ( urpmi.addmedia avec easy urpmi par exemple )

Pour faire simple, je suis parti pour faire ce tutoriel d'une Mandriva 2007 free. J'ai tout décoché, je ne suis pas allé faire une configuration manuelle des packetages et je n'ai pas coché la case qui vire l'urpmi. Puis j'ai fait un urpmi openssh-server parce que mon serveur fait du bruit.

mon rpm -qa est là : RPM -QA

Il y a plus court, je sais , mais je n'ai pas envie de m'embêter trop non plus.

A- Installation des sources / Installations des paquetages Mandriva .

Nous allons installer xen et générer ses noyaux à partir des sources xen officielles.

Toute cette partie peut être remplacée par :

urpmi xen

urpmi kernel-xen0-2.6.17.5mdv

urpmi kernel-xenU-2.6.17.5mdv

Malheureusement si comme moi certaines de vos cartes (ici ma 3ware39550 pour mon RAID) ne sont pas supportées il vous faudra re-compiler vos kernels.


A partir d'ici je fais tout en ssh sauf indication contraire :


B- Téléchargement des sources officielles Xen :

Tout d'abord nous avons besoin de wget :

urpmi wget

puis :

wget http://bits.xensource.com/oss-xen/release/3.0.3-0/src.tgz/xen-3.0.3_0-src.tgz

si le lien n'est plus valide : http://www.xensource.com/download pour trouver le bon chemin

ensuite :

[root@localhost ~]# mv xen-3.0.3_0-src.tgz /usr/src/

[root@localhost ~]# cd /usr/src

[root@localhost src]# tar -xzf xen-3.0.3_0-src.tgz

pour travailler proprement ;)

[root@localhost src]# ln -s xen-3.0.3_0-src xen

[root@localhost src]# cd xen

C- Compilation des différentes ressources Xen, kernels et autres outils :

Il faut maintenant préparer nos outils :

[root@localhost xen]# urpmi make

[root@localhost xen]# urpmi gcc

[root@localhost xen]# urpmi patch

[root@localhost xen]# urpmi zlib-devel

[root@localhost xen]# urpmi libncurses-devel

[root@localhost xen]# urpmi libstdc++6-devel-4.1.1-3mdk.i586

[root@localhost xen]# urpmi libcryptopp5-devel-5.3-0.20050714.1mdk.i586

[root@localhost xen]# urpmi libopenssl0.9.8-devel

[root@localhost xen]# urpmi x11-proto-devel

[root@localhost xen]# urpmi bridge-utils

[root@localhost xen]# urpmi python-devel

Je crois qu'on a fait le tour...

On va commencer par créer l'environnement par défaut du xen

Pour cela une instruction très simple :

[root@localhost xen]# make world

puis une fois que tout est fini :

[root@localhost xen]# sh install.sh

Si vous allez dans votre /boot :

[root@localhost xen]# cd /boot

[root@localhost boot]# ll





Vous pouvez voir :

Le kernel xen-3.0.3-0.gz , c'est le kernel de démarrage Xen sur lequel on va passer en module notre kernel dom0.

Potentiellement le kernel : vmlinuz-2.6.16.29-xen peut servir de kernel pour le dom0 et pour les domU mais je vous conseille pour des raisons de customisation ( modules/drivers spécifiques suivant les serveurs virtuels que l'on veut obtenir ) de re-compiler le xen en séparant les deux kernels domO et domU

Pour cela on revient dans notre /usr/src/xen/

[root@localhost boot]# cd /usr/src/xen

[root@localhost xen]# make world KERNELS="linux-2.6-xen0 linux-2.6-xenU"

C'est reparti pour une compilation. On pouvait faire directement le make world comme ça mais je pense qu'il est intéressant de vous montrer les deux possibilités.

au final on obtient ça :

[root@localhost xen]# cd /boot/

[root@localhost boot]# ll




on voit bien nos deux kernels supplémentaires ( en fait des modules du kernel xen-3.0.3-0.gz mais le plus simple est de les considérer comme des kernels à part entière ) .


D – Personnalisation des kernels dom0 ou domU :

Pour personnaliser des kernels dom0 ou domU, ça se passe comme pour un kernel standard :

par exemple là je vais mettre dans le noyau ( pas en module mais bien dans le noyau ) la prise en charge de la 3ware9550 :

on retourne dans ses sources xen :

[root@localhost boot]# cd /usr/src/xen

puis on va dans le kernel que l'on veut modifier, ici le linux-2.6.16.29-xen0

[root@localhost xen]# cd linux-2.6.16.29-xen0/

[root@localhost linux-2.6.16.29-xen0]# make menuconfig

on obtient ça :


Vous remarquerez que les seules différences sont en haut, la version du kernel, et la présence , vers le bas, d'un nouvel onglet XEN dans vos choix de configuration.

Rien ne vous empêche de vous prendre la tête avec un make config si vous êtes puriste ou d'installer 15 kg de gtk dans votre dom0 pour faire un make xconfig ( c'est ça qui est bien avec gnu/linux , c'est qu'on est libre ;) )

La particularité du dom0 par rapport au domU réside dans une option de cet onglet XEN, on va aller y faire un tour en passant :


Vous avez une belle option claire :

[*] Privileged Guest (domain 0)

Donc vous l'avez sans doute deviné : c'est ça qui définit le type de domaine ;)

Je fais un petit aparté sur une autre option qui peut éventuellement vous intéresser plus tard :

<*> PCI-device backend driver │ │

│ │ PCI Backend Mode (Passthrough) --->

C'est ce qui vous permettra d'attribuer à vos domU des périphériques PCI...

Vous pouvez maintenant revenir à votre menu principal.

Il peut être intéressant, même pour les moins courageux, d'aller faire un tour dans :

Processor type and features --->

Afin d'y préciser deux trois trucs comme :



Le type de processeur ( pour moi un Xeon )

le « Symmetric multi-processing support » si vous en avez plusieurs

et la mémoire vive dont vous avez besoin « High Memory Support » ici je vais changer pour mettre 4GB (j'ai encore un problème non identifié avec 64GB )

Si vous avez un Athlon, les options x86 sont pour vous et peuvent vous éviter quelques désagréments.

Pendant que vous lisiez ces lignes, j'ai eu le temps d'aller faire un tour dans

Device Drivers ---> │ │

SCSI device support ---> │ │

│ │ SCSI low-level drivers --->

│ │ <*> 3ware 5/6/7/8xxx ATA-RAID support │ │

│ │ <*> 3ware 9xxx SATA-RAID support

Pour ne pas avoir un petit problème au boot de mon dom0 ( genre je trouve pas le disque sur lequel booter ^^ )

Méfiez-vous, l'initrd pour xen dom0 n'a rien de trivial donc ce que vous pouvez mettre dans le kernel et non en module, faites le .

Après ça, on quitte tout et on revient pour lancer un merveilleux (et ceux qui comme moi aime faire ça me comprendront ):

[root@localhost linux-2.6.16.29-xen0]# make && make modules && make modules_install && make install

MIAM ;)

on attend les quelques minutes nécessaires ..... ( sleep 1800 )

et quand enfin le moment est arrivé, on passe à la partie suivante !


Partie 2 – Configuration du GRUB.

Maintenant que l'on est rendu là, nous avons : le kernel, le xend, les outils divers et variés nécessaires à la suite.

Il ne nous reste plus qu'à booter sur notre dom0 pour avoir enfin la paix et s'occuper des domU ;)

Pour cela il nous faut un grub.

[root@localhost boot]# urpmi grub

puis il faut l'installer sur le disque de démarrage, ici /dev/sda (peut être /dev/hda chez vous )



voilà, vous voyez votre device de démarrage est hd0 pour grub ....

Maintenant, il faut éditer le fichier dans /boot/grub/menu.lst

mais comme il y en a pas on le crée à partir de l'exemple :

[root@localhost boot]# cp /boot/grub/menu.lst.example /boot/grub/menu.lst

puis utilisez votre éditeur de texte préféré ( vi ::> non non ceci n'est pas un troll )

[root@localhost boot]# vi /boot/grub/menu.lst



Vous devriez avoir quelque chose comme ça que l'on va transformer en ça :



Pour faire simple :


Maintenant courage, on reboot et si tout se passe bien on se retrouve au chapitre suivant .... ;)


Partie 3 – Un peu de ménage ça fait pas de mal.

Je me reconnecte en ssh à mon serveur (si tout se passe bien sshd s'est relancé avec la machine ;)

déjà après connexion, un :

[root@localhost ~]# uname -r

doit vous donner un kernel xen

ici : 2.6.16.29-xen0

Théoriquement, si vous avez compris l'intérêt du xen, vous ne voudrez pas faire tourner 40 tonnes de trucs sur votre dom0, donc vous pouvez enlever les divers démons qui ne vous servent pas et qui sont là à l'heure actuelle ...

[root@localhost ~]# chkconfig –list


Oulah, il y a du monde bon, dans l'orde :

[root@localhost ~]# chkconfig --del alsa

[root@localhost ~]# chkconfig --del keytable

[root@localhost ~]# chkconfig --del numlock

[root@localhost ~]# chkconfig --del sound

[root@localhost ~]# chkconfig --del wltool

[root@localhost ~]# chkconfig --level 345 xend on

bon là on est mieux déjà.

vous remarquerez que le xend n'est pas au démarrage par défaut... ça peut être utile de le mettre :)

Pour voir si votre xen fonctionne faites :

[root@localhost ~]# xm list

Et non ça ne marche pas ... c'est normal !

[root@localhost ~]# /etc/init.d/xend start

(au prochain démarrage , ça marchera vous l'avez mis dans le chkconfig )


Voilà votre beau dom0 fonctionne. On peut voir qu'il a l'ID 0 et 124 Mb de mémoire vive.

Partie 4 – Votre premier DomU

Bon voilà, on est heureux, on a un dom0 maintenant il ne nous reste plus qu'à faire un domU (voir plusieurs suivant ce que l'on veut en faire)

Pour cela, il faut préparer un arbre linux, le plus simple étant de recopier celui du dom0 dans une partition.

Ca tombe bien j'ai un /xen1 prévu à cet effet...


Par exemple ici j'ai prévu les emplacements pour 4 xen chacun ayant une tâche bien spécifique dans mon réseau.

J'ai également prévu une swap pour chacun :


Je vais faire avec vous le domU Xen1 qui aura pour racine : /dev/sda6 et pour swap /dev/sda7

Il faut penser à enlever les lignes correspondantes dans la /etc/fstab pour ne pas y avoir de conflit empêchant le démarrage du domaine U .


A- Création de la racine du domaine U xen1 :

Tout d'abord pour travailler sans soucis il faut stopper les services réputés pour être bavards :

[root@localhost ~]# /etc/init.d/crond stop; /etc/init.d/atd stop; /etc/init.d/syslog stop;

puis on recopie les parties de l'arbre du dom0 qui sont nécessaires :

[root@localhost ~]# cp -ax /{root,dev,var,etc,usr,bin,sbin,lib} /xen1

Dans le cp le -a vous permet un mode « archive » pour conserver les liens symboliques et les uids, le x vous épargne la copie des systèmes de fichiers autres (ça ne sert pas trop ici mais c'est une bonne habitude pour plus tard ;) )

Une fois que cela est fini, il nous reste plus qu'à créer le fichier de configuration du domU.

B- Le Fichier de configuration domU :

Pour qu'un domU démarre, il lui faut un fichier de configuration.

Des fichiers d'exemples sont disponibles à l'installation dans le /etc/xen/

Il y en a plusieurs, on va partir du xmexample1 qui est le plus simple pour commencer.

D'abord on va en faire une copie pour travailler dessus tranquillement .

[root@localhost ~]# cp /etc/xen/xmexample1 /etc/xen/auto/xen1

Je le mets dans /etc/xen/auto pour pouvoir démarrer ensuite avec le service xendomains.

Je détaillerai son utilisation en fin de ce tuto.

Nous allons maintenant l'éditer :

[root@localhost ~]# vi /etc/xen/auto/xen1


d'abord on lui indique le kernel sur lequel booter.


Ici vous pouvez préciser un initrd personnalisé ( mkinitrd )


là vous précisez la mémoire vive que vous lui attribuez en MB (attention si il n'y en plus assez votre machine ne démarre pas).


Ici vous mettez le nom de votre domaine, vous le verrez s'afficher lors d'un «  xm list »


Ici vous indiquez le nombre de cpu à utiliser, par défaut 1 si vous laissez commenté. La valeur maximum ne dépend pas de votre machine physique mais du nombre maximum de cpu indiqué lors de la compilation de votre kernel. N'oubliez pas c'est virtuel ;)


Ici vous configurez votre ou vos interfaces réseaux virtuelles, mac et bridge de rattachement. Rien ne vous empêche si vous avez plusieurs interfaces réseau de créer d'autres bridges xen. Par défaut xenbr0 correspond au bridge sur eth0. Mais l'ip de la machine virtuelle domU sera indépendante de celle de votre machine virtuelle dom0.


Ici vous avez définie deux disques virtuels . La règle est la suivante :

phy si c'est un disque physique

sda6 : votre disque sur le dom0

sda1 : l'équivalent sur votre domU xen1

w : inscriptible.

Attention pensez à les démonter dans le dom0 avant de booter le domU Xen1.


Un dernier petit paramètre pour la root qui va définir le root device pour votre kernel domU lors du boot.

Le reste peut rester tel quel .

C- derniers petits réglages avant de démarrer le domU :

Pour que le domU fonctionne bien, il ne faut surtout pas oublier deux trois choses :


pour mettre les bon dev tel que définis dans le fichier de configuration du domaine.


[root@localhost boot]# swapoff /dev/sda7

Bon là ça devrait marcher si vous allez dans /etc/xen/auto

[root@localhost auto]# xm create xen1


Vous pouvez maintenant voir votre domU Xen1 démarré !

Partie 5 – L'utilisation de base pour xm :

Pour utiliser vos domaines, il y a xm :

Partie 6 – Quelques conseils pour la route :


Fait par Yves-Gaël Chény aka nantes_geek 11/2006 

Merci de conserver ces références en cas de reproduction partielle ou complète de cette page