Xen : Différence entre versions

Un article de Bulles.
Aller à : navigation, rechercher
(Hyperviseur)
(Hyperviseur)
 
(33 révisions intermédiaires par 2 utilisateurs non affichées)
Ligne 1: Ligne 1:
 
Notes sur l'installation de Xen sur une Debian Etch / Linux 2.6
 
Notes sur l'installation de Xen sur une Debian Etch / Linux 2.6
  
'''En cours de rédaction'''
 
  
 
= Introduction =
 
= Introduction =
Ligne 21: Ligne 20:
  
 
== Partitionnement ==
 
== Partitionnement ==
Nous réservons un ''Volume Group'' pour accueillir les machines virtuelles Xen. Il contiendra un ''file system'' pour les images disques ''sur fichier'' et des ''logical volumes'' pour les acces ''direct''.
+
Nous disposons de quatre disque de 500GB. Trois sont configurés en RAID5, le dernier reste comme ''Hot Spare''. Le raid étant géré par la carte ''3Ware'', un seul device est visible pour Linux, sa taille est d'approximativement 1 TB.
 +
 
 +
Nous mettons toutes les partitions standard dans un ''Volume Group'', et nous réservons un autre pour accueillir les machines virtuelles Xen. De cette manière nous séparons completement le système hôte des machines virtuelles. Ce dernier ''Volume Group'' contiendra un ''file system'' pour les images disques ''sur fichier'' et des ''logical volumes'' additionnels pour les acces ''direct''.
 +
 
 +
Pour le ''Volume Group'' hôte, je reste un adepte des ''filesystems'' séparés!
 +
 
 +
{| border="1" cellspacing="0" cellpadding="2" style="text-align: left;"
 +
|-
 +
! Physical device        !! Taille      !! Volume Group  !!colspan="2"| LVM    !! Partition
 +
|-
 +
| /dev/sda1              || 512 MB      || -            ||colspan="2"| -      || /boot   
 +
|-
 +
|rowspan="6"|/dev/sda2    ||rowspan="6"| 100 GB  ||rowspan="6"| vgDom0 || root    || 1 GB  || /   
 +
|-
 +
| swap    || 12 GB  || swap   
 +
|-
 +
| usr    || 5 GB  || /usr   
 +
|-
 +
| var    || 3 GB  || /var 
 +
|-
 +
| home    || 20 GB  || /home   
 +
|-
 +
| -    || 50 GB  || non-alloué   
 +
|-
 +
|rowspan="2"|/dev/sda3    ||rowspan="2"| 375 GB  ||rowspan="2"| vgDomU || domu    || 100 GB  || /home/domu   
 +
|-
 +
| -    || 275 GB  || non-alloué   
 +
|-
 +
| -              || 500 GB      || -            ||colspan="2"| -      || non-alloué   
 +
|}
  
 
== Packages ==
 
== Packages ==
En dehors d'un install de base, nous installeraons les packages suivants
+
En dehors d'un install de base, nous installerons les packages suivants
  
 
=== Packages utiles ===
 
=== Packages utiles ===
Ligne 30: Ligne 58:
 
  {{Deb|openssh-server}}
 
  {{Deb|openssh-server}}
 
  {{Deb|screen}}
 
  {{Deb|screen}}
 +
{{Deb|ntp}}
 +
{{Deb|less}}
  
 
=== Checkinstall ===
 
=== Checkinstall ===
Ligne 39: Ligne 69:
 
