Vous êtes ici : Accueil / Debian GNU/Linux / Système / Xen / Installer Xen sur Debian

Installer Xen sur Debian

Par Pierre-Yves Landuré Dernière modification 02/03/2018 20:35

Xen est une solution de virtualisation libre et gratuite alternative à VMWare ESX. Cet article vous guide au travers de l'installation, la configuration et l'utilisation de Xen sur Debian.

Ce guide est testé sur:

  • Debian 6.0 Squeeze
  • Debian 7.0 Wheezy

Vocabulaire

Xen utilise une terminologie spécifique pour identifier les machines virtuelles:

  • Hyperviseur: Xen est un hyperviseur. En informatique, un hyperviseur est une plate-forme de virtualisation qui permet à plusieurs systèmes d'exploitation de travailler sur une machine physique en même temps (source: Hyperviseur sur Wikipedia).
  • Dom0: Le Dom0, pour Domaine n°0, est le système d'exploitation contrôle l'hyperviseur Xen. C'est l'hôte d'origine où a été installé l'hyperviseur.
  • DomU: Les DomU, pour Domaines Utilisateur, sont les machines virtuelles de Xen.

Paramètres

Renseignez la quantité de mémoire assignée au Dom0. La configuration présentée sur ce site nécessite que le Dom0 ait suffisament de RAM pour installer les DomU. Ajustez la valeur par défaut proposée selon vos besoins et la quantité de mémoire disponible sur le serveur. Saisissez une valeur en Mo:

DOM0_RAM=512

Renseignez le nombres de cores assignés définitivement au Dom0 pour éviter l'effondrement des performances en cas de d'accès disques importants. 1 CPU assigné définitivement au Dom0 est un bon défaut:

DOM0_CPU_COUNT=1

Xen propose plusieurs méthodes de configuration du réseau. Ce guide présente 2 configurations simples:

  • bridge: les domU sont sur visibles sur le réseau local du dom0. C'est la configuration préférée pour un serveur Xen séparé d'Internet par un pare-feu.
  • NAT: les domU sont sur un réseau local virtuel et ne sont pas accessibles depuis le réseau du dom0. C'est la configuration préférée si le serveur Xen est directement connecté à Internet.

Mettez en place le mode NAT (recommandé):

XEN_NETWORK_MODE='nat'

Remarque: Pour mettre en place le mode bridge, utilisez:

# XEN_NETWORK_MODE='bridge'

Installation

Détectez la version de xen-utils disponible:

XEN_UTILS="$(command apt-cache pkgnames xen-utils)"

Installez l'hyperviseur et le noyau Xen adapté à l'architecture de votre système d'exploitation (32 ou 64 bits) :

if [ "$(command uname --machine)" = "x86_64" ]; then
if [ -n "$(command apt-cache pkgnames 'xen-linux-system-amd64')" ]; then
command apt-get -y install xen-linux-system-amd64
else
  command apt-get -y install xen-hypervisor-amd64 linux-image-2.6-xen-amd64 \ linux-headers-2.6-xen-amd64 ${XEN_UTILS} bridge-utils fi
else
if [ -n "$(command apt-cache pkgnames 'xen-linux-system-686-pae')" ]; then
command apt-get install xen-linux-system-686-pae
else
  command apt-get -y install xen-hypervisor-i386 linux-image-2.6-xen-686 \ linux-headers-2.6-xen-686 ${XEN_UTILS} bridge-utils fi
fi

Si le gestionnaire de boot du système est Grub 2 (paquet grub-pc), donnez la priorité aux noyaux Xen, et désactivez la découverte automatique des OS pour ne pas ajouter les DomU au menu Grub:

command dpkg-divert --divert '/etc/grub.d/05_linux_xen' --rename '/etc/grub.d/20_linux_xen'
echo '# Disable OS probing.
GRUB_DISABLE_OS_PROBER=true' >> '/etc/default/grub'

Ajoutez à la configuration Grub les lignes nécessaires aux noyaux Xen :

if [ -e '/etc/default/grub' ]; then
  if [ -z "$(command grep 'GRUB_CMDLINE_XEN' '/etc/default/grub')" ]; then
    echo '
# Xen kernels configuration
GRUB_CMDLINE_XEN_DEFAULT=""
GRUB_CMDLINE_XEN=""' >> '/etc/default/grub'
  fi
fi

Mettez à jour la liste des noyaux disponibles:

command update-grub

