Les Dédibox SC sont basées sur des serveurs Dell XS11-VX8, qui ont les caractéristiques suivantes :
Dans le choix des distributions Linux disponibles ont retrouve la dernière Debian, aka Squeeze.
La tentation est alors grande d'y mettre un hyperviseur Xen4.
Voici comment j'ai procédé.
/dev/sda1 Primaire ext4 /boot 200 Mo /dev/sda2 Primaire swap 1024 Mo /dev/sda3 Primaire ext4 / 10240 Mo
Je réserve le reste du disque ( =~ 150 Go) pour un futur volume LVM).
Je passe les écrans “Configuration système” et “Configuration réseau”.
Une fois installée votre Dédibox est prête à être xénifiée.
Commande en vrac à exécuter en tant que root
# apt-get udpate # apt-get dist-upgrade
# apt-get install vim sudo screen # update-alternatives --config editor (choix vim.basic) # grep ^root /etc/sudoers | sed -e 's/root/hugues/' > /etc/sudoers.d/hugues # chmod 0440 /etc/sudoers.d/hugues
Remplacer “hugues” par votre username préféré.
Créer la partition primaire /dev/sda4 de type 8e/Linux LVM. Puis créer le volume group vg0.
# apt-get install lvm2 # fdisk /dev/sda
Une fois la partition créée, je configure LVM
# pvcreate /dev/sda4 # /etc/init.d/lvm2 restart # vgcreate vg0 /dev/sda4
Debian Squeeze, y'a tout dedans.
# apt-get install xen-hypervisor-4.0-amd64 # apt-get install xen-qemu-dm-4.0 # apt-get install linux-image-2.6-xen-amd64 # apt-get install xen-tools xen-utils
La partie la plus critique consiste à identifié quel kernel sera lancé au boot. En effet il n'y a pas de déport KVM sur la dédibox SC.
# less /boot/grub/grub.cfg
Il nous reste à identifier le “menuentry” qui contient les lignes :
multiboot /xen-4.0-amd64.gz placeholder module /vmlinuz-2.6.32-5-xen-amd64 placeholder root=UUID=24bf8eef-779b-4042-965d-f8e42a721351 ro quiet module /initrd.img-2.6.32-5-xen-amd64
Chez moi c'est la 4…(0,1,2,3,4) Donc il faut modifier grub, pour que le kernel 4 soit pris au boot :
# vim /etc/default/grub [...] GRUB_DEFAULT=4
Puis mise à jour de grub et reboot.
# update-grub # reboot
Le dmesg de Xen, avant l'appel du kernel Linux
# xm dmesg
Liste des domaines instanciés, dont dom0:
# xm list Name ID Mem VCPUs State Time(s) Domain-0 0 1480 1 r----- 684.0
J'ai opté pour du NAT, et donc modifié le fichier /etc/xen/xend-config.sxp. Pour le moment ce sont les seules modifications apportées au fichier.
(network-script network-nat) (vif-script vif-nat)
Pour de plus amples informations sur la gestion du réseau par Xen Xen:Wiki:XenNetworking
Dans mon cas les DomUs seront dans le 10.0.0.0/8
Ici encore peu de modifications dans le fichier de configuration.
/etc/xen-tools/xen-tools.conf
lvm = vg0 size = 10Gb # Disk image size. memory = 256Mb # Memory size swap = 256Mb # Swap size gateway = 10.0.0.254 netmask = 255.255.255.0 broadcast = 10.0.0.255
# xen-create-image --hostname www --ip 10.0.0.1
# tail -f /var/log/xen-tools/www.log
# mount /dev/vg0/www-disk /mnt # chroot /mnt
Une fois dans l'environnement chrooté, j'effectue les opérations suivantes:
Avant de lancer la domU, il faut démonter le disk lvm
# umount /mnt
# xm create /etc/xen/www.cfg
# xm list Name ID Mem VCPUs State Time(s) Domain-0 0 1480 1 r----- 682.5 www 1 256 1 -b---- 51.8
Pour vous connecter à la domU
# xm console www
Ctrl+D pour sortir.
Comme dit plus haut, on fait du NAT. Sans rien faire vous pouvez vérifier que les scripts de Xen ont mis en place le masquerading, permettant aux domU de communiquer avec l'extérieur. Mais pour l'entrant c'est à nous de jouer avec iptables.
NB: Il y a un petit “bug” dans le script /etc/xen/scripts/network-nat. En effet celui-ci fait appel à un script qui n'existe pas. Un contournement rapide consiste à le créer.
# touch /etc/xen/scripts/hotplugpath.sh
Pour faire simple :
# vim /etc/network/if-up.d/iptables
Dont le contenu est :
#!/bin/bash IPT=/sbin/iptables XEN_NET='10.0.0.0/8' VM_WWW='10.0.0.1' ${IPT} -F ${IPT} -t nat -F echo "1" > /proc/sys/net/ipv4/ip_forward ${IPT} -t nat -A POSTROUTING -s ${XEN_NET} -j MASQUERADE ${IPT} -A PREROUTING -t nat -p tcp -i eth0 --dport 2201 -j DNAT --to ${VM_WWW}:22 ${IPT} -A PREROUTING -t nat -p tcp -i eth0 --dport 80 -j DNAT --to ${VM_WWWW}:80
Et ne pas oublier de le rendre exécutable
# chmod +x /etc/network/if-up.d/iptables
Vous pouvez appeler le script directement, pas besoin d'attendre un prochain reboot.
Voilà votre domU est joignable en http, ou en ssh sur le port 2201.
Have fun,
Hug