21 novembre 2024

Xen : Installation et utilisation

Pour ceux et ceusses qui ne connaissent point et pour faire court et concis : la virtualisation, c’est l’art de faire tourner plusieurs machines sur une seule. Le but, économiser des ressources, éviter de faire tourner tous les services sur une seule machine. Souplesse dans le management, les mises a jour, les backups… Bref, une fois testé, on adhère à coup sur !
Comme d’habitude en informatique, on a le choix (et pas dans la date) :
– Vmware
– Xen
– VirtualBox
– Kvm
– Virtual PC
– et encore d’autres (Citrix, Qemu, etc..)
(Oui, les puristes diront que c’est peu court jeune homme, ce que à quoi je leur répond, le billet est déjà bien assez long comme ca 😉 )
Selon les solutions, c’est plus ou moins pratique, votre OS principal reste encore « utilisable » ou pas…
La, on va parler virtualisation dans un cadre professionnel, ou la machine physique ne servira qu’a une chose : héberger les machines virtuelles.
Dans les possibilités que j’ai cité au préalable, il nous reste Vmware et Xen.
Vmware, c’est pas mal, mais voila … C’est un OS à installer, une interface cliquodrome, bref, je suis pas fan.
Xen, c’est rapide à mettre en place, y’a de la ligne de commande comme j’aime et on peut même faire tourner des Windows dessus si certains y tiennent absolument 😉 (Ce sera l’objet d’un autre billet).

I – Prérequis

– Une machine en Debian.
– Un peu de temps
– Du café en quantité

II – Installation de Xen

On va partir sur une installation de Debian classique et minimaliste.
Seule chose à vérifier, au niveau du partitionnement : pensez à laisser de l’espace inutilisé (il servira pour LVM par la suite).
Une fois la Debian prête, histoire d’être sur et ça ne mange pas de pain :

# apt-get update
# apt-get upgrade

Puis on passe à l’installation de Xen par le méta-paquet

# apt-get install xen-linux-system

On modifie l’ordre de démarrage pour que le noyau Xen se charge par défaut.

# dpkg-divert --divert /etc/grub.d/08_linux_xen --rename /etc/grub.d/20_linux_xen
# update-grub

Un petit reboot des familles et on vérifie que Xen est bien la avec

# xentop

Je ne vous détaille pas le retour de cette commande, vous devriez comprendre par vous même si Xen est opérationnel 😉

III – Xen et le réseau

1 – Pourquoi

Xen offre trois possibilités pour gérer le fonctionnement réseau et sa topologie:
– Vif-bridge
– Vif-nat
– Vif-route
Je vais parler ici du fonctionnement en bridge, mode par défaut de Xen. Et au final, celui que j’ai retenu et je vous explique pourquoi
Techniquement, étant sur une dedibox (de chez Online) et voulant n’avoir que le dom0 « branché » au net (et faisant office de passerelle pour les vms), j’aurais du utiliser Vif-nat. De plus, le fonctionnement en bridge est « déconseillé » par Online car si une VM s’annonce avec une adresse MAC inconnu du  switch sur lequel votre serveur est branché, vous allez vous retrouver bloqué (le port est coupé et il ne vous reste plus qu’a contacter le support…)
Seulement, à l’époque ou j’ai installé mon premier Xen, le mode vif-nat ne donnait pas les résultats escomptés (pour faire bref, ça ne marchait pas du tout). J’ai donc choisi de garder le bridge mais en bidouillant quelque peu autour pour faire du NAT.
Au final, on obtient un fonctionnement en NAT, et aucun risque de se retrouver bloqué.
Depuis, je pense qu’il est possible d’avoir la même chose en vif-nat, mais comme mon système fonctionne au poil, pourquoi revenir dessus :p
Cependant, si vous voulez faire autrement (une ip internet par vm, etc…), libre à vous de faire ce que vous voulez !
C’est cela aussi que j’aime dans l’informatique et linux en particulier. Pour un problème donné, nous avons toujours pléthore de solutions !

2 – Comment !

Donc, on va installer le paquet permettant de monter le pont:

# apt-get install bridge-utils

