L'hyperviseur Xen sous Debian Wheezy

De Linux Server Wiki
Aller à la navigation Aller à la recherche

Prérequis

Ce tutoriel se base sur l'utilisation de debootstrap pour installer une base de système d'exploitation debian. La plupart des hébergeurs proposent un système de "rescue" permettant l'installation de debian par ce moyen.

Si vous ne disposez pas de mode rescue, vous pouvez toujours utiliser l'installeur proposé par votre hébergeur, ou encore passer par un kvm pour installer vous même le système avec l'iso de debian.

Pour les débutants

Si vous êtes débutant en administration linux, je vous conseil de sauvegarder quelque part les fichier suivant issu d'une précédente installation de debian:

  • /etc/networks
  • /etc/network/interfaces
  • /etc/resolv.conf
  • /etc/hosts
  • /etc/fstab
  • tout fichier de personnalisation de grub (/etc/grub.d/06_OVHkernel par exemple)

Partitionnement

Utilisez cfdisk ou fdisk à votre convenance.

Voici mon partitionnement :

  • /dev/sda1 de 15Go (/)
  • /dev/sda2 de 2Go (swap)
  • /dev/sda3 pour le reste du disque en lvm
mkfs.ext4 /dev/sda1
mkswap /dev/sda2

Création du LVM

