Découverte de XEN sur Debian Wheezy
Rédigé par Xavier - - Aucun commentaire
XEN n'est pas nouveau pour moi, j'en parlais sur ce blog en 2011. Mais à l'exception de la solution XenServer, c'était relativement obscur, compliqué, et déprécié par les distributions Linux au profil de solutions alternatives (KVM et LXC). Je pensais vraiment que Xen allait disparaitre ou sombrer dans l'oubli. En fait non car en 2014 non seulement XEN est toujours très utilisé (par exemple chez AWS, le cloud Amazon), mais il est en plus upstream dans le kernel Linux et géré par la Linux Fundation. Il est donc revenu en force dans toutes les distributions Linux. J'ai été surpris de constater que maintenant on peut l'installer et l'utiliser très facilement sur Debian Wheezy, je vais partager mon expérience sur cet article ;)
Notions Dom0 et DomU
Sur des hyperviseurs comme Hyper-V ou VMware nous sommes habitués à exécuter des machines virtuelles depuis l'hôte. Or sur XEN cette notion est différente, l'hôte devient une machine virtuelle XEN avec des privilèges d'administration nommée Dom0. Donc au démarrage votre serveur doit démarrer XEN et ensuite le Dom0 sur lequel vous vous connectez. On peut limiter la RAM et les vcpus de Dom0 comme pour les autres.
Les autres VMs que l'on va faire tourner sur XEN, et qui elles n'ont pas de privilèges particuliers, sont nommés DomU. Voici un schéma pour récapituler :

