Xen est donc un hyperviseur, un système permettant de faire tourner plusieurs machines virtuelles sur une machine physique.
Son intérêt est qu'il est assez simple à configurer, et souple à utiliser.
Mais surtout, il permet de faire de la para-virtualisation. C'est à dire de faire tourner des VM sans émuler de hardware, et donc d'avoir des performances quasi natives. mais cela nécessite que les VM tournent avec un noyau modifié.
A l'inverse, on a le HVM, qui comme VMware-server, permet d'émuler le hardware, et ainsi de virtualiser des OS dont on ne peut modifier le noyau, comme windows.
Attention, si vous voulez faire du HVM, il faut que votre processeur le supporte, et dispose de la fonction Intel VT ou AMD-V (flag VMX ou SVM dans /proc/cpuinfo) sinon ce n'est pas possible.

Ici, je vais installer tout ça sur mon zotac mag (atom 330 dual core + 2 go de ram), pour faire de la para-virtualisation
il tournait jusqu'ici sous ubuntu server 9.10 (24h/24 depuis 10 mois quand même, plutôt fiable non ? :) )
La première chose est d'installer un OS adapté. En l'occurrence Debian Lenny 5.06 64 bits, depuis une clé usb.

je vous passe l'install' de debian, passons directement à Xen :

aptitude install xen-hypervisor-3.2-1-amd64 xen-tools xen-utils-3.2-1 bridge-utils
aptitude install linux-image-2.6-xen-amd64 linux-headers-2.6-xen-amd64

Pour la nomenclature, on désigne la machine physique faisant tourner xen sous le terme de dom0, et les machines virtuelle sous le terme de domU.

A présent, il faut configurer xen. pour cela on édite le fichier de config principale, /etc/xen/xend-config.sxp
Il y a donc plusieurs mode de connections réseau (bridge, nat, routed).
Voici un petit récapitulatif de ces modes pour les curieux

On va ici utiliser du bridge. c'est à dire que les domU seront visibles directement et auront leur adressage réseau sur le même sous réseau que la machine host.

voici ce qu'il faut dé commenter :

(network-script network-bridge)
(vif-script vif-bridge)

et il faut commenter la ligne

(network-script network-dummy)

toujours dans ce même fichier, on va définir les ressources matérielles qu'on va affecter au dom0, la machine hôte.
Comme elle ne servira qu'à contrôler les machines virtuelles, on va lui mettre un minimum afin de garder un max pour les domU A savoir un seul core (si processeur multicore) et la ram (par défaut et le minimum si on veut en attribuer plus aux VM à chaud)

(dom0-min-mem 384)
(dom0-cpus 1)

la ligne (dom0-min-mem 384) sert à définir qu'il y aura toujours au minimum 384 Mo de ram pour la dom0.
Meme si on lui en met plus par défaut (voir ci dessous), et qu'on a besoin d'attribuer plus de ram aux domU, on ne pourra descendre en dessous de ce seuil. On s'assure ainsi qu'elle aura toujours sufisemment de ressources ;)

Puis, comme dit au dessus, on configure la ram qu'aura la dom0 par défaut. On édite le fichier /boot/grub/menu.lst à la fin de la ligne

kernel /xen-3.2-1-amd64.gz

on rajoute dom0_mem=512M

on définit ici que dom0 aura 512 Mo de ram, et pourra descendre au minimum à 384 Mo.

maintenant, configurons xen-utils, avec lequel on va définir quelques réglages de base pour les machines virtuelles que nous allons créer, tels que la ram, swap, disque dur, distro, archi...
C'est très pratique car par la suite, on peut créer une nouvelle domU en lui donnant juste un nom et une ip :)
On edite le fichier /etc/xen-tools/xen-tools.conf et on édite / décommente ces lignes :

# dossier ou stocker les VM
dir = /home/xen
# taill du disque dur size = 4 Gb
# ram en Mo
memory = 512M
# taille de la swap
swap = 512Mb
# type du système de fichier
fs = ext3
# distrib
dist = lenny
# nombre de cpus/core
vcpus = 1
# passerelle
gateway = 192.168.1.1
# masque de sous réseau
netmask = 255.255.255.0
# masque de broadcast
broadcast = 192.168.1.0
# demander le mot de passe root
passwd = 1
# architecture, 32 ou 64 bits
arch = amd64
# mirroir à utiliser pour choper les paquets
mirror = http://ftp.fr.debian.org/debian/
# pour acceder au shell depuis la console
serial_device = hvc0