Ensuite, on va éviter les fuites de MAC sur le réseau :
Dans le fichier /etc/sysctl.conf, rajouter :

net.ipv4.conf.all.arp_ignore=1

Ensuite, on va passer à la création de notre interface réseau virtuelle : dummy
On commence par charger le pilote

# modprobe dummy

Pour rendre le module actif au reboot, dans le fichier /etc/modules, ajouter :

dummy

Dans /etc/network/interfaces, rajouter la configuration de l’interface dummy :

auto dummy0
iface dummy0 inet manual
      up ip link set $IFACE address aa:bb:cc:dd:ee:ff
auto brlan
iface brlan inet static
      address 192.168.1.1
      netmask 255.255.255.0
      network 192.168.1.0
      broadcast 192.168.1.255
      bridge_ports dummy0
      bridge_stp off
      bridge_maxwait 0

Ou 192.168.1.1 correspond à l’IP du dom0, cote réseau privé.
On force également l’adresse mac pour la fixer, sinon, elle change à chaque reboot.
Pour le reste, je pense que je n’ai pas besoin de détailler.

# ifup dummy0
# ifup brlan

 

IV – LVM 2

LVM, c’est bien et pour des VMS, y’a rien de mieux… Un point c’est tout. Article complet sur LVM.
Bref, installons donc la chose :

# apt-get install lvm2

Lancer l’utilitaire cfdisk pour créer la partition de type LVM sur l’espace laissé libre lors de l’installation de la Debian.

# cfdisk /dev/sda

Le code pour un système LVM est 8e.
Une fois la partition créé (pensez bien à écrire les modifications avant de quitter cfdisk !), on vérifie :

# fdisk -l /dev/sda

Ce qui doit donner quelque chose comme :

...
Périphérique Amorce  Début        Fin      Blocs     Id  Système
/dev/sda1   *        2048      391167      194560   83  Linux
/dev/sda2          391168     2392063     1000448   82  partition d'échange Linux / Solaris
/dev/sda3         2392064    42391551    19999744   83  Linux
/dev/sda4        42391552  1952448511   955028480   8e  LVM Linux

Passons maintenant à la création du « Physical Volume »

# pvcreate /dev/sda4

On vérifie :

# pvs

On crée le « Volume Group » nommé vg0

# vgcreate vg0 /dev/sda4

On vérifie :
# vgs
Voila pour la partie LVM2 (pour le moment 😉 )

V – Xen-tools (ou comment créer les machines virtuelles)

1 – Préparation du fichier de config

Avec Xen, les moyens de créer une VM ne manquent pas, mais le plus simple reste de passer par les Xen-tools. Avec une ligne de commande, en quelques minutes, on déploie une nouvelle vm. A côté, VMware est une abomination…
Mais avant, ils faut tripatouiller encore un fichier de configuration : /etc/xen-tools/xen-tools.conf
Voici le mien pour exemple.

lvm = vg0
install-method = debootstrap
size   = 4Gb      # Disk image size.
memory = 128Mb    # Memory size
swap   = 128Mb    # Swap size
fs     = ext3     # use the EXT3 filesystem for the disk image.
dist   = `xt-guess-suite-and-mirror --suite` # Default distribution to install.
image  = sparse   # Specify sparse vs. full disk images.
gateway    = 192.168.1.1
netmask    = 255.255.255.0
broadcast  = 192.168.1.255
passwd = 1
kernel = /boot/vmlinuz-`uname -r`
initrd = /boot/initrd.img-`uname -r`
mirror = `xt-guess-suite-and-mirror --mirror`
ext3_options     = noatime,nodiratime,errors=remount-ro
ext2_options     = noatime,nodiratime,errors=remount-ro
xfs_options      = defaults
reiserfs_options = defaults
btrfs_options    = defaults
nohosts = 0 # default

