« L'hyperviseur Xen sous Debian Wheezy » : différence entre les versions

Aller à la navigation Aller à la recherche
m
 
(35 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
[[Category:serveur]]
[[Category:debian]]
[[Category:virtualisation]]
=Prérequis=
=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.
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.
Ligne 159 : Ligne 162 :
<pre>
<pre>
$ mount /dev/sda1 /mnt
$ mount /dev/sda1 /mnt
$ debootstrap --arch=amd64 squeeze /mnt
$ debootstrap --arch=amd64 wheezy /mnt
...
...
I: Base system installed successfully
I: Base system installed successfully
Ligne 176 : Ligne 179 :
Editez le fichier <code>/etc/apt/sources.list</code> :
Editez le fichier <code>/etc/apt/sources.list</code> :
<pre>
<pre>
deb http://ftp.fr.debian.org/debian squeeze main contrib non-free
deb http://ftp.fr.debian.org/debian wheezy main contrib non-free
deb-src http://ftp.fr.debian.org/debian squeeze main contrib non-free
deb-src http://ftp.fr.debian.org/debian wheezy main contrib non-free


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


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


Ligne 278 : Ligne 281 :


=Installation de Xen=
=Installation de Xen=
<pre>aptitude install xen-hypervisor-amd64 linux-image-2.6-xen-amd64 linux-headers-2.6-xen-amd64 xen-utils-4.0 \  
<pre>aptitude install xen-hypervisor-amd64 xen-linux-system-amd64 xen-utils \  
xen-tools bridge-utils xfsprogs</pre>
xen-tools bridge-utils xfsprogs</pre>


Ligne 309 : Ligne 312 :
Vérifier la présence du fichier <code>/etc/xen/scripts/hotplugpath.sh</code>. S'il n'existe pas, créez le :
Vérifier la présence du fichier <code>/etc/xen/scripts/hotplugpath.sh</code>. S'il n'existe pas, créez le :
<pre>touch /etc/xen/scripts/hotplugpath.sh</pre>
<pre>touch /etc/xen/scripts/hotplugpath.sh</pre>
==désactiver le balooning==
Par défaut, l'installation debian de xen alloue de manière dynamique la mémoire allouée à l'hyperviseur (au dom0). Sur un host de virtualisation xen, il est cependant préférable d'allouer de manière fixe de la mémoire au dom0.
Modifier la ligne <code>GRUB_CMDLINE_XEN</code> dans <code>/etc/default/grub</code> :
<pre>
GRUB_CMDLINE_XEN="dom0_mem=512M"
GRUB_CMDLINE_XEN_DEFAULT="dom0_mem=512M"
</pre>
Puis mettez à jour la configuration de grub :
<pre>update-grub</pre>
Modifiez ensuite les lignes suivantes dans <code>/etc/xen/xend-config.sxp</code> :
<pre>
(dom0-min-mem 512)
(enable-dom0-ballooning no)
</pre>
Il faut bien évidemment rebooter pour appliquer ces paramètres.
==Forcer l'arrêt des VMs (shutdown) lors du reboot de xen==
Par défaut, si l'hyperviseur reboot, Xen sauvegarde l'état des VMs plutôt que de les shutdown proprement. Si vous voulez vous affranchir de ce comportement, modifiez <code>/etc/default/xendomains</code> :
<pre>
XENDOMAINS_RESTORE=false
XENDOMAINS_SAVE=""
</pre>


=Configuration réseau=
=Configuration réseau=
Ligne 315 : Ligne 345 :
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.
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 :
Vérifier la présence de la ligne suivante dans /etc/xen/xend-config.sxp :
<pre>
<pre>
(vif-script vif-bridge)
(vif-script vif-bridge)
(network-script network-bridge)
(network-script 'network-bridge bridge=br0')
</pre>
</pre>


Par défaut, xen utilisera l'interface eth0. Si vous souhaitez utiliser une autre interface réseau (eth1 par exemple) utilisez :
Editez le fichier <code>/etc/network/interfaces</code> de cette façon :
<pre>
<pre>
(vif-script vif-bridge)
auto lo
(network-script 'network-bridge netdev=eth1')
iface lo inet loopback
 
auto br0
iface br0 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
        bridge_ports eth0
</pre>
</pre>


Par défaut depuis Xen 3.3, le bridge sera nommé eth0 et non plus xenbr0 (en fait, l'interface réseau physique devient peth0 tandis que eth0 devient un bridge). Vous pouvez vérifier cela avec <code>brctl show</code>
Il faudra ensuite rebooter
 
<pre>reboot</pre>
après vos modifications, redémarrez le démon xend :
<pre>/etc/init.d/xend restart</pre>
 
Note: il semble que OVH refuse le mode bridge, il faut donc passer par le mode route :
<pre>
(network-script 'network-route netdev=eth0')
(vif-script    vif-route)
</pre>


==NAT==
==NAT==
Ligne 364 : Ligne 395 :


=Configuration d'un serveur smtp pour le dom0=
=Configuration d'un serveur smtp pour le dom0=
=Protection SSH du dom0=
http://wiki.csnu.org/index.php?title=Prot%C3%A9ger_SSH_avec_sshguard


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


Par défaut sous debian squeeze, le fichier <code>/etc/xen-tools/xen-tools.conf</code> est adapté à la création de VMs debian squeeze.
Par défaut sous debian wheezy, le fichier <code>/etc/xen-tools/xen-tools.conf</code> est adapté à la création de VMs debian wheezy.


Notre configuration permettra :
Notre configuration permettra :
* de créer les partitions des VMs sur le LVM
* de créer les partitions des VMs sur le LVM
* d'utiliser debootstrap pour créer des VMs vierges sous debian squeeze
* d'utiliser debootstrap pour créer des VMs vierges sous debian wheezy
* de configurer automatiquement l'ip sur la VM
* de configurer automatiquement l'ip sur la VM


Ligne 384 : Ligne 419 :
netmask    = 255.255.255.0
netmask    = 255.255.255.0
broadcast  = IP-du.dom0.255
broadcast  = IP-du.dom0.255
bridge = br0
</pre>
</pre>


Ligne 401 : Ligne 437 :
*<code>swap</code> : défini la taille du swap par défaut pour les VMs
*<code>swap</code> : défini la taille du swap par défaut pour les VMs
*<code>fs</code> : défini le système de fichier à utiliser pour les VMs. Généralement ext3 ou ext4.
*<code>fs</code> : défini le système de fichier à utiliser pour les VMs. Généralement ext3 ou ext4.
*<code>image</code> : défini s'il faut utiliser des images complètes (<code>full</code>) ou a taille variable (<code>sparse</code>) pour les VMs.
*<code>image</code> : défini s'il faut utiliser des images complètes (<code>full</code>) ou a taille variable (<code>sparse</code>) pour les VMs. <code>full</code> donnera les meilleurs performances disque.
*<code>install-method</code> : défini la méthode d'installation par défaut pour les VMs. Les choix possibles sont :
*<code>install-method</code> : défini la méthode d'installation par défaut pour les VMs. Les choix possibles sont :
**<code>debootstrap</code>
**<code>debootstrap</code>
Ligne 422 : Ligne 458 :
mkdir /etc/xen-tools/skel/etc/
mkdir /etc/xen-tools/skel/etc/
chmod 655 /etc/xen-tools/skel/etc/
chmod 655 /etc/xen-tools/skel/etc/
cp /etc/timezone /etc/xen-tools/skel/etc/
cp --preserve=mode,ownership /etc/timezone /etc/xen-tools/skel/etc/
cp /etc/localtime /etc/xen-tools/skel/etc/
cp --preserve=mode,ownership /etc/localtime /etc/xen-tools/skel/etc/
chmod 644 /etc/xen-tools/skel/etc/*
 
mkdir /etc/xen-tools/skel/etc/skel
chmod 655 /etc/xen-tools/skel/etc/skel
cp --preserve=mode,ownership /etc/skel/.* /etc/xen-tools/skel/etc/skel/


mkdir -p /etc/xen-tools/skel/root/.ssh
mkdir -p /etc/xen-tools/skel/root/.ssh
Ligne 430 : Ligne 469 :
cp /root/.ssh/authorized_keys* /etc/xen-tools/skel/root/.ssh/
cp /root/.ssh/authorized_keys* /etc/xen-tools/skel/root/.ssh/
chmod 600 /etc/xen-tools/skel/root/.ssh/authorized_keys*
chmod 600 /etc/xen-tools/skel/root/.ssh/authorized_keys*
cp --preserve=mode,ownership /root/.bashrc /etc/xen-tools/skel/root/
</pre>
</pre>


Ligne 481 : Ligne 521 :


Nous allons créer un rôle réalisant les actions suivantes :
Nous allons créer un rôle réalisant les actions suivantes :
* installation des paquets <code>locales</code>, <code>ntp</code>, <code>console-data</code> et <code>dnsutils</code>
* installation des paquets <code>locales</code>, <code>ntp</code>, <code>console-data</code>, <code>dnsutils</code> et <code>sshguard</code>
* configuration des même locales que le dom0
* configuration des même locales que le dom0
* désactiver le login root par password en ssh
* désactiver le login root par password en ssh
Ligne 487 : Ligne 527 :
* permettre le login root par clé ssh uniquement à partir du dom0
* permettre le login root par clé ssh uniquement à partir du dom0
* ajout des routes dans le cas d'une installation en mode bridge
* ajout des routes dans le cas d'une installation en mode bridge
* configuration de sshguard pour qu'il se lance au boot


voici le script à ajouter dans <code>/etc/xen-tools/role.d/main</code> :
voici le script à ajouter dans <code>/etc/xen-tools/role.d/main</code> :
<pre>
<pre>
#!/bin/sh
#!/bin/bash
#
#
#  This role :  
#  This role :  
Ligne 498 : Ligne 539 :
# - allow only root login for ssh
# - allow only root login for ssh
# - add networks routes
# - add networks routes
# - configure sshguard
#
#


Ligne 523 : Ligne 565 :
#
#
#
#
#installDebianPackage ${prefix} locales #already installed in debian-squeeze domU
installDebianPackage ${prefix} locales #already installed in debian-wheezy domU
installDebianPackage ${prefix} ntp
installDebianPackage ${prefix} ntp
installDebianPackage ${prefix} console-data
installDebianPackage ${prefix} console-data
installDebianPackage ${prefix} console-common
installDebianPackage ${prefix} console-common
installDebianPackage ${prefix} dnsutils
installDebianPackage ${prefix} dnsutils
installDebianPackage ${prefix} sshguard
installDebianPackage ${prefix} psmisc


#
#
Ligne 567 : Ligne 611 :
trusted=`echo $dom0 | sed 's/^,*//;s/,*$//'`
trusted=`echo $dom0 | sed 's/^,*//;s/,*$//'`


dom0=`cat /etc/hostname`
if [ -f /etc/xen-tools/ssh-keys/domU-backup-rsa.pub ]; then
if [ -f /etc/xen-tools/ssh-keys/domU-backup-rsa.pub ]; then
         echo from=\"$trusted\" `cat /etc/xen-tools/ssh-keys/domU-backup-rsa.pub` >> ${prefix}/root/.ssh/authorized_keys
         echo from=\"$trusted\" `cat /etc/xen-tools/ssh-keys/domU-backup-rsa.pub` >> ${prefix}/root/.ssh/authorized_keys
Ligne 587 : Ligne 630 :
#
#


gw=`cat /etc/xen-tools/xen-tools.conf | grep gateway | cut -f 2 -d "="`
gw=`cat /etc/xen-tools/xen-tools.conf | grep "gateway ="`
echo up route add -host $gw dev eth0 >> ${prefix}/etc/network/interfaces
if [ ! ${gw:0:1} = "#" ]; then
echo up route add default gw $gw >> ${prefix}/etc/network/interfaces
        gateway=`echo $gw | cut -f 2 -d "="`
        echo up route add -host $gateway dev eth0 >> ${prefix}/etc/network/interfaces
        echo up route add default gw $gateway >> ${prefix}/etc/network/interfaces
fi
sed -i -e 's/gateway/#gateway/g' ${prefix}/etc/network/interfaces
 
#
# sshguard
#
LogMessage Script $0 Configuring sshguard
#
#
for ip in `ifconfig | grep "inet addr" | cut -d ":" -f 2 | cut -d " " -f 1`; do
        if [ ! $ip = "127.0.0.1" ]; then
                echo $ip >> ${prefix}/etc/sshguard_whitelist
        fi
done
for ip in `ifconfig | grep -E "inet6 addr.*Global" | sed 's/^[ \t]*//;s/[ \t]*$//' | cut -d " " -f 3 | cut -d "/" -f 1`; do
        echo $ip >> ${prefix}/etc/sshguard_whitelist
done
cp /etc/default/sshguard ${prefix}/etc/default/


#
#
Ligne 599 : Ligne 662 :


N'oubliez pas de rendre ce fichier exécutable :
N'oubliez pas de rendre ce fichier exécutable :
<pre>chmod +x /etc/xen-tools/main</pre>
<pre>chmod +x /etc/xen-tools/role.d/main</pre>


=Création de votre première VM=
=Création de votre première VM=
Ligne 617 : Ligne 680 :
Voici un autre exemple plus complet détaillant la création d'une VM ubuntu
Voici un autre exemple plus complet détaillant la création d'une VM ubuntu
<pre>
<pre>
xen-create-image --debootstrap --dir=/home/xen --size=10Gb --memory=512Mb --fs=ext3 \  
xen-create-image --size=10Gb --memory=512Mb --fs=ext3 \  
--dist=natty --hostname=vm1.domain.tld --ip=<IP> --netmask=255.255.255.0 --swap=1024Mb \
--dist=natty --hostname=vm1.domain.tld --ip=<IP> --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 --role main
--arch=amd64 --kernel=/boot/vmlinuz-2.6.32.5-xen-amd64 --mirror=http://archive.ubuntu.com/ubuntu/ --passwd --role main
Ligne 668 : Ligne 731 :
Commencez par éditer le fichier <code>/etc/network/interfaces</code>
Commencez par éditer le fichier <code>/etc/network/interfaces</code>
<pre>
<pre>
auto dummy0
auto br1
iface dummy0 inet static
iface br1 inet static
         address 172.16.16.1
         address 192.168.10.1
         broadcast 172.16.16.255
         broadcast 192.168.10.255
         netmask 255.255.255.0
         netmask 255.255.255.0
        bridge_ports none
</pre>
</pre>


Puis activez l'interface :
Puis activez l'interface :
<pre>ifup dummy0</pre>
<pre>ifup br1</pre>


Créez ensuite le fichier <code>/etc/xen/scripts/my-network-bridge</code> contenant :
Créez ensuite le fichier <code>/etc/xen/scripts/my-network-bridge</code> contenant :
<pre>
<pre>
#!/bin/sh
#!/bin/sh
/etc/xen/scripts/network-bridge "$@" netdev=eth0
/etc/xen/scripts/network-bridge "$@" netdev=br0
/etc/xen/scripts/network-bridge "$@" netdev=dummy0
/etc/xen/scripts/network-bridge "$@" netdev=br1
</pre>
</pre>


Ligne 693 : Ligne 757 :
Ce script aura comme conséquence :
Ce script aura comme conséquence :
* créer le bridge classique de xen (celui qui était lancé par <code>(network-script network-bridge)</code>
* créer le bridge classique de xen (celui qui était lancé par <code>(network-script network-bridge)</code>
* créer le bridge dummy0 pour notre interface interne
* créer le bridge br0 pour notre interface interne


Il faut ensuite relancer xend :
Il faut ensuite relancer xend :
Ligne 704 : Ligne 768 :
Par exemple pour la vm <code>vm1.domain.tld</code> éditez le fichier <code>/etc/xen/vm1.domain.tld.cfg</code>. Modifiez la ligne <code>vif</code> de cette manière :
Par exemple pour la vm <code>vm1.domain.tld</code> éditez le fichier <code>/etc/xen/vm1.domain.tld.cfg</code>. Modifiez la ligne <code>vif</code> de cette manière :
<pre>
<pre>
vif  = [ 'ip=192.168.0.1,bridge=eth0,mac=00:16:3E:A3:F1:5A','ip=172.16.16.2,bridge=dummy0,mac=00:16:3E:A3:F1:07' ]
vif  = [ 'ip=192.168.0.1,bridge=br0,mac=00:16:3E:A3:F1:5A','ip=172.16.16.2,bridge=br1,mac=00:16:3E:A3:F1:07' ]
</pre>
</pre>


Après redémarrage, la VM aura désormais deux interfaces réseaux :
Après redémarrage, la VM aura désormais deux interfaces réseaux :
* eth0 bridgé sur l'interface eth0 du dom0 (le réseau public)
* eth0 bridgé sur l'interface br0 du dom0 (le réseau public)
* eth1 bridge sur l'interface dummy0 du dom0 (le réseau interne)
* eth1 bridge sur l'interface br1 du dom0 (le réseau interne)


Si votre VM est sous debian, il faudra ajouter la configuration de eth1 dans <code>/etc/network/interfaces</code> (sur la vm!) :
Si votre VM est sous debian, il faudra ajouter la configuration de eth1 dans <code>/etc/network/interfaces</code> (sur la vm!) :
Ligne 715 : Ligne 779 :
auto eth1
auto eth1
iface eth1 inet static
iface eth1 inet static
  address 172.16.16.2
  address 192.168.10.2
  netmask 255.255.255.0
  netmask 255.255.255.0
</pre>
</pre>


Voila, vous n'avez plus qu'à tester le débit de votre réseau interne avec <code>iperf</code>.
Voila, vous n'avez plus qu'à tester le débit de votre réseau interne avec <code>iperf</code>.
Lors de la création des VMs avec <code>xen-create-image</code> il sera pratique de préciser l'option <code>--bridge=brname</code> afin de configurer la première interface de la VM.


source: http://wiki.xen.org/xenwiki/XenNetworkingExamples
source: http://wiki.xen.org/xenwiki/XenNetworkingExamples
Ligne 803 : Ligne 869 :
Vous pouvez ensuite redémarrer ou recharger le module loop :
Vous pouvez ensuite redémarrer ou recharger le module loop :
<pre> rmmod loop && modprobe loop</pre>
<pre> rmmod loop && modprobe loop</pre>
==Impossible de résoudre les DNS en utilisateur dans un domU==
Vérifiez les droits sur <code>/etc/resolv.conf</code> :
<pre>chmod o+r /etc/resolv.conf</pre>
4 203

modifications

Menu de navigation