encore une fois, toutes ces options seront par défaut. lorsqu'on créera une nouvelle machine virtuelle, on pourra bien sur définir ces paramètres si on en veut des différents.

Et voila. Maintenant, on reboot la machine pour redémarrer sur Xen.
Une fois sur grub, on choisit la première entrée "Xen 3.2-1-amd64 / Debian GNU/Linux, kernel 2.6.26-2-xen-amd64"

Quand debian a fini de redémarrer, on se log en root et on vérifie que xen tourne bien en tapant la commande

xm list

qui est la commande permettant de lister le dom0 et toutes les domU qui tournent, ce qui doit donner

Name            ID   Mem VCPUs      State   Time(s)
Domain-0         0   512     1     r-----    135.7

de même, afin de vérifier que les paramètres de ressources qu'on a appliqué :

free

pour voire la mémoire ram et

cat /proc/cpuinfo

pour voir le nombre de cpus (ici 1 au lieu de 4 normalement)

Egalement, pour vérifier que le bridge est bien fait, taper ifconfig et chercher si on a bien une interface nommée peth0, avec la meme mac que eth0

A présent, on se créée une machine virtuelle, qui va utiliser tous les parametres de base (512 mo de ram, disque de 4 Go, swap de 512 mo et 1 core, distro lenny avec archi amd64)
Comme dit précédemment, on donne juste le nom et l'IP

xen-create-image --hostname=VM1 --ip 192.168.1.100 --role=udev

L'install se lance alors, avec debootstrap, qui va telecharger tous les paquets necessaire au système de base.
Quelques minutes après (suivant la rapidité de votre connexion), la domU est prête. On peut alors la lancer :

xm create VM1.cfg

on obtient alors un résumé de la machine, ainsi que le status de l'install :
(ne faites pas attention au warning, le bridge est bien configuré, mais il chouine quand même...)

WARNING
-------

  You appear to have a missing vif-script, or network-script, in the
 Xen configuration file /etc/xen/xend-config.sxp.

  Please fix this and restart Xend, or your guests will not be able
 to use any networking!


General Information
--------------------
Hostname       :  srv1
Distribution   :  lenny
Partitions     :  swap            512Mb (swap)
                  /               5Gb   (ext3)
Image type     :  sparse
Memory size    :  512Mb
Kernel path    :  /boot/vmlinuz-2.6.26-2-xen-amd64
Initrd path    :  /boot/initrd.img-2.6.26-2-xen-amd64

Networking Information
----------------------
IP Address 1   : 192.168.1.151 [MAC: 00:16:3E:EB:45:D7]
Netmask        : 255.255.255.0
Broadcast      : 192.168.1.255
Gateway        : 192.168.1.1


Creating partition image: /home/xen/domains/srv1/swap.img
Done

Creating swap on /home/xen/domains/srv1/swap.img
Done

Creating partition image: /home/xen/domains/srv1/disk.img
Done

Creating ext3 filesystem on /home/xen/domains/srv1/disk.img
Done
Installation method: debootstrap

puis quelques minutes après, une fois les paquets téléchargés

Done

Running hooks
Done

Role: udev
        File: /etc/xen-tools/role.d/udev
Role script completed.

Creating Xen configuration file
Done
Setting up root password
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
All done


Logfile produced at:
         /var/log/xen-tools/srv1.log

(au passage, le fichier de configuration décrivant la domU se trouve dans /etc/xen/VM1.cfg)

Si vous souhaitez vous connecter dessus lors du boot, utilisez la commande

xm create -c VM1.cfg

Si vous voulez vous y connecter alors que la machine a démarré :

xm console VM1

On peut également choisir la machine avec son id obtenu par la commande xm list

xm console <id>

Une chose à savoir: lorsqu'on créé une machine virtuelle tel que noté ci dessus, la VM n'aura pas son propre boot.
C'est à dire qu'elle va chercher son noyau directement sur le dom0.
Dans un prochain article, on verra comment utiliser pygrub pour la rendre indépendante en ayant son propre noyau et grub ;)
Et également dans un prochain article, on verra comment lancer une VM en émulant une couche hardware (HVM) pour faire tourner un windows