Xen + NetBSD en Dom0
Rédigé par Xavier - -
Xen est un hyperviseur libre et éprouvé très utilisé même si il se fait petit à petit remplacer par KVM (qui est pourtant assez différent). Cet article va détailler l'installation de Xen 4.1 sur NetBSD-5.1.

Il n'est pas nécessaire de disposer d'un processeur supportant les instructions de virtualisation sauf pour Windows. Mais dans ce tutoriel nous ne l'utiliserons pas.
Installation de NetBSD-5.1
La documentation officielle de NetBSD détaille de façon sommaire l'installation de Xen3 sur une version 5.0 de l'OS. Bien que les choses aient probablement changé depuis, il est recommandé que la partition / ne fasse pas plus de 512MB et soit de type FFSv1.
Nous allons compiler tous les outils depuis pkgsrc sur la machine même. Il est possible de le faire depuis une buildbox (plus propre pour un serveur de production) mais il est préférable de se concentrer sur le fonctionnement de Xen dans notre cas. Dans le choix personalisé des composants d'installation (sets) ajoutez les outils de développement et les Pages de manuel.

Demandez à spécifier les tailles de partitions et utilisez un schéma de ce type :
- / de 384MB
- swap de 256MB
- tmp (mfs) de 256MB
- /usr de 30GB
- /var de 256MB
- /home avec le reste (on installera nos DomU ici)
Dans l'exemple (que je fais avec VirtualBox) j'ai un disque de 64GB et voici ce que cela donne :