Dans le cas de cet article, le Dom0 est Debian Wheezy. Cela peut paraître assez abstrait comme ça, mais si vous le mettez en oeuvre, vous comprendrez !
Installation de Debian
L'installation se fait à partir d'une ISO tout à fait normale de Debian. Personnellement je suis parti sur une Wheezy amd64 en netinstall, donc la debian-7.4.0-amd64-netinst.iso. Il est possible d'utiliser LVM avec XEN, mais je préfère faire simple pour le moment, je choisis donc un partitionnement assisté avec tout dans une même partition.
Installation de XEN
Sur une Debian Wheezy fraichement installée, il suffit d'installer le paquet xen-hypervisor :
# apt-get install xen-hypervisor
Boot automatique sur Xen
Passer Xen en priorité dans grub :
# dpkg-divert --divert /etc/grub.d/08_linux_xen --rename /etc/grub.d/20_linux_xen # update-grub
Configuration du réseau (bridge)
Il suffit de modifier le fichier /etc/network/interfaces pour avoir un Bridge. Exemple pour moi qui suis en DHCP :
#The loopback network interface auto lo iface lo inet loopback iface eth0 inet manual auto xenbr0 iface xenbr0 inet dhcp bridge_ports eth0
Note : Si comme moi vous faites vos essais dans VirtualBox, méfiance. Si on utilise déjà un pont dans VirtualBox, xenbr0 ne fonctionnera pas correctement (les domU peuvent pinger dom0 mais pas internet). J'ai pas mal bloqué sur ce problème et finalement la solution consiste à laisser VirtualBox en NAT.
Installation des Xen Tools
Xen-tools permet de créer facilement des domU à partir de templates, et c'est la solution la plus simple :
# apt-get install xen-tools
Configuration du template Xen Tools
On édite le fichier /etc/xen-tools/xen-tools.conf. Voici les lignes à modifier pour notre cas :
dir = /home/xen size = 10Gb # Disk image size. fs = ext4 # use the EXT4 filesystem for the disk image. bridge = xenbr0 ext4_options = noatime,nodiratime,errors=remount-ro
Et voilà.
Déploiement d'un DomU Debian
Note : Il faut prendre soin de rebooter après les manipulations précédentes, afin d'avoir Xen et le Dom0 opérationnels avant d'aller plus loin.
Voici la commande pour créer un hôte de type Debian Wheezy qui sera nommé Wheezy :
# xen-create-image --hostname wheezy --dhcp --vcpus 1 --pygrub --dist wheezy WARNING ------- You appear to have a missing vif-script, or network-script, in the Xen configuration file /etc/xen/xend-config.sxp. Please fix this and restart Xend, or your guests will not be able to use any networking! General Information -------------------- Hostname : wheezy Distribution : wheezy Mirror : http://ftp.fr.debian.org/debian/ Partitions : swap 128Mb (swap) / 10Gb (ext4) Image type : full Memory size : 128Mb Kernel path : /boot/vmlinuz-3.2.0-4-amd64 Initrd path : /boot/initrd.img-3.2.0-4-amd64 Networking Information ---------------------- IP Address : DHCP [MAC: 00:16:3E:EB:96:45] Creating swap on /dev/vg0/wheezy-swap Done Creating ext4 filesystem on /dev/vg0/wheezy-disk Done Installation method: debootstrap Done Running hooks Done No role scripts were specified. Skipping Creating Xen configuration file Done No role scripts were specified. Skipping Setting up root password Generating a password for the new guest. All done Logfile produced at: /var/log/xen-tools/wheezy.log Installation Summary --------------------- Hostname : wheezy Distribution : wheezy IP-Address(es) : dynamic RSA Fingerprint : 83:21:28:49:d9:93:38:ae:5a:11:41:23:fa:3a:6e:05 Root Password : UzNRAZe4
Pour démarrer notre DomU :
# xm create wheezy.cfg Using config file "/etc/xen/wheezy.cfg". Started domain wheezy (id=2)
Pour se connecter à ce DomU, deux possibilités : avec SSH si on connaît l'IP, ou avec la commande xm console :
# xm console wheezy
Pour en sortir, arrêter la VM, ou utiliser la combinaison CTRL+]
Pour arrêter le DomU depuis le Dom0, utiliser la commande xen-delete-image :
# xm destroy wheezy
Note : la commande xm destroy va provoquer l'arrêt brutal du domU.
Déploiement d'un DomU NetBSD
Bon un DomU en Debian c'était facile parce qu'on peut utiliser xen-tools qui automatise tout. Maintenant la même chose avec NetBSD, qu'il va falloir installer à la main. Tout d'abord, on télécharge et on extrait la version installable et la version normale de NetBSD version Xen :
# wget ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-6.1.3/amd64/binary/kernel/netbsd-INSTALL_XEN3_DOMU.gz # wget ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-6.1.3/amd64/binary/kernel/netbsd-XEN3_DOMU.gz # gunzip netbsd-INSTALL_XEN3_DOMU.gz # gunzip netbsd-XEN3_DOMU.gz
Ensuite on doit créer un fichier une image qui servira de support de stockage pour le DomU :
# mkdir -p /home/xen/domains/netbsd # dd if=/dev/zero of=/home/xen/domains/netbsd/disk.img bs=1 count=0 seek=10G
Création d'un fichier de configuration pour notre domU NetBSD (il est possible de copier celui du domU Wheezy précédemment créé pour aller plus vite puis le modifier) :
# vi /etc/xen/netbsd.cfg kernel = "/root/netbsd-INSTALL_XEN3_DOMU" memory = '128' disk = [ 'file:/home/xen/domains/netbsd/disk.img,xvda1,w'; ] name = 'netbsd' dhcp = 'dhcp' vif = [ 'mac=00:16:3E:EB:96:41,bridge=xenbr0' ]
On démarre notre domU NetBSD créé (cette fois l'argument c va directement connecter la console) :
# xm create -c netbsd.cfg
On obtient ceci :

Il faut maintenant procéder à une installation personnalisée, en sélectionnant uniquement base et system (pas besoin du kernel qui ne sera pas utilisé car GENERIC) et une source HTTP ou FTP (l'équivalent du netinstall) pour récupérer les paquets.

Si tout se passe bien :

Une fois l'installation terminée, il faut modifier le netbsd.cfg pour utiliser l'autre kernel :
# vi /etc/xen/netbsd.cfg kernel = "/root/netbsd-XEN3_DOMU"
Il est maintenant possible de booter sur NetBSD :
# xm create -c netbsd.cfg
Conclusion
Xen est relativement simple à utiliser sur Debian Wheezy, grâce à Xen-tools qui facilite la création de domU à partir d'un template. Quand il s'agit de créer un domU "exotique" comme NetBSD, la procédure est un peu plus longue mais reste simple et logique. Il se positionne donc comme une solution intéressante pour les serveurs n'ayant pas le support de la virtualisation complète (Intel VT-X / AMD-V). Néanmoins lorsque ces instructions sont disponibles, les solutions alternatives telles que KVM ou ses concurrents propriétaires (Hyper-V, VMware...) me semblent toujours beaucoup plus simples à administrer et offrent des performances excellentes. Y a-t-il toujours un avenir à la paravirtualisation, qui est à mi chemin entre les containers (LXC, jails...) et la virtualisation complète ? A voir...
Mon bilan est positif sur l'utilisation, mais je me questionne toujours sur la pertinence de Xen en 2014.