Ceci est une ancienne révision du document !
![]() |
Le but, est d'installer un environnement Xen/Debian sur une Dédibox.
Les problèmes:
![]() ![]() |
On va essayer de ne pas trop casser les machins de monitoring installé par Dédibox.
Accès DRAC : parce que les risques de perdre le contrôle du serveur sont loin d'être nuls.
Debian Squeeze 64 bits
/boot | ext3 | 500MB |
swap | swap | 1024MB (1GB) |
/ | ext3 | 20480MB (20GB) |
<unused> |
Il est *important* d'avoir 1 partition de libre. On va créer une partition LVM2 plus tard…
D'abord, finir l'installation de la Dedibox
Dans /etc/apt/source.list
, complété en ajoutant:
# remplace "volatile": deb http://ftp.fr.debian.org/debian/ squeeze-updates main contrib non-free deb-src http://ftp.fr.debian.org/debian/ squeeze-updates main contrib non-free
et ensuite:
# aptitude update # aptitude full-upgrade
et si le noyau a été modifié (ce qui est fort probable):
# reboot
Dans /etc/sysctl.conf
, ajouter:
# En cas de crash noyau kernel.panic=300
Appliquer changement:
# sysctl -p
ou, si vous avez fait les modifs dans un autre fichier:
# sysctl -p /etc/sysctl.d/local.conf
A quoi ça sert ? a rien. donc je vire.
Ajouter dans /etc/sysctl.conf
(ou dans un sous fichier):
# désactivation du support pour les interfaces actuelles net.ipv6.conf.all.disable_ipv6 = 1 # désactivation du support de l’autoconfiguration net.ipv6.conf.all.autoconf = 0 # désactivation du support par défaut pour les nouvelles interfaces net.ipv6.conf.default.disable_ipv6 = 1 # et de l'autoconfiguration net.ipv6.conf.default.autoconf = 0
Appliquer par:
# sysctl -p <nom_du_fichier_eventuelle_ou_est_la_conf>
Pour ssh. Editer /etc/ssh/sshd_config
et décommenter la ligne:
ListenAddress 0.0.0.0
Redemarrer les services residuels, afin qu'ils “oublient” ipv6.
Voila.
Sous Debian, il faut une interface reseau bridgé pour que Xen puisse ensuite la partagé aux machines virtuelles:
# aptitude install bridge-utils
Faire en sorte que l'interface reseau qu'on va rajouter ne reponde pas aux requetes ARP qui ne la concerne pas !
Ajouter dans /etc/sysctl.conf
(ou un fichier dans ../sysctl.d/
) :
# Les requetes ARP ne traversent pas net.ipv4.conf.all.arp_ignore=1
Donc, on installe la “dummy interface” : une fausse interface reseau pour le bien de tous
Charger le pilote:
# modprobe dummy
Voila, une interface “dummy0”, non configuré, apparait.
Pour charger le pilote a chaque boot, ajouter dans /etc/modules
:
dummy
Configurer “dummy0”… dans /etc/network/interfaces
, ajouter un truc du genre:
auto dummy0 iface dummy0 inet manual auto brlan iface brlan inet static address 192.168.2.254 netmask 255.255.255.0 network 192.168.2.0 broadcast 192.168.2.255 bridge_ports dummy0 bridge_stp off bridge_maxwait 0
… où 192.168.2.0/24 est le reseau qu'on va creer. Et notre machine (physique ou Dom0) aura l'IP: 192.168.2.254
Maintenant, on peut monter l'interface:
# ifup dummy0 # ifup brlan
Voila.
LVM permet de gérer des partitions de facons trés souples, et offre de puissante fonctions comme le “snapshot” (qui ne sera pas expliqué dans ce tuto)
On a garder une partition libre: on va installer LVM2 dessus.
Installer LVM2:
# aptitude install lvm2
Créer la partition de type “LVM”.
# cfdisk /dev/sda
On sort, et a la fin:
# fdisk -l /dev/sda ... Device Boot Start End Blocks Id System /dev/sda1 1 63 506016 83 Linux /dev/sda2 64 193 1044225 82 Linux swap / Solaris /dev/sda3 194 2803 20964825 83 Linux /dev/sda4 2804 121534 953706757+ 8e Linux LVM
![]() |
Créer le “Physical Volume” :
# pvcreate /dev/sda4 Physical volume "/dev/sda4" successfully created
Vérifions:
# pvs PV VG Fmt Attr PSize PFree /dev/sda4 lvm2 a- 909,53g 909,53g
Créer un “Volume Group” :
# vgcreate vg0 /dev/sda4 Volume group "vg0" successfully created
Vérifions:
#vgs VG #PV #LV #SN Attr VSize VFree vg0 1 0 0 wz--n- 909,52g 909,52g
Voila.
On peut créer des “Volume Logique” dans le “Volume Group” vg0 (qui est sur le Volume Physique /dev/sda4
)
Installer Xen 4
# aptitude install xen-linux-system-2.6 xen-qemu-dm xen-tools
“xen-qemu-dm”, c'est pour le cas où souhaité installer des machines totalement virtualiser, comme Windows par exemple.
Vérifier les paquets installés:
# dpkg -l | grep xen ii libxenstore3.0 4.0.1-2 Xenstore communications library for Xen ii linux-image-2.6.32-5-xen-amd64 2.6.32-35 Linux 2.6.32 for 64-bit PCs, Xen dom0 support ii xen-hypervisor-4.0-amd64 4.0.1-2 The Xen Hypervisor on AMD64 ii xen-linux-system-2.6-xen-amd64 2.6.32+29 Xen system with Linux 2.6 for 64-bit PCs (meta-package) ii xen-linux-system-2.6.32-5-xen-amd64 2.6.32-35 Xen system with Linux 2.6.32 on 64-bit PCs (meta-package) ii xen-qemu-dm-4.0 4.0.1-2 Xen Qemu Device Model virtual machine hardware emulator ii xen-tools 4.2-1 Tools to manage Xen virtual servers ii xen-utils-4.0 4.0.1-2 XEN administrative tools ii xen-utils-common 4.0.0-1 XEN administrative tools - common files ii xenstore-utils 4.0.1-2 Xenstore utilities for Xen
Il faut ajuster la configuration , car dans le cas présent, “xen” ne demarrera pas par défaut.
Pour changer l'ordre du menu grub:
# cd /etc/grub.d/ # mv 10_linux 21_linux
Pour ne pas que la conf de grub prennent en charge des images LVM et attribuer quelques resources au Dom0 (et pas trop):
# TJ ------------------- GRUB_DISABLE_OS_PROBER="true" GRUB_CMDLINE_XEN="" GRUB_CMDLINE_XEN_DEFAULT="xencons=off dom0_mem=1024M dom0_max_vcpus=1 dom0_vcpus_pin=true" # ----------------------
Parce qu'on a 4 processeurs… donc on va en réserver 1 pour le Dom0 (ou plutot: garantir 1 proc au Dom0)
# cat /proc/cpuinfo | grep processor processor : 0 processor : 1 processor : 2 processor : 3
A la fin des modifs autour de grub:
# update-grub Generating grub.cfg ... Found linux image: /boot/vmlinuz-2.6.32-5-xen-amd64 Found initrd image: /boot/initrd.img-2.6.32-5-xen-amd64 Found linux image: /boot/vmlinuz-2.6.32-5-xen-amd64 Found initrd image: /boot/initrd.img-2.6.32-5-xen-amd64 Found linux image: /boot/vmlinuz-2.6.32-5-amd64 Found initrd image: /boot/initrd.img-2.6.32-5-amd64 done
Un petit coup d'oeil dans /boot/grub/grub.cfg
…
et reboot !
Aprés reboot:
# xm vcpu-list Name ID VCPU CPU State Time(s) CPU Affinity Domain-0 0 0 0 r-- 4.8 0
Voila.
Il faut mieux configurer en modifiant le fichier /etc/xen-tools/xen-tools.conf
…
Parcourir ce fichier et l'adapter a vos choix. Par exemple:
# egrep -v "^($|#)" xen-tools.conf lvm = vg0 install-method = debootstrap size = 10Gb # Disk image size. memory = 512Mb # Memory size swap = 512Mb # Swap size fs = ext3 # use the EXT3 filesystem for the disk image. dist = `xt-guess-suite-and-mirror --suite` # Default distribution to install. image = full # Specify sparse vs. full disk images. dhcp = 1 bridge = brlan genpass = 0 hash_method = sha512 kernel = /boot/vmlinuz-`uname -r` initrd = /boot/initrd.img-`uname -r` arch = amd64 mirror = `xt-guess-suite-and-mirror --mirror` ext3_options = noatime,nodiratime,errors=remount-ro ext2_options = noatime,nodiratime,errors=remount-ro xfs_options = defaults reiserfs_options = defaults btrfs_options = defaults serial_device = hvc0 #default disk_device = xvda #default
Notes:
dhcp = 1
: on s'en fout, pour ma part, je change l'IP du DomU avant son premier demarragehash_method = sha512
: Hé! On est en 2011 ! MD5 est *obsolete*Création d'une machine virtuelle (Dom0)
Par exemple: un petit DomU pour un serveur http.
# xen-create-image --hostname www --role udev --size 20G --memory 512M --swap 1G
(Y a un petit warning sur le bridge, mais on s'en fout!)
... General Information -------------------- Hostname : www Distribution : squeeze Mirror : http://ftp.fr.debian.org/debian/ Partitions : swap 1G (swap) / 20G (ext3) Image type : full Memory size : 512M Kernel path : /boot/vmlinuz-2.6.32-5-xen-amd64 Initrd path : /boot/initrd.img-2.6.32-5-xen-amd64 ...
A la fin, on a un petit fichier de conf dans /etc/xen/
portant le nom: www.cfg
Et on a 2 nouveaux volumes dans LVM.
On change la conf de www.cfg
afin de commenter la ligne:
#dhcp = 'dhcp'
![]() |
# lvs LV VG Attr LSize Origin Snap% Move Log Copy% Convert www-disk vg0 -wi-a- 20,00g www-swap vg0 -wi-a- 1,00g
Ok.
Apporter quelques corrections sur la partition… on la monte:
# mkdir /mnt/domu # mount /dev/vg0/www-disk /mnt/domu
On modifie le fichier /mnt/domu/etc/network/interfaces
afin de donner une IP dans le pool de l'interface dummy0
. Exemple:
... auto eth0 iface eth0 inet static address 192.168.2.1 netmask 255.255.255.0 gateway 192.168.2.254 ...
… sans oublier de commenter ce qui fait référence au “dhcp”.
NOTA: pas compris ça: post-up ethtool -K eth0 tx off
donc je vire.
Virer le mot de passe de root
, en virant le “*” (2ieme champ) de la ligne “root” dans le fichier:
/mnt/domu/etc/shadow
Grrrrrr…
On démonte le volume:
# umount /mnt/domu
Maintenant, tadada! on va démarrer le DomU en console !
Pourquoi ? Parce que root n'a pas de mot de passe !
C'est parti:
# cd /etc/xen # xen create www.cfg -c
C'est le “-c” a la fin qui dit: “on passe en console aussitot le DomU créé”.
......................... Debian GNU/Linux 6.0 www hvc0 www login:
Taper: root
On se connecte sans mot de passe: on se précipite pour en coller un!
Ctrl + AltGr + ] pour quitter |
Corriger quelques trucs:
/etc/resolv.conf
#nameserver 127.0.0.1 nameserver 88.191.254.60 nameserver 88.191.254.70
(Parce qu'il n'y a pas de DNS dans ce DomU !)
# adduser thierry ... # adduser thierry adm # adduser thierry staff
On devrait pouvoir ce connecter sur ssh, du Dom0 au DomU.
Du Dom0 vers le DomU www:
# ping 192.168.2.1 -c 1 PING 192.168.2.1 (192.168.2.1) 56(84) bytes of data. 64 bytes from 192.168.2.1: icmp_req=1 ttl=64 time=0.057 ms
Du DomU www:
# ping 192.168.2.254 -c 1 PING 192.168.2.254 (192.168.2.254) 56(84) bytes of data. 64 bytes from 192.168.2.254: icmp_req=1 ttl=64 time=0.070 ms
… mais il n'est pas encore possible d'atteindre le NET, pour le(s) DomU(s) !
On peut quitter le DomU.
On le voit qui tourne sur le Dom0… c'est beau…
# xm list Name ID Mem VCPUs State Time(s) Domain-0 0 1020 1 r----- 88.3 www 2 512 1 -b---- 1.8
# xm vcpu-list Name ID VCPU CPU State Time(s) CPU Affinity Domain-0 0 0 0 r-- 88.5 0 www 2 0 3 -b- 1.8 any cpu
Maintenant, il faut que les DomU puissent atteindre Internet, et aussi l'inverse, ce pourrait être interessant (surtout pour un serveur http!)
On a besoin de configurer un “forward” de port , puis un “nat” pour permettre aux machines virtuelles de voir le reseau.
On va utiliser “ferm” pour configurer “iptables”.
Faire en sorte que Xen n'utilise pas iptables
!!
Bah ouai: parce que par défaut, Xen ajoute des règles inutiles (si j'ai bien compris).
Donc:
/etc/xen/scripts/vif-bridge
et commenter la ligne # handle_iptables
Voila.
ATTENTION : ca va couper toutes les connexions, sauf ssh. Ouf.
Dans la foulée, on va mettre une conf minimale plus cool.
D'abord, monté le module ip_tables
(parce qu'il y a(vait) un bug dans ferm).
# modprobe ip_tables
Et puis on y va:
# aptitude install ferm
Repondre “Yes” pour demarrer Ferm immédiatement et/ou au boot.
Voila.
On va trés simplement d'abord créé des règles de base pour protéger son serveur.
Dans /etc/ferm
, sauvergarder la conf actuelle (qui vient de l'installation du package):
# mv {,dpkg-}ferm.conf
puis créer un nouveau fichier ferm.conf
en mettant:
# ------------------------------------ # Regles iptables avec Ferm # ------------------------------------ @def $WAN_IF = eth0; @def $WAN_IP = <IP_SUR_L'INTERFACE_eth0>; # Exemple: 88.181.12.34; chain ( INPUT OUTPUT FORWARD ) policy DROP; # --------------------- # Local # --------------------- chain INPUT if lo ACCEPT; chain OUTPUT of lo ACCEPT; # --------------------- # WAN # --------------------- chain INPUT if $WAN_IF daddr $WAN_IP { mod state state NEW { proto tcp dport ssh ACCEPT; # SSH OK proto icmp icmp-type echo-request mod limit limit 10/s ACCEPT; # PING OK proto tcp dport auth mod limit limit 10/s REJECT reject-with tcp-reset; # reject auth } mod state state ( ESTABLISHED RELATED ) ACCEPT; } # Et a la fin chain OUTPUT of $WAN_IF saddr $WAN_IP mod state state ( NEW ESTABLISHED RELATED ) ACCEPT; # ----- # EOF
![]() $WAN_IP |
Ceci fait:
# ferm -i ferm.conf
Si vous pouvez taper “Yes”, alors ça marche. Votre serveur est protégé (un peu).
Il n'y a que SSH , le ping et le port “auth” qui sont disponible pour le reste du Monde.
![]() |
Maintenant qu'on un firewall en place, on peut se permettre d'activer le “forward” entre interface.
Par exemple:
# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.d/local.conf
Appliquer maintenant (a moins que vous préfériez rebooter!) :
# sysctl -p /etc/sysctl.d/local.conf
Voila.
On va autoriser le LAN a être visible du Dom0 et réciproquement.