Skip to content


Création de machines virtuelles (CentOS6) avec Xen sous Debian Squeeze

Introduction

Dans le cadre d'une recherche d'expertise sur le sujet de la virtualisation avec Xen, j'ai appris et créé des machines CentOS6 sous Debian.

Ma machine physique 64bits avec 4Go de mémoire vive comprend une carte mère : Asus P5KPL avec un processeur : Intel(R) Core(TM)2 Duo CPU E8200 à 2.66GHz.

Je place içi le résulat de ifconfig -a de ma machine :

eth0     Link encap:Ethernet  HWaddr aa:00:04:00:0a:04 
          inet adr:192.168.1.7  Bcast:0.0.0.0  Masque:255.255.255.0
          adr inet6: fe80::a800:4ff:fe00:a04/64 Scope:Lien
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:5336 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5618 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:0
          RX bytes:5005800 (4.7 MiB)  TX bytes:1152601 (1.0 MiB)
 
lo        Link encap:Boucle locale 
          inet adr:127.0.0.1  Masque:255.0.0.0
          adr inet6: ::1/128 Scope:Hôte
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:4763 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4763 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:0
          RX bytes:273921 (267.5 KiB)  TX bytes:273921 (267.5 KiB)

Paquets à installer

apt-get install linux-image-2.6.32-5-xen-amd64 xen-tools xen-utils-4.0 xenstore-utils \
xen-linux-system xen-qemu-dm-4.0 xen-tools xenwatch

Une fois installés et que votre boot est mis à jour, redémarrez sur le noyaux amd64....: Debian GNU/Linux, with Linux 2.6.32-5-xen-amd64 and XEN 4.0-amd64

Configuration de Xen

Tout d'abord le fichier à configurer est : /etc/xen/xend-config.sxp

La partie chez moi est configurer ainsi

##
# To bridge network traffic, like this:
#
# dom0: ----------------- bridge -> real eth0 -> the network
#                            |
# domU: fake eth0 -> vifN.0 -+
#
# use
#
# (network-script network-bridge)
#
# Your default ethernet device is used as the outgoing interface, by default.
# To use a different one (e.g. eth1) use
#
# (network-script 'network-bridge netdev=eth1')
#
# The bridge is named xenbr0, by default.  To rename the bridge, use
#
(network-script 'network-bridge bridge=ixen0')

La ligne à remarquer est : (network-script 'network-bridge bridge=ixen0')

le résultat de la commande :

grep "^(" /etc/xen/xend-config.sxp

root@debian:~# grep "^(" /etc/xen/xend-config.sxp
(logfile /var/log/xen/xend.log)
(loglevel DEBUG)
(network-script 'network-bridge bridge=ixen0')
(dom0-min-mem 512)
(enable-dom0-ballooning yes)
(total_available_memory 0)
(dom0-cpus 0)
(vncpasswd '')

