5/ Xen sous Debian / Dom0

Pour contourner les difficultés d'installation d'un domaine U Linux depuis NetBSD, l'installation d'un système Linux est nécessaire : les média d'installation de Linux n'ont pas d'équivalent au noyau spécifique NetBSD-install-XENU, permettant de créer directement une machine virtuelle.

L'installation de Linux est une occasion pour une deuxième tentative avec Xen : Xen utilisant Linux comme OS du domaine 0. La distribution de Linux retenue est Debian / Sarge (La couche d'émulation Linux de NetBSD est basée sur Suse - pas de mise en commun).

5.1/ Installation de l'OS "Natif"

La première phase est l'installation d'un Linux "standard", "natif". La distribution retenue est Sarge, soit Debian 3.1 (distribution relativement récente, et facilement adaptable pour s'installer dans des petits espaces).

5.1.1/ Media d'installation

Les documents de référence pour l'installation de Debian sont http://www.debian.org/releases/stable/i386/install et http://www.debian.org/releases/stable/i386/index.html.en.

L'installation est réalisée depuis des fichiers d'installation chargés avec grub (depuis la partition NetBSD) pour éviter de passer par une disquette ou un CD (voir Booting from Linux Using LILO or GRUB). L'installation est faite "par réseau" en chargeant tous les binaires depuis un serveur d'installation (en France, sur le site FTP de Free).

Il faut donc récupérer :

depuis :
ftp://ftp.free.fr/pub/Distributions_Linux/debian/dists/sarge/main/installer-i386/current/images/ et les stocker dans la partition NetBSD dans le répertoire /debian.

Le fichier de configuration de grub "côté NetBSD" est modifié en ajoutant l'option :

title  Debian Installer
  kernel (hd0,3,a)/debian/linux root=/dev/ram0 ramdisk_size=12000
  initrd (hd0,3,a)/debian/initrd.gz

L'installation est déclenchée en redémarrant le PC et en choisissant l'option "Debian Installer" dans le menu de grub.

5.1.2/ Partitionnement du disque dur

Debian est installé sur le deuxième disque dur du PC (wd1/hdb, 8Go).

Une partition étendue est allouée à Debian (hdb1 de 6Go sur le disque hdb de 8Go). Cette partition étendue est découpée en partitions logiques pour pouvoir avoir un "grand" nombre de vraies partitions : deux partitions étendues par machine virtuelle (swap + fichiers).

Les partitions logiques sont aussi utilisables depuis NetBSD/Xen0, accessibles en lecture et écriture (elles sont aussi visibles depuis FreeBSD).

Le domaine 0 Debian est installé dans /dev/hdb5, partition de 2Go (une installation basique sans X-Windows occupe moins de 400Mo, le reste de l'espace pourra être utilisé pour stocker une ou plusieurs images disque). Trois partitions supplémentaires sont découpées pour des domaines U. Trois partitions pourront être utilisées comme espace de swap.

Partition Taille Début Type
hdb5 2000 Mo 0 Linux Ext2
hdb6 200 Mo 2000 Mo swap
hdb7 1200 Mo 2200 Mo Linux Ext2
hdb8 200 Mo 3400 Mo swap
hdb9 1200 Mo 3600 Mo Linux Ext2
hdb10 200 Mo 4800 Mo swap
hdb11 1200 Mo 5000 Mo Linux Ext2

Synthèse du partitionnement dans les 6 Go

5.1.3/ Paramètres de l'installation

Le noyau installé pour Sarge est en versions 2.4.27 (2.6.8 en option, non retenu).

NB : je n'ai pas trouvé comment démarrer l'installation sur une ligne série (il faut donc trouver un clavier et un écran).

L'installation est basique (la seule option sélectionnée est "serveur de courrier" - pas de sélection d'environnement graphique), pour avoir une occupation modérée de la place disque.

Après l'installation, Debian est configuré pour démarrer avec une console série (voir http://www.tldp.org/HOWTO/Remote-Serial-Console-HOWTO/ et cette note).

Les paramètres de configuration du réseau sont identiques à ceux utilisés pour NetBSD/Dom0 (voir dans le paragraphe précédent).

5.2/ Installation des outils

5.2.1/ Installation des packages Debian

A la différence de NetBSD, pour lequel les packages ont été recompilés en local sur le Domaine 0, les packages sont installés à partir de versions précompilées téléchargées à partir du mirroir français (chez Free).

Configuration dans de la source des packages ".deb" : dans /etc/apt/sources.list

ajout de packages debian (avec la commande apt-get) :
grub
bridge-utils
iproute
python
python-twisted
gcc
libcurl2
libcurl2-dev
zlib1g
zlib1g-dev

5.2.2/ Installation de grub

grub a déjà été installé avec NetBSD, et va être utilisé aussi par Debian/Linux pour charger Xen. Le fichier de configuration de grub installé avec NetBSD, dans une partition BSD, n'est pas modifiable depuis Debian (les modifications dans une partition ufs depuis Linux ne sont pas recommandées - un howto).

partage des partitions UFS BSD :
debian-dom0: {1} modprobe ufs
# pour une partition netbsd dans /dev/hda4 :
debian-dom0: {2} mount -r -t ufs -o ufstype=44bsd /dev/hda5 /mnt
debian-dom0: {3} mount
/dev/hdb5 on / type ext3 (rw,errors=remount-ro)
proc on /proc type proc (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
usbfs on /proc/bus/usb type usbfs (rw)
/dev/hda5 on /mnt type ufs (ro,ufstype=44bsd)

# pour une partition freebsd dans /dev/hdb4 :
debian-dom0: {4} mount -r -t ufs -o ufstype=44bsd /dev/hdb9 /mnt

Il faut donc réinstaller grub depuis Debian/Linux, pour pouvoir changer les options de grub.

Pour ne pas perdre l'accès à NetBSD, il faut transférer les options relatives à NetBSD dans le fichier de configuration de grub "côté Debian". De même que dans le fichier de configuration de grub "côté NetBSD", on avait ajouté une option pour installer Debian, on ajoute ici une option pour réinstaller NetBSD.

Le fichier de configuration résultant est ici.

NB : l'installation de grub "côté Debian" écrase et remplace la version installée avec NetBSD.  Le retour à la version de NetBSD se fait en deux étapes :

5.2.3/ Xen : Installation d'une version précompilée

Une version précompilée de Xen est téléchargée à partir de :
http://www.cl.cam.ac.uk/Research/SRG/netos/xen/downloads/xen-2.0.7-install-x86_32.tgz

Cette version comprend des des versions précompilées des noyaux Linux 2.4 (2.4.30) et 2.6 2.6.11.12), pour domaine 0 et domaine U (4 combinaisons). Les outils "xentools" font aussi partie du package.

L'installation se fait avec un shell script : xen-2.0-install/install.sh qui copie dans les répertoires "qui vont bien" xen lui-même, les noyaux Linux et les outils de gestion (xm et consorts).

mise à jour du menu de grub : pour ajouter l'option de démarrer Linux/Xen0 XXX fichier de config

NB : installation des logiciels en-dehors du packaging Debian (d'où problèmes futurs sur les dépendances à vérifier en cas de mise à jour)

(reboot vers 2.4.30/Xen0 - XXX pourquoi pas 2.6 ? pour rester cohérent avec Sarge ?)

NB : comme avec NetBSD/Xen0, les paramètres réseau de Debian/Xen0 sont les mêmes que ceux utilisés pour Debian "natif" (dans le cas de Debian, l'ajout du package iproute est nécessaire pour le script réseau mis en œuvre pour le routage IP des paquets en provenance des Domaines U).

démarrage de xend :
debian-dom0: {5} /etc/init.d/xend start

et pour un démarrage automatique :
debian-dom0: {6} update-rc.d xend defaults

Vérification du démarrage de xend avec la commande xm :
debian-dom0: {7} xm info
system                 : Linux
host                   : dom0-Linux
release                : 2.4.30-xen0
version                : #1 Thu Aug 4 00:54:24 BST 2005
machine                : i686
cores                  : 1
hyperthreads_per_core  : 1
cpu_mhz                : 266
memory                 : 320
free_memory            : 243

debian-dom0: {8} xm list
Name              Id  Mem(MB)  CPU  State  Time(s)  Console
Domain-0           0       59    0  r----     52.7

NB: Problème avec la carte réseau realtek 100Mbit/s : elle n'est pas détectée avec le noyau Linux 2.4-Xen0 (détectée comme RealTek RTL8139 avec le kernel 2.6). Le contournement est d'utiliser une autre carte réseau (carte ne2000 10Mbit/s).

NB : une version 2.0.7 de Xen est utilisée, comme pour NetBSD.

NB : j'ai vu des problèmes de débit sur transfert NFS client Linux / serveur FreeBSD 4.11 et 5.3 (sans Xen : kernel Debian par défaut : Linux pc-xen 2.4.27-2-686 #1 Mon May 16 17:03:22 JST 2005 i686 GNU/Linux)

5.2.4/ Xen : Installation à partir des sources

Téléchargement des sources de Xen : http://www.cl.cam.ac.uk/Research/SRG/netos/xen/downloads/xen-2.0.7-src.tgz

Recompilation de Xen (comme illustré au paragraphe précédent, il n'est pas nécessaire de recompiler Xen : il y a déjà tous les binaires - un intérêt est de pouvoir consulter les sources de Xen ou des patches aux OS Linux et FreeBSD).

La compilation se fait sous Linux par la commande :

debian-dom0: {1} cd /usr/src/xen-2.0
debian-dom0: {2} make world
debian-dom0: {3} sh install.sh

NB : comme pour le cas où Xen est installé à partir de binaires précompilés, les fichiers sont installés en-dehors du packaging Debian.

=> nouveau Xen.2.0.7.gz
=> nouveau noyau 2.6 Dom0
=> nouveau noyau 2.6 DomU

Recopie du nouveau noyau 2.6/Xen0 dans /boot, modification du XXX fichier de config de grub et reboot

5.3/ Installation des domU

réseau virtuel Xen
Extrait du schéma global : réseau virtuel des machines Xen

A la différence de la configuration avec NetBSD/Dom0, Xen avec Linux met en place un réseau en mode "bridgé" : tout se passe comme si les machines virtuelles DomU étaient sur le même réseau que les autres machines (serveur NFS, PC "console").

Les machines virtuelles DomU utilisent le même préfixe réseau 192.168.1.0, le même masque réseau 255.255.255.0 et la même passerelle 192.168.1.1 (comparer avec les paramètres NetBSD).

Les machines virtuelles créées avec Debian/Dom0 ne sont pas directement partageables avec NetBSD/Dom0.

Le script network de configuration du réseau des DomU doit être patché dans la fonction  /etc/xen/scripts/network::antispoofing :

--- network.ori   Mon Aug 15 22:07:59 2005
+++ network       Tue Jul 12 09:37:47 2005
@@ -137,8 +137,12 @@
     local dev=$1
     local bridge=$2

-    iptables -P FORWARD DROP
-    iptables -A FORWARD -m physdev --physdev-in ${dev} -j ACCEPT
+    #echo "iptables -P FORWARD DROP"
+    #iptables -P FORWARD DROP
+    #XXXX grosse truande pour autoriser le transfert des paquets vers les XenU
+    iptables -P FORWARD ACCEPT
+    #echo "iptables -A FORWARD -m physdev --physdev-in ${dev} -j ACCEPT"
+    #iptables -A FORWARD -m physdev --physdev-in ${dev} -j ACCEPT
 }

 # Usage: show_status dev bridge

Pour plus d'explication sur le firewall iptables :
http://www.linuxguruz.com/iptables/howto/iptables-HOWTO.html et
http://iptables-tutorial.frozentux.net/iptables-tutorial.html

XXX à compléter avec le réseau des DomU en mode routé ?

5.3.1/ DomU Debian

Le point essentiel dans la préparation pour un DomU Debian est la commande debootstrap, utilisée pour créer une arborescence initiale.

Configuration des domaines U Debian :

5.3.1.1/ Installation dans une image disque

préparation de deux images disque (partitions "/", 400Mo et swap, 200Mo) - les deux fichiers sont physiquement stockés dans le répertoire /opt/xen-images :

debian-dom0: {1} mkdir /opt/xen-images/
debian-dom0: {2} dd if=/dev/zero of=/opt/xen-images/debian-root bs=1024k count=400
debian-dom0: {3} dd if=/dev/zero of=/opt/xen-images/debian-swap bs=1024k count=200
debian-dom0: {4} mkfs.ext3 /opt/xen-images/debian-root
debian-dom0: {5} mkswap /opt/xen-images/debian-swap
debian-dom0: {6} mkdir /mnt/debian-image
debian-dom0: {7} mount -o loop /opt/xen-images/debian-root /mnt/debian-image

remplissage de l'image /opt/xen-images/debian-root :
debian-dom0: {8} apt-get install debootstrap
debian-dom0: {9} debootstrap --arch i386 sarge /mnt/debian-image http://ftp.fr.debian.org/debian
debian-dom0: {10} du -sh /mnt/debian-image
127M    mnt/debian-image

recopie dans l'arborescence du DomU des modules du noyau, dans /lib/modules (pour 2.4 et 2.6) :
debian-dom0: {11} cp -rp /lib/modules/2.4.30-xenU /lib/modules/2.6.11.12-xenU /mnt/debian-image/lib/modules/

Suppression des versions "TLS" des bibliothèques partagées :
debian-dom0: {12} mv /mnt/debian-image/lib/tls/ /mnt/debian-image/lib/tls.disabled

mise au clair des fichiers de configuration dans un domU :

/etc/fstab
proc      /proc      proc    defaults 0       0
/dev/hda1 /          ext3    defaults,errors=remount-ro 0 1
/dev/hda2 swap swap defaults        0       0

/etc/hostname : dom5.mydomain

/etc/hosts : 127.0.0.1 localhost

/etc/network/interfaces :
# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
    address 192.168.1.24
    netmask 255.255.255.0
    network 192.168.1.0
    broadcast 192.168.1.255
    gateway 192.168.1.1
    dns-nameservers 192.168.1.3
    dns-search mydomain

sauvegarde de l'arborescence créée par debootstrap pour automatiser l'installation des domU/Debian pour Dedian/Dom0 et NetBSD/Dom0 :
debian-dom0: {13} tar -cvf debootstrap.ref.tar /mnt/debian-image

Démontage de l'image disque :
debian-dom0: {14} umount /mnt/debian-image

premier démarrage du domU (voir le fichier de config dom5.debian) et finalisation de l'installation avec la commande "base-config"
debian-dom0: {15} xm create -c dom5.debian
Using config file "dom5.debian".
Started domain Debian, console on port 9605
************ REMOTE CONSOLE: CTRL-] TO QUIT ********
Linux version 2.6.11.12-xenU (xenod@freefall.cl.cam.ac.uk)
....
Debian GNU/Linux 3.1 dom5.mydomain tty1

dom5.mydomain login: root
Linux dom5.mydomain 2.6.11.12-xenU #1 Thu Aug 4 00:48:08 BST 2005 i686 GNU/Linux

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
dom5:~# base-config

(programme interactif de configuration de la machine : répondre aux questions ...)
(dont création d'un compte utilisateur)
dom5:~# apt-get install ssh
(et autoriser sshd)
(à la fin de la configuration, redémarrer le domaine U pour avoir une machine opérationnelle)
dom5:~# init 6

La configuration du domU est complète.

NB : dans le fichier de configuration dom5.debian, il est possible de choisir à la demande une version de noyau Linux : 2.4 ou 2.6. Le noyau 2.6 a été retenu (illustration de deux noyaux de version différente entre le domaine 0 et le domaine U). Il y a message d'erreur sur le montage NFS avec un kernel 2.6 : l'utilitaire mount livré dans Debian/3.1 est trop ancien ?

5.3.1.2/ Installation dans une partition logique

préparation de deux partitions logiques (partitions "/" et swap) :
debian-dom0: {16} mkfs.ext3 /dev/hdb7
debian-dom0: {17} mkswap /dev/hdb8
debian-dom0: {18} mkdir /mnt/debian-part
debian-dom0: {19} mount /dev/hdb7 /mnt/debian-part

remplissage de la partition /dev/hdb7 :
debian-dom0: {20} debootstrap --arch i386 sarge /mnt/debian-part http://ftp.fr.debian.org/debian

La suite de l'installation est identique au cas précédent (installation dans une image), avec le même fichier de configuration dom5.debian ; il faut juste changer le commentaire de la ligne :
#disk=['phy:... vers la ligne disk=['file:...

Les deux premières étapes de cette méthode d'installation peuvent être utilisées pour initier l'installation des domU/Debian pour NetBSD/Dom0 (dans une partition logique /dev/hdb7 préalablement formattée sous NetBSD).

De même que dans la procédure d'installation dans une image, il peut être intéressant de sauvegarder (avec tar) l'arborescence résultat de la commande debootstrap pour automatiser l'installation de nouvelles machines virtuelles.

5.3.2/ DomU NetBSD

NetBSD a résolu le problème de l'oeuf et de la poule en créant un noyau d'installation NetBSD-XEN-INSTALL, qui permet d'installer NetBSD dans une machine virtuelle Xen. Ce noyau est utilisable sous NetBSD/Xen0 comme sous Debian/Xen0.

On utilise la même procédure d'installation que sous NetBSD/Dom0 (à part les paramètres réseau : passage en mode bridgé)

préparation pour un DomU NetBSD (-Current)
installation (idem sous NetBSD/Dom0)
- dans une image disque : fichier de configuration dom3.netbsd
- dans une partition dédiée (XXX A faire)

Paragraphe suivant : Comparaison d'outils de virtualisation

$Id: install-Debian.html 4 2005-08-18 09:47:18Z thierry.herbelot $