4 231
modifications
m (a déplacé L'hyperviseur Xen sous Debian Squeeze vers L'hyperviseur Xen sous Debian Wheezy) |
|||
(30 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 | $ 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 | deb http://ftp.fr.debian.org/debian wheezy main contrib non-free | ||
deb-src http://ftp.fr.debian.org/debian | deb-src http://ftp.fr.debian.org/debian wheezy main contrib non-free | ||
#Sec | #Sec | ||
deb http://security.debian.org/ | deb http://security.debian.org/ wheezy/updates main contrib non-free | ||
deb-src http://security.debian.org/ | 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 | deb http://ftp.fr.debian.org/debian wheezy-updates main contrib non-free | ||
deb-src http://ftp.fr.debian.org/debian | 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 | <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 | 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> | ||
Editez le fichier <code>/etc/network/interfaces</code> de cette façon : | |||
<pre> | <pre> | ||
auto lo | |||
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> | ||
Il faudra ensuite rebooter | |||
<pre>reboot</pre> | |||
<pre> | |||
</pre> | |||
==NAT== | ==NAT== | ||
Ligne 371 : | Ligne 402 : | ||
=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 | 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 | * 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 388 : | 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 405 : | 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 426 : | 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 | cp --preserve=mode,ownership /etc/timezone /etc/xen-tools/skel/etc/ | ||
cp | cp --preserve=mode,ownership /etc/localtime /etc/xen-tools/skel/etc/ | ||
mkdir /etc/xen-tools/skel/etc/skel | mkdir /etc/xen-tools/skel/etc/skel | ||
chmod 655 /etc/xen-tools/skel/etc/ | chmod 655 /etc/xen-tools/skel/etc/skel | ||
cp --preserve=mode,ownership /etc/skel/.* /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 437 : | 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 532 : | Ligne 565 : | ||
# | # | ||
# | # | ||
installDebianPackage ${prefix} locales #already installed in debian- | installDebianPackage ${prefix} locales #already installed in debian-wheezy domU | ||
installDebianPackage ${prefix} ntp | installDebianPackage ${prefix} ntp | ||
installDebianPackage ${prefix} console-data | installDebianPackage ${prefix} console-data | ||
Ligne 597 : | Ligne 630 : | ||
# | # | ||
gw=`cat /etc/xen-tools/xen-tools.conf | grep gateway` | gw=`cat /etc/xen-tools/xen-tools.conf | grep "gateway ="` | ||
if [ ! ${gw:0:1} = "#" ]; then | if [ ! ${gw:0:1} = "#" ]; then | ||
gateway=`echo $gw | cut -f 2 -d "="` | gateway=`echo $gw | cut -f 2 -d "="` | ||
Ligne 603 : | Ligne 636 : | ||
echo up route add default gw $gateway >> ${prefix}/etc/network/interfaces | echo up route add default gw $gateway >> ${prefix}/etc/network/interfaces | ||
fi | fi | ||
sed -i -e 's/gateway/#gateway/g' ${prefix}/etc/network/interfaces | |||
# | # | ||
Ligne 610 : | Ligne 644 : | ||
# | # | ||
# | # | ||
for ip in `ifconfig | grep "inet addr" | cut -d ":" -f 2 | cut -d " " -f 1`; do | for ip in `ifconfig | grep "inet addr" | cut -d ":" -f 2 | cut -d " " -f 1`; do | ||
if [ ! $ip = "127.0.0.1" ]; then | if [ ! $ip = "127.0.0.1" ]; then | ||
Ligne 652 : | Ligne 652 : | ||
echo $ip >> ${prefix}/etc/sshguard_whitelist | echo $ip >> ${prefix}/etc/sshguard_whitelist | ||
done | done | ||
cp /etc/default/sshguard ${prefix}/etc/default/ | |||
# | # | ||
# Log our finish | # Log our finish | ||
Ligne 662 : | 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 680 : | 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 | 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 731 : | 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 | auto br1 | ||
iface | iface br1 inet static | ||
address | address 192.168.10.1 | ||
broadcast | 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 | <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= | /etc/xen/scripts/network-bridge "$@" netdev=br0 | ||
/etc/xen/scripts/network-bridge "$@" netdev= | /etc/xen/scripts/network-bridge "$@" netdev=br1 | ||
</pre> | </pre> | ||
Ligne 756 : | 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 | * créer le bridge br0 pour notre interface interne | ||
Il faut ensuite relancer xend : | Il faut ensuite relancer xend : | ||
Ligne 767 : | 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= | 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 bridgé sur l'interface br0 du dom0 (le réseau public) | ||
* eth1 bridge sur l'interface | * 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 778 : | Ligne 779 : | ||
auto eth1 | auto eth1 | ||
iface eth1 inet static | iface eth1 inet static | ||
address | 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 866 : | 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> |