Ce howto concerne un système utilisant Debian/Wheezy & Xen 4.1 ou supérieur
Ancienne documentation pour Debian/Lenny & Xen 3.2.1
En résumé: grub permet de booter sur une image iso, si celle-ci est prévue pour être utilisé avec grub
Il est aussi possible de booter directement sur un noyau netboot prévu pour Xen.
Intérets
Cela permet à la machine virtuelle de pouvoir effectuer les opérations spécifiques à un disque dur (grub, partionnement du disque). Cela permet notamment de :
Configurer sans difficulté les partitions et/ou le chiffrement par le biais du debian-installer.
Configurer grub sans opération particulière.
Permettre les majs noyaux dans la machine virtuelle indépendament de l'hôte.
Mode opératoire
Créer la partition physique
Elle contiendra le disque dur de la vm. Cette partition doit contenir l'équivalent d'un disque dur (avec une table de partition etc.) ;
lvcreate data -n <name>-disk -L <size>
Récupérer l'iso d'installation de Debian
Récuprer l'image grub2-xen
Depuis jessie il est possible d'installer le paquet grub-xen-host. Ce paquet fournit une image de grub permettant soit de faire 'chainload', soit de booter sur la base du fichier de conf grub.cfg du domU.
Cette image se trouve par défaut là /usr/lib/grub-xen/grub-x86_64-xen.bin
. Elle fonctionne aussi sur un dom0 wheezy...
Créer le fichier de configuration xen /etc/xen/.cfg
#
# Memory size
#
memory = '1024'
#
# Disk device(s).
#
disk = [
'file:/scratch/debian-8.1.0-amd64-netinst.iso,xvdd:cdrom,r',
'phy:/dev/data/<name>-disk,xvda,w'
]
#
# Hostname
#
name = '<name>'
#
# Networking
#
vif = [ 'bridge=br-vlan42,mac=00:16:3E:A2:23:11' ]
#
# Behaviour
#
on_poweroff = 'destroy'
on_reboot = 'restart'
on_crash = 'restart'
#
# Boot
#
kernel = /usr/lib/grub-xen/grub-x86_64-xen.bin
extra = "(hd0,1)/grub/grub.cfg"
Alternative : installer sans ISO
Il peut arriver de ne pas pouvoir installer à partir d'une ISO Debian (lecteur CD virtuel non reconnu dans l'installeur, espace disque limité...)
Une alternative est alors d'utiliser directement le noyau netboot de Debian.
Pour ce faire, télécharger le noyau netboot pour Xen, ici pour Jessie :
ftp://ftp.fr.debian.org/debian/dists/jessie/main/installer-amd64/current/images/netboot/xen/vmlinuz
ftp://ftp.fr.debian.org/debian/dists/jessie/main/installer-amd64/current/images/netboot/xen/initrd.gz
La configuration Xen à utiliser est alors la suivante :
disk = [ 'phy:/dev/data/<name>-disk,xvda,w' ]
# ...
# Debian-installer
kernel = "/scratch/debian-8.2.0-amd64/vmlinuz"
ramdisk = "/scratch/debian-8.2.0-amd64/initrd.gz"
extra = "debian-installer/exit/always_halt=true -- console=hvc0"
Le reste de la procédure est inchangé.
Démarrer la vm avec :
xm create -c <name>.cfg
Le debian installer devrait démarrer.
Configuration réseau pour l'installation
Le debian-installer ne sait pas utiliser des IP en /32. Du coup, il faut "tricher" en faisant croire que c'est un /24, par exemple. Pour caravelle :
IP : 91.216.110.X/24
Gateway : 91.216.110.11
Résolveur DNS : 80.67.169.40
Une fois l'installation finie
Il faut désactiver le boot sur le debian-installer. Pour cela il faut supprimer les lignes suivantes :
'file:/scratch/debian-8.1.0-amd64-netinst.iso,xvdd:cdrom,r',
En cas d'installation sans ISO, s'assurer de remettre pvgrub2 comme bootloader :
kernel = '/usr/lib/grub-xen/grub-x86_64-xen.bin'
extra = '(hd0,1)/grub/grub.cfg'
Élements importants
Choisir une adresse MAC
Chaque membre a :
- un prefix alloué dans le ?plan du réseau.
- un vlan attribué
Accéder aux partitions d'un disque dur 'xvda'
Il est possible de créer une liste de device depuis une table de paritition
contenu par un disque xvda avec l'outil kpartx
.
lister les partitions :
kpartx -l /dev/data/<name>-disk
créer la liste des device :
kpartx -a /dev/data/<name>-disk
supprimer la liste des device :
kpartx -d /dev/data/<name>-disk
Démarrage automatique des VMs
Pour que la machine créée se lance au démarrage de xen (et donc au boot de la
machine), penser à faire un lien symbolique du fichier de configuration dans le
dossier /etc/xen/auto
:
cd /etc/xen/auto
ln -s ../<name>.cfg