4 242
modifications
m (a déplacé L'hyperviseur Xen sous Debian Squeeze vers L'hyperviseur Xen sous Debian Wheezy) |
|||
(90 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> | |||
Vous pouvez accessoirement installer <code>molly-guard</code> pour éviter de rebooter involontairement votre dom0 : | |||
<pre>aptitude install molly-guard</pre> | |||
Désactivez les autres kernels ainsi que la recherche d'OS de grub : | Désactivez les autres kernels ainsi que la recherche d'OS de grub : | ||
Ligne 305 : | 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 311 : | 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 349 : | Ligne 384 : | ||
=Configuration d'un serveur dns bind9 pour le dom0= | =Configuration d'un serveur dns bind9 pour le dom0= | ||
http://wiki.csnu.org/index.php?title=Installation_et_configuration_de_bind9 | |||
Si vous souhaitez utiliser le dom0 pour résoudre les dns de vos domU, ajoutez les ips de vos domU aux directives suivantes de <code>/etc/bind/named.conf.options</code> : | |||
* <code>allow-query</code> | |||
* <code>allow-recursion</code> | |||
* <code>allow-query-cache</code> | |||
Vos VMs devront avoir l'ip du dom0 dans leur fichier <code>/etc/resolv.conf</code> | |||
=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 | 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 : | |||
* de créer les partitions des VMs sur le LVM | |||
* d'utiliser debootstrap pour créer des VMs vierges sous debian wheezy | |||
* de configurer automatiquement l'ip sur la VM | |||
Si vous utilisez un LVM comme présenté ici, ajoutez la ligne suivante dans /etc/xen-tools/xen-tools.conf : | Si vous utilisez un LVM comme présenté ici, ajoutez la ligne suivante dans /etc/xen-tools/xen-tools.conf : | ||
<pre>lvm = main</pre> | <pre>lvm = main</pre> | ||
main étant le nom du groupe de votre lvm. | main étant le nom du groupe de votre lvm (disponible avec la commande <code>vgdisplay</code>. | ||
Configurez les informations réseaux de vos futurs VMs. | Configurez les informations réseaux de vos futurs VMs. | ||
Ligne 366 : | 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 374 : | Ligne 428 : | ||
broadcast = 192.168.0.255 | broadcast = 192.168.0.255 | ||
</pre> | </pre> | ||
Ou évidement, un autre range local défini dans la RFC1918. | |||
Voici les options de configuration intéressante de xen-tools : | Voici les options de configuration intéressante de xen-tools : | ||
Ligne 381 : | 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 391 : | Ligne 447 : | ||
*<code>arch</code> : l'architecture à utiliser lors de la création des VMs (amd64 ou i386) | *<code>arch</code> : l'architecture à utiliser lors de la création des VMs (amd64 ou i386) | ||
*<code>mirror</code> : le miroir à utiliser pour debootstrap (par défaut, utilisation de celui configuré dans /etc/apt/sources.list) | *<code>mirror</code> : le miroir à utiliser pour debootstrap (par défaut, utilisation de celui configuré dans /etc/apt/sources.list) | ||
*<code>nameserver</code> : les serveurs de nom a configurer sur la VM. Vous pouvez en ajouter plusieurs en les séparant par un espace. Si la directive n'est pas spécifié, Xen réutilisera les serveurs du dom0. | |||
==Configuration des squelettes de VMs== | ==Configuration des squelettes de VMs== | ||
Ligne 397 : | Ligne 454 : | ||
Cela permet par exemple d'appliquer automatiquement des configurations à vos VMs. | Cela permet par exemple d'appliquer automatiquement des configurations à vos VMs. | ||
Nous prendrons l'exemple du timezone : | Nous prendrons l'exemple du timezone et de la clé ssh root : | ||
<pre> | <pre> | ||
mkdir /etc/xen-tools/skel/etc/ | mkdir /etc/xen-tools/skel/etc/ | ||
cp /etc/timezone /etc/xen-tools/skel/etc/ | chmod 655 /etc/xen-tools/skel/etc/ | ||
cp /etc/localtime /etc/xen-tools/skel/etc/ | cp --preserve=mode,ownership /etc/timezone /etc/xen-tools/skel/etc/ | ||
cp --preserve=mode,ownership /etc/localtime /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 | |||
chmod -R 700 /etc/xen-tools/skel/root | |||
cp /root/.ssh/authorized_keys* /etc/xen-tools/skel/root/.ssh/ | |||
chmod 600 /etc/xen-tools/skel/root/.ssh/authorized_keys* | |||
cp --preserve=mode,ownership /root/.bashrc /etc/xen-tools/skel/root/ | |||
</pre> | </pre> | ||
Ainsi, vos futurs VMs seront automatiquement configurées sous la même timezone que votre dom0 | 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 d'un système d'upgrade et de backup automatique des VMs== | ||
Pour commencer, créez : | |||
* une clé ssh pour les upgrade | |||
* une clé ssh pour les backups | |||
* une clé ssh pour le login de l'utisateur root de votre dom0 vers les domU | |||
<pre> | |||
mkdir /etc/xen-tools/ssh-keys | |||
ssh-keygen -t rsa -C "domU upgrade account key" -N "" -f /etc/xen-tools/ssh-keys/domU-upgrade-rsa | |||
ssh-keygen -t rsa -C "domU backup account key" -N "" -f /etc/xen-tools/ssh-keys/domU-backup-rsa | |||
ssh-keygen -t rsa -C "root@dom0" -N "" -f /root/.ssh/id_rsa | |||
</pre> | |||
Créer le fichier <code>/usr/bin/xen-aptitude</code> contenant : | |||
<pre> | |||
#! /bin/bash | |||
case $1 in | |||
update|safe-upgrade) | |||
if [ $2 == "all" ]; then | |||
domU=`xm list | grep -v -e "Name" -e "Domain-0" | sed -e 's/^\([^ ]*\) .*$/\1/'` | |||
for dom in $domU; do | |||
echo "Running $1 for $dom" | |||
ssh -i /etc/xen-tools/ssh-keys/domU-upgrade-rsa root@$dom "sudo aptitude $1" | |||
done | |||
else | |||
if [ -z "$(xm list | grep $2)" ]; then | |||
echo "Error: $2 is not a valid domU" | |||
else | |||
echo "Running $1 for $2" | |||
ssh -i /etc/xen-tools/ssh-keys/domU-upgrade-rsa root@$2 "sudo aptitude $1" | |||
fi | |||
fi | |||
;; | |||
*) | |||
echo "Error: $0 update|safe-upgrade all|domU" | |||
;; | |||
esac | |||
</pre> | |||
Si vous exécutez <code>xen-aptitude update all</code> puis <code>xen-aptitude safe-upgrade all</code> tous vos domU seront mis à jour. | |||
==Création d'un rôle personnalisé pour les VMs== | |||
Les rôles permettent d'exécuter des actions automatiquement lors de la création d'une VM. | |||
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>, <code>dnsutils</code> et <code>sshguard</code> | |||
* configuration des même locales que le dom0 | |||
* désactiver le login root par password en ssh | |||
* transférer les différentes clés ssh public que nous avons créés précédemment | |||
* permettre le login root par clé ssh uniquement à partir du dom0 | |||
* 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> : | |||
<pre> | |||
#!/bin/bash | |||
# | |||
# This role : | |||
# - install multiples packages | |||
# - configures domU locales as in Dom0 | |||
# - disable root ssh password login and configure root ssh key authentication if available | |||
# - allow only root login for ssh | |||
# - add networks routes | |||
# - configure sshguard | |||
# | |||
prefix=$1 | |||
# | |||
# Source our common functions - this will let us install a Debian package. | |||
# | |||
if [ -e /usr/lib/xen-tools/common.sh ]; then | |||
. /usr/lib/xen-tools/common.sh | |||
else | |||
echo "Installation problem" | |||
fi | |||
# | |||
# Log our start | |||
# | |||
logMessage Script $0 starting | |||
# | |||
# Install some usefull packages | |||
# | |||
logMessage Script $0 setting up packages | |||
# | |||
# | |||
installDebianPackage ${prefix} locales #already installed in debian-wheezy domU | |||
installDebianPackage ${prefix} ntp | |||
installDebianPackage ${prefix} console-data | |||
installDebianPackage ${prefix} console-common | |||
installDebianPackage ${prefix} dnsutils | |||
installDebianPackage ${prefix} sshguard | |||
installDebianPackage ${prefix} psmisc | |||
# | |||
# locales | |||
# | |||
logMessage Script $0 configuring locales | |||
# | |||
# | |||
cp /etc/locale.gen ${prefix}/etc/ | |||
chmod 644 ${prefix}/etc/locale.gen | |||
chroot ${prefix} /usr/sbin/locale-gen | |||
cp /etc/default/locale ${prefix}/etc/default/ | |||
chmod 644 ${prefix}/etc/default/locale | |||
# | |||
# ssh | |||
# | |||
logMessage Script $0 configuring ssh | |||
# | |||
# | |||
echo "AllowUsers root" >> ${prefix}/etc/ssh/sshd_config | |||
if [ ! -d ${prefix}/root/.ssh/ ]; then | |||
mkdir -p ${prefix}/root/.ssh | |||
chmod -R 700 ${prefix}/root | |||
fi | |||
dom0="" | |||
for ip in `ifconfig | grep "inet addr" | cut -d ":" -f 2 | cut -d " " -f 1`; do | |||
if [ ! $ip = "127.0.0.1" ]; then | |||
dom0=$dom0$ip, | |||
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 | |||
dom0=$dom0$ip, | |||
done | |||
trusted=`echo $dom0 | sed 's/^,*//;s/,*$//'` | |||
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 | |||
fi | |||
if [ -f /etc/xen-tools/ssh-keys/domU-upgrade-rsa.pub ]; then | |||
echo from=\"$trusted\" `cat /etc/xen-tools/ssh-keys/domU-upgrade-rsa.pub` >> ${prefix}/root/.ssh/authorized_keys | |||
fi | |||
if [ -f /root/.ssh/id_rsa.pub ]; then | |||
echo from=\"$trusted\" `cat /root/.ssh/id_rsa.pub` >> ${prefix}/root/.ssh/authorized_keys | |||
fi | |||
sed -i -e 's/PermitRootLogin yes/PermitRootLogin without-password/g' ${prefix}/etc/ssh/sshd_config | |||
# | |||
# network routes | |||
# | |||
LogMessage Script $0 Adding network routes | |||
# | |||
# | |||
gw=`cat /etc/xen-tools/xen-tools.conf | grep "gateway ="` | |||
if [ ! ${gw:0:1} = "#" ]; then | |||
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/ | |||
# | |||
# Log our finish | |||
# | |||
logMessage Script $0 finished | |||
</pre> | |||
N'oubliez pas de rendre ce fichier exécutable : | |||
<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 412 : | Ligne 668 : | ||
Maintenant que tout est configuré, il ne reste plus qu'à créer votre première VM. | Maintenant que tout est configuré, il ne reste plus qu'à créer votre première VM. | ||
Si vous êtes en mode nat, rien de plus simple : | |||
<pre> | <pre> | ||
xen-create-image --hostname vm1.domain.tld --ip <IP> --passwd --role | xen-create-image --hostname vm1.domain.tld --ip <IP> --passwd --role main | ||
</pre> | |||
Pour le mode bridge, il va falloir préciser l'adresse mac de la carte réseau (générée dans l'interface de votre hébergeur) : | |||
<pre> | |||
xen-create-image --hostname vm1.domain.tld --ip <IP> --mac=AA:BB:CC:DD:EE:FF --passwd --role main | |||
</pre> | </pre> | ||
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 \ | |||
--arch=amd64 --kernel=/boot/vmlinuz-2.6.32.5-xen-amd64 --mirror=http://archive.ubuntu.com/ubuntu/ --passwd --role main | |||
</pre> | </pre> | ||
Ligne 437 : | Ligne 701 : | ||
Pour quitter la console xen tapez , ctrl altgr ] | Pour quitter la console xen tapez , ctrl altgr ] | ||
==Démarrage automatique des VMs== | |||
Créez en premier lieu le dossier <code>/etc/xen/auto</code> : | |||
<pre>mkdir /etc/xen/auto</pre> | |||
Placez ensuite les fichiers de configuration des VMs que vous souhaitez voir démarrer automatiquement dans ce dossier. | |||
==Gestion de l'état des VMs== | |||
* xm shutdown : arrêter une VM | |||
* xm destroy : arrêter une VM immédiatement (l'équivalent de couper le courant de votre pc) | |||
* xm list : liter les VMs activent | |||
* xm reboot : redémarer une VM | |||
* xen-list-images : lister les images disponibles | |||
* xentop : un top pour vos VMs | |||
==Prioriser une VM par rapport aux autres== | |||
La commande <code>xm sched-credit</code> permet de visualiser le poids des VMs. Par défaut chaque VM crée a un poids de 256. Pour attribuer deux fois plus de temps CPU à une VM : | |||
<pre>xm sched-credit -d vm1.domain.tld -w 512</pre> | |||
=Annexes= | |||
==Ajout d'un réseau interne== | |||
Nous allons voir comment créer un réseau interne sous Xen, c'est à dire, attaché à aucune interface réseau physique. L'intérêt est d'offrir un débit bien supérieur pour les communications entre les VMs. | |||
Commencez par éditer le fichier <code>/etc/network/interfaces</code> | |||
<pre> | |||
auto br1 | |||
iface br1 inet static | |||
address 192.168.10.1 | |||
broadcast 192.168.10.255 | |||
netmask 255.255.255.0 | |||
bridge_ports none | |||
</pre> | |||
Puis activez l'interface : | |||
<pre>ifup br1</pre> | |||
Créez ensuite le fichier <code>/etc/xen/scripts/my-network-bridge</code> contenant : | |||
<pre> | |||
#!/bin/sh | |||
/etc/xen/scripts/network-bridge "$@" netdev=br0 | |||
/etc/xen/scripts/network-bridge "$@" netdev=br1 | |||
</pre> | |||
Et rendez le exécutable : | |||
<pre>chmod +x /etc/xen/scripts/my-network-bridge</pre> | |||
Enfin, il va falloir modifier la configuration de xend dans <code>/etc/xen/xend-config.sxp</code>. Remplacez la ligne <code>(network-script</code> précédente par : | |||
<pre>(network-script my-network-bridge)</pre> | |||
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 br0 pour notre interface interne | |||
Il faut ensuite relancer xend : | |||
<pre>/etc/init.d/xend restart</pre> | |||
Vous pouvez vérifier l'existence des deux bridges avec : | |||
<pre>brctl show</pre> | |||
Il ne reste plus qu'a modifier le fichier de configuration des VMs. | |||
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> | |||
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> | |||
Après redémarrage, la VM aura désormais deux interfaces réseaux : | |||
* eth0 bridgé sur l'interface br0 du dom0 (le réseau public) | |||
* 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!) : | |||
<pre> | |||
auto eth1 | |||
iface eth1 inet static | |||
address 192.168.10.2 | |||
netmask 255.255.255.0 | |||
</pre> | |||
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 | |||
Note : vous pouvez faire de même en ipv6 : | |||
* il faut utiliser le range fd00::/8 (http://en.wikipedia.org/wiki/Unique_Local_Address) | |||
* pour générer votre ula : http://www.kame.net/~suz/gen-ula.html | |||
==Partitionnement personnalisé== | |||
===Lors de la création d'une VM=== | |||
Xen permet de partitionner ses VMs très facilement lors de leur création. | |||
Pour cela, il suffit de créer un fichier dans <code>/etc/xen-tools/partitions.d/</code> contenant le partitionnement souhaité. Par exemple <code>/etc/xen-tools/partitions.d/default</code> : | |||
<pre> | |||
[root] | |||
size=1G | |||
type=ext3 | |||
mountpoint=/ | |||
options=sync,errors=remount-ro | |||
[swap] | |||
size=2G | |||
type=swap | |||
[home] | |||
size=10G | |||
type=xfs | |||
mountpoint=/home | |||
options=nodev,nosuid | |||
[var] | |||
size=4G | |||
type=xfs | |||
mountpoint=/var | |||
options=nodev,nosuid | |||
</pre> | |||
Lors de la création de l'image avec <code>xen-create-image</code> il faut préciser l'option <code>--partitions=file</code>. Par exemple : | |||
<pre> | |||
xen-create-image --hostname vm1.domain.tld --ip <IP> --passwd --role main --partition=/etc/xen-tools/partitions.d/default | |||
</pre> | |||
===Sur une VM déjà créée=== | |||
Nous allons voir comment ajouter une partition /home à notre vm1.domain.tld. | |||
Commencez par créer la partition lvm : | |||
<pre> | |||
lvcreate -n vm1.domain.tld-home -L 10g main | |||
mkfs.ext3 /dev/main/vm1.domain.tld-home | |||
</pre> | |||
Il faut ensuite ajouter notre image disque dans <code>/etc/xen/vm1.domain.tld.cfg</code> : | |||
<pre> | |||
disk = [ | |||
'phy:/dev/main/vm1.domain.tld-home,xvda3,w', | |||
'phy:/dev/main/vm1.domain.tld-root,xvda2,w', | |||
'phy:/dev/main/vm1.domain.tld-swap,xvda1,w', | |||
] | |||
</pre> | |||
Vous pouvez ensuite démarrer votre VM et éditer le fichier <code>/etc/fstab</code> (de votre VM!) pour y ajouter la partition /home | |||
=issue= | |||
==Erreurs du type IPv6 addrconf: prefix with wrong length 56== | |||
Désactivez l'autoconfiguration ipv6 : créez un fichier /etc/sysctl.d/ip6.conf : | |||
<pre> | |||
net.ipv6.conf.all.autoconf = 0 | |||
net.ipv6.conf.default.autoconf = 0 | |||
net.ipv6.conf.lo.autoconf = 0 | |||
net.ipv6.conf.peth0.autoconf = 0 | |||
net.ipv6.conf.eth0.autoconf = 0 | |||
</pre> | |||
==Pas assez d'interfaces loopback== | |||
Créer le fichier <code>/etc/modprobe.d/local-loop.conf</code> contenant : | |||
<pre>options loop max_loop=64</pre> | |||
Vous pouvez ensuite redémarrer ou recharger le module loop : | |||
<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> |