Maniatux's Blog

Welcome to the internet

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.