Le version ''Debian'' de [http://asic-linux.com.mx/~izto/checkinstall/ Checkinstall] est encore assez récente et n'est pas parfaite, mais fonctionne suffisemment bien pour nos besoins.
 
Le version ''Debian'' de [http://asic-linux.com.mx/~izto/checkinstall/ Checkinstall] est encore assez récente et n'est pas parfaite, mais fonctionne suffisemment bien pour nos besoins.
 
{{Boite Code|shell| # Packages pré-requis:
 
{{Boite Code|shell| # Packages pré-requis:
  apt-get install dpkg-dev gcc file gettext
+
  apt-get install dpkg-dev gcc file gettext libc6-dev
 
  # Récupération des sources
 
  # Récupération des sources
 
  cd /usr/src
 
  cd /usr/src
Ligne 47: Ligne 77:
 
  tar xzf checkinstall-1.6.1.tgz  
 
  tar xzf checkinstall-1.6.1.tgz  
 
  cd checkinstall-1.6.1
 
  cd checkinstall-1.6.1
 +
# Patch pour les fichiers de configuration
 +
perl -pi -e 's@find \$BUILD_DIR/etc 2@find \$BUILD_DIR/etc -name init.d -prune -o -type f -print 2@' \
 +
      checkinstall
 
  # Compilation et installation 'brute'
 
  # Compilation et installation 'brute'
 
  make
 
  make
Ligne 62: Ligne 95:
 
  {{Deb|bridge-utils}} {{Deb|libssl0.9.7}} {{Deb|libsdl1.2debian}}
 
  {{Deb|bridge-utils}} {{Deb|libssl0.9.7}} {{Deb|libsdl1.2debian}}
  
Les paquets suivant sont nécessaires si Xen a accès au ''Frame Buffer'' (pas testé, car peu d'intérêt pour un serveur)
+
Les paquets suivant sont nécessaires si on utilise le ''VFB'' (Virtual Frame Buffer) de Xen. Cette option n'est utile que si on désire une console graphique en mode ''para-virtualisé''.
  {{Deb|libsdl1.2-dev}} {{Deb|libvncserver-dev}}
+
  {{Deb|libsdl1.2-dev}} {{Deb|libvncserver-dev}} {{Deb|libjpeg62}}
 +
{{Boite Attention|Le ''vfb'' est une option qui n'est pas compilée dans les binaires distribués par [http://xensource.com/download/index_oss.html XenSource].
 +
<br />Si on désire l'utiliser il faudra [[#Compilation de Xen|recompiler Xen]].}}
  
 
== Noyeau ==
 
== Noyeau ==
Afin de bénéficier des mises-à-jour de sécurité Debian, nous utilisons le noyeau para-virtualisé Debian au lieu du noyeau ''kernel.org'' distribué par Xen:
+
Afin de bénéficier des mises-à-jour de sécurité Debian, nous utilisons le noyau para-virtualisé Debian au lieu du noyau ''kernel.org'' distribué par Xen:
  {{Deb|linux-image-2.6.18-4-xen-686}}
+
  {{Deb|linux-image-2.6-xen-686}}
 +
 
 +
'''Note''': nous avons eu de manière aléatoire le message suivant lors du démarrage d'une machine virtuelle:
 +
BUG: unable to handle kernel paging request at virtual address c007c72c
 +
Nous avons attribué ce problème à la version Debian du noyau, mais il semble qu'il se produise aussi avec le noyau de ''kernel.org''
 +
 
 +
Si on utilise le noyau Debian, il faudra ajouter ''netloop'' dans la listes des modules à charger:
 +
{{Boite Fichier|/etc/modules|
 +
# /etc/modules: kernel modules to load at boot time.
 +
#
 +
# This file contains the names of kernel modules that should be loaded
 +
# at boot time, one per line. Lines beginning with "#" are ignored.
 +
 +
loop
 +
netloop
 +
}}
  
 
== Hyperviseur ==
 
== Hyperviseur ==
L'hyperviseur est téléchargé de [http://xensource.com/download/index_oss.html XenSource] (version ''tarball'' / ''i386 PAE'')
+
Pour l'hyperviseur, nous pouvons:
 +
* soit télécharger de [http://xensource.com/download/index_oss.html XenSource] (version ''tarball'' / ''i386 PAE'');
 +
* soit utiliser le ''tarball'' généré au paragraphe [[#Compilation de Xen]]
 
{{Boite Code|shell| mkdir /usr/src/xen
 
{{Boite Code|shell| mkdir /usr/src/xen
 
  cd /usr/src/xen
 
  cd /usr/src/xen
Ligne 103: Ligne 155:
 
  update-rc.d xend defaults 20 21 >/dev/null &#124;&#124; exit $?
 
  update-rc.d xend defaults 20 21 >/dev/null &#124;&#124; exit $?
 
  update-rc.d xendomains defaults 21 20 >/dev/null &#124;&#124; exit $?
 
  update-rc.d xendomains defaults 21 20 >/dev/null &#124;&#124; exit $?
 +
if [ "$1" = "configure" ]; then
 +
  if [ -e /boot/System.map-2.6.18-xen ]; then
 +
    depmod -a -F /boot/System.map-2.6.18-xen 2.6.18-xen &#124;&#124; true
 +
    update-initramfs -c -t -k 2.6.18-xen
 +
  fi
 +
  command -v update-grub > /dev/null && update-grub
 +
fi
 +
exit 0
 +
EOF
 +
cat >preremove-pak <<'EOF'
 +
#!/bin/sh
 +
if [ "$1" = "remove" ]; then
 +
  if [ -e /boot/System.map-2.6.18-xen ]; then
 +
    update-initramfs -d -k 2.6.18-xen &#124;&#124; true
 +
  fi
 +
fi
 
  exit 0
 
  exit 0
 
  EOF
 
  EOF
 
  cat >postremove-pak <<'EOF'
 
  cat >postremove-pak <<'EOF'
 
  #!/bin/sh
 
  #!/bin/sh
  update-rc.d xend remove >/dev/null &#124;&#124; exit $?
+
  if [ "$1" = "remove" ]; then
update-rc.d xendomains remove >/dev/null &#124;&#124; exit $?
+
  update-rc.d xend remove >/dev/null &#124;&#124; exit $?
 +
  update-rc.d xendomains remove >/dev/null &#124;&#124; exit $?
 +
  command -v update-grub > /dev/null && update-grub
 +
fi
 
  exit 0
 
  exit 0
 
  EOF
 
  EOF
  chmod a+x postinstall-pak postremove-pak
+
  chmod a+x postinstall-pak postremove-pak preremove-pak
 
}}
 
}}
  
 
'''Note''': Pour les aventuriers qui utilisent cet article pour installer la version 64 bits de Xen, il faut ruser pour avoir les librairies au bon endroit... (Distribution Xen {{Fichier|xen-3.1.0-install-x86_64.tgz}})
 
'''Note''': Pour les aventuriers qui utilisent cet article pour installer la version 64 bits de Xen, il faut ruser pour avoir les librairies au bon endroit... (Distribution Xen {{Fichier|xen-3.1.0-install-x86_64.tgz}})
{{Boite Code|shell|
+
{{Boite Code|shell -- Uniquement pour la distribution 64 bits|
 
  # Uniquement pour la version 64 bits de l'hyperviseur!  
 
  # Uniquement pour la version 64 bits de l'hyperviseur!  
 
  cd /usr/src/xen/dist/install/usr
 
  cd /usr/src/xen/dist/install/usr
 
  mv -f lib64/xen/bin lib/xen/
 
  mv -f lib64/xen/bin lib/xen/
 
  rm -rf lib64/xen
 
  rm -rf lib64/xen
  mv -f lib64/* lib/*
+
  mv -f lib64/* lib/
 
  rm -rf lib64
 
  rm -rf lib64
 
}}
 
}}
  
Nous utilisons les noyeaux Debian; nettoyage:
+
Si nous utilisons les noyeaux Debian; on peux nettoyer le noyeau distribué dans le paquet Xen:
{{Boite Code|shell| cd  /usr/src/xen/dist/install
+
{{Boite Code|shell (Optionel)| cd  /usr/src/xen/dist/install
 
  rm -rf lib
 
  rm -rf lib
 
  rm -f boot/vmlinux-syms-2.6.18-xen boot/vmlinuz-2.6.18-xen boot/vmlinuz-2.6-xen \
 
  rm -f boot/vmlinux-syms-2.6.18-xen boot/vmlinuz-2.6.18-xen boot/vmlinuz-2.6-xen \
Ligne 140: Ligne 211:
 
Installer le package:
 
Installer le package:
 
{{Boite Code|shell| dpkg -i xen-hypervisor-and-tools-3.1.0-1-i386-pae_3.1.0-1_i386.deb
 
{{Boite Code|shell| dpkg -i xen-hypervisor-and-tools-3.1.0-1-i386-pae_3.1.0-1_i386.deb
}}
 
 
Mettre {{Commande|grub}} à jour
 
{{Boite Code|shell| update-grub
 
 
}}
 
}}
  
Ligne 163: Ligne 230:
  
 
Ajout de la clé:
 
Ajout de la clé:
{{Boite Code|shell| wget -q -O - http://apt.steve.org.uk/apt-key.gpg | apt-key add -}}
+
{{Boite Code|shell| wget -q -O - http://apt.steve.org.uk/apt-key.gpg &#124; apt-key add -}}
  
 
On aura aussi besoin de ''debootstrap''
 
On aura aussi besoin de ''debootstrap''
Ligne 172: Ligne 239:
  
 
== Création d'une machine virtuelle (para-virtualisation) ==
 
== Création d'une machine virtuelle (para-virtualisation) ==
Pour créer une machine virtuelle avec les paramètres par défaut:
+
=== Debian ===
 +
Pour créer une machine virtuelle avec les paramètres par défaut (si les adresses sont allouées par ''dhcp''):
 
{{Boite Code|shell|2=<nowiki></nowiki>
 
{{Boite Code|shell|2=<nowiki></nowiki>
 
  xen-create-image --hostname=<FQDN>}}
 
  xen-create-image --hostname=<FQDN>}}
  
 
Le fichier de configuration de cette machine virtuelle est {{Fichier|/etc/xen/<FQDN>.cfg}} et elle se démarre:
 
Le fichier de configuration de cette machine virtuelle est {{Fichier|/etc/xen/<FQDN>.cfg}} et elle se démarre:
{{Boite Code|shell| xm create /etc/xen/<FQDN>.cfg}}
+
{{Boite Code|shell| xm create -c /etc/xen/<FQDN>.cfg}}
  
 
Pour démarrer une machine virtuelle au boot:
 
Pour démarrer une machine virtuelle au boot:
 
{{Boite Code|shell| ln -s /etc/xen/<FQDN>.cfg /etc/xen/auto}}
 
{{Boite Code|shell| ln -s /etc/xen/<FQDN>.cfg /etc/xen/auto}}
 
Elle sera par la même occasion ''sauvée'' au shutdown.
 
Elle sera par la même occasion ''sauvée'' au shutdown.
 +
 +
{{Boite Attention|par défaut, [http://Xen-tools.org/software/xen-tools/ xen-tools] utilise le noyeau de l'hôte ''Dom0'' pour la machine virtuelle. Ce n'est pas un problème en soi, mais il faut en être conscient: une mise-à-jour du noyeau sur le ''Dom0'' sera répercuté sur les ''DomU'' qui l'utilisent; il ne faut donc pas oublier de mettre-à-jour les modules correspondant dans les machines virtuelles...}}
 +
 +
=== Unbreakable Linux / Red Hat / CentOS ===
 +
Voir l'article [[Unbreakable Xen]]
 +
 +
=== openSUSE ===
 +
Voir l'article [[Virtual openSUSE]]
  
 
== Création d'une machine virtuelle (HVM) ==
 
== Création d'une machine virtuelle (HVM) ==
Ligne 239: Ligne 315:
  
 
= Notes =
 
= Notes =
 +
== Compilation de Xen ==
 +
Si on est un adepte de la compile, ou tout simplement si on désire profiter du Virtual Frame Buffer qui n'est pas compilé par défaut dans les binaires distribués par [http://xensource.com/download/index_oss.html XenSource], il est toujours possible de recompiler le paquet.
 +
 +
La liste des dépendances pour compiler Xen est assez fournie, et pour ne pas ''polluer'' mon ''Dom0'' j'ai effectué l'opération sur une autre machine:
 +
{{Boite Code|shell| # Xen runtime dependencies:
 +
apt-get install iproute libncurses5 python python-central zlib1g bridge-utils libssl0.9.7 \
 +
        libsdl1.2debian libjpeg62
 +
 +
# Development tools:
 +
apt-get install binutils gcc bcc make patch bzip2 file gettext
 +
 +
# Development Libraries:
 +
apt-get install zlib1g-dev python-dev libc6-dev libsdl1.2-dev libvncserver-dev libjpeg62-dev \
 +
        libncurses5-dev libssl-dev libxml2-dev libcurl3-dev x-dev
 +
 +
# To build documentation (optional):
 +
apt-get install tetex-bin tetex-base tetex-extra transfig gs-common graphviz
 +
}}
 +
 +
Récupération des sources:
 +
{{Boite Code|shell| # Get the sources
 +
mkdir /usr/src/xen
 +
cd /usr/src/xen
 +
wget http://bits.xensource.com/oss-xen/release/3.1.0/src.tgz/xen-3.1.0-src.tgz
 +
tar xzf xen-3.1.0-src.tgz
 +
cd xen-3.1.0-src
 +
}}
 +
 +
Il ne reste plus qu'a compiler!
 +
<br />Le paquet distribué par [http://xensource.com/download/index_oss.html XenSource] est le résultat de la commande {{Commande|make dist}}. Le {{Fichier|Makefile}} reconnait l'architecture de la machine hôte et inclut les modules par défaut (voir {{Fichier|Config.mk}} pour plus de détails).
 +
<br />Nous allons simplement confirmer l'architecture sur la ligne de commande et ajouter les modules qui nous intéressent:
 +
{{Boite Code|shell|2=<nowiki></nowiki>
 +
# Just compile!
 +
make dist XEN_TARGET_ARCH=x86_32 XEN_TARGET_X86_PAE=y LIBXENAPI_BINDINGS=y XENFB_TOOLS=y
 +
}}
 +
 +
C'est le momment de prendre un petit café, voir plus, en fonction de rapidité de votre système...
 +
 +
Création du ''tarball'' binaire, similaire à celui distribué par [http://xensource.com/download/index_oss.html XenSource]:
 +
{{Boite Code|shell| # Package the distribution
 +
tar czf xen-3.1.0-install-x86_32p-custom.tgz dist}}
 +
 +
== VNC et souris ==
 +
La gestion de la souris est problématique avec Xen/VNC: le curseur local et celui de la machine virtuelle se désynchronisent!
 +
 +
Pour les machines para-virtualisées sous Linux, ce n'est pas un réel problème, étant donné que nous pouvons utiliser le serveur VNC de la distribution Linux qui gère la souris sans problème. En cas de nécessité, le plus simple est de supprimer l'accélération:
 +
{{Boite Code|shell| xset m 1/1}}
 +
 +
Pour les HVM, et donc essentiellement Windows, il y a une solution simple: utiliser le pilote ''tablet'' qui est supporté par défaut sous Windows. Il suffira de spécifier dans le fichier de configuration Xen de la HVM:
 +
{{Boite Fichier|/etc/xen/<...>.hvm|2=<nowiki></nowiki>
 +
...
 +
usbdevice='tablet'
 +
...
 +
}}
 +
 +
== Debian et pygrub ==
 +
Par défaut, [http://xen-tools.org/software/xen-tools/ xen-tools] va utiliser le noyau de ''Dom0'' pour les machines virtuelles créées.
 +
<br />Si on désire garder un indépendance entre les machines virtuelles, on peux utiliser ''pygrub'' pour démarrer les machines virtuelles.
 +
 +
{{Boite Code|shell DomU|
 +
# Install grub and udev
 +
apt-get install grub udev
 +
# fake device mapping for grub
 +
mkdir /boot/grub
 +
echo "(hd0)  /dev/sda" > /boot/grub/device.map
 +
# create gub configuration files
 +
grub-install /dev/sda1
 +
# Install teh Debian kernel
 +
apt-get install linux-image-xen-686
 +
}}
 +
 +
A noter que {{Commande|grub-install}} se termine en erreur:
 +
Searching for GRUB installation directory ... found: /boot/grub
 +
The file /boot/grub/stage1 not read correctly.
 +
mais ce n'est pas un problème.
 +
 +
Modifier ensuite le fichier de configuration de la machine virtuelle
 +
{{Boite Fichier|/etc/xen/<...>.hvm|2=<nowiki></nowiki>
 +
...
 +
# kernel      = '/boot/vmlinuz-2.6.18-xen'
 +
bootloader="/usr/bin/pygrub"
 +
...
 +
}}
 +
 +
== Adresse MAC ==
 +
Il est plus que conseillé de spécifier l'adresse MAC dans le fichier de configuration de la machine virtuelle. Par défaut Xen génère une adresse aléatoire, ce qui peux avoir des conséquences pour la machine virtuelle -- Debian assigne une nouvelle interface chaque fois qu'il rencontre une nouvelle adresse MAC lorsque {{deb|udev}} est installé!
 +
<br />Si cela se produit, on peut effacer les entrées inutiles et retrouver l'adresse assignée pas Xen dans {{Fichier|/etc/udev/rules.d/z25_persistent-net.rules}}.
 +
 +
== Changement de CD-Rom ==
 +
Pour pouvoir changer de media CD ou DVD durant une installation ou durant le fonctionnement classic il est ncéessaire d'utiliser les commandes xm et xenstore-read/write.
 +
 +
Lister les devices d'un domU nommé sles10
 +
xm block-list sles10
 +
Vdev  BE handle state evt-ch ring-ref BE-path
 +
768    0    0    1      -1    -1    /local/domain/0/backend/vbd/84/768
 +
5632    0    0    1      -1    -1    /local/domain/0/backend/vbd/84/5632
 +
c'est quasiment tous le temps le device avec un ID élevé qui est le lecteur amovible CD/DVD
 +
 +
Regarder vers quel ISO le lecteur virtuel pointe
 +
xenstore-read  /local/domain/0/backend/vbd/84/5632/params
 +
/home/domu/iso/SuSE/SLES-10-x86-DVD1.iso
 +
 +
Pour changer de media il faut utiliser la commande suivante
 +
xenstore-write /local/domain/0/backend/vbd/84/5632/params /full/path/le-nouvel-iso.iso
 +
 
== Bridging ==
 
== Bridging ==
 
Si on ne désire pas utiliser le bridge Xen (efficace mais complexe), on peut simplement modifier le fichier de configuration:
 
Si on ne désire pas utiliser le bridge Xen (efficace mais complexe), on peut simplement modifier le fichier de configuration:
Ligne 254: Ligne 435:
 
     bridge_ports eth0
 
     bridge_ports eth0
 
}}
 
}}
 
= To Do =
 
Vérifier que les paquets suivants ne sont pas nécessaires
 
{{Deb|python-twisted}} {{Deb|libcurl3-dev}}
 
  
 
= Liens =
 
= Liens =
Ligne 265: Ligne 442:
 
* [http://www.xensource.com/files/xen_install_windows.pdf How to Install Windows on Xen 3.0]
 
* [http://www.xensource.com/files/xen_install_windows.pdf How to Install Windows on Xen 3.0]
 
* [http://lists.xensource.com/archives/html/xen-users/2007-05/msg00652.html Xen 3.1.0 on Debian etch amd64]
 
* [http://lists.xensource.com/archives/html/xen-users/2007-05/msg00652.html Xen 3.1.0 on Debian etch amd64]
 +
* [http://et.redhat.com/~kraxel/xen/suse-guest.html Install SUSE as Xen guest]
 +
* [http://wiki.kartbuilding.net/index.php/Xen_Networking Xen Networking]
 +
== Diverses aides ==
 +
* FreeBSD : http://www.yuanjue.net/xen/howto.html
 +
* Solaris : http://www.opensolaris.org/os/community/xen/How-To-8-15-06/install/AugDomUs/;jsessionid=9E9E779D80E585F4F2559E2E9E598150
 +
* SuSE : http://kb.xensource.com/entry!default.jspa?categoryID=18&externalID=311&fromSearchPage=true
 +
* LVM (snapshot) : http://www.hccfl.edu/pollock/AUnix1/LVM.htm

Version actuelle datée du 5 janvier 2008 à 12:33

Notes sur l'installation de Xen sur une Debian Etch / Linux 2.6


Introduction

Nous utilisons Linux VServers sans problèmes depuis un certain temps déjà, mais dans certains cas il est intéressant de faire un pas plus en avant en terme de para-virtualisation (plus grande liberté au niveau de la couche réseau, ou des noyeaux utilisés) ou tout simplement dans la cas de la virtualisation pure (OS propriétaires).

Ce petit article n'est pas un n-ième howto sur la question, mais rassemble plutôt quelques notes prises lors de mes installations et tests.

Environnement:

  • Materiel: SuperMicro X7DVL-E Bi-Xeon Quad core (E5310), 12 GB Memoire, 2 TB Disque
  • OS hôte (Domain 0): Debian Etch
  • Xen Open Source: version 3.1

Debian Etch (DomO)

Généralités

Nous démarrerons su base d'une Debian Etch installée et à jour.

Nous désirons tourner des machines virtuelles 32 bits. Le support des machines virtuelles 32 bits sur un hôte 64 bits dans Xen est assez récent (32-on-64 PV guest support), et pour des raisons de stabilité, nous installons donc une version i386 de Debian.

Partitionnement

Nous disposons de quatre disque de 500GB. Trois sont configurés en RAID5, le dernier reste comme Hot Spare. Le raid étant géré par la carte 3Ware, un seul device est visible pour Linux, sa taille est d'approximativement 1 TB.

Nous mettons toutes les partitions standard dans un Volume Group, et nous réservons un autre pour accueillir les machines virtuelles Xen. De cette manière nous séparons completement le système hôte des machines virtuelles. Ce dernier Volume Group contiendra un file system pour les images disques sur fichier et des logical volumes additionnels pour les acces direct.

Pour le Volume Group hôte, je reste un adepte des filesystems séparés!

Physical device Taille Volume Group LVM Partition
/dev/sda1 512 MB - - /boot
/dev/sda2 100 GB vgDom0 root 1 GB /
swap 12 GB swap
usr 5 GB /usr
var 3 GB /var
home 20 GB /home
- 50 GB non-alloué
/dev/sda3 375 GB vgDomU domu 100 GB /home/domu
- 275 GB non-alloué
- 500 GB - - non-alloué

Packages

En dehors d'un install de base, nous installerons les packages suivants

Packages utiles

Ces packages ne sont pas a proprement parler obligatoire, mais bon...

openssh-server
screen
ntp
less

Checkinstall

Nous utilisons la dernière version de Xen, qui n'est pas disponible dans Etch.
Afin d'éviter d'installer des fichiers non controllés par dpkg, nous utiliserons aussi Checkinstall pour empaqueter Xen.

checkinstall est actuellement dans Debian Testing, mais nous le compilerons a partir des sources pour éviter un mélange de distribution.

Le version Debian de Checkinstall est encore assez récente et n'est pas parfaite, mais fonctionne suffisemment bien pour nos besoins.

Code: shell
# Packages pré-requis:
apt-get install dpkg-dev gcc file gettext libc6-dev
# Récupération des sources
cd /usr/src
mkdir checkinstall
cd checkinstall
wget http://asic-linux.com.mx/~izto/checkinstall/files/source/checkinstall-1.6.1.tgz
tar xzf checkinstall-1.6.1.tgz 
cd checkinstall-1.6.1
# Patch pour les fichiers de configuration
perl -pi -e 's@find \$BUILD_DIR/etc 2@find \$BUILD_DIR/etc -name init.d -prune -o -type f -print 2@' \
     checkinstall
# Compilation et installation 'brute'
make
make install
# Génération et installation du paquet Debian
checkinstall -D
dpkg -i checkinstall_1.6.1-1_i386.deb

Xen (Dom0)

Dépendences Xen

Xen nécessite les paquest suivants:

iproute libc6 libncurses5 python python-central udev zlib1g
libc6-xen
bridge-utils libssl0.9.7 libsdl1.2debian

Les paquets suivant sont nécessaires si on utilise le VFB (Virtual Frame Buffer) de Xen. Cette option n'est utile que si on désire une console graphique en mode para-virtualisé.

libsdl1.2-dev libvncserver-dev libjpeg62
Attention: Le vfb est une option qui n'est pas compilée dans les binaires distribués par XenSource.
Si on désire l'utiliser il faudra recompiler Xen.

Noyeau

Afin de bénéficier des mises-à-jour de sécurité Debian, nous utilisons le noyau para-virtualisé Debian au lieu du noyau kernel.org distribué par Xen:

linux-image-2.6-xen-686

Note: nous avons eu de manière aléatoire le message suivant lors du démarrage d'une machine virtuelle:

BUG: unable to handle kernel paging request at virtual address c007c72c

Nous avons attribué ce problème à la version Debian du noyau, mais il semble qu'il se produise aussi avec le noyau de kernel.org

Si on utilise le noyau Debian, il faudra ajouter netloop dans la listes des modules à charger:

Fichier: /etc/modules
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.

loop
netloop

Hyperviseur

Pour l'hyperviseur, nous pouvons:

Code: shell
mkdir /usr/src/xen
cd /usr/src/xen
wget http://bits.xensource.com/oss-xen/release/3.1.0/bin.tgz/xen-3.1.0-install-x86_32p.tgz
tar xzf xen-3.1.0-install-x86_32p.tgz

Adaptations Debian:

Code: shell
cd dist
chown -R root:root .
cd install/etc
mv sysconfig default

Création du script network-dummy, si on ne désire pas utiliser le bridge Xen (voir note ci-dessous):

Code: shell
cd /usr/src/xen/dist/install/etc/xen
echo -e '#!/bin/sh\n\nexit 0' > scripts/network-dummy
chmod 755 scripts/network-dummy

Scripts de startup:

Code: shell

cd /usr/src/xen/dist/install/etc
perl -pi -e 's@LOCKFILE=/var/lock/subsys/xendomains@LOCKFILE=/var/lock/xendomains@' \
     init.d/xendomains
perl -pi -e 's@XENDOM_CONFIG=/etc/sysconfig/xendomains@XENDOM_CONFIG=/etc/default/xendomains@' \
     init.d/xendomains
perl -pi -e 's@-c0-17@-c0-37@;s@-c18-@-c38-@' init.d/xendomains
cd /usr/src/xen/dist
cat >postinstall-pak <<'EOF'
#!/bin/sh
update-rc.d xend defaults 20 21 >/dev/null || exit $?
update-rc.d xendomains defaults 21 20 >/dev/null || exit $?
if [ "$1" = "configure" ]; then
  if [ -e /boot/System.map-2.6.18-xen ]; then
    depmod -a -F /boot/System.map-2.6.18-xen 2.6.18-xen || true
    update-initramfs -c -t -k 2.6.18-xen
  fi
  command -v update-grub > /dev/null && update-grub
fi
exit 0
EOF
cat >preremove-pak <<'EOF'
#!/bin/sh
if [ "$1" = "remove" ]; then
  if [ -e /boot/System.map-2.6.18-xen ]; then
    update-initramfs -d -k 2.6.18-xen || true
  fi
fi
exit 0
EOF
cat >postremove-pak <<'EOF'
#!/bin/sh
if [ "$1" = "remove" ]; then
  update-rc.d xend remove >/dev/null || exit $?
  update-rc.d xendomains remove >/dev/null || exit $?
  command -v update-grub > /dev/null && update-grub
fi
exit 0
EOF
chmod a+x postinstall-pak postremove-pak preremove-pak

Note: Pour les aventuriers qui utilisent cet article pour installer la version 64 bits de Xen, il faut ruser pour avoir les librairies au bon endroit... (Distribution Xen xen-3.1.0-install-x86_64.tgz)

Code: shell -- Uniquement pour la distribution 64 bits
# Uniquement pour la version 64 bits de l'hyperviseur! 
cd /usr/src/xen/dist/install/usr
mv -f lib64/xen/bin lib/xen/
rm -rf lib64/xen
mv -f lib64/* lib/
rm -rf lib64

Si nous utilisons les noyeaux Debian; on peux nettoyer le noyeau distribué dans le paquet Xen:

Code: shell (Optionel)
cd  /usr/src/xen/dist/install
rm -rf lib
rm -f boot/vmlinux-syms-2.6.18-xen boot/vmlinuz-2.6.18-xen boot/vmlinuz-2.6-xen \
      boot/System.map-2.6.18-xen boot/config-2.6.18-xen

Préparation du paquet avec checkinstall

Code: shell
cd /usr/src/xen
mv dist xen-hypervisor-and-tools-3.1.0-1-i386-pae-3.1.0
cd  xen-hypervisor-and-tools-3.1.0-1-i386-pae-3.1.0
checkinstall -D ./install.sh

Installer le package:

Code: shell
dpkg -i xen-hypervisor-and-tools-3.1.0-1-i386-pae_3.1.0-1_i386.deb

Rebooter!

Xen (DomU)

Xen-tools

Les utilitaires xen-tools permettent de créer des machines (para-)virtuelles (DomU) très facilement.
Il supporte la création de machines virtuelles Debian, Ubuntu, CentOS et Fedora. Il permet aussi de copier des machines virtuelles, etc.

Xen-toolsest disponible dans Debian Etch, mais nous prendrons le dépot du développeur Steve Kemp qui est plus récent:

Fichier: /etc/apt/sources.list
#
#  Steve Kemp's repository:  Etch
#
deb     http://apt.steve.org.uk/etch etch main non-free contrib
deb-src http://apt.steve.org.uk/etch etch main non-free contrib

Ajout de la clé:

Code: shell
wget -q -O - http://apt.steve.org.uk/apt-key.gpg | apt-key add -

On aura aussi besoin de debootstrap

Code: shell
apt-get install debootstrap xen-tools

Vérifier le fichier /etc/xen-tools/xen-tools.conf; en mettant les bons paramètres par défaut, la création d'une machine virtuelle s'en trouve grandement simplifiée.
Le fichier de configuration est bien documenté et ne devrait pas poser de problèmes.

Création d'une machine virtuelle (para-virtualisation)

Debian

Pour créer une machine virtuelle avec les paramètres par défaut (si les adresses sont allouées par dhcp):

Code: shell

xen-create-image --hostname=<FQDN>

Le fichier de configuration de cette machine virtuelle est /etc/xen/<FQDN>.cfg et elle se démarre:

Code: shell
xm create -c /etc/xen/<FQDN>.cfg

Pour démarrer une machine virtuelle au boot:

Code: shell
ln -s /etc/xen/<FQDN>.cfg /etc/xen/auto

Elle sera par la même occasion sauvée au shutdown.

Attention: par défaut, xen-tools utilise le noyeau de l'hôte Dom0 pour la machine virtuelle. Ce n'est pas un problème en soi, mais il faut en être conscient: une mise-à-jour du noyeau sur le Dom0 sera répercuté sur les DomU qui l'utilisent; il ne faut donc pas oublier de mettre-à-jour les modules correspondant dans les machines virtuelles...

Unbreakable Linux / Red Hat / CentOS

Voir l'article Unbreakable Xen

openSUSE

Voir l'article Virtual openSUSE

Création d'une machine virtuelle (HVM)

Le mode HVM permet de tourner des OS non para-virtualisés.

A titre d'exemple j'ai installé Windows XP Home Edition sur un logical volume.
Nous avons une image du CD-ROM: /home/vservers/XPhome.iso

Création du logical volume:

Code: shell
lvcreate –L 10000 –n xphome vgXen

Création du fichier de configuration /etc/xen/xphome.hvm à partir du template /etc/xen/xmexample.hvm.
Les seules choses à changer sont:

  • Le nom de la machine virtuelle
  • La mémoire à allouer
  • Le mapping du dique et de l'image CD-ROM
  • L'ordre de boot (C, D)
  • L'accès au serveur VNC par une machine distante
  • Le mapping clavier
Code: diff xmexample.hvm xphome.hvm

28c28
< memory = 128
---
> memory = 512
35c35
< name = "ExampleHVMDomain"
---
> name = "xphome"
64c64
< vif = [ 'type=ioemu, bridge=xenbr0' ]
---
> vif = [ 'type=ioemu, mac=00:16:3e:00:00:94, bridge=xenbr0' ]
74c74
< disk = [ 'file:/var/images/min-el3-i386.img,hda,w', ',hdc:cdrom,r' ]
---
> disk = [ 'phy:/dev/vgXen/xphome,ioemu:hda,w', 'file:/home/vservers/XPhome.iso,hdc:cdrom,r' ]
121a122
> boot="cd"
138c139
< #vnclisten="127.0.0.1"
---
> vnclisten="0.0.0.0"
210c211
< #keymap='ja'
---
> keymap='fr-be'

Il suffit alors de créer la machine virtuelle:

Code: shell
xm create /etc/xen/xphome.hvm

Et, a partir d'une machine distante:

Code: shell
xvncviewer <Dom0>

(C'est bien le domaine 0 qu'il faut adresser et pas la machine virtuelle!)

L'installation de Windows se passe sans problème via VNC.

Notes

Compilation de Xen

Si on est un adepte de la compile, ou tout simplement si on désire profiter du Virtual Frame Buffer qui n'est pas compilé par défaut dans les binaires distribués par XenSource, il est toujours possible de recompiler le paquet.

La liste des dépendances pour compiler Xen est assez fournie, et pour ne pas polluer mon Dom0 j'ai effectué l'opération sur une autre machine:

Code: shell
# Xen runtime dependencies:
apt-get install iproute libncurses5 python python-central zlib1g bridge-utils libssl0.9.7 \
        libsdl1.2debian libjpeg62

# Development tools:
apt-get install binutils gcc bcc make patch bzip2 file gettext 

# Development Libraries:
apt-get install zlib1g-dev python-dev libc6-dev libsdl1.2-dev libvncserver-dev libjpeg62-dev \
        libncurses5-dev libssl-dev libxml2-dev libcurl3-dev x-dev

# To build documentation (optional):
apt-get install tetex-bin tetex-base tetex-extra transfig gs-common graphviz

Récupération des sources:

Code: shell
# Get the sources
mkdir /usr/src/xen
cd /usr/src/xen
wget http://bits.xensource.com/oss-xen/release/3.1.0/src.tgz/xen-3.1.0-src.tgz
tar xzf xen-3.1.0-src.tgz
cd xen-3.1.0-src

Il ne reste plus qu'a compiler!
Le paquet distribué par XenSource est le résultat de la commande make dist. Le Makefile reconnait l'architecture de la machine hôte et inclut les modules par défaut (voir Config.mk pour plus de détails).
Nous allons simplement confirmer l'architecture sur la ligne de commande et ajouter les modules qui nous intéressent:

Code: shell

# Just compile!
make dist XEN_TARGET_ARCH=x86_32 XEN_TARGET_X86_PAE=y LIBXENAPI_BINDINGS=y XENFB_TOOLS=y

C'est le momment de prendre un petit café, voir plus, en fonction de rapidité de votre système...

Création du tarball binaire, similaire à celui distribué par XenSource:

Code: shell
# Package the distribution
tar czf xen-3.1.0-install-x86_32p-custom.tgz dist

VNC et souris

La gestion de la souris est problématique avec Xen/VNC: le curseur local et celui de la machine virtuelle se désynchronisent!

Pour les machines para-virtualisées sous Linux, ce n'est pas un réel problème, étant donné que nous pouvons utiliser le serveur VNC de la distribution Linux qui gère la souris sans problème. En cas de nécessité, le plus simple est de supprimer l'accélération:

Code: shell
xset m 1/1

Pour les HVM, et donc essentiellement Windows, il y a une solution simple: utiliser le pilote tablet qui est supporté par défaut sous Windows. Il suffira de spécifier dans le fichier de configuration Xen de la HVM:

Fichier: /etc/xen/<...>.hvm

...
usbdevice='tablet'
...

Debian et pygrub

Par défaut, xen-tools va utiliser le noyau de Dom0 pour les machines virtuelles créées.
Si on désire garder un indépendance entre les machines virtuelles, on peux utiliser pygrub pour démarrer les machines virtuelles.

Code: shell DomU
# Install grub and udev
apt-get install grub udev
# fake device mapping for grub
mkdir /boot/grub
echo "(hd0)   /dev/sda" > /boot/grub/device.map
# create gub configuration files
grub-install /dev/sda1
# Install teh Debian kernel
apt-get install linux-image-xen-686

A noter que grub-install se termine en erreur:

Searching for GRUB installation directory ... found: /boot/grub
The file /boot/grub/stage1 not read correctly.

mais ce n'est pas un problème.

Modifier ensuite le fichier de configuration de la machine virtuelle

Fichier: /etc/xen/<...>.hvm

...
# kernel      = '/boot/vmlinuz-2.6.18-xen'
bootloader="/usr/bin/pygrub"
...

Adresse MAC

Il est plus que conseillé de spécifier l'adresse MAC dans le fichier de configuration de la machine virtuelle. Par défaut Xen génère une adresse aléatoire, ce qui peux avoir des conséquences pour la machine virtuelle -- Debian assigne une nouvelle interface chaque fois qu'il rencontre une nouvelle adresse MAC lorsque udev est installé!
Si cela se produit, on peut effacer les entrées inutiles et retrouver l'adresse assignée pas Xen dans /etc/udev/rules.d/z25_persistent-net.rules.

Changement de CD-Rom

Pour pouvoir changer de media CD ou DVD durant une installation ou durant le fonctionnement classic il est ncéessaire d'utiliser les commandes xm et xenstore-read/write.

Lister les devices d'un domU nommé sles10

xm block-list sles10
Vdev  BE handle state evt-ch ring-ref BE-path
768    0    0     1      -1     -1    /local/domain/0/backend/vbd/84/768
5632    0    0     1      -1     -1    /local/domain/0/backend/vbd/84/5632

c'est quasiment tous le temps le device avec un ID élevé qui est le lecteur amovible CD/DVD

Regarder vers quel ISO le lecteur virtuel pointe

xenstore-read  /local/domain/0/backend/vbd/84/5632/params
/home/domu/iso/SuSE/SLES-10-x86-DVD1.iso

Pour changer de media il faut utiliser la commande suivante

xenstore-write /local/domain/0/backend/vbd/84/5632/params /full/path/le-nouvel-iso.iso

Bridging

Si on ne désire pas utiliser le bridge Xen (efficace mais complexe), on peut simplement modifier le fichier de configuration:

Code: shell
perl -pi -e 's@^\(network-script\ network-bridge\)$@\(network-script network-dummy\)@' \
     /etc/xen/xend-config.sxp

Et créér le bridge dans /etc/network/interfaces

Fichier: /etc/network/interfaces
auto br0
iface br0 inet dhcp
   bridge_fd 0
   bridge_maxwait 0
   bridge_helo 0
   bridge_stp off
   bridge_ports eth0

Liens

Diverses aides