Installer et configurer Xen sur Debian 4.0 Etch et 5.0 Lenny
Xen est une solution de virtualisation libre et gratuite disponible dans les dépôts de Debian 4.0 Etch. Cet article vous guide au travers de l'installation, la configuration et l'utilisation de Xen sur Debian 4.0 Etch et 5.0 Lenny.
Pour information
Dans ce guide, je parlerai en permanence de machines virtuelles. Cependant, Xen a sa propre terminologie. Dans une configuration Xen, les machines virtuelles instanciées (c'est à dire démarrées) sont appelées "Domaines".
Une fois votre machine configurée pour faire fonctionner Xen, tous les systèmes d'exploitation tournent dans des "domaines". Le système d'exploitation d'origine, ou se trouvent installés les outils de contrôle de Xen, est appellé le "dom0" (pour domaine n°0). Tous les systèmes d'exploitation invités sont dit installés dans un "domU" (pour domaine utilisateur).
Comme je suis un peut pantouflard, je n'ai pas envie de m'imposer cette torsion mentale, et je ne parlerai que de machines virtuelles pour simplifier le schmilblick. Aussi, si vous lisez ce guide, ne hurlez pas à mort à cause des dénominations.
Prérequis
Ce guide fait usage des possibilités de LVM. Si vous ne savez pas ce que c'est ou que vous souhaitez mettre en place LVM sur votre machine, je vous conseille de lire l'article suivant:
LVM, une autre manière de partitionner.
De plus, nous allons avoir besoin de apg pour générer les mots de passe des utilisateurs des machines virtuelles:
command apt-get install apg
Installation
Installez l'hyperviseur Xen, le noyau Xen destiné au Dom0, et d'autres outils.
Remarque : Le bloc de commandes suivant détecte votre architecture, et votre version de Debian GNU / Linux (entre 4.0 Etch, 5.0 Lenny et Squeeze).
if [ -n "$(command grep -e "squeeze" "/etc/debian_version")" ]; then # The OS is a Debian 6.0 Squeeze. if [ "$(command uname --machine)" = "x86_64" ]; then command apt-get -y install xen-hypervisor-amd64 linux-image-2.6-xen-amd64 \ linux-headers-2.6-xen-amd64 xen-utils-4.0 xen-tools bridge-utils else command apt-get -y install xen-hypervisor-i386 linux-image-2.6-xen-686 \ linux-headers-2.6-xen-686 xen-utils-4.0 xen-tools bridge-utils fi elif [ -n "$(command grep -e "^5.0" "/etc/debian_version")" ]; then # The OS is a Debian 5.0 Lenny. if [ "$(command uname --machine)" = "x86_64" ]; then command apt-get -y install xen-hypervisor-amd64 linux-image-2.6-xen-amd64 \ linux-headers-2.6-xen-amd64 xen-utils-3.2-1 xen-tools bridge-utils else command apt-get -y install xen-hypervisor-i386 linux-image-2.6-xen-686 \ linux-headers-2.6-xen-686 xen-utils-3.2-1 xen-tools bridge-utils fi elif [ -n "$(command grep -e "^4.0" "/etc/debian_version")" ]; then # The OS is a Debian 4.0 Etch. if [ "$(command uname --machine)" = "x86_64" ]; then command apt-get -y install linux-image-2.6-xen-vserver-amd64 \ linux-headers-2.6-xen-vserver-amd64 xen-hypervisor-3.0.3-1-amd64 \ xen-tools bridge-utils else command apt-get -y install linux-image-2.6-xen-vserver-686 \ linux-headers-2.6-xen-vserver-686 libc6-xen xen-hypervisor-3.0.3-1-i386-pae \ xen-tools bridge-utils fi if [ -n "$(command grep -e "svm" -e "vmx" "/proc/cpuinfo")" ]; then # The processor has a ioemu support. command apt-get -y install xen-ioemu-3.0.3-1 fi fi
Si vous utilisez Grub 2 (paquet grub-pc), assurez-vous que les noyaux Xen sont mis en première position et désactivez la découverte automatique des OS pour ne pas ajouter vos DomU au boot Grub :
if [ -d "/etc/grub.d" ]; then command mkdir "/etc/grub.d.disabled" if [ -f "/etc/grub.d/06_OVHkernel" ]; then command mv "/etc/grub.d/06_OVHkernel" "/etc/grub.d.disabled/06_OVHkernel" fi if [ -f "/etc/grub.d/10_linux" ]; then command mv "/etc/grub.d/10_linux" "/etc/grub.d.disabled/10_linux" fi fi echo '# Disable OS probing. GRUB_DISABLE_OS_PROBER=true' >> /etc/default/grub
Ajoutez les lignes nécessaires à la configuration des noyaux Xen à votre fichier de configuration Grub :
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
Générez un nouveau fichier de configuration pour Grub :
command update-grubRedémarrez votre serveur afin d'utiliser le noyau spécifique à l'hyperviseur Xen :
command reboot
Amélioration des performances
Afin de maximiser les performances de votre installation Xen, assignez en permanence au moins un processeur réel à votre dom0 :
CPU_COUNT="1"
Appliquez ce paramètre à la configuration de votre hyperviseur :
command sed -i -e "s/^[# ]*\((dom0-cpus\).*\().*\)\$/\1 ${CPU_COUNT}\2/" \ /etc/xen/xend-config.sxp
Remarque : Cette configuration règle le problème de kernel panic à la création d'un domaine sous Debian 4.0 Etch (Source: Merci à Gerald Hochegger pour son e-mail Bug#410807: workaround: linux-image-2.6.18-4-xen-amd64: Kernel BUG at drivers/xen/core/evtchn.c:481)
Modifiez le fichier de configuration de Grub afin que le nombre de limiter le volume de mémoire assigné à la machine virtuelle au boot :
if [ -e "/etc/default/grub" ]; then command sed -i -e "s/\(GRUB_CMDLINE_XEN_DEFAULT=.*\)\"/\1 dom0_max_vcpus=${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=${CPU_COUNT} dom0_vcpus_pin=1/" \ "/boot/grub/menu.lst" fi
Appliquez cette modification aux noyaux listés par Grub :
command update-grub
Redémarrez votre serveur pour prendre en compte cette configuration :
command reboot
Erreurs liées à Xen
Problème de connexion aux machines virtuelles via le réseau
Au bout d'un certain temps, et d'un certain nombre de machines virtuelles créées, un bug apparait. L'un des symptôme de ce bug est l'apparition des messages suivants dans le syslog de la machine hôte (dom0):
xen_net: Memory squeeze in netback driver.
La correction de ce problème nécessite un redémarrage de l'hyperviseur.
Modifiez le fichier de configuration de Grub afin de limiter le volume de mémoire assigné à la machine virtuelle au boot :
if [ -e "/etc/default/grub" ]; then command sed -i -e 's/\(GRUB_CMDLINE_XEN_DEFAULT=.*\)"/\1 dom0_mem=256M"/' \ "/etc/default/grub" fi if [ -e "/boot/grub/menu.lst" ]; then command sed -i -e 's/\(xenhopt=.*\)/\1 dom0_mem=256M/' \ "/boot/grub/menu.lst" fi
Appliquez cette modification aux noyaux listés par Grub :
command update-grub
Appliquez le même montant à la mémoire minimum disponible pour la machine hôte (dom0) :
command sed -i -e 's/^[# ]*\((dom0-min-mem\).*\().*\)$/\1 256\2/' \ /etc/xen/xend-config.sxp
Redémarrez la machine pour prendre en compte ces modifications :
command reboot
Source: Merci à Crucial Paradigm pour leur article Xen Bug: xen_net: Memory squeeze in netback driver (32bit PAE).
Erreurs /dev/mem: mmap: Bad address dans les machines virtuelles (domU)
Ce message est une erreur affichée par dmidecode. dmidecode essaie d'accéder à des informations bas niveau sur le matériel dans le but d'obtenir une configuration par défaut adéquate. Ceci ne fonctionne pas sous Xen, mais peut être ignoré sans soucis.
Source: Merci à MingsVille pour la réponse à la question When doing an apt-get or aptitude update I see an error like /dev/mem: mmap: Bad address; is this a cause for concern ? qu'il a obtenu dans les informations techniques pour les clients VPS de BitFolk.
Configuration du réseau
Xen propose plusieurs méthodes de configuration du réseau, ce guide en aborde 2. Pour faire un rapide résumé:
- Mode bridge: les machines virtuelles sont des machines du réseau local de l'hôte Xen. C'est à dire qu'elles sont accessibles depuis d'autres ordinateurs que l'hôte Xen. C'est la configuration a préférer si votre ordinateur hôte (dom0) est dans un réseau local.
Remarque : Le guide lui-même est normallement Bridge ready. Ce n'était pas le cas des premières version de ce guide :D. - Mode NAT: les machines virtuelles sont sur un réseau local virtuel. Elles ne sont accessibles que depuis l'ordinateur hôte, jusqu'à ce qu'une régle de routage NAT soit mise en place. C'est la configuration à préférer si votre ordinateur hôte (dom0) n'est pas dans un réseau local (serveur dédié, etc...).
Choix du mode de réseau
Si vous souhaitez utiliser vos machine virtuelles en mode NAT, que je recommande à moins que vous ne sachiez ce que vous faites, réglez le mode du réseau sur NAT :
XEN_NETWORK_MODE="nat"
Remarque : Si vous souhaitez utiliser le mode bridge (non recommandé si votre serveur est directement présent sur l'internet), il suffit de le spécifier à l'aide de :
XEN_NETWORK_MODE="bridge"
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"
Activez la configuration adaptée au mode réseau de votre choix :
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 (ce problème peut apparaitre sur Debian 6.0 Squeeze) :
if [ ! -e "/etc/xen/scripts/hotplugpath.sh" ]; then command touch "/etc/xen/scripts/hotplugpath.sh" fi
Redémarrez le démon Xen:
/etc/init.d/xend restart
Détection de l'adresse IP du Dom0
Récupérez l'adresse IP de notre Dom0. Dans une configuration en mode NAT, l'adresse est 10.0.0.128, mais dans le cas d'une configuration en mode Bridge, il est nécessaire d'utilisez l'adresse IP de l'interface physique (ici eth0):
MAINDOM_IP="10.0.0.128" if [ $(command grep "^[^#]*bridge" /etc/xen/xend-config.sxp | command wc --lines) -gt 0 ]; then MAINDOM_IP=$(command ifconfig eth0 | command grep "inet " | command sed -e 's/^.*inet [^:]*:\([^ ]*\) .*$/\1/') fi
Vérifiez l'adresse IP détectée à l'aide de la commande :
/bin/echo "L'adresse IP de ce serveur pour les DomU est : ${MAINDOM_IP}"
Remarque : Si l'adresse obtenue n'est pas correcte, renseignez une valeur correcte :
MAINDOM_IP="192.168.1.5"
Configuration du serveur SMTP de la machine hôte
Attention: Cette section est destinée à configurer le serveur SMTP de la machine hôte. Si vous avez déjà configuré le serveur SMTP par vous même, les lignes de commandes suivantes vont écraser votre configuration. Si cela vous pose problème, et que vous avez choisi le mode NAT pour le réseau des domU, veillez simplement à ce que votre serveur SMTP écoute sur l'adresse 10.0.0.128, et accepte le relais des emails en provenance de 10.0.0.0/24.
Il est important de surveiller les journaux et les mises à jour de sécurité de vos serveurs. De nombreux outils tels que cron-apt, logwatch, rkhunter se chargent de cela pour vous. Ils envoient leurs rapports par e-mail. Le pré-requis à leur bon fonctionnement est la présence d'un serveur SMTP configuré correctement. Si vous êtes un habitué des serveurs SMTP, je pense que cette section n'aura que peut d'intérêt pour vous, mais si ce n'est pas le cas, nous allons mettre en place un serveur SMTP dans la machine hôte (dom0) destiné à recevoir les emails des différentes machines virtuelles (domU) créées à l'aide de ce guide.
Configurez le domaine de mail de notre serveur SMTP. Il s'agit en général du nom de domaine du serveur. Chez OVH, il est assez simple de l'obtenir:
command echo "${HOSTNAME}" > /etc/mailname
Remarque: Cette adresse doit être un nom de domaine valide et fonctionnel (c.a.d. qu'elle doit répondre aux ping).
Renseignez l'adresse électronique destinée à recevoir les courriers envoyés par les machines virtuelles:
ADMIN_EMAIL="mon-email@yahoo.fr"
Remarque: utilisez de préférence votre adresse électronique habituelle.
Appliquez la configuration:
command sed -i -e '/^root/d' "/etc/aliases" command echo "root: ${ADMIN_EMAIL}" >> "/etc/aliases"
Mettez en place le fichier de configuration d'Exim 4 correspondant à l'envoi direct d'email.
command mkdir --parent "/etc/exim4" command wget "http://howto.landure.fr/gnu-linux/debian-4-0-etch/installer-et-configurer-xen-sur-debian-4-0-etch/update-exim4-conf.conf" \ --output-document="/etc/exim4/update-exim4.conf.conf"
Remarque: Cette configuration correspond à un serveur dédié chez un fournisseur de services tel que OVH. Si vous hébergez votre serveur à domicile, vous devez l'adapter à votre fournisseur d'accès. Je ne donnerais pas d'exemple de configuration correspondant à ce besoin, car je n'en ai pas l'utilité moi-même. Mais si vous souhaitez faire une contribution, vous pouvez m'envoyer un email avec la configuration nécessaire en utilisant le bouton "contact" en haut à droite de ce site XD.
Nous mettons à jour notre configuration d'Exim 4 afin d'accepter les e-mails en provenance de nos machines virtuelles :
MAINDOM_RANGE=$(/bin/echo ${MAINDOM_IP} | /bin/sed -e 's/\(.*\)\.[0-9]*/\1/') /bin/sed -i -e "s|dc_local_interfaces=.*\$|dc_local_interfaces='127.0.0.1;${MAINDOM_IP}'|" \ -e "s|dc_relay_nets=.*\$|dc_relay_nets='${MAINDOM_RANGE}.0/24'|" \ /etc/exim4/update-exim4.conf.conf
Nous pouvons maintenant installer Exim 4:
/usr/bin/apt-get install exim4
Remarque: si Exim 4 est déjà installé sur votre serveur, il vous suffit de mettre à jour la configuration avec la commande:
/usr/sbin/update-exim4.conf /etc/init.d/exim4 restart
Nous allons maintenant tester votre nouvelle configuration. Pour ce faire, installez mailx:
/usr/bin/apt-get install mailx
Et lancez la commande suivante:
/bin/echo "test" | /usr/bin/mail -s "test" root
Résolution des problèmes
Si vous avez configuré Exim 4 correctement, vous devriez recevoir un email ayant pour sujet "test". Si au bout de quelques minutes vous n'avez rien reçu, vérifiez le résultat de la commande:
/usr/bin/mailq
et le contenu du fichier journal d'Exim:
tail -n 250 /var/log/exim4/mainlog
Si l'erreur rencontrée est du type :
root@my-hostname: Unrouteable address
Il s'agit d'un problème d'incohérence entre le contenu de la variable d'environement ${HOSTNAME} et le contenu du fichier /etc/hosts. Pour régler ce problème, il faut que le contenu du fichier /etc/mailname contienne "my-hostname.my-domain.lan". Pour ce faire, vous pouvez l'éditer manuellement, ou tenter cette ligne de commande (sans aucune garantie de succès) :
/bin/grep "${HOSTNAME}" /etc/hosts | /usr/bin/cut --field=2 | /usr/bin/tee /etc/mailname
Mettez à jour la configuration d'Exim4 :
/usr/sbin/update-exim4.conf /etc/init.d/exim4 restart
Supprimer vos messages de tests gelés :
mailq | grep frozen | sed -e 's/.* \(.\{6\}-.\{6\}-.\{2\}\) .*/\1/' | xargs exim4 -Mrm
Et envoyez à nouveau un message de test :
/bin/echo "test" | /usr/bin/mail -s "test" root
Avec de la chance, cette nouvelle configuration a fonctionné. Pour le vérifier, il suffit de regarder si cette commande ne renvoie rien :
mailq
Configuration des sauvegardes
Ce guide met en place une architecture de sauvegardes relativement complexe basée sur l'utilisation de l'outil Backup Manager. Vos machines virtuelles (domU) rapatrieront leurs sauvegardes dans le dossier /var/archives de la machine hôte (dom0). Nous devons donc créer ce dossier:
/bin/mkdir /var/archives /bin/chown root:backup /var/archives /bin/chmod ug+rwx /var/archives
Une fois ceci-fait, votre machine hôte (dom0) peut recevoir les sauvegardes des machines virtuelles.
Installation de Backup Manager
Cela n'est toutefois pas suffisant puisque seules les machines virtuelles sont sauvegardées. Il faut aussi penser à sauvegarder la machine hôte. Pour ce faire je vous recommende d'installer Backup Manager en suivant mon guide:
Installer et configurer Backup Manager sur Debian 4.0 Etch
Une fois Backup Manager installé, nous devons le configurer afin que le dossier /var/archives puisse être inscriptible par les machines virtuelles, et que les archives des domU soient purgées en même temps que celles du dom0
/bin/sed -i -e 's/[#]*\(.*BM_REPOSITORY_GROUP=\).*$/\1"backup"/' \ -e 's/[#]*\(.*BM_REPOSITORY_CHMOD=\).*$/\1"770"/' \ -e 's/[#]*\(.*BM_ARCHIVE_STRICTPURGE=\).*$/\1"false"/' \ /etc/backup-manager.conf
Je vous recommande de transférer vos archives sur un serveur tiers à l'aide de Backup Manager. Si vous utilisez un serveur OVH, cette société met à disposition des espaces de stockages FTP.
Configuration de la création des machines virtuelles par Xen Tools
Configuration par défaut
Par défaut, Xen Tools est configuré pour créer des machines virtuelles basées sur Debian 3.1 Sarge.Nous allons modifier cela. Utilisez la ligne de commande suivante pour faire en sorte de créer des machines virtuelles Debian 4.0 Etch ou 5.0 Lenny (suivant la distribution du Dom0) par défaut:
if [ "$(/bin/cat /etc/debian_version)" = "4.0" ]; then /bin/sed -i -e 's/^\(dist[ ]*=[ ]*\)[^ ]*\([ ]*#.*\)$/\1etch\2/' /etc/xen-tools/xen-tools.conf else /bin/sed -i -e 's/^\(dist[ ]*=[ ]*\)[^ ]*\([ ]*#.*\)$/\1lenny\2/' /etc/xen-tools/xen-tools.conf fi
De même, nous passons la taille par défaut du swap de 128Mo à 1Go (par sécurité, la plupart du temps, il n'est pas utilisé).
/bin/sed -i -e 's/^\(swap[ ]*=[ ]*\)[^ ]*\([ ]*#.*\)$/\11Gb\2/' /etc/xen-tools/xen-tools.conf
Remarque : Si vous disposez de peu d'espace disque, vous pouvez diviser par 2 la taille du swap et du root (c'est à dire passer respectivement de 1 Go et 4 Go à 512 Mo et 2 Go). Pour ce faire, utilisez cette commande :
/bin/sed -i -e 's/^\(size[ ]*=[ ]*\)[^ ]*\([ ]*#.*\)$/\12Gb\2/' \ -e 's/^\(swap[ ]*=[ ]*\)[^ ]*\([ ]*#.*\)$/\1512Mb\2/' \ /etc/xen-tools/xen-tools.conf
Nous déclarons que la méthode de création de machines virtuelles par défaut est "debootstrap":
/bin/sed -i -e 's/^[# ]*\(debootstrap[ ]*=\).*$/\1 1/' /etc/xen-tools/xen-tools.conf
Dans le cas ou nous utilisons le mode nat, nous confirons les paramètres réseau pour la création de machine virtuelles utilisant une adresse IP fixe:
if [ $(/bin/grep "^[^#]*nat" /etc/xen/xend-config.sxp | /usr/bin/wc --lines) -gt 0 ]; then /bin/sed -i -e 's/^[# ]*\(gateway[ ]*=\).*$/\1 10.0.0.128/' \ -e 's/^[# ]*\(netmask[ ]*=\).*$/\1 255.255.255.0/' \ /etc/xen-tools/xen-tools.conf fi
Remarque : Dans le cas ou vous utilisez le mode bridge, vous pouvez configurer manuellement les paramètres de votre réseau local en éditant le fichier /etc/xen-tools/xen-tools.conf
Utilisation d'un volume LVM pour les disques
Nous allons maintenant configurer Xen pour utiliser un group de volumes LVM. Commencez par renseigner le nom du groupe de volumes à utiliser. La ligne de commande suivante trouve automatiquement le nom du premier groupe de volumes :
LVM_VG=$(/sbin/vgdisplay \ | /bin/grep "VG Name" \ | /usr/bin/head --lines=1 \ | /usr/bin/cut --characters=25-)
Remarque : Si vous disposez de plus d'un groupe de volumes (cas relativement rare je pense), vous devriez spécifier manuellement le nom du groupe de volumes de destination :
LVM_VG=vhd3
Et modifiez la configuration de Xen:
/bin/sed -i -e "s/^# \(lvm = \).*/\1${LVM_VG}/" /etc/xen-tools/xen-tools.conf
Une fois ceci fait, nous configureons Xen Tools pour se baser sur le bon kernel lors de la création de machines virtuelles:
/bin/sed -i -e "s/^\(kernel =\).*\$/\1 \/boot\/vmlinuz-$(uname -r)/" \ -e "s/^\(initrd =\).*\$/\1 \/boot\/initrd.img-$(uname -r)/" \ /etc/xen-tools/xen-tools.conf
Configuration du miroir de téléchargement des paquets
Par défaut, le miroir APT utilisé est situé aux états unis. Il est préférable d'utiliser un miroir plus proche de chez vous:
APT_MIRROR=http://ftp.fr.debian.org/debian/
Remarque: si votre serveur est hébergé par OVH, vous pouvez utiliser le mirroir suivant:
APT_MIRROR=ftp://mir1.ovh.net/debian/
Appliquez la nouvelle configuration:
CLEAN_APT_MIRROR=$(/bin/echo $APT_MIRROR | sed -e 's/\//\\\//g') /bin/sed -i -e "s/^\(mirror = \).*/\1$CLEAN_APT_MIRROR/" /etc/xen-tools/xen-tools.conf
Correction du problème "clocksource/0: Time went backwards"
Afin d'éviter que nos DomU deviennent inaccessibles après un redémarrage du Dom0 car leur CPU est occupé à 100%, et que le syslog se remplissent de messages "clocksource/0: Time went backwards", nous allons modifier le template Xen-Tools utilisé pour la création des fichiers de configuration des machines virtuelles, et y ajouter l'option "extra = 'clocksource=jiffies'" :
/bin/sed -i -e "/^on_crash/a\\ \\ # Preventing clocksource/0: Time went backwards\\ extra = 'clocksource=jiffies'" \ /etc/xen-tools/xm.tmpl
Source : Merci à Anapivirtua pour son article clocksource/0: Time went backwards.
Création d'un rôle pour nos machines virtuelles
Afin de pouvoir gérer proprement nos machines virtuelles, nous allons créer un rôle qui effectue les manipulations suivantes sur chaque machines virtuelles que nous allons créer:
- Installation de paquets locales, sudo, ntp, cron-apt, logwatch, rkhunter, chkrootkit, vim, screen, backup-manager et fail2ban
- Création de l'utilisateur "xen-upgrade" avec sa clef ssh d'identification qui permettront d'automatiser les tâches de mise à jour (nous utilisons sudo pour cela).
- Configuration de Backup Manager pour sauvegarder les machines virtuelles et copier les sauvegardes dans le dossier /var/archives de la machine hôte (dom0).
En premier lieu, nous téléchargeons le fichier de configuration de notre nouveau rôle "automatic":
/usr/bin/wget http://howto.landure.fr/gnu-linux/debian-4-0-etch/installer-et-configurer-xen-sur-debian-4-0-etch/automatic \ --output-document=/etc/xen-tools/role.d/automatic /bin/chmod +x /etc/xen-tools/role.d/automatic
Nous créons l'utilisateur xen-backup dans la machine hôte (dom0):
/usr/sbin/adduser --system --shell /bin/sh --home /var/lib/xen-backup --disabled-password xen-backup
Et nous l'ajoutons au groupe backup
/usr/sbin/adduser xen-backup backup
Nous allons créer les clefs SSL permettant l'identification SSH sans saisie de mot de passe. Pour ce faire, créez le dossier destiné à contenir ces clefs dans l'hôte:
/bin/mkdir /etc/xen-tools/ssh-keys
Et créez les clefs pour l'identification automatique dans le comptes "xen-upgrade" créé par le rôle "automatic" et "xen-backup" créé sur la machine hôte (dom0) pour le rapatriement des sauvegardes.
/usr/bin/ssh-keygen -t rsa -C "upgrade account key" -N "" -f /etc/xen-tools/ssh-keys/xen-upgrade-rsa /usr/bin/ssh-keygen -t rsa -C "backup account key" -N "" -f /etc/xen-tools/ssh-keys/xen-backup-rsa
Nous configureons le compte xen-backup pour pouvoir être accédé facilement à l'aide de la clef que nous venons de créer:
/bin/mkdir /var/lib/xen-backup/.ssh /bin/cat /etc/xen-tools/ssh-keys/xen-backup-rsa.pub \ | /usr/bin/tee -a /var/lib/xen-backup/.ssh/authorized_keys /bin/chown -R xen-backup:nogroup /var/lib/xen-backup/.ssh
Nous installons aussi le script permettant de mettre à jour les machines virtuelles (domU) depuis la machine hôte (dom0):
/usr/bin/wget http://howto.landure.fr/gnu-linux/debian-4-0-etch/installer-et-configurer-xen-sur-debian-4-0-etch/xen-apt-get \ --output-document=/usr/bin/xen-apt-get /bin/chmod +x /usr/bin/xen-apt-get
Ce script permet de mettre à jour toutes les machines virtuelles avec ces deux commandes:
xen-apt-get update xen-apt-get upgrade
Ou une machine virtuelle spécifiques, vous obtiendrez plus d'information sur son utilisation avec la commande:
xen-apt-get
Accès facilité aux machines virtuelles (optionnel)
Si vous ne souhaitez pas utiliser l'identification par mot de passe pour les comptes root des machines virtuelles, vous pouvez créer une clef pour l'identification automatique de l'utilisateur root du dom0 dans le compte root des domU. Le rôle "automatic" en tiendra automatiquement compte si elle est présente. Veillez toutefois à la protéger par une passphrase. Utilisez la commande suivante pour créer une paire RSA pour votre utilisateur root si cela est nécessaire :
if [ ! -e ${HOME}/.ssh/id_rsa ]; then /usr/bin/ssh-keygen -t rsa -f ${HOME}/.ssh/id_rsa fi
Configuration du squelette des machines virtuelles
Nous allons mettre en place quelque fichiers de configuration (Exim 4, bash et vim principalement) de façon à minimiser les configurations à modifier dans les machines virtuelles.
En premier lieu, nous créons l'arborescence des dossiers contenant les fichiers de notre squelette (il s'agit de l'arborescence standard de Linux: le squelette est copié tel quel dans la machine virtuelle):
/bin/mkdir --parent /etc/xen-tools/skel/root /bin/mkdir --parent /etc/xen-tools/skel/root/.ssh /bin/mkdir --parent /etc/xen-tools/skel/etc/default /bin/mkdir --parent /etc/xen-tools/skel/etc/exim4 /bin/mkdir --parent /etc/xen-tools/skel/etc/cron.d /bin/mkdir --parent /etc/xen-tools/skel/etc/apt/apt.conf.d /bin/mkdir --parent /etc/xen-tools/skel/etc/xen-data /bin/mkdir --parent /etc/xen-tools/skel/usr/bin
Nous copions les fichiers de configuration de la machine hôte que nous souhaitons voir appliqués dans la machine virtuelle (Bash, Vim, fuseau horaire, langue):
/bin/cp /root/.bashrc /etc/xen-tools/skel/root/ if [ -e /root/.vimrc ]; then /bin/cp /root/.vimrc /etc/xen-tools/skel/root/ fi /bin/cp /etc/timezone /etc/xen-tools/skel/etc/ /bin/cp /etc/localtime /etc/xen-tools/skel/etc/ /bin/cp /etc/locale.gen /etc/xen-tools/skel/etc/ /bin/cp /etc/environment /etc/xen-tools/skel/etc/ /bin/cp /etc/default/locale /etc/xen-tools/skel/etc/default/
Remarque: Une partie de ceci est valide uniquement pour les machines virtuelles Debian 4.0 Etch et 5.0 Lenny (mais ca marche bien sur Ubuntu quand même XD).
Nous ajoutons le script de mise à jour de la base des signatures de fichiers de RkHunter après utilisation de Apt :
/bin/echo '// Update rkhunter file signatures databases after running dpkg. DPkg::Post-Invoke { "if [ -x /usr/bin/rkhunter ]; then if [ $(/usr/bin/rkhunter --help | /bin/grep "propupd" | /usr/bin/wc -l) -gt 0 ]; then /usr/bin/rkhunter --propupd; fi; fi"; };' | /usr/bin/tee /etc/xen-tools/skel/etc/apt/apt.conf.d/90rkhunter
Nous y ajoutons la configuration d'Exim4 de façon à ce que tous les e-mails de la machine virtuelle (domU) soient redirigés vers le serveur Exim de la machine hôte (que nous avons configuré plus haut dans cette page):
/usr/bin/wget http://howto.landure.fr/gnu-linux/debian-4-0-etch/installer-et-configurer-xen-sur-debian-4-0-etch/update-exim4-conf-conf.xen \ --output-document=/etc/xen-tools/skel/etc/exim4/update-exim4.conf.conf /bin/sed -i -e "s/dc_smarthost=.*\$/dc_smarthost='${MAINDOM_IP}'/" \ /etc/xen-tools/skel/etc/exim4/update-exim4.conf.conf echo "root@$(/bin/cat /etc/mailname)" > /etc/xen-tools/skel/root/.email
Et nous ajoutons la clef publique de la machine hôte aux clefs autorisées du client SSH pour que les sauvegardes puissent se dérouler correctement:
/usr/bin/ssh-keyscan -H -t rsa ${MAINDOM_IP} | /usr/bin/tee /etc/xen-tools/skel/root/.ssh/known_hosts
De même, nous ajoutons la clef publique du compte root du dom0 aux clefs autorisées du compte root des domU:
if [ -e ${HOME}/.ssh/id_rsa.pub ]; then /bin/cat ${HOME}/.ssh/id_rsa.pub \ | /usr/bin/tee -a /etc/xen-tools/skel/root/.ssh/authorized_keys fi
Configuration des sauvegardes
Le rôle automatic installe l'outil de sauvegarde Backup Manager. La plupart des guides présents sur ce site seront mis à jour avec les informations nécessaires pour gérer les sauvegardes des données avec cet outil. Nous allons ici configurer la sauvegarde des données de nos machines virtuelles avec cet outil.
En premier lieu, nous ajoutons le script update-bm-folders présenté dans mon guide Installer et configurer Backup Manager sur Debian 4.0 Etch au squelette des machines virtuelles:
/usr/bin/wget http://howto.landure.fr/gnu-linux/debian-4-0-etch/installer-et-configurer-backup-manager-sur-debian-4-0-etch/update-bm-folders \ --output-document=/etc/xen-tools/skel/usr/bin/update-bm-folders /bin/chmod +x /etc/xen-tools/skel/usr/bin/update-bm-folders
Nous téléchargeons la configuration par défaut du Backup Manager pour les machines virtuelles:
/usr/bin/wget http://howto.landure.fr/gnu-linux/debian-4-0-etch/installer-et-configurer-xen-sur-debian-4-0-etch/backup-manager.conf \ --output-document=/etc/xen-tools/skel/etc/backup-manager.conf /bin/sed -i -e "s|[#]*\(.*BM_UPLOAD_SSH_HOSTS=\).*$|\1\"${MAINDOM_IP}\"|" \ /etc/xen-tools/skel/etc/backup-manager.conf
Et enfin, nous ajoutons la clef privée d'identification du compte xen-backup de la machine hôte à notre squelette:
/bin/cp /etc/xen-tools/ssh-keys/xen-backup-rsa /etc/xen-tools/skel/etc/xen-data/
Création d'une machine virtuelle Xen
Installation du système de base
Nous allons maintenant créer notre première machine virtuelle Xen. En premier lieu, nous configurons son nom d'hôte:
XEN_HOSTNAME=xen-vm1
Renseignez la configuration réseau de votre machine virtuelle:
IP_ADDRESS=10.0.0.3
Puis créez la machine virtuelle en utilisant ces paramètres à l'aide des commandes ci-dessous.
Important: Ne perdez pas le mot de passe que vous saisissez dans ces commandes, il s'agit du mot de passe de vos machines virtuelles.
- Pour la distribution par défaut (Debian 4.0 Etch ou 5.0 Lenny):
/usr/bin/xen-create-image --hostname $XEN_HOSTNAME \ --ip $IP_ADDRESS --passwd --role automatic
Remarque: Pour créer une machine virtuelle obtenant son adresse IP par DHCP (ce qui peut être intéressant si vous utilisez le mode bridge pour le réseau des domU, vous pouvez utiliser la commande:
/usr/bin/xen-create-image --hostname $XEN_HOSTNAME \ --dhcp --passwd --role automatic
- Pour Ubuntu 8.04 Hardy Heron:
/usr/bin/xen-create-image --hostname $XEN_HOSTNAME \ --ip $IP_ADDRESS --passwd --role automatic \ --dist=hardy --mirror=http://archive.ubuntu.com/ubuntu/
Remarque: Pour créer une machine virtuelle obtenant son adresse IP par DHCP (ce qui peut être intéressant si vous utilisez le mode bridge pour le réseau des domU, vous pouvez utiliser la commande:
/usr/bin/xen-create-image --hostname $XEN_HOSTNAME \ --dhcp --passwd --role automatic \ --dist=hardy --mirror=http://archive.ubuntu.com/ubuntu/
Remarque : Les DomU sous Ubuntu posent parfois des problèmes de configuration des locales. Il y a deux actions a effectuer pour résoudre les problème. Générer vos locales:
locale-gen fr_FR.UTF-8
et modifier le fichier /etc/environment pour qu'il contienne "LANG=fr_FR.UTF-8". Une fois ces deux actions effectuées, redémarrez le domU pour les prendre en compte (il y a sans doute une autre méthode, mais celle la est la plus simple :)
Création d'une partition pour le /var
Une fois ceci fait, nous y ajoutons une partition /var de 10 Giga octets. Commencez par renseignez la taille souhaitée pour la partition :
VAR_SIZE=10g
Créez ensuite le volume logique de la partition et modifiez le domU pour l'utiliser :
LVM_VG=$(/bin/grep lvm /etc/xen-tools/xen-tools.conf | /bin/sed -e 's/lvm = //') /sbin/lvcreate -n $XEN_HOSTNAME-var -L ${VAR_SIZE} $LVM_VG /sbin/mkfs.ext3 /dev/$LVM_VG/$XEN_HOSTNAME-var command umount "/dev/$LVM_VG/${XEN_HOSTNAME}-disk" MOUNT_POINT=$(command mktemp -d) command mount "/dev/${LVM_VG}/${XEN_HOSTNAME}-disk" "${MOUNT_POINT}" DISK_TYPE="sda" if [ -n "$(command grep -e "xvda" "${MOUNT_POINT}/etc/fstab")" ]; then DISK_TYPE="xvda" fi command echo "/dev/${DISK_TYPE}3 /var ext3 defaults 0 1" >> "${MOUNT_POINT}/etc/fstab" VAR_MOUNT_POINT=$(/bin/mktemp -d) command mount "/dev/${LVM_VG}/${XEN_HOSTNAME}-var" "${VAR_MOUNT_POINT}" command cp -a "${MOUNT_POINT}/var/"* "${VAR_MOUNT_POINT}" command umount "${VAR_MOUNT_POINT}" command umount "${MOUNT_POINT}" if [ $(command grep "disk[\t ]*=.*\]" "/etc/xen/${XEN_HOSTNAME}.cfg" | command wc --lines) -eq 0 ]; then command sed -i -e "/^disk[\t ]*=.*/a\\ 'phy:${LVM_VG}\/${XEN_HOSTNAME}-var,${DISK_TYPE}3,w'," \ "/etc/xen/${XEN_HOSTNAME}.cfg" else command sed -i -e "s/^\(disk[\t ]*=.*\)\]/\1, 'phy:${LVM_VG}\/${XEN_HOSTNAME}-var,sda3,w' ]/" "/etc/xen/${XEN_HOSTNAME}.cfg" fi
Démarrage de la machine virtuelle (domU)
Nous pouvons maintenant démarrer notre nouveau serveur virtuel (aka. domaine):
/usr/sbin/xm create /etc/xen/$XEN_HOSTNAME.cfg
Vous pouvez obtenir la liste des domaines démarré à l'aide de la commande:
/usr/sbin/xm list
Nous allons utiliser SSH pour nous connecter à notre nouvelle machine virtuelle:
/usr/bin/ssh root@$XEN_HOSTNAME
Remarque: Si vous avez créé une clef d'identification pour votre compte root, vous devez saisir le mot de passe de cette clef, et non celui du compte root du DomU Xen.
Accès "matériel" à la machine virtuelle
En cas de problème pour vous connectez en SSH à votre machine virtuelle, vous pouvez accéder à la console de votre domaine récemment créé:
/usr/sbin/xm console $XEN_HOSTNAME
Attention: La console Xen se comporte comme une console série réelle. Cela pose problème avec vim.
Pour quitter cette console, utilisez le raccourci clavier: <Ctrl> <Alt Gr> <]>.
Ouverture des ports des machines virutelles en mode NAT
Si vous souhaitez que vos machines virtuelles hébergent des serveurs (sinon, pourquoi créer des machines virtuelles XD), il est nécessaire d'ouvrir les ports à l'aide d'IP tables. En effet, configurer Xen en mode NAT revient à créer un pare-feu naturel. Il faut donc configurer le routage des ports en NAT à l'aide d'IP tables. Si vous avez déjà créé votre propre passerelle Internet, vous savez probablement de quoi je parle.
En premier lieu, si vous ne l'avez pas déjà fait, nous allons créer le fichier destiné à contenir les règles Iptables. Ces règles seront appliquées après le démarrage des interfaces réseaux:
if [ ! -e /etc/network/if-up.d/iptables ]; then echo '#!/bin/sh # IpTables rules. # Purging prerouting rules before reloading them iptables -t nat -F PREROUTING' | /usr/bin/tee /etc/network/if-up.d/iptables fi /bin/chmod +x /etc/network/if-up.d/iptables
Nous autorisons le NAT sur le système :
sed -i -e 's/[# ]*\(net\.ipv4\.conf\.default\.forwarding=\).*/\11/g' \ -e 's/[# ]*\(net\.ipv4\.ip_forward=\).*/\11/g' \ /etc/sysctl.conf echo 1 > /proc/sys/net/ipv4/ip_forward
Ouverture d'un port
En premier lieu, renseignez les paramètres du port que vous souhaitez ouvrir. C'est à dire, l'adresse IP de la machine virtuelle dont vous souhaitez ouvrir le port :
VM_IP=10.0.0.1
et le numéro du port à ouvrir :
VM_PORT=80
Vous pouvez maintenant ouvrir effectivement le port :
iptables -A PREROUTING -t nat -p tcp -i eth0 --dport $(echo ${VM_PORT} | command sed -e 's/-/:/') -j DNAT --to ${VM_IP}:${VM_PORT}
Et nous faisons en sorte qu'elle s'execute au démarrage du système :
echo " # Opening port ${VM_PORT} for IP address ${VM_IP} : iptables -A PREROUTING -t nat -p tcp -i eth0 --dport $(echo ${VM_PORT} | command sed -e 's/-/:/') -j DNAT --to ${VM_IP}:${VM_PORT}" \ | /usr/bin/tee -a /etc/network/if-up.d/iptables
Votre configuration iptables sera rechargée à chaque redémarrage par la suite.
A la fin de cette procédure, vous devrier pouvoir accéder au serveur hébergé par la machine virtuelle en saisissant pour adresse l'IP du serveur matériel.
Démarrage automatique des machines virtuelles
Si vous souhaitez que certaines de vos machines virtuelles démarrent automatiquement avec votre système (souhaitable si ce guide vous sert à mettre en oeuvre un serveur), il vous faut en premier lieu créer un dossier nommé auto:
/bin/mkdir --parent /etc/xen/auto
Une fois ceci-fait, placez les fichiers de configuration des machines virtuelles que vous souhaitez voir démarrées automatiquement dans ce dossier. Par exemple, pour la machine virtuelle "apache2", exécutez la commande:
/bin/mv /etc/xen/httpd.cfg /etc/xen/auto/
Quelques lignes de commandes
Dans certains cas il peut être utile d'appliquer une commande à tous les domU créés. Pour ce faire, vous pouvez utiliser cette ligne de commande (ici pour la commande destroy) :
xm list | tail -n +3 | cut -d " " -f 1 | xargs -I DOMU xm destroy DOMU
De même, si vous souhaitez lancez tous les domU devant être lancés automatiquement :
find /etc/xen/auto -name "*.cfg" -print0 | xargs -0 -I DOMU_CFG xm create DOMU_CFG
Ou encore copier un fichier sur tous les DomU existants :
xm list | tail -n +3 | cut -d " " -f 1 | xargs -I DOMU scp -pr sudoers DOMU:/etc/sudoers
Remerciements
- Merci à Michele Petrazzo pour son article Debian Etch And Xen From The Debian Repository.
- Merci à TMS pour son article Sécuriser l’accès au serveur openssh avec une authentification par clés sur Génération Libre.
- Merci aux développeurs du logiciel de sauvegarde Backup Manager.
- Merci à Nyarla sur irc.freenode.net#ubuntu-fr pour avoir répondu à mes questions sur Backup Manager.
- Merci à l'auteur du guide Backup Manager sur la documentation Ubuntu francophone.
- Merci à Falko pour son guide The Perfect Xen 3.1.0 Setup For Debian Etch.
- Merci à l'auteur de la page Xen Networking sur le wiki dedié à Xen.
- Merci à GaB pour son article Manage SSH known_hosts entries.
- Merci à IBM pour l'article Configuring Xen for performance.
Super article et question
Je voulais savoir si vous aviez tenté de mettre la Dom0 avec une interface graphique type Gnome pour pouvoir utiliser Virt-manager. Car après test avec le noyau Xen, je serveur Dom0 est extrèmement lent voir inutilisable. Je pensais utiliser de la sorte avouant avoir beaucoup de mal a voir le fonctionnement avec VNC.
interface gra.. heu, non, je ne connais pas ce mot la :)
personnellement, j'utilise la ligne de commande pour administrer mes vm... :)... gui ? pourquoi faire ? :)
bon courage dans votre quête toutefois.
Et avec Grub2
Pourrait il y avoir une mise à jour de cet excellent tuto?
Merci :)
Bravo
Quelques difficultés pour la config IP (message d'erreur au lancement de la machine virtuelle)
Permet une première approche de cette techno sans passer des heures sur la doc.