Le service xend (qu'il faut relancer service xend restart )prend alors en charge la configuration du réseau et ifconfig -a devient :

ixen0     Link encap:Ethernet  HWaddr aa:00:04:00:0a:04 
          inet adr:192.168.1.7  Bcast:0.0.0.0  Masque:255.255.255.0
          adr inet6: fe80::a800:4ff:fe00:a04/64 Scope:Lien
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:5336 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5618 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:0
          RX bytes:5005800 (4.7 MiB)  TX bytes:1152601 (1.0 MiB)
 
lo        Link encap:Boucle locale 
          inet adr:127.0.0.1  Masque:255.0.0.0
          adr inet6: ::1/128 Scope:Hôte
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:4763 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4763 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:0
          RX bytes:273921 (267.5 KiB)  TX bytes:273921 (267.5 KiB)
 
peth0     Link encap:Ethernet  HWaddr aa:00:04:00:0a:04 
          adr inet6: fe80::a800:4ff:fe00:a04/64 Scope:Lien
          UP BROADCAST RUNNING PROMISC MULTICAST  MTU:1500  Metric:1
          RX packets:152867 errors:0 dropped:0 overruns:0 frame:0
          TX packets:94493 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:1000
          RX bytes:224413958 (214.0 MiB)  TX bytes:7250172 (6.9 MiB)
          Interruption:18 Adresse de base:0x4c00
 
tmpbridge Link encap:Ethernet  HWaddr ba:3e:bf:4f:84:34 
          inet adr:192.168.1.7  Bcast:0.0.0.0  Masque:255.255.255.0
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
 
vif1.0    Link encap:Ethernet  HWaddr fe:ff:ff:ff:ff:ff 
          adr inet6: fe80::fcff:ffff:feff:ffff/64 Scope:Lien
          UP BROADCAST RUNNING PROMISC MULTICAST  MTU:1500  Metric:1
          RX packets:88570 errors:0 dropped:0 overruns:0 frame:0
          TX packets:147351 errors:0 dropped:47 overruns:0 carrier:0
          collisions:0 lg file transmission:32
          RX bytes:4826481 (4.6 MiB)  TX bytes:218987255 (208.8 MiB)

La carte "eth0" à disparue au profit de "ixen0" la carte indiqué dans le fichier xend-config.sxp. Par ailleurs les cartes "tmpbridge" et "peth0" sont créées par xend...

La carte "ixen0" sera utilisée par les fichiers de configuration des machines virtuelles...

Le résultat de la commande iptables-save :

root@debian:~# iptables-save
# Generated by iptables-save v1.4.8 on Mon Mar 11 21:44:24 2013
*filter
:INPUT ACCEPT [427695:510948244]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [256993:26616905]
-A FORWARD -m state --state RELATED,ESTABLISHED -m physdev --physdev-out vif1.0 -j ACCEPT
-A FORWARD -p udp -m physdev --physdev-in vif1.0 -m udp --sport 68 --dport 67 -j ACCEPT
-A FORWARD -m state --state RELATED,ESTABLISHED -m physdev --physdev-out vif1.0 -j ACCEPT
-A FORWARD -s 192.168.1.10/32 -m physdev --physdev-in vif1.0 -j ACCEPT
-A FORWARD -j ACCEPT
COMMIT
# Completed on Mon Mar 11 21:44:24 2013

la commande

grep forward /etc/sysctl.conf

root@debian:~# grep forward /etc/sysctl.conf
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1
# Uncomment the next line to enable packet forwarding for IPv6
net.ipv6.conf.all.forwarding=1

Les modules à charger

cat /etc/modules
xen-blkfront
xen-fbfront
xen-netfront
xen-kbdfront

Création de l'environnement d'une machine virtuelle

Pour créer une machine il faut créer un fichier de configuration d'installation....

Par exemple : /etc/xen/centos6-install

kernel = "/media/data2/MountISO/XEN/Centos/isolinux/vmlinuz"
ramdisk = "/media/data2/MountISO/XEN/Centos/isolinux/initrd.img"
name = "centos6"
memory = "512"
disk = [ 'file:/media/data2/MountISO/XEN/centos6.img,xvda,w', 'file:/media/data2/MountISO/NotreApplication-CentOS/CentOS-6.4-x86_64-netinstall.iso,xvdc:cdrom,r' ]
vif = [ 'bridge=ixen0 , ip=192.168.1.10', ]
bootloader="/usr/bin/pygrub"
extra = "text ip=192.168.1.10 netmask=255.255.255.0 gateway=192.168.1.254 dns=192.168.1.5 ksdevice=bootif ks=http://192.168.1.5/kickstart-centos6-x86_64.cfg"
vcpus=1
on_reboot = 'destroy'
on_crash = 'destroy'

On peut récupérer vmliuz et initrd.img ici : http://mirror.centos.org/centos/6/os/x86_64/isolinux/

On crée l'image disque centos6.img de 50Go par

dd if=/dev/zero of=/media/data2/MountISO/XEN/centos6.img oflag=direct bs=1M seek=51200 count=1

L'image iso : http://centos.mirror.fr.planethoster.net/6.4/isos/x86_64/CentOS-6.4-x86_64-netinstall.iso

En suite il faut créer un fichier kickstart si l'on ne veut pas répondre interactivement à l'installation. Un fichier minimal est disponible ici : http://grantmcwilliams.com/files/kickstart-minimal6-x86_64.cfg

Merci à Mc William : http://grantmcwilliams.com/item/538-centos-6-virtual-machine-64-bit-installation-on-xen

En suite il faut l'héberger sur un serveur web : http://192.168.1.5/kickstart-centos6-x86_64.cfg ou à partir de http://grantmcwilliams.com/files/kickstart-minimal6-x86_64.cfg

Voici le mien :

# Kickstart file automatically generated by anaconda.
# Modified for Notre Application installation on CentOS 6.x
# Destroyed by lolo but works well ! 🙂
 
#version=DEVEL
install
cdrom
 
lang fr_FR.UTF-8
keyboard fr-latin9
timezone --utc Europe/Paris
 
network --onboot yes --device eth0 --mtu=1500 --bootproto dhcp --hostname application
 
rootpw  --iscrypted XLd7qu85Sl8Og
 
text
 
firewall --service=http --service=ssh
 
authconfig --useshadow  --passalgo=sha512
 
bootloader --location=mbr --driveorder=xvda --append="quiet biosdevname=0"
 
clearpart --initlabel --drives=xvda
part / --fstype=ext4 --fsoptions="noatime" --size=5120
part swap --size=2048
part /home --fstype=ext4 --fsoptions="noatime" --size=10240
part /var --fstype=ext4 --fsoptions="noatime" --size=1 --grow
 
selinux --disabled
 
services --enabled=sshd,httpd,mysqld,memcached,munin-node --disable=kdump,postfix
 
%packages
    @Base
    @Core
    glibc.i686
    httpd
    httpd-devel
    memcached
    mysql-bench
    mysql-test
    mysql
    openssh-server
    php
    php-ldap
    php-mysql
    php-cli
    php-xml
    php-mbstring
    php-intl
    php-xsl
    php-zip
    php-iconv
    php-pdo_mysql
    php-pdo
    php-devel
    php-pear
    php-posix
    php-gd
    php-pgsql
    php-intl
    php-soap
    php-eaccelerator
    vim-enhanced
    at
    bc
    pm-utils
    procmail
    hdparm
    lsof
    acpid
    anacron
    info
    man-pages
    sharutils
    strace
    sudo
    tree
    xdg-user-dirs-gtk
    wget
    screen
    zip
    unzip
    samba-client
    mc
    rsync
    ntp
    gcc
    make
    sysstat
    zlib-devel
    ntp
    ntpdate
    htop
    iozone
    phpMyAdmin
    mod_ssl
    openssl
    munin
    munin-node
    ftp.x86_64
 
%end
 
%pre
  echo -e "$VERT" "- Vérification de l'intégrité du CDROM"  "$NORMAL"
  ( cd /mnt/stage2 && md5sum -c MD5SUM.APPLICATION > /dev/null ) || ( echo -e "$ROUGE" "Erreur lors de la vérification de l'intégrité du CDROM, veuillez contacter le support technique de Notre Application par téléphone au 04 26 10 06 36 ou par courriel à l'adresse support@application.com."  "$NORMAL" ; bash )
 
  echo -e "$VERT" "- Vérification de la place disque"  "$NORMAL"
  (
    TAILLE=$(sfdisk -s | grep xvda | head -n1 | cut -d":" -f2)
    TAILLEHUM=$(expr $TAILLE / 1024 / 1024)
    if [[ $TAILLEHUM -lt 50 ]]
    then
           echo -e "$ROUGE" "Taille de $TAILLEHUM Go insuffisante pour l'installation de Notre Application ! Veuillez contacter le support technique de Notre Application par téléphone au 04 26 10 06 36 ou par courriel à l'adresse support@application.com."  "$NORMAL" && bash
    elif [[ $TAILLEHUM -lt 100 ]]
    then
           echo -e "$ORANGE" "  --->   Pré-requis de 100 Go, votre disque dur à une taille de $TAILLEHUM Go."  "$NORMAL"
           echo -e "$ORANGE" "  --->   Nous vous recommandons une taille de disque dur de 100 Go pour l'installation de Notre Application."  "$NORMAL"
    fi
  )
 
  echo -e "$VERT" '- Installation du systÚme'  "$NORMAL"
 
  # Crée une table de partition msdos vide
  for DISKNAME in $(ls /dev/xvd[a-z])
  do
    dd if=/dev/zero of=$DISKNAME bs=512 count=1
    parted -s $DISKNAME mklabel msdos
  done
 
%end
 
%post --nochroot
 
  # Copie des scripts dans les bons répertoires
  echo -e "$VERT" '- Copie des fichiers nécessaires à Notre Application' "$NORMAL"
  mkdir /mnt/sysimage/root/.logs
  cp -rv --no-preserve=all /mnt/source/data/* /mnt/sysimage/ >> /mnt/sysimage/root/.logs/Install-application.log 2>&1
 
%end
 
%post --logfile /root/.logs/post-chroot.log
 
  echo  -e "$VERT" '- Installation de Notre Application, veuillez patienter...' "$NORMAL"
  bash /var/tmp/application/install_application.sh 0 >> /root/.logs/Install-application.log 2>&1 || ( touch /var/tmp/erreur_application && exit 1 )
 
  # Modification de la base de données application
  # Modification du mot de passe root
  if  mysqladmin -u root -h localhost password "thisisnotthepassword" &&\
      mysql -uroot -pthisisnotthepassword -D mysql -e "update user set password='201ea7e46165207b' where user='root'"
  then
      echo "";
  else
      echo -e "$ROUGE ProblÚme lors de la configuration de MySQL $NORMAL";
  fi
 
%end
 
%post --nochroot
 
    if [ -f /var/tmp/erreur_application ]
    then
    echo
        echo -e "$ROUGE" 'Erreur d'"'"'installation. Veuillez contacter le support technique de Notre Application par téléphone au xx xx xx xx xx ou par courriel à l'"'"'adresse support@application.com.'  "$NORMAL"
    else
        chroot /mnt/sysimage eject
        echo  -e "$VERT" 'Appuyez sur la touche Entrée pour redémarrer'  "$NORMAL"
        read
        kill -9 $(pidof python)
        for i in $(seq 1 30);do echo > /dev/tty1;done
        reboot
    fi
 
%end

Création de la machine virtuelle

# xm create /etc/xen/centos6-install -c

Si tout est bien paramétré : on obtient le boot, l'installation puis le redémarrage

xen-installation-01

Le démarrage de la machine virtuelle

Il faut créer un fichier presque identique à celui de l'installation, mais l'on ne spécifie pas le vmlinuz et initrd ni le kickstart...

Voici le miens : /etc/xen/centos6

name = "centos6"
memory = "512"
disk = [ 'file:/media/data2/MountISO/XEN/centos6.img,xvda,w',  ]
vif = [ 'bridge=ixen0 , ip=192.168.1.10', ]
bootloader="/usr/bin/pygrub"
vcpus=1
on_reboot = 'restart'
on_crash = 'restart'

Pour lancer la machine tout en voyant la console :

xm create /etc/xen/centos6 -c

Et voici :

xen-installation-03

xen-installation-02

Ce qui donne pour l'application distribuée par mon entreprise :

xen-installation-06

Il reste quelques zones d'ombres :

- pourquoi ai-je tant peiné pour le réseau et le pont !?

- comment avoir plusieurs tty en virtu sous Xen ?

- etc.

Sinon bonne virtu !

- Fin -

Print Friendly, PDF & Email

Posted in Debian, Important, Linux, Technique, Toutes, Virtualisation, Xen. Tagged with , , , , , , .

2 Responses

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.

  1. Francia said

    J’ai réussi à créer une machine virtuelle via Xen grâce à une vidéo sur http://www.alphorm.com/tutoriel/formation-en-ligne-xensources. En tout cas, je vais essayer aussi ce tutoriel pour créer une VMs avec Xen sous Debian. Merci pour ce partage.

  2. Chantal said

    Super tuto. Depuis ma formation sur http://www.alphorm.com/tutoriel/formation-en-ligne-xensources ma machine est sous XENSources. Ça ne m’empêche pas de voir d’autres tutoriels comme le tien que je trouve très instructif.

Some HTML is OK

(required)

(required, but never shared)

or, reply to this post via trackback.

Time limit is exhausted. Please reload CAPTCHA.


/* */
Creative Commons License
Cette création par Laurent Besson est mise à disposition selon les termes de la licence Creative Commons Paternité-Partage des Conditions Initiales à l'Identique 2.0 France.