Nous allons maintenant créer notre architecture LVM puis le système de fichier de la dernière partition. Oui, mais pourquoi LVM ? Son principal atout pour moi est sa grande flexibilité vis a vis de redimensionnement. La ou le redimensionnement d'une partition peut être dangereux, sous LVM, le risque est très faible. De plus, si vous utilisez plusieurs disques, LVM peut vous permettre d'étaler vos volumes logiques sur plusieurs disques (attention, ça n'aura rien à voir avec un raid ... naméoh).

Pour commencer, créez le volume physique :

$ pvcreate /dev/sda3
    Physical volume "/dev/sda3" successfully created

Créez ensuite le groupe data :

$ vgcreate main /dev/sda3
    Volume group "main" successfully created

Si vous possédez plusieurs partitions/disques, ajoutez les à la suite de /dev/sda3 en les séparant par des espaces.

Vous pouvez vérifier les informations du groupe avec la commande vgdisplay:

$ vgdisplay -v main
    Using volume group(s) on command line
    Finding volume group "main"
  --- Volume group ---
  VG Name               main
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  5
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               915.63 GB
  PE Size               4.00 MB
  Total PE              234401
  Alloc PE / Size       0 / 0   
  Free  PE / Size       234401 / 915.63 GB
  VG UUID               1rA2sx-9Kf5-ji5Z-pEj1-o4vu-R080-JoP4Ys
   
  --- Physical volumes ---
  PV Name               /dev/sda3     
  PV UUID               6PAMey-nGiG-1qqS-nrEZ-Bpey-qzJF-L1Ct1l
  PV Status             allocatable
  Total PE / Free PE    234401 / 234401

Nous pouvons maintenant créer le volume logique data (utilisant tout l'espace disque) dans le groupe pve. Notez que la commande vgdisplay nous a permit d'identifier la dimension du volume (Total PE) que nous préciseront via l'argument -l :

$ lvcreate -l234401 -n data main
    Logical volume "data" created

Si vous le préférez vous pouvez aussi spécifier une taille en Gio. Par exemple :

$ lvcreate -L 10g -n data main

Vous pouvez vérifier les informations du volume avec la commande lvdisplay:

$ lvdisplay -v /dev/main/data
    Using logical volume(s) on command line
  --- Logical volume ---
  LV Name                /dev/main/data
  VG Name                main
  LV UUID                BQ1JVv-k71y-L4YX-tMpA-klDk-7S4Y-nHB3Uj
  LV Write Access        read/write
  LV Status              available
  # open                 0
  LV Size                200.00 GB
  Current LE             51200
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

Enfin, créez le système de fichier dans votre volume logique :

mkfs.ext4 /dev/main/data

Augmenter la taille du groupe

Si vous avez par exemple une partition /dev/sda4 que vous souhaitez ajouter à votre groupe lvm, rien de plus simple. On commence par créer le lvm sur la partition sda4 :

pvcreate /dev/sda4

Puis ajoutez ce nouveau lvm à votre groupe main :

vgextend main /dev/sda4

Augmenter la taille du volume logique

On commence par démonter le système de fichier (je n'aime pas manipuler à chaud)

umount /data

On vérifie le fs :

e2fsck -f /dev/main/data

On redimensionne le volume logique :

lvresize -L 80g /dev/main/data

Pensez quand même à spécifier une taille supérieure à la taille précédente du volume ... sinon vous allez perdre des données =)

Puis on redimensionne le système de fichier contenu dans le volume :

resize2fs /dev/main/data

On peut enfin remonter

mount /dev/main/data /data

Diminuer la taille du volume logique

Soon (tm)

Snapshot

Pour cérer un snapshot nommé "test" du volume /dev/main/data :

lvcreate -L 10g -s -n test /dev/main/data 

Pour merger un snapshot "test" modifié vers son volume d'origine :

lvconvert --merge /dev/main/test

Installation du système de base

$ mount /dev/sda1 /mnt
$ debootstrap --arch=amd64 squeeze /mnt
...
I: Base system installed successfully

Configuration debian de base

Afin d'avoir accès au réseau et au matériel, montez /proc, /dev et /sys dans votre nouveau système puis chrootez y:

mount -o bind /proc /mnt/proc
mount -o bind /dev /mnt/dev
mount -o bind /sys /mnt/sys
chroot /mnt

Editez le fichier /etc/apt/sources.list :

deb http://ftp.fr.debian.org/debian squeeze main contrib non-free
deb-src http://ftp.fr.debian.org/debian squeeze main contrib non-free

#Sec
deb http://security.debian.org/ squeeze/updates main contrib non-free
deb-src http://security.debian.org/ squeeze/updates main contrib non-free

#anciennement debian-volatile
deb http://ftp.fr.debian.org/debian squeeze-updates main contrib non-free
deb-src http://ftp.fr.debian.org/debian squeeze-updates main contrib non-fre

Mettez les paquets à jour, puis installez les locales :

aptitude update
aptitude safe-upgrade
aptitude install locales 
dpkg-reconfigure locales
aptitude install console-data
dpkg-reconfigure console-data # from arch > french > latin9)
tzselect
dpkg-reconfigure tzdata
mkdir /srv/vm

Configurez votre /etc/fstab/code> :

/dev/sda1       /       ext4    errors=remount-ro       0       1
/dev/sda2       swap    swap    defaults        0       0
/dev/main/data  /srv/vm     ext4    defaults        1       2

Configurez /etc/network/interfaces :

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
        address 91.121.117.116
        netmask 255.255.255.0
        network 91.121.117.0
        broadcast 91.121.117.255
        gateway 91.121.117.254

Configurez votre fichier /etc/hosts :

# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1       localhost.localdomain localhost
91.121.117.116  ks355113.kimsufi.com
# The following lines are desirable for IPv6 capable hosts
#(added automatically by netbase upgrade)
::1     ip6-localhost ip6-loopback
feo0::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

Configurez l'hostname de votre serveur :

echo xen > /etc/hostname
echo xen > /etc/mailname

N'oubliez pas de configurer les dns (ceux de votre hébergeur dédié) :

nameserver 213.186.33.99

Nous allons commencer par installer un kernel debian classique afin de vérifier notre configuration

aptitude install linux-image-2.6-amd64 linux-headers-2.6-amd64

Puis installez le chargeur de démarrage grub

aptitude install grub-pc
update-grub

Installez le serveur ssh ainsi que lvm2 puis changez le mot-de-passe root :

aptitude install lvm2 openssh-server
passwd

Vous pouvez maintenant sortir de votre chroot et démonter le système de fichier

exit
umount /mnt/sys
umount /mnt/dev
umount /mnt/proc
umount /mnt

puis rebootez sur le disque dur.

Installation de Xen

aptitude install xen-hypervisor-amd64 linux-image-2.6-xen-amd64 linux-headers-2.6-xen-amd64 xen-utils-4.0 xen-tools bridge-utils

Désactivez les autres kernels ainsi que la recherche d'OS de grub :

mkdir /etc/grub.d.disabled
mv /etc/grub.d/10_linux /etc/grub.d.disabled/
echo GRUB_DISABLE_OS_PROBER=true >> /etc/default/grub
echo GRUB_CMDLINE_XEN_DEFAULT="" >> /etc/default/grub
echo GRUB_CMDLINE_XEN="" >> /etc/default/grub
update-grub

Vous pouvez redémarrer sur le kernel xen :

reboot

Configuration globale de Xen

Le fichier /etc/xen/xend-config.sxp permet de configurer le démon xend.

Si vous possédez plusieurs processeurs ou coeurs, vous pouvez forcer le nombre de cpu utilisé par le dom0 avec la directive (dom0-cpus X) où X est un nombre. Pour que le dom0 utilise tous les processeurs disponibles, définissez X à 0.

C'est aussi dans ce fichier que vous pouvez configurer le serveur vnc de xen pour les installations HVM.

Vérifier la présence du fichier /etc/xen/scripts/hotplugpath.sh. S'il n'existe pas, créez le :

touch /etc/xen/scripts/hotplugpath.sh

Configuration réseau

Bridge

Dans cette configuration, il est nécessaire d'avoir des IPFailOver disponibles ainsi que générer des adresses MAC pour vos VMs. Vos VMs seront ensuite directement accessible à partir du réseau internet.

Vérifier la présence des lignes suivantes dans /etc/xen/xend-config.sxp :

(vif-script vif-bridge)
(network-script network-bridge)

Par défaut, xen utilisera l'interface eth0. Si vous souhaitez utiliser une autre interface réseau (eth1 par exemple) utilisez :

(vif-script vif-bridge)
(network-script 'network-bridge netdev=eth1')

Par défaut, le bridge sera nommé xenbr0.

après vos modifications, redémarrez le démon xend :

/etc/init.d/xend restart

Note: il semble que OVH refuse le mode bridge, il faut donc passer par le mode route :

(network-script 'network-route netdev=eth0')
(vif-script     vif-route)

NAT

Dans cette configuration, il est nécessaire de créer un réseau local "interne" à xen. Les VMs auront une adresse ip à l'intérieur de ce réseau local, et ne deviendront accessibles depuis l'extérieur qu'après avoir ajouté une règle NAT sur le dom0

Il faut configurer les directives suivantes dans /etc/xen/xend-config.sxp :

(network-script network-nat)
(vif-script     vif-nat)

Assurez vous bien sur que les autres directives (network-script et (vif-script sont commentées !

Puis redémarrez xend

/etc/init.d/xend restart

Configuration d'un serveur dns bind9 pour le dom0

Configuration d'un serveur smtp pour le dom0

Configuration de Xen-Tools pour créer automatiquement des machines virtuelles debian

Par défaut sous debian squeeze, le fichier /etc/xen-tools/xen-tools.conf est adapté à la création de VMs debian squeeze. Xen utilisera debootstrap pour créer des VMs vierges.

Si vous utilisez un LVM comme présenté ici, ajoutez la ligne suivante dans /etc/xen-tools/xen-tools.conf :

lvm = main

main étant le nom du groupe de votre lvm.

Configurez les informations réseaux de vos futurs VMs. Si vous êtes en bridge ou en route :

gateway    = IP-du.dom0.254
netmask    = 255.255.255.0
broadcast  = IP-du.dom0.255

Si vous êtes en NAT :

gateway    = 192.168.0.1
netmask    = 255.255.255.0
broadcast  = 192.168.0.255

Voici les options de configuration intéressante de xen-tools :

  • dist : défini la distribution à installer par défaut.
  • size : défini la taille de l'image disque par défaut d'une VM.
  • memory : défini la quantité de mémoire vive alloué par défaut à une VM
  • swap : défini la taille du swap par défaut pour les VMs
  • fs : défini le système de fichier à utiliser pour les VMs. Généralement ext3 ou ext4.
  • image : défini s'il faut utiliser des images complètes (full) ou a taille variable (sparse) pour les VMs.
  • install-method : défini la méthode d'installation par défaut pour les VMs. Les choix possibles sont :
    • debootstrap
    • rinse
    • rpmstrap
    • copy : un dossier d'une installation précédente sera utilisé. Il est obligatoire de configurer la directive install-source et d'y préciser le chemin du dossier à utiliser.
    • tar : une archive tar d'une installation sera utilisé. Il est obligatoire de configurer la directive install-source et d'y préciser le chemin de l'archive tar à utiliser.
  • kernel et initrd : spécifie le kernel que les VMs utiliseront. Par défaut, celui du dom0
  • arch : l'architecture à utiliser lors de la création des VMs (amd64 ou i386)
  • mirror : le miroir à utiliser pour debootstrap (par défaut, utilisation de celui configuré dans /etc/apt/sources.list)

Configuration des squelettes de VMs

Le dossier /etc/xen-tools/skel/ permet d'appliquer des modifications automatiquement après l'installation de la VM avec debootstrap. Cela permet par exemple d'appliquer automatiquement des configurations à vos VMs.

Nous prendrons l'exemple du timezone :

mkdir /etc/xen-tools/skel/etc/
cp /etc/timezone /etc/xen-tools/skel/etc/
cp /etc/localtime /etc/xen-tools/skel/etc/

Ainsi, vos futurs VMs seront automatiquement configurées sous la même timezone que votre dom0

Création d'un système d'upgrade et de backup automatique des VMs

Création de votre première VM

Maintenant que tout est configuré, il ne reste plus qu'à créer votre première VM.

xen-create-image --hostname vm1.domain.tld --ip <IP> --passwd --role automatic

Voici un autre exemple plus complet détaillant la création d'une VM ubuntu

xen-create-image --debootstrap --dir=/home/xen --size=10Gb --memory=512Mb --fs=ext3 --dist=natty --hostname=vm1.domain.tld --ip=87.98.123.234 --netmask=255.255.255.0 --swap=1024Mb --arch=amd64 --kernel=/boot/vmlinuz-2.6.32.5-xen-amd64 --mirror=http://archive.ubuntu.com/ubuntu/ --passwd

démarrage

Pour lancer la VM :

xm create /etc/xen/vm1.domain.tld.cfg

Vous pouvez obtenir la liste des VM lancés avec :

xm list

Pour vous connecter à votre VM : deux options :

  • SSH
  • la console xen avec xm console vm1.domain.tld