Xen : Différence entre versions

Un article de Bulles.
Aller à : navigation, rechercher
M (To Do)
(Hyperviseur)
Ligne 91: Ligne 91:
  
 
Scripts de startup:
 
Scripts de startup:
{{Boite Code|shell| cd /usr/src/xen/dist/install/etc
+
{{Boite Code|shell|2=<nowiki></nowiki>
  perl -pi -e 's@LOCKFILE=/var/lock/subsys/xendomains@LOCKFILE=/var/lock/xendomains@' init.d/xendomains
+
cd /usr/src/xen/dist/install/etc
  perl -pi -e 's@XENDOM_CONFIG=/etc/sysconfig/xendomains@XENDOM_CONFIG=/etc/default/xendomains@' init.d/xendomains
+
  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
 
  perl -pi -e 's@-c0-17@-c0-37@;s@-c18-@-c38-@' init.d/xendomains
 
  cd /usr/src/xen/dist
 
  cd /usr/src/xen/dist
 
  cat >postinstall-pak <<'EOF'
 
  cat >postinstall-pak <<'EOF'
 
  #!/bin/sh
 
  #!/bin/sh
  update-rc.d xend defaults 20 21 >/dev/null || exit $?
+
  update-rc.d xend defaults 20 21 >/dev/null &#124;&#124; exit $?
  update-rc.d xendomains defaults 21 20 >/dev/null || exit $?
+
  update-rc.d xendomains defaults 21 20 >/dev/null &#124;&#124; exit $?
 
  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 || exit $?
+
  update-rc.d xend remove >/dev/null &#124;&#124; exit $?
  update-rc.d xendomains remove >/dev/null || exit $?
+
  update-rc.d xendomains remove >/dev/null &#124;&#124; exit $?
 
  exit 0
 
  exit 0
 
  EOF
 
  EOF
 
  chmod a+x postinstall-pak postremove-pak
 
  chmod a+x postinstall-pak postremove-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}})
 +
{{Boite Code|shell|
 +
# 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
 
}}
 
}}
  

Version du 25 juin 2007 à 09:24

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

En cours de rédaction

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 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.

Packages

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

Packages utiles

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

openssh-server
screen

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
# 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
# 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 Xen a accès au Frame Buffer (pas testé, car peu d'intérêt pour un serveur)

libsdl1.2-dev libvncserver-dev

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:

linux-image-2.6.18-4-xen-686

Hyperviseur

L'hyperviseur est téléchargé de XenSource (version tarball / i386 PAE)

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 $?
exit 0
EOF
cat >postremove-pak <<'EOF'
#!/bin/sh
update-rc.d xend remove >/dev/null || exit $?
update-rc.d xendomains remove >/dev/null || exit $?
exit 0
EOF
chmod a+x postinstall-pak postremove-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 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

Nous utilisons les noyeaux Debian; nettoyage:

Code: shell
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

Mettre grub à jour

Code: shell
update-grub

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 

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)

Pour créer une machine virtuelle avec les paramètres par défaut:

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 /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.

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

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

To Do

Vérifier que les paquets suivants ne sont pas nécessaires

python-twisted libcurl3-dev

Liens