Poursuivez le reste de l'installation de manière classique.
Configuration de base et préparations
La première chose à faire après le premier boot de votre système est d'aller faire un tour dans /etc/rc.conf pour y paramétrer le réseau et le nom d'hôte. Voici un exemple pour une machine en IP fixe avec un accès SSH :
hostname=srvxen.src386.org #Network auto_ifconfig=YES ifconfig_wm0="inet 192.168.56.90 netmask 255.255.255.0" defaultroute=192.168.56.1 #Daemon sshd=YES
Dans le cadre d'un serveur en DHCP, il faut remplacer tout le paragraphe "Network" par dhclient=YES. Dans tous les cas vous ne devez pas oublier de compléter les fichiers /etc/hosts et /etc/resolv.conf. Exemples :
# /etc/hosts ::1 localhost localhost. srvxen.src386.org. 127.0.0.1 localhost localhost. srvxen.src386.org.
# /etc/resolv.conf # Server DNS (ici la box) nameserver 192.168.1.1
Vous pouvez maintenant recharger la configuration du réseau et démarrer le daemon SSH :
# /etc/rc.d/network restart # /etc/rc.d/sshd start
Nous devons donc maintenant avoir accès à internet (vous pouvez vérifier cela avec un ping) ce qui va nous permettre d'installer les sources du système (nécessaires pour compiler le kernel plus tard) et pkgsrc (pour installer Xen).
La documentation présente plusieurs méthodes pour installer pkgsrc. Ma préférée est de récupérer le tar.gz depuis internet. Note : la commande ci-dessous est valable en 2011 seulement, consultez la documentation pour être certain :
# cd /root # ftp ftp://ftp.NetBSD.org/pub/pkgsrc/pkgsrc-2011Q2/pkgsrc.tar.gz # tar -xzf pkgsrc.tar.gz -C /usr # rm pkgsrc.tar.gz
Par la suite nous devons récupérer les sources de NetBSD, du moins le composant "syssrc" qui contient le kernel. Le chapitre présent de la documentation de NetBSD décrit là aussi plusieurs méthodes. Vous pouvez encore une fois utiliser la méthode ftp :
# cd /root # ftp -i ftp://ftp.NetBSD.org/pub/NetBSD/NetBSD-5.1/source/sets/ .... ftp> mget syssrc.tgz ftp> exit # mkdir /usr/src # tar -xzf ./syssrc.tgz -C / # rm syssrc.tgz
Fonctionnement de Xen
Xen est un hyperviseur, sa tâche est de partager entre plusieurs systèmes d'exploitations l'accès au matériel. Il n'y a pas d'OS "principal" à proprement parler, le NetBSD que nous venons d'installer va devoir tourner dans Xen. Voici les différents composants :
xentools4.1 |
netbsd-dom0 |
xenkernel4.1 |
Matériel |
C'est notre système NetBSD, le dom0 qui disposera des outils d'administration de Xen et pourra contrôler le tout. Nous allons installer ces différents composants dans les étapes suivantes.
Compilation du kernel Dom0
Nous allons commencer par compiler le kernel Dom0 qui sera nécessaire pour booter NetBSD lorsque nous aurons installé Xen. Les sources sont situées dans /usr/src/sys/arch/. Dans l'exemple j'utilise NetBSD amd64 donc je dois entrer dans le sous répertoire amd64 Les fichiers de configuration des kernel sont dans le sous répertoire conf.
# cd /usr/src/sys/arch/amd64/conf
Voici la documentation officielle pour la compilation du kernel sous NetBSD. La configuration a utiliser est XEN3_DOM0. Nous allons installer Xen4.1 mais il reste compatible :
# config XEN3_DOM0 # cd ../compile/XEN3_DOM0 # make depend # make # cp netbsd /netbsd-dom0
Compilation de xentools
Compilons et installons ensuite Xen et ses outils. Ils se situent dans /usr/pkgsrc/sysutils/xentools41. Cependant la compilation ne fonctionnera pas sans une petite modification :
# cd /usr/pkgsrc/sysutils/ # vi Makefile
Trouvez les lignes :
# XXX add version check: Xen requires dev86 >= 0.16.14 BUILD_DEPENDS+= dev86-[0-9]*:../../devel/dev86 # needed to build firmware BUILD_DEPENDS+= ocaml-findlib-[0-9]*:../../devel/ocaml-findlib
Et ajoutez :
BUILD_DEPENDS+= acpica-utils-[0-9]*:../../sysutils/acpica-utils
Lancez ensuite la compilation :
# make # make install
Compilation de xenkernel
Entrez dans le répertoire /usr/pkgsrc/sysutils/xenkernel41. Là aussi nous allons devoir faire une petite modification du makefile. En effet il y a un paramètre de détection de l'OS qui affiche une erreur et arrête la compilation si celui-ci n'est pas "supporté". Or celui-ci décide que NetBSD-5.1 n'est pas compatible alors que si. Nous allons donc l'évincer.
# cd /usr/pkgsrc/sysutils/xenkernel4.1 # vi Makefile
Supprimez (ou commentez) les lignes suivantes :
ONLY_FOR_PLATFORM= Linux-2.6*-i386 Linux-2.6*-x86_64 ONLY_FOR_PLATFORM+= NetBSD-[5-9].99.*-x86_64 NetBSD-[5-9].99.*-i386
Puis lancez la compilation :
# make # make install
Il faut maintenant aller chercher le fichier généré, xen.gz qui doit se trouver dans /usr/pkg/xen41-kernel/xen.gz. Pour plus de facilité nous allons le copier sur la racine :
# cp /usr/pkg/xen41-kernel/xen.gz /xen.gz
PS : n'essayez pas de faire de lien symbolique, car plus tard nous allons utiliser grub et ce dernier ne les aime pas.
Configuration des daemons
Maintenant nous allons paramétrer le lancement des différents daemons xentools. Comme cela était indiqué lors du make install de ce dernier, il faut copier quelques fichiers :
# cp /usr/pkg/share/examples/rc.d/xen* /etc/rc.d/
Puis ensuite les autoriser dans le rc.conf, voici ce qu'il faut ajouter :
#Xen xendomains=YES xend=YES xencommons=YES xenwatchdog=YES
Configuration du boot
La documentation recommande d'utiliser grub pour booter à la fois Xen et notre Dom0, à savoir NetBSD. Commençons par installer grub :
# cd /usr/pkgsrc/sysutils/grub/ # make # make install
Si vous connaissez déjà grub en profondeur, vous savez alors que nous allons devoir rédiger un fichier de configuration et faire quelques bidouilles. Commencez par créer un répertoire grub sur la racine, et entamez un fichier menu.lst :
# mkdir /grub vi /grub/menu.lst
La documentation nous fournit un fichier exemple très complet, mais nous pouvons le simplifier pour obtenir ceci :
default=0 timeout=10 title Xen / NetBSD root(hd0,0) kernel (hd0,a)/xen.gz dom0_mem=65535 module (hd0,a)/netbsd bootdev=wd0a ro console=tty0 title NetBSD BACKUP root (hd0,0) chainloader +1
Grub va donc lancer le boot sur le kernel de Xen, puis demande à démarrer le Dom0 qui est NetBSD (et lui accorde le terminal ttyS0 (celui qui s'affiche par défaut). Finalisons l'installation :
# grub-install --no-floppy /dev/rwd0d # grub --no-floppy --batch grub> root (hd0,a) grub> setup (hd0) grub> quit
Vous pouvez maintenant redémarrer votre système. Vous verrez Grub s'afficher et vous n'aurez qu'à appuyer sur la touche Entrée ou attendre 10 secondes pour booter sur Xen.
Vérifications
Nous pouvons vérifier que notre NetBSD tourne bien en Dom0 sur Xen avec la commande suivante :
# xm list Name ID Mem VCPUs State Time(s) Domain-0 0 64 1 r----- 68.8
Notre hyperviseur Xen est maintenant fonctionnel et il ne reste plus qu'à installer des systèmes DomU. Mais cela fera l'objet d'un prochain article.