Xen : installation d'un hyperviseur dom0 NetBSD

"Army"J'ai écrit dans le passé quelques billets concernant Xen, mais jamais sur l'installation à proprement parler d'un hyperviseur Xen à base de NetBSD. Il est temps de réparer cela ! Mais avant de commencer, quelques rappels :

  • en terminologie Xen, chaque système invité se nomme un "domaine" ;
  • une machine virtuelle est un domaines non-privilégié, en anglais "unprivileged domain", généralement raccourci en "domU" ;
  • l'OS qui fait fonctionner l'hyperviseur est un domaine privilégié, en anglais "privileged domain", ce qui donne en raccourci "dom0".

Il s'agit donc de détailler l'installation et la configuration de Xen en tant que dom0 sur un système NetBSD amd64. Pour valider son bon fonctionnement, une installation rapide d'un domU OpenWrt sera effectuée à la fin.

Mais avant de démarrer, voici quelques informations sur la configuration qui sera effectuée :

  • comme la machine physique ne dispose pas des instructions de virtualisation (Intel Atom 330), seul le mode "paravirtuel" sera abordé ;
  • la machine physique se verra attribuer 256 Mo de RAM sur ses 2 Go pour son fonctionnement ;
  • la configuration réseau sera en mode "bridge", le dom0 et les domU seront donc sur le même réseau.

Allons-y !

Installation et configuration de NetBSD

Commençons par l'installation du système d'exploitation : NetBSD 7.1 amd64. Il n'y a rien en particulier à signaler sur l'installation, cela dépend avant tout de son usage. Cette machine n'étant pas destinée à devenir un environnement de production, j'ai choisi un partitionnement minimal, à savoir juste un / qui prend tout le disque.

A noter aussi qu'à ce moment, il n'y a besoin de rien en particulier concernant le noyau. J'ai pris l'habitude de ne pas installer les sets de compilation ou source sur une machine sauf si j'en ai expressément besoin. Donc, je me suis limité aux sets suivants :

  • base ;
  • etc ;
  • man ;
  • misc ;
  • modules ;
  • tests ;
  • text ;
  • xbase.

Côté réseau, il sera sans doute plus simple de configurer une adresse IP statique. On va aussi dès maintenant configurer le bridge :

root@rogue:~# cat > /etc/ifconfig.bridge0 
create
!brconfig $int add re0 up

A noter que l'interface de la machine physique est re0, il convient de la modifier selon celle disponible. On va aussi autoriser la retransmission de paquets réseau :

root@rogue:~# cat >> /etc/sysctl.conf
net.inet.ip.forwarding=1

Ces modifications seront prises en compte au prochain démarrage du système, qu'il convient de faire dès maintenant.

Pour les paquets logiciels, j'ai choisi d'utiliser mon propre dépôt pkgsrc de paquets binaires. Là aussi, rien d'exceptionnel, j'ai juste installé mon petit confort personnel. Il est néanmoins possible d'utiliser le dépôt binaire pkgsrc officiel (configuré lors de l'installation) ou d'utiliser pkgsrc depuis les sources.

Installation et configuration de Xen 4.6

Maintenant que notre système est installé et prêt, passons à l'installation de Xen. Rien de compliqué non plus à ce niveau, il suffit d'utiliser pkgin :

root@rogue:~# pkgin in xenkernel46 xentools46

Des messages seront affichés durant l'installation des différents paquets, montrant un certain nombre de messages de conseils et de recommandations.

Pour que Xen fonctionne, il faut d'abord démarrer un noyau spécialisé qui chargera de lancer l'hyperviseur. Le noyau NetBSD dom0 est disponible à côté du noyau générique sur les dépôts :

root@rogue:~# wget http://cdn.netbsd.org/pub/NetBSD/NetBSD-7.1/amd64/binary/kernel/netbsd-XEN3_DOM0.gz
root@rogue:~# mv netbsd-XEN3_DOM0.gz /

Configurons maintenant le chargeur de démarrage. Il suffit d'insérer la ligne suivante au début du fichier /boot.cfg :

menu=Xen:load /netbsd-XEN3_DOM0.gz console=pc;multiboot /usr/pkg/xen46-kernel/xen.gz dom0_mem=256M