Retenez que chaque directive est une directive par défaut (paramètre qui sera appliqué si vous ne spécifiez rien d’autre lors de la création de la vm. Il est possible d’overrider un paramètre en rajoutant –nom_parametre valeur_parametre lors de la création de la vm.
N’hésitez pas à regarder toutes les options, certaines peuvent vous servir.

 2 – Les rôles

Les rôles dans Xen vous permettent de réaliser une suite d’actions lors de la création d’une vm. Installation de paquets, copie de fichiers, etc…
Le rôle que j’ai crée : /etx/xen-tools/roles.d/monrole

#!/bin/sh
prefix=$1
if [ -e /usr/lib/xen-tools/common.sh ]; then
    . /usr/lib/xen-tools/common.sh
else
    echo "Oups"
fi
#  Installation paquets
chroot ${prefix} /usr/bin/apt-get update
chroot ${prefix} /usr/bin/apt-get -y -f upgrade
installDebianPackage ${prefix} udev
installDebianPackage ${prefix} htop
installDebianPackage ${prefix} bash-completion
installDebianPackage ${prefix} apticron
installDebianPackage ${prefix} postfix
cp -a /etc/xen-tools/skel/* ${prefix}
/bin/sed -i 's/generic/'${hostname}'/g' ${prefix}/etc/hostname
/bin/sed -i 's/generic/'${hostname}'/g' ${prefix}/etc/mailname

Un petit coup de

# chmod +x /etx/xen-tools/roles.d/monrole

Vous remarquez que j’effectue des copies de fichiers de mon DomO (nom de la machine physique) vers le DomU (la vm)
Cela permet d’avoir des fichiers déjà configuré.
Un petit coup de Sed derrière pour mettre le bon nom de machine, rien de sorcier.

 3 – Création de la VM

Allez, on peut enfin créer notre premier domu !
La machine va être crée à l’aide de debootstrap (méthode rapide pour installer un nouveau linux, vous allez constater 😉 )

# xen-create-image --hostname mavm --role monrole--size 10G --memory 512M --swap 1G --ip=192.168.1.10

On défini le nom à « mavm ». On applique le rôle « monrole », on change la taille (par défaut à 4G) pour passer à 10G. On change également la taille de la ram et le swap.
On termine en attribuant l’ip de notre DomU.
A la fin de la création, vous serez invité à saisir le mot de passe root du DomU fraichement créé.
Xen créé un fichier du type /etc/xen/mavm.cfg qui contient la configuration du DomU.
On va aller dedans d’ailleurs pour modifier un point de bug :
A la ligne concernant la quantité de Ram, supprimez l’unité par ex :

#memory = '1024M'
memory = '1024'

Vous pouvez y modifier ce que vous voulez (si vous constatez que la RAM est insuffisante, etc..)
On lance la vm :

# xen create mavm.cfg -c

L’option -c permet de garder une console attaché. On revient au Dom0 avec CTRL + $, mais si vous avez tout bien fait, votre vm devrait être accessible avec un bon vieux ssh 192.168.1.10 depuis le DomO.

VI – Les commande Xen utiles

Pour administrer xen au jour le jour, voici quelques commande à connaitre.
– xentop : moniteur temps réel des domu.
– xen-list-image : liste les DomU (tous, quelque soit leur état)
– xen-delete-image nom_domu : efface le domu (fichier de config et partition lvm)
– xen console nom_domu : permet d’attacher la console du domU en question.

– xen create nom_domu.cfg : Démarre le DomU (option -c pour garder une console attachée)
– xen shutdown nom_domu : Eteint le DomU (proprement; equivalent d’un shutdown -h now directement dans le DomU)
– xen destroy nom_domu : Eteint le DomU « à l’arrache ». Equivalent de « Oups, la prise… »
– xen reset nom_domu : Reset le DomU
– xen reboot nom_domu : Reboot le DomU (equivalent d’un reboot directement dans le DomU)

La commande xm peut être utilisé à la place de la commande xen.
Pour plus d’infos, tapez seulement xm ou xen, vous aurez toutes les options possibles.

VII – Liens

Site du projet Xen : http://www.xenproject.org
Documentation Xen sur le site Debian : https://wiki.debian.org/Xen

VIII – Conclusion

Et bien voila, vous avez de quoi faire !
Si vous avez des questions, des remarques, etc…. les commentaires sont la pour ça.
Et je remercie ma fidèle cafetière au passage 😉

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *