Ou comment faire rentrer tes *BSD en boîte
Stefan “hr” Berder hr@bonz.org
Paru dans GNU/Linux Magazine rance Hors-série n°30
Où en sont les principaux *BSD du marché en ce qui concerne Xen, la hype du moment ? Nous allons procéder à une petite inspection surprise de l'état des lieux de Xen sur NetBSD, FreeBSD et OpenBSD. Où en est l'intégration de Xen en tant que “dom0/domU” dans les différents noyaux BSD, et comment peut-on profiter de ces extraordinaires systèmes d'exploitation lorsque l'on a qu'un système GNU/Linux sous la main. Maintenant plus de problèmes, vous saurez toujours comment sortir avec vos *BSD pour rentrer en boîte.
Disclaimer ! Attention cet article est très volatile mais non inflammable, les informations contenues ici font état d'un avancement et donc sont sujettes à évolution.
“Aller, un dernier rappel sur Xen et j'y vais Georges”, mais c'est vraiment le dernier ce coup-ci, parce que la dernière fois on sait comment ça a fini. Il est effectivement de bon ton de commencer ce genre d'article par un rapide rappel afin de mettre le lecteur dans les meilleures conditions pour la suite du sujet.
Xen est donc un logiciel de paravirtualisation, ce qui signifie que l'on peut lancer une machine virtuelle sur n'importe quel type de processeur. Toutefois les noyaux de la machine hôte et des machines virtuelles doivent être modifiés pour fonctionner avec Xen, si le processeur ne supporte pas de technologie de virtualisation. Le principe de base est d'installer un noyau xen pour la machine hôte, au démarrage de cette machine, une première machine virtuelle est créée (dom0). C'est ce domaine qui va ensuite contrôler les machines invitées (domU).
Si vous ne comprenez pas de quoi je parle, il suffit de commander les GNU/Linux Magazine 85, 87 et 89 qui donnent un bon aperçu de ce qu'on peut faire avec l'engin.
Dans la suite de cet article, je parlerai indifféremment de domain0, dom0 ou “host” pour le système hôte et de domainU, domU ou “guest” pour le système virtuel.
On sait maintenant tous que Xen c'est la vibe, c'est le hype, c'est le sujet de toutes les soirées bobo parisiennes du moment. Et bien pour vraiment vous la claquer en soirée il n'y a qu'une solution, parler de l'intégration de xen dans les 3 principaux *BSD de la place. Alors on va faire simple, plan en 3 points thèse/antithèse/synt^W NetBSD, FreeBSD et OpenBSD.
NetBSD [1] a été le premier système BSD à intégrer Xen dans son noyau, le premier commit dans le noyau [4] date de mars 2004 [5], et la première sortie officielle de décembre 2004 dans la version 2.0 de NetBSD [6]. Actuellement le support de Xen2 est complet (dom0/domU) dans la version stable de NetBSD (3.1). Cette version a aussi vu arriver le support de Xen3 en domU. L'intégration de Xen3 en dom0 se fait dans la version -current et est prévue pour la version 4.0 qui sortira normalement courant Mars 2007.
L'intégration de Xen2 dans NetBSD-3 est très bonne et l'installation d'un dom0 ou domU est d'une simplicité enfantine [7].
Pour le moment Xen n'est pas officiellement intégré dans FreeBSD [2], il y a un travail mené dans la branche -current mais cela constitue un “work in progress”. Xen devait être intégré dans la version 6.1 sortie en mai 2006 mais c'est maintenant repoussé à une date et une release inconnues [8]. Les développeurs se trouvent confrontés à des problèmes assez profonds dans le fonctionnement du noyau FreeBSD, ces problèmes et le travail en cours sur le 'newbus' empêchent toute avancée du projet [9].
Pour le moment il est possible de faire tourner un noyau OpenBSD en “guest” dans un Xen2 ou Xen3 [10]. Le support pour le dom0 devrait arriver, mais il est nécessaire de faire des changements dans le bootloader OpenBSD pour que le noyau se charge correctement. Il n'y a, a priori, aucun projet d'intégration de xen dans le système. De là à dire que Theo est has been …
“Et oui Maryse, ce n'est pas un *BSD que nous allons vous proposer avec le SuperXen mais bien 3 *BSD, vous avez bien entendu, 3 *BSD pour la même somme qu'un seul pack de SuperXen”.
La machine hôte est basée sur une distribution Debian, la machine xen2 est une Sarge avec un xen2.0.7 compilé et la machine xen3 est une Etch avec un xen3 packagé standard. L'installation de cette machine n'a rien à foutre ici donc ne posez même pas la question, nan mais c'est vrai quoi, vous êtes pénibles à la fin [17][18].
Le système de fichiers des machines virtuelles sera créé dans un fichier pour des raisons de simplicité et pour éviter de me la péter avec tout le matos que je pourrais avoir. Mon répertoire de stockage des machines virtualisées est /var/xen/domains/<nom_domu>. Mes noyaux et autres fichiers en dehors de la configuration se trouvent dans mon répertoire personnel ~/xen/.
NetBSD est d'une simplicité déconcertante à installer dans un domU, il faut récupérer les 2 noyaux concernés, un noyau pour l'installation et un noyau pour le fonctionnement courant.
Ces noyaux peuvent être récupérés sur n'importe quel mirroir NetBSD, en l'occurrence je choisis ftp.fr.netbsd.org. Ils se trouvent dans le répertoire /pub/NetBSD-daily/ des mirroirs sous le chemin particulier netbsd-<release>/<snapshot>/i386/binary/kernel/netbsd-[INSTALL_]XEN[23]_DOMU.gz.
Je vais là vous en mettre plein la vue et télécharger ces noyaux sans Firefox :
xen2$ wget ftp://ftp.fr.netbsd.org/pub/NetBSD-daily/netbsd-3/200611240000Z/i386/binary/kernel/netbsd-INSTALL_XEN2_DOMU.gz -O ~/xen/netbsd-xen/netbsd-3-INSTALL_XEN2_DOMU.gz xen2$ wget ftp://ftp.fr.netbsd.org/pub/NetBSD-daily/netbsd-3/200611240000Z/i386/binary/kernel/netbsd-XEN2_DOMU.gz -O ~/xen/netbsd-xen/netbsd-3-XEN2_DOMU.gz
Ou alors
xen2$ wget ftp://ftp.fr.netbsd.org/pub/NetBSD/NetBSD-3.1/i386/binary/kernel/netbsd-INSTALL_XEN2_DOMU.gz -O ~/xen/netbsd-xen/netbsd-3_1-INSTALL_XEN2_DOMU.gz xen2$ wget ftp://ftp.fr.netbsd.org/pub/NetBSD/NetBSD-3.1/i386/binary/kernel/netbsd-XEN2_DOMU.gz -O ~/xen/netbsd-xen/netbsd-3_1-XEN2_DOMU.gz
Une fois les noyaux décompressés, on peut commencer et se faire tout plein de plaisir.
Le fichier de configuration est /etc/xen/netbsd.cfg
kernel = "/home/hr/xen/netbsd-xen/netbsd-3-INSTALL_XEN2_DOMU" #kernel = "/home/hr/xen/netbsd-xen/netbsd-3-XEN2_DOMU" memory = 128 name = "netbsd" disk = [ 'file:/var/xen/domains/netbsd/disk.img,sda1,w' ]
Pour commencer j'indique que le noyau utilisé est celui d'installation, on remarque que j'ai déjà la ligne précisant le noyau de fonctionnement normal en commentaire. J'alloue 128M de ram au système “guest” et j'indique le système de fichiers à utiliser.
On crée un fichier de 3Go qui va porter le système de fichiers pour cette installation :
[/var/xen/domains/netbsd] xen2# dd if=/dev/zero of=disk.img bs=1024k seek=3000 count=1 1+0 records in 1+0 records out 1048576 bytes (1.0 MB) copied, 0.003756 seconds, 279 MB/s
Il suffit maintenant de lancer le domU et de procéder à l'installation du NetBSD.
xen2# xm create -c netbsd.cfg
Using config file "/etc/xen/netbsd.cfg".
Started domain netbsd, console on port 9601
************ REMOTE CONSOLE: CTRL-] TO QUIT ********
[ Kernel symbol table missing! ]
Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
The NetBSD Foundation, Inc. All rights reserved.
Copyright (c) 1982, 1986, 1989, 1991, 1993
The Regents of the University of California. All rights reserved.
NetBSD 3.1_STABLE (INSTALL_XEN2_DOMU) #0: Sat Dec 2 06:04:39 UTC 2006
builds@pb:/home/builds/ab/netbsd-3/i386/200612010000Z-obj/home/builds/ab
/netbsd-3/src/sys/arch/i386/compile/INSTALL_XEN2_DOMU
total memory = 121 MB
avail memory = 118 MB
mainbus0 (root)
cpu0 at mainbus0: (uniprocessor)
cpu0: Intel (686-class), 2800.22 MHz, id 0xf41
cpu0: features bfebfbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR>
cpu0: features bfebfbff<PGE,MCA,CMOV,PAT,PSE36,CFLUSH,DS,ACPI,MMX>
cpu0: features bfebfbff<FXSR,SSE,SSE2,SS,HTT,TM,SBF>
cpu0: I-cache 12K uOp cache 8-way
cpu0: L2 cache 1 MB 64B/line 8-way
cpu0: ITLB 4K/4M: 64 entries
cpu0: DTLB 4K/4M: 64 entries
cpu0: 32 page colors
hypervisor0 at mainbus0
debug virtual interrupt using event channel 2
misdirect virtual interrupt using event channel 0
Domain controller: using event channel 1
xencons0 at hypervisor0: Xen Virtual Console Driver
xencons0: console major 143, unit 0
Initialising Xen virtual ethernet frontend driver.
npx0 at hypervisor0: using exception 16
Xen clock: using event channel 3
Kernelized RAIDframe activated
md0: internal 5000 KB image area
xennet0 at hypervisor0: Xen Virtual Network Interface
xennet0: using event channel 4
xennet0: MAC address aa:00:00:5b:47:c3
xbd: using event channel 5
xbd0 at hypervisor0: Xen Virtual Block Device 4001 MB
boot device: xbd0
root on md0a dumps on md0b
root file system type: ffs
warning: no /dev/console
init: Creating mfs /dev (413 blocks, 1024 inodes)
erase ^?, werase ^W, kill ^U, intr ^C
Après sélection de la langue de sysinst on obtient l'écran ncurse suivant :
Il suffit maintenant de procéder à une installation normale de votre système, cette installation est entièrement couverte dans l'excellent guide NetBSD [11].
A la fin de l'installation, ne redémarrez pas, il reste une manipulation à faire. Depuis la racine de l'outil sysinst, choisir “e: Menu utilitaire” et ensuite “a: Exécuter /bin/sh”.
# mount /dev/xbd0a /mnt # cd /mnt/dev # cp -pR /dev/rxbd* . # cp -pR /dev/xbd* . # halt -p
Editons le fichier de configuration pour maintenant utiliser le noyau netbsd-3-XEN2_DOMU. Il ne nous reste plus, à présent, qu'à relancer le domU sans la console qui ne devrait plus servir.
xen2# xm create netbsd.cfg Using config file "/etc/xen/netbsd.cfg". Started domain netbsd, console on port 9602 xen2$ xm list Name Id Mem(MB) CPU State Time(s) Console Domain-0 0 245 0 r---- 2763.3 netbsd01 2 127 1 -b--- 0.6 9602
Le domaine est maintenant lancé, il faut finir l'installation en précisant une adresse ip pour la carte réseau qui apparaitra sous le nom de xennet0 et éventuellement démarrer le service ssh histoire de ne pas recourir à la console pour prendre la main sur cette machine.
xen2# xm console 2
************ REMOTE CONSOLE: CTRL-] TO QUIT ********
Loaded initial symtab at 0xc04aa85c, strtab at 0xc04d8960, # entries 11723
Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
The NetBSD Foundation, Inc. All rights reserved.
Copyright (c) 1982, 1986, 1989, 1991, 1993
The Regents of the University of California. All rights reserved.
NetBSD 3.1_STABLE (XEN2_DOMU) #0: Sat Dec 2 05:46:52 UTC 2006
builds@pb:/home/builds/ab/netbsd-3/i386/200612010000Z-obj/home/builds/ab
/netbsd-3/src/sys/arch/i386/compile/XEN2_DOMU
total memory = 123 MB
avail memory = 120 MB
[...]
Starting sendmail.
Starting inetd.
Starting cron.
Mon Jan 1 20:00:01 CET 2007
NetBSD/i386 (Amnesiac) (console)
login:
A l'issue de cette première configuration, on se déconnecte de la console à l'aide de ctrl+] et on ne discute pas ! Cette installation aurait pu se faire dans un Xen3 avec la même facilité.
Le courant vacille, un puit de lumière s'abat sur mon visage et une voix tonitruante résonne dans mon crâne à m'en faire péter les synapses. “Tu peux faire BEAUCOUP mieux!”.
Et effectivement on peut encore s'amuser avec la serviette orange, même quand elle semble essorée comme une serpillère. Imaginons que vous vouliez ajouter le support de 'pf' dans le noyau de votre domU. Je suppose que tu sais compiler votre propre kernel NetBSD, sinon tu retournes dans ta chambre m'apprendre ce cours [12] ! Et tu seras probablement déconcerté par la simplicité enfantine de la procédure.
Je vérifie d'abord si mon système actuel a le support “kivabien” pour pf (cf article de gaston).
netbsd# pfctl -e pfctl: /dev/pf: Device not configured
Nous allons donc compiler un nouveau noyau domU avec le support de cet extraordinaire firewall qu'est pf (cf article de gaston) avec pour cible un dom0 en Xen2. Le fichier de configuration de base pour ce faire se trouve dans le répertoire de configuration correspondant à votre architecture (arch/<architecture>/conf) avec un nom du type XEN[23]_DOMU.
cd /usr/src/sys/arch/i386/conf cp XEN2_DOMU XEN2_DOMU_pf
On décommente simplement les 2 lignes qui correspondent à pf et pflog et c'est parti pour la partie de compilation habituelle.
pseudo-device pf # PF packet filter pseudo-device pflog # PF log if
netbsd# config XEN2_DOMU_pf Build directory is ../compile/XEN2_DOMU_pf Don't forget to run "make depend" netbsd# cd ../compile/XEN2_DOMU_pf netbsd# make depend netbsd# time make [...snip...] real 4m46.265s user 4m5.348s sys 0m34.219s
En aparté, la machine utilisée est équipée de 2 Xeon cadencés à 2,8GHz, les guests en Xen2 ne peuvent profiter que d'un seul processeur, le support multi-processeur n'étant pas encore implémenté dans les domU, l'hyperthreading n'apparait pas non plus.
netbsd# dmesg | grep -i cpu cpu0 at mainbus0: (uniprocessor) cpu0: Intel (686-class), 2800.22 MHz, id 0xf41 cpu0: features bfebfbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR> cpu0: features bfebfbff<PGE,MCA,CMOV,PAT,PSE36,CFLUSH,DS,ACPI,MMX> cpu0: features bfebfbff<FXSR,SSE,SSE2,SS,HTT,TM,SBF> cpu0: I-cache 12K uOp cache 8-way cpu0: L2 cache 1 MB 64B/line 8-way cpu0: ITLB 4K/4M: 64 entries cpu0: DTLB 4K/4M: 64 entries cpu0: 32 page colors
A la fin de la compilation on se retrouve avec un mignon petit noyau tout frais tout chaud dans le fichier netbsd, on transfère ce fichier sur la machine dom0 pour pouvoir l'utiliser.
netbsd# scp netbsd hr@xen2:~/xen/netbsd-xen/netbsd-XEN2_DOMU_pf
On éteint la machine netbsd d'une façon ou d'une autre, on peut se la faire cool avec un ”halt -p” directement en console ou alors comme un sauvage avec un ”xm destroy”.
Il faut modifier le fichier de configuration pour que la variable kernel pointe vers ce nouveau noyau et on redémarre le domU.
xen2# grep kernel /etc/xen/netbsd.cfg #kernel = "/home/sis/sbe/xen/netbsd-xen/netbsd-INSTALL_XEN2_DOMU" kernel = "/home/sis/sbe/xen/netbsd-xen/netbsd-XEN2_DOMU_pf" xen2# xm create netbsd.cfg Using config file "/etc/xen/netbsd.cfg". Started domain netbsd, console on port 9639
Je me connecte maintenant à la machine NetBSD et je teste si pf :
netbsd# pfctl -e No ALTQ support in kernel ALTQ related functions disabled pfctl: pf already enabled
Chouette, on peut maintenant faire des circuits majorette avec nos lutins, des sens interdits, des culs de sac, des loopings et même la boucle qui monte sur le mur.
Rassurez-vous tout de suite, nous n'aurons pas besoin d'1.21 jigowatts de puissance pour faire tourner netbsd-4 dans un environnement xen3, le professeur Emmett Boyer vous le dirait. Tout ce que ça nous coûte, c'est un petit téléchargement à l'adresse suivante ftp://ftp.fr.netbsd.org/pub/NetBSD-daily/netbsd-4/<snapshot>/i386/binary/kernel/.
xen3# wget ftp://ftp.fr.netbsd.org/pub/NetBSD-daily/netbsd-4/200612080000Z/i386/binary/kernel/netbsd-INSTALL_XEN3_DOMU.gz -O ~/xen/netbsd-xen/netbsd-4-INSTALL_XEN3_DOMU.gz xen3# wget ftp://ftp.fr.netbsd.org/pub/NetBSD-daily/netbsd-4/200612080000Z/i386/binary/kernel/netbsd-XEN3_DOMU.gz -O ~/xen/netbsd-xen/netbsd-4-XEN3_DOMU.gz
On va modifier un peu les choses par rapport à nos installations de NetBSD précédentes, on va effectuer l'opération dans une partition physique.
kernel = "/home/hr/xen/netbsd-xen/netbsd-4-INSTALL_XEN3_DOMU" #kernel = "/home/hr/xen/netbsd-xen/netbsd-4-XEN3_DOMU" memory = 128 name = "netbsd" disk = [ 'phy:sda8,sda1,w' ] vif = [ '' ]
C'est là que se situe la principale nouveauté en dehors de la version du noyau, on a précisé une partition physique comme disque. La syntaxe est simple à comprendre, je vous laisse donc à vos copies, vous avez 1h pour épuiser le sujet suivant : “Les huitres pratiquent-elles le cululingus ?”. A noter tout de même, l'obligation d'ajouter une entrée vif vide pour activer la création d'une carte réseau virtuelle.
Tout se passe comme un charme, bien évidemment, et exactement de la même façon que précédemment indiqué dans la partie sus-citée… tout pareil quoi.
Il faut quand même adapter le chemin où aller chercher le système lorsque l'on choisit le mode d'insatllation FTP. Le chemin de base indiqué doit être celui du snapshot du noyau que vous utilisez de la forme pub/NetBSD-daily/netbsd-4/<snapshot>.
Il n'est plus nécessaire d'effectuer la copie des devices à la fin de l'installation, et là on se retrouve avec Marty McFly les yeux plein d'espoir devant une deloreane 4.0_BETA2.
Installer un FreeBSD fonctionne à peu près de la même façon grâce à la contribution des développeurs FreeBSD [13] et d'utilisateurs [14]. Pour le moment, FreeBSD ne tourne que sur du xen2 en version 5.3, les efforts sont portés sur xen3. Le principe est donc de télécharger 2 noyaux qui vont servir pour l'installation et le fonctionnement du domU.
xen2# wget http://txrx.org/xen/freebsd-INSTALL_XENU -O ~/xen/freebsd-xen/freebsd-5_3-INSTALL_XENU xen2# wget http://txrx.org/xen/freebsd-XENU-DEMOCD -O ~/xen/freebsd-xen/freebsd-5_3-XENU
kernel = "/home/hr/xen/freebsd-xen/freebsd-5_3-INSTALL_XENU" #kernel = "/home/hr/xen/freebsd-xen/freebsd-5_3-XENU" memory = 32 name = "freebsd" disk = [ 'file:/var/xen/domains/freebsd01/disk.img,sda1,rw' ] extra = "vfs.root.mountfrom=ufs:/dev/md0,kern.hz=100" #extra = ",vfs.root.mountfrom=ufs:/dev/xbd0s1a"
C'est le même principe que précédemment hormis la variable extra que vos yeux de lynx n'auront pas manqué de repérer.
L'option vfs.root.mountfrom nous permet de spécifier un point de montage fictif précisant le système de fichier utilisé, quant à kern.hz sa présence n'est pas nécessaire.
IMPORTANT Il est nécessaire que le montant de mémoire alloué lors de l'installation soit de 32, toute autre valeur fera planter le domU au démarrage.
On crée un fichier de 3Go qui va porter le système de fichier pour cette installation :
[/var/xen/domains/freebsd] xen2# dd if=/dev/zero of=disk.img bs=1024k seek=3000 count=1 1+0 records in 1+0 records out 1048576 bytes (1.0 MB) copied, 0.003756 seconds, 279 MB/s
xen2# xm create -c /etc/xen/freebsd.cfg
Using config file "/etc/xen/freebsd.cfg".
Started domain freebsd, console on port 9612
************ REMOTE CONSOLE: CTRL-] TO QUIT ********
WARNING: loader(8) metadata is missing!
start_info 0xc03d9000
start_info->nr_pages 8192
Copyright (c) 1992-2004 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
The Regents of the University of California. All rights reserved.
FreeBSD 5.3-RELEASE #40: Sun Nov 20 20:19:54 CST 2005
root@flow.txrx.org:/root/xen-2.0/freebsd-5.3-xenU/i386-xen/compile/XENUINSTALL
Timecounter "ixen" frequency 2800224000 Hz quality 0
CPU: Intel(R) Xeon(TM) CPU 2.80GHz (2800.22-MHz 686-class CPU)
Origin = "GenuineIntel" Id = 0xf41 Stepping = 1
Features=0xbfebfbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CLFLUSH,DTS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE>
Hyperthreading: 2 logical CPUs
real memory = 29364224 (28 MB)
avail memory = 24186880 (23 MB)
WARNING: driver "evtchn" used unreserved major device number 140
cpu0 on motherboard
Timecounters tick every 10.000 msec
xc0: <Xen Console> on motherboard
WARNING: driver "xc" used unreserved major device number 12
xn0: Ethernet address: aa:00:00:36:b7:4a
Mounting root from ufs:/dev/md0
/stand/sysinstall running as init on serial console
These are the predefined terminal types available to
sysinstall when running stand-alone. Please choose the
closest match for your particular terminal.
1 ...................... Standard ANSI terminal.
2 ...................... VT100 or compatible terminal.
3 ...................... FreeBSD system console (color).
4 ...................... FreeBSD system console (monochrome).
5 ...................... xterm terminal emulator.
Your choice: (1-5) 2
J'ai obtenu les meilleurs résultat d'affichage en choisissant un terminal VT100. Vous devriez être illuminés par l'apparition du système d'installation de FreeBSD sysinstall :
Il faut noter tout de même qu'il y a quelques pièges au cours de l'installation. La création du slice FreeBSD va planter violemment si vous ne précisez pas une géométrie pour votre disque, quitte à en donner une fausse. L'option “G” de l'outil fdisk permet de donner une géométrie de 1/1/1 par exemple.
Il faut aussi préciser quel serveur ftp utiliser pour installer le système, la release 5.3 étant passée en archive il faut choisir un autre serveur FTP via l'option “Specify some other ftp site by URL” et donner le chemin suivant : ftp://ftp-archive.freebsd.org/pub/FreeBSD-Archive/old-releases/i386/. L'installation risque d'être très lente via ce serveur d'archives.
Lorsque l'installation du système est terminée, il vous est demandé si vous voulez configurer des services de base tels que NFS, inetd ou SSH. Si vous souhaitez activer la compatibilité linux, il faudra indiquer un serveur ftp particulier comme précédemment, la même adresse doit être utilisée.
Finalement, il est recommandé de créer un compte utilisateur qui appartient au groupe wheel au cas où la configuration de la console ne fonctionnerait pas.
A la fin de l'installation, revenir au menu pour configurer les TTYs via le menu “TTYs - Configure system ttys.”. Il faut activer la console et désactiver tous les pseudo-terminaux (ttyv[0-8]).
On précise que la connexion via la console se fait en mode secure donc root est autorisé à se connecter.
On peut modifier le fichier de configuration pour faire maintenant démarrer la machine en mode de fonctionnement normal :
#kernel = "/home/hr/xen/freebsd-xen/freebsd-5_3-INSTALL_XENU" kernel = "/home/hr/xen/freebsd-xen/freebsd-5_3-XENU" memory = 32 name = "freebsd" disk = [ 'file:/var/xen/domains/freebsd/disk.img,sda1,rw' ] #extra = "vfs.root.mountfrom=ufs:/dev/md0,kern.hz=100" extra = ",vfs.root.mountfrom=ufs:/dev/xbd0s1a"
Attention Il est très important de conserver la virgule en début de la variable extra, votre système ne démarrerait pas, et ça pour une raison que nous ne la connaissons ni vous ni nous.
On peut maintenant lancer le domU avec console, pour vérifier son fonctionnement correct.
xen2# xm create -c freebsd.cfg
Using config file "/etc/xen/freebsd.cfg".
Started domain freebsd, console on port 9627
************ REMOTE CONSOLE: CTRL-] TO QUIT ********
WARNING: loader(8) metadata is missing!
KDB: debugger backends: xendb
KDB: current backend: xendb
start_info 0xc0284000
start_info->nr_pages 8192
FreeBSD Physical Memory (29 MB) = 0x0 - 0x1d56000
Copyright (c) 1992-2004 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
The Regents of the University of California. All rights reserved.
FreeBSD 5.3-RELEASE #2: Mon Feb 28 13:49:22 PST 2005
kmacy@bldf1.eng.netapp.com:/amd/ayr/vol/users2/home/kmacy/p4/ng/freebsd/usr/src/sys/i386/compile/XENCONF
Timecounter "ixen" frequency 2800224000 Hz quality 0
CPU: Intel(R) Xeon(TM) CPU 2.80GHz (2800.22-MHz 686-class CPU)
Origin = "GenuineIntel" Id = 0xf41 Stepping = 1
Features=0xbfebfbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CLFLUSH,DTS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE>
Hyperthreading: 2 logical CPUs
real memory = 30760960 (29 MB)
avail memory = 26923008 (25 MB)
WARNING: driver "evtchn" used unreserved major device number 140
Timecounters tick every 10.000 msec
xc0: <Xen Console> on motherboard
WARNING: driver "xc" used unreserved major device number 12
xn0: Ethernet address: aa:00:00:71:cf:1f
Mounting root from ufs:/dev/xbd0s1a
Pre-seeding PRNG: kickstart.
Loading configuration files.
Entropy harvesting: interrupts ethernet point_to_point kickstart.
swapon: adding /dev/xbd0s1b as swap device
Starting file system checks:
/dev/xbd0s1a: FILE SYSTEM CLEAN; SKIPPING CHECKS
/dev/xbd0s1a: clean, 109514 free (1514 frags, 13500 blocks, 1.2% fragmentation)
/dev/xbd0s1e: FILE SYSTEM CLEAN; SKIPPING CHECKS
/dev/xbd0s1e: clean, 126836 free (28 frags, 15851 blocks, 0.0% fragmentation)
/dev/xbd0s1f: FILE SYSTEM CLEAN; SKIPPING CHECKS
/dev/xbd0s1f: clean, 138152 free (240 frags, 17239 blocks, 0.0% fragmentation)
/dev/xbd0s1d: FILE SYSTEM CLEAN; SKIPPING CHECKS
/dev/xbd0s1d: clean, 126664 free (40 frags, 15828 blocks, 0.0% fragmentation)
Setting hostname: freebsd01.dih.oleane.net.
adjkerntz[257]: sysctl(put_wallclock): No such file or directory
in6_ifattach: xn0 is not multicast capable, IPv6 not enabled
xn0: flags=843<UP,BROADCAST,RUNNING,SIMPLEX> mtu 1500
inet 213.56.0.116 netmask 0xffffffe0 broadcast 213.56.0.127
ether aa:00:00:71:cf:1f
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
inet 127.0.0.1 netmask 0xff000000
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2
add net default: gateway 213.56.0.97
Additional routing options:.
Starting devd.
Mounting NFS file systems:.
Starting syslogd.
Jan 2 10:54:56 freebsd01 syslogd: kernel boot file is /kernel
ELF ldconfig path: /lib /usr/lib /usr/lib/compat /usr/local/lib
a.out ldconfig path: /usr/lib/aout /usr/lib/compat/aout
Starting local daemons:.
Updating motd.
Starting sshd.
Initial i386 initialization:.
Additional ABI support: linuxlink_elf (1): 1 symbol cpu_fxsr undefined
.
Starting cron.
Local package initialization:.
Additional TCP options:.
Starting background file system checks in 60 seconds.
Tue Jan 2 10:55:00 CET 2007
FreeBSD/i386 (freebsd01.dih.oleane.net) (console)
login:
“Et c'est un HOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOME RUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUN”.
Le principe est un peu bancal mais permet d'installer le système beaucoup plus vite. La release 5.5 étant encore dans tous les ftp à l'heure de l'écriture de cet article, au lieu de préciser un repository archive on va utiliser cette version FreeBSD. Au démarrage de sysinstall, aller dans le menu ” Options - View/Set various installation options”, une fois dans le menu changer la valeur de “Release Name” et la mettre à “5.5-RELEASE”.
Lors du choix du serveur ftp pour installer les ports, il suffit de choisir un serveur classique type ftp.fr.freebsd.org.
Il faut que je teste openbsd sous netbsd en dom0…
L'installation d'un domU OpenBSD n'est pas aussi simple que pour les 2 précédents BSD. Le *BSD au poisson qui pique fait bien son office en piquant un peu là, oui là, juste sous l'ongle. Mais rien n'est impossible à une personne déterminée et encore une fois, à l'exception de NetBSD, l'intégration de Xen dans les noyaux *BSd en est à ses débuts.
L'installation se fait ici dans un Xen3, on installe un OpenBSD 4.0.
Le noyau nous est fourni par Christoph Egger qui a travaillé sur ce projet dans le cadre d'un “Google Summer Of Code” [15]. La machine utilisée comme repository mercurial est une machine de développement sur une petite connexion de toute évidence, ne téléchargez les sources qui si vous souhaitez vraiment compiler ce noyau. En solution de remplacement, vous trouverez une archive des sources mercurial du noyau datant du 9 janvier 2007 dans l'archive de l'article [20]. Cette compilation doit se faire dans un environnement OpenBSD.
$ hg clone http://hg.recoil.org/openbsd-xen-sys.hg $ cd openbsd-xen-sys.hg/arch/xen $ ln -s conf.i386 conf $ mkdir compile $ cd conf $ config RAMDISK_XENU $ config XENU $ cd ../compile/RAMDISK_XENU $ make depend $ make $ mv bsd openbsd-4_0-RAMDISK_XENU $ cd ../XENU $ make depend $ make $ mv bsd openbsd-4_0-XENU
Nous avons maintenant 2 noyaux OpenBSD à monter en DomU, openbsd-4_0-RAMDISK_XENU et openbsd-4_0-XENU.
kernel = "/home/hr/xen/openbsd-xen/openbsd-4_0-RAMDISK_XENU" #kernel = "/home/hr/xen/openbsd-xen/openbsd-4_0-XENU" memory = 128 name = "openbsd" disk = [ 'file:/var/xen/domains/openbsd01/disk.img,sda1,w' ] extra = "boot_verbose,boot_single,vfs.root.mountfrom=ufs:/dev/md0,kern.hz=100"
Le fichier de configuration est très semblable à ce que nous avons déjà mis en place précédemment, vous devriez le comprendre sans problème.
On crée un fichier de 3Go qui va porter le système de fichiers pour cette installation :
[/var/xen/domains/openbsd] xen3# dd if=/dev/zero of=disk.img bs=1024k seek=3000 count=1 1+0 records in 1+0 records out 1048576 bytes (1.0 MB) copied, 0.003756 seconds, 279 MB/s
dd if=/dev/zero of=disk.img bs=1024k count=3000 3000+0 records in 3000+0 records out 3145728000 bytes (3.1 GB) copied, 38.3239 seconds, 82.1 MB/s
# xm create -c openbsd.cfg
Using config file "openbsd.cfg".
Started domain openbsd
[ using 188660 bytes of bsd ELF symbol table ]
Copyright (c) 1982, 1986, 1989, 1991, 1993
The Regents of the University of California. All rights reserved.
Copyright (c) 1995-2006 OpenBSD. All rights reserved. http://www.OpenBSD.org
OpenBSD 4.0-current (XENU) #1: Sun Dec 31 17:13:15 CET 2006
root@openbsd:/home/user/OpenBSD-XEN/openbsd-xen-sys/arch/xen/compile/XENU
cpu0: Intel(R) Xeon(TM) CPU 2.80GHz ("GenuineIntel" 686-class) 2.80 GHz
cpu0: FPU,V86,DE,TSC,MSR,PAE,MCE,CX8,APIC,MCA,CMOV,PAT,PSE36,CFLUSH,ACPI,MMX,SSE,SSE2,SS,HTT,TM,SBF,PNI,MWAIT,CNXT-ID
real mem = 130899968 (127832K)
avail mem = 118927360 (116140K)
using 1623 buffers containing 6647808 bytes (6492K) of memory
mainbus0 (root)
cpu0 at mainbus0
hypervisor0 at mainbus0
debug virtual interrupt using event channel 3
xenbus0 at hypervisor0: Xen Virtual Bus Interface
xencons0 at hypervisor0: Xen Virtual Console Driver
xencons0: console major 86, unit 0
xencons0: using event channel 2
npx0 at hypervisor0: using exception 16
Xen clock: using event channel 4
xenbus0: using event channel 1
sd0 at xenbus0 id 2049: Xen Virtual Block Device Interface
sd0: using event channel 5
sd0: 2001 MB, 512 bytes/sect x 4098048 sectors
root on sd0a
rootdev=0x400 rrootdev=0xd00 rawdev=0xd02
panic: root filesystem has size 0
Stopped at Debugger+0x4: popl %ebp
RUN AT LEAST 'trace' AND 'ps' AND INCLUDE OUTPUT WHEN REPORTING THIS PANIC!
DO NOT EVEN BOTHER REPORTING THIS WITHOUT INCLUDING THAT INFORMATION!
ddb>
Pour le moment, il m'a été impossible de lancer le noyau OpenBSD en mode installation. Malgré des rapports de succès de la part de la personne chez google qui supervisait le projet [16], la réponse qui m'a été donnée est la suivante :
From: Anil Madhavapeddy <anil@recoil.org> [...] It's still very unstable...
L'intégration de Xen dans les systèmes *BSD est faite de façon très inégale, ça va de l'intégration complète pour NetBSD aux premiers balbutiements pour OpenBSD. L'intégration dans FreeBSD devrait être améliorée dans les futures versions du système alors qu'OpenBSD n'a pas encore projeté d'intégrer Xen. Ces intégrations risquent d'être ralenties par l'apparition des processeurs avec support des instructions de virtualisation, ces processeurs vont sûrement devenir de plus en plus courants. Sur ce type de processeur, il n'est pas nécessaire de modifier le noyau du système invité.
[1] http://www.netbsd.org/
[2] http://www.freebsd.org/
[3] http://www.openbsd.org/
[4] http://cvsweb.netbsd.org/bsdweb.cgi/src/sys/arch/xen/
[5] http://lists.xensource.com/archives/html/xen-devel/2004-01/msg00105.html
[6] http://www.netbsd.org/Foundation/press/xen.html
[7] http://www.netbsd.org/Ports/xen/
[8] http://www.freebsd.org/news/status/report-jan-2006-mar-2006.html#FreeBSD-on-Xen-3.0
[9] http://www.fsmware.com/xenofreebsd/7.0/STATUS
[10] http://ropersonline.com/openbsd/xen/
[11] http://www.netbsd-fr.org/guide/fr/netbsd.html
[12] http://www.netbsd.org/guide/en/chap-kernel.html
[13] http://www.fsmware.com/xenofreebsd/5.3/
[14] http://txrx.org/xen/
[15] http://ropersonline.com/openbsd/xen/openbsd-xen-howto
[16] http://anil.recoil.org/blog/articles/2006/08/21/openbsd-xen-boots-multi-user
[17] http://www.debian-administration.org/articles/304
[18] http://www.debian-administration.org/articles/320
[19] http://wiki.xensource.com/xenwiki/HowTos
[20] http://www.bonz.org/glmf_hs0207/linux_dom0_bsd_domu.tar.gz
Merci à bsdmaniak et raph_ael de m'avoir prêté du temps processeur sous OpenBSD.