Xen : Différence entre versions
(→Bridging) |
(→Unbreakable Linux / Red Hat / CentOS) |
||
Ligne 255: | Ligne 255: | ||
=== Unbreakable Linux / Red Hat / CentOS === | === Unbreakable Linux / Red Hat / CentOS === | ||
Voir l'article [[Unbreakable Xen]] | 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) == |
Version du 14 novembre 2007 à 11:20
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
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:
- soit télécharger de XenSource (version tarball / i386 PAE);
- soit utiliser le tarball généré au paragraphe #Compilation de Xen
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.
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
- XenSource
- The Perfect Xen 3.1.0 Setup For Debian Etch
- How to Install Windows on Xen 3.0
- Xen 3.1.0 on Debian etch amd64
- Install SUSE as Xen guest
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