Parmi les détails de cette ligne de configuration, on remarquera l'allocation de 256 Mo de mémoire vive pour le dom0.

Par contre, si jamais le partitionnement prévoit un /usr séparé, il vaudra mieux copier /usr/pkg/xen46-kernel/xen.gz dans / et de remplacer les chemins en accord avec la nouvelle localisation du fichier. Une fois que le chargeur de démarrage est modifié, un redémarrage est nécessaire, mais juste avant on peut créer les fichiers spéciaux dans /dev :

root@rogue~# cd /dev && sh MAKEDEV xen

Maintenant on peut redémarrer :)

Mais tout n'est pas encore prêt. Par exemple, le service xencommons doit être activé et démarré. On ajoute alors la ligne suivante au fichier /etc/rc.conf :

xencommons=YES

On peut ensuite lancer le service :

root@rogue~# service xencommons start

Il y a encore un fichier de configuration à modifier avant de commencer à faire joujou avec nos machines (para-)virtuelles : /usr/pkg/etc/xl.conf. Je n'ai fait que deux modifications à ce fichier :

root@rogue:~# grep -v ^# /usr/pkg/etc/xen/xl.conf | grep -v ^$
vif.default.script="vif-bridge"
vif.default.bridge="bridge0"

Il est temps d'effectuer rapidement un test de domU !

Test d'un domU OpenWrt

Un moyen de tester rapidement le fonctionnement de son dom0 Xen est d'utiliser un domU OpenWrt : il s'agit en effet d'un OS léger, non seulement d'un point de vue processeur et mémoire, mais aussi d'un point de vue espace disque. Au moment de la rédaction de cet article, la dernière version stable d'OpenWrt est la 15.05.1 et porte le nom de Chaos Calmer.

Deux éléments sont nécessaires : un fichier qui sera le disque dur de la machine virtuelle, et un fichier de configuration. Dans le premier cas c'est très simple, il suffit d'aller le récupérer sur le site d'OpenWrt, de le placer dans un répertoire, et de le décompresser :

root@rogue:~# mkdir -p /srv/xen/images/disk
root@rogue:~# cd /srv/xen/images/disk
root@rogue:/srv/xen/images/disk# wget https://downloads.openwrt.org/latest/x86/xen_domu/openwrt-15.05.1-x86-xen_domu-combined-ext4.img.gzroot@rogue:/srv/xen/images/disk# zcat openwrt-15.05.1-x86-xen_domu-combined-ext4.img.gz > openwrt.img

Continuons avec le fichier de configuration, basé sur un fichier d'exemple. Il doit se trouver dans /usr/pkg/etc/xen/, et se nomme tout simplement openwrt :

name = "openwrt"
uuid = "26824417-2dde-11e7-a2aa-00301bbde894"
bootloader = "/usr/pkg/bin/pygrub"
extra = "root=/dev/xvda2 rw"
memory = 128
vcpus = 1
vif = [ 'bridge=bridge0,mac=00:16:3E:00:00:01' ]
disk = [ '/srv/xen/images/disk/openwrt.img,raw,xvda,rw' ]

Maintenant que tout cela est en place, il ne reste plus qu'à lancer la machine virtuelle :

root@rogue:~# xl create -c /usr/pkg/etc/xen/openwrt

Une fois OpenWrt démarré, il suffit alors d'appuyer sur la touche entrée pour activer la console locale. Côté tests, il faut vérifier le nombre de processeurs (dans /proc/cpuinfo, il doit n'y en avoir qu'un), ainsi que la quantité de mémoire vive (dans /proc/meminfo, ou via free -m, on doit avoir 128 Mo). Si un serveur DHCP est présent, on peut facilement tester le réseau via udhcpc :

root@OpenWrt:/# udhcpc -i br-lan

On peut désormais vérifier que le réseau est bien connecté.

Vous avez aimé cet article ? Alors partagez-le sur les réseaux sociaux ! Si en plus vous avez des remarques, ou des propositions d'améliorations, n'hésitez pas : les commentaires sont là pour ça !

Crédit photo : Marcos Leal - Army

Commentaires

Le 03/05/2017 14:35 par utux

NetBSD ? Masochiste.

Le 03/05/2017 15:05 par Nils

Mais qu'est-ce que c'est bon ;-)