Lancer l'hyperviseur Xen en redémarrant le système:

command reboot

Configuration du initramfs

Assurez-vous que le initramfs contienne les modules relatifs à Xen (notamment xen_blkfront, qui permet aux domU Xen de voir les devices xvda):

command sed -i -e 's/^MODULES=.*/MODULES=most/' '/etc/initramfs-tools/initramfs.conf'
command sed -i -e 's/^MODULES=.*/MODULES=most/' '/etc/initramfs-tools/conf.d/'*

Mettez à jour le contenu du initramfs:

command update-initramfs -u

Remarque: la configuration ci-dessus corrige l'erreur 'ALERT! /dev/xvda2 does not exist. Dropping to a shell!' lors du démarrage des domU créés avec xen-create-image. Pour corrigez ce problème, copiez le fichier initrd à jour dans le dossier /boot des domU concernés.

Optimisation

Évitez l'effondrement des performances en cas de forte utilisation des disques en assignant en permanence au moins un cœur du CPU au dom0. Appliquez le paramètre à la configuration de l'hyperviseur:

command sed -i -e "s/^[# ]*\((dom0-cpus\).*\().*\)\$/\1 ${DOM0_CPU_COUNT}\2/" \
         '/etc/xen/xend-config.sxp'

 Forcez le Dom0 à utiliser seulement les cœurs CPU qui lui sont assignés:

if [ -e '/etc/default/grub' ]; then
  command sed -i -e "s/\(GRUB_CMDLINE_XEN_DEFAULT=.*\)\"/\1 dom0_max_vcpus=${DOM0_CPU_COUNT} dom0_vcpus_pin=1\"/" \
         '/etc/default/grub'
fi
if [ -e '/boot/grub/menu.lst' ]; then
  command sed -i -e "s/\(xenhopt=.*\)/\1 dom0_max_vcpus=${DOM0_CPU_COUNT} dom0_vcpus_pin=1/" \
         '/boot/grub/menu.lst'
fi

Mettez à jour la configuration des noyaux de l'hyperviseur:

command update-grub

Chargez la nouvelle configuration:

command reboot

Configuration du réseau

Désactivez la configuration réseau précédente:

command sed -i -e 's/^(network-script .*).*$/# \0/' \
            -e 's/^(vif-script .*).*$/# \0/' \
         '/etc/xen/xend-config.sxp'

Appliquez les réglages choisis:

command sed -i -e "s/^#[ ]*\\((network-script.*network-${XEN_NETWORK_MODE}).*\\)\$/\\1/" \
            -e "s/^#[ ]*\\((vif-script.*vif-${XEN_NETWORK_MODE}).*\\)\$/\\1/" \
         '/etc/xen/xend-config.sxp'

Assurez-vous que le fichier hotplugpath.sh existe:

if [ ! -e '/etc/xen/scripts/hotplugpath.sh' ]; then
  command touch '/etc/xen/scripts/hotplugpath.sh'
fi

Rechargez la configuration:

command test -x '/etc/init.d/xen' && /etc/init.d/xen restart
command test -x '/etc/init.d/xend' && /etc/init.d/xend restart

Prévention des problèmes connus

Memory squeeze in netback driver

Au bout d'un certain temps, les messages suivants apparaissent dans le syslog du dom0:

xen_net: Memory squeeze in netback driver.

Limitez la quantité de mémoire assignée au dom0 (quantité renseignée dans les paramètres):

if [ -e '/etc/default/grub' ]; then
  command sed -i -e "s/\(GRUB_CMDLINE_XEN_DEFAULT=.*\)\"/\1 dom0_mem=${DOM0_RAM}M\"/" \
         '/etc/default/grub'
fi
if [ -e '/boot/grub/menu.lst' ]; then
  command sed -i -e "s/\(xenhopt=.*\)/\1 dom0_mem=${DOM0_RAM}M/" \
         '/boot/grub/menu.lst'
fi

Appliquez le réglage:

command update-grub

Fixez la quantité de mémoire assignée au dom0:

command sed -i -e "s/^[# ]*\((dom0-min-mem\).*\().*\)$/\1 ${DOM0_RAM}\2/" \
         '/etc/xen/xend-config.sxp'

Redémarrez le système:

command reboot

/dev/mem: mmap: Bad address dans les domU

Ce message est généré par dmidecode. dmidecode essaie d'accéder à des informations matériel de bas niveau non disponibles dans un domU. Il peut être ignoré sans soucis.

Remerciements