Pourquoi faire une page spécialement pour Lenny ? Eh bien, parce qu'il y a pas mal de changement, et que c'est moins trivial que sous Etch. Il faut comprendre que l'intégration de Xen dans des noyaux est assez complexe, la preuve, le 2.6.26 est "patché" Xen que depuis début décembre 2008 !
La plupart des commandes suivantes ne peux se faire qu'en mode administrateur, n'oubliez pas le sudo.
Commençons par installer Xen sur le système d'exploitation hôte (dom0). Première différence, l'installation ne se fera pas via le paquet Xen Linux System, ce dernier me freezant ma machine. Et si vous installer seulement la moitié des paquets, votre système refusera carrément de démarrer.
Installez les paquets suivants (les dépendances suivront) :
$ aptitude install xen-linux-system-2.6.26-2-xen-686 xen-tools
Attention, le nom du paquet dépendra de votre architecture ! (amd64 à la place de 686 si vous possédez un processeur 64 bits, comme les AMD Athlon64, Opeteron, Core2Duo, etc).
Pour être sur le noyau Xen, il est nécessaire de redémarrer. Je vous laisse donc faire un petit :
$ reboot
Avant de continuer, vérifiez que vous avez bien démarré sur le bon noyau :
$ uname -r 2.6.26-2-xen-686
Si vous avez quelquec chose du genre (contenant « xen ») c'est que c'est bon : vous pouvez passer à la config.
Nous allons créer l'endroit où les domU (systèmes invités) seront stockés :
$ mkdir -p /home/xen/domains
C'est dans le fichier /etc/xen-tools/xen-tools.conf que ça va se faire.
Après l'installation, il contient la configuration par défaut, vous pouvez donc le modifier, spécifier d'autres paramètres afin d'obtenir le système de vos rêves. Mais là encore, des petits changements avec Debian Lenny.
Voici les directives importantes, modifiez les, car par défaut, soit c'est faux, soit c'est commenté :
# Le répertoire où sont stockées les images virtuelles. dir = /home/xen # Installation via la méthode du deboostrap. install-method = debootstrap # Les caractéristiques de création par défaut de vos domU. size = 4Gb # Taille du disque virtuel memory = 128Mb # Taille de la mémoire allouée swap = 128Mb # Taille de la partition d'échange. fs = ext3 # use the EXT3 filesystem for the disk image. dist = lenny # Distribution à installer par défaut. image = sparse # Specify sparse vs. full disk images / Je sais pas ce que c'est. # 1 pour activer le dhcp (configuration ip automatique) pour vos domU soit activé, 0 sinon. dhcp = 1 # Sinon, vous pouvez mettre des IP fixes (gare au conflit !). # gateway = 192.168.1.1 # netmask = 255.255.255.0 # Si vous souhaitez copier les comptes utilisateurs de dom0 vers les domU. # accounts = 1 # À la fin de l'installation, Xen vous demandera automatiquement le password root de votre domU. passwd = 1 # Ouah, c'est bon, il s'adapte automatiquement au noyau, vive la Xen 3.2 :) kernel = /boot/vmlinuz-`uname -r` initrd = /boot/initrd.img-`uname -r` # Autant prendre le miroir le plus proche, mettez celui que vous voulez ! mirror = http://ftp.fr.debian.org/debian/ # vital si on veut un tty sur une Lenny virtuelle serial_device = hvc0 #default
Attention, je jamais mettre plus d'un mirror, c'est toujours le dernier qui est pris ! (donc ne mélangez pas les mirror ubuntu et debian par exemple). Si vous avez des problèmes de terminaux, n'hésitez pas à installer le paquet udev sur vos VM, ça règle le souci.
Note : ici, c'est tout à fait identique sous Etch ou Lenny. Ici on s'intéresse au fichier /etc/xen/xend-config.sxp.
C'est là que se trouve la configuration du « moteur » de Xen, c'est ici que l'on va choisir entre le bridge ou le NAT !
Cela dépend de l'infrastructure voulue. J'avoue préférer le NAT, mais ne vous inquiétez pas, nous allons voir comment configurer les deux.
Décommentez la ligne :
(network-script network-bridge)
Pour ma part, j'ai fait un bridge avec une interface réseau inutilisée, voici mon fichier /etc/network/interfaces :
# XEN NETWORK
auto eth1
iface eth1 inet manual
# XEN BRIDGE
auto xenbr0
iface xenbr0 inet static
address 192.168.100.254
netmask 255.255.255.0
bridge_ports eth1
bridge_maxwait 0
Et comme bien sûr, j'ai horreur de mettre des ip fixe, j'ai fait un serveur dhcp UNIQUEMENT en écoute sur le bridge. Pour ce faire, dans /etc/init.d/dhcp3-server, ajoutez ceci (plutôt en début de fichier) :
INTERFACES="xenbr0"
Ensuite, dans votre fichier de configuration de /etc/dhcp3/dhcpd.conf, voici un exemple/extrait de config :
subnet 192.168.100.0 netmask 255.255.255.0 { # remarque : le range est inversé c'est normal, en fait ça va le faire ;) range 192.168.100.100 192.168.100.1; } host monpremierDomU { hardware ethernet 00:xx:xx:xx:xx:xx; fixed-address 192.168.100.x; }
A vous de choisir l'ip fixe que vous voulez, ce qui pratique pour rendre accessible des services de l'extérieur, via des règles NAT (quand vous n'avez qu'une ip publique comme moi). Pour trouver l'adresse MAC de votre VM, pas de panique, elle est dans le fichier de configuration dans /etc/xen/monpremierDomU.cfg :)
Là c'est moins simple… Il existe la méthode "Xen s'occupe de tout" et celle "Xen s'occupe moins de tout". Comme je préfère la souplesse d'outils éprouvés, je préfère utiliser la deuxième méthode : on va utiliser dhcp3-server pour attribuer les ip aux domU's. Mais tout d'abord, à ajouter :
(network-script network-nat) (vif-script 'vif-nat dhcp=yes')
Et bien sûr, commentez :
#(network-script network-bridge) #(vif-script vif-bridge)
Ensuite, au niveau du serveur dhcp, donc dans /etc/dhcp3/dhcpd.conf, ajoutez à la fin du fichier :
subnet 10.0.0.0 netmask 255.255.0.0 { }
Relancez, puis idem pour Xen, et hop, il ajoutera tout seul les domU's dans ce fichier. Exemple concret, une fois Xen relancé et qu'un domU a été crée :
subnet 10.0.0.0 netmask 255.255.0.0 { } { hardware ethernet 00:16:3e:43:3a:51; fixed-address 10.0.11.1; option routers 10.0.11.128; option host-name "monpremierDomU"; }
Error: Device 2049 (vbd) could not be connected. Backend device not found.
Tel est le message si vous manquez de périphérique loopback.
Le remède est simple : modifiez le fichier "/etc/modules" et ajoutez ceci :
loop max_loop=64
Tout est là pour le reste : http://wiki.debian.org/Xen
D'abord on relance Xen :
$ invoke-rc.d xend restart
Puis on va créer notre première machine virtuelle :
$ xen-create-image -hostname=monpremierdomU -passwd
C'est simple : voilà que vous allez créer un domU nommé « monpremierdomU », et à la fin de l'installation, xen-tool va vous demander le mot de passe root. Pour plus de détails sur la commande xen-create-image, n'hésitez pas à faire un petit :
$ man xen-create-image
Ensuite, on lance la machine, en se basant sur son fichier de conf :
$ xm create monpremierdomU.cfg
Ce fichier de configuration se trouve dans /etc/xen/.
C'est parti, on lance !
xm console monpremierdomU
Pour détacher, attention, ça s'invente pas en azerty : Crtl + AltGr + °
D'abord, on peut utiliser le nom de la machine ou encore son ID avec la commande xm. Pour trouver l'ID, faites un :
$ xm list
La colonne ID est bien là :)
Pour démarrer une machine virtuelle avec le mode console:
$ xm create monpremierDomU.cfg -c
Pour arrêter une machine virtuelle:
$ xm shutdown monpremierDomU
Pour arrêter sans délais la machine virtuelle (arrêt immédiat):
$ xm destroy monpremierDomU
Dans les exemples suivants, on utilise l'ID (3 dans notre exemple) au lieu du nom.
Pour réduire ou ré-augmenter la taille mémoire lorsque la machine virtuelle est démarrée:
$ xm mem-set 3 32 $ xm mem-set 3 64
La valeur est en Mo. Il est possible de réduire mais pas d'augmenter la RAM plus que la valeur de la configuration.
Pour réduire ou ré-augmenter le nombre de CPU lorsque la machine virtuelle est démarrée :
$ xm vcpu-set 3 2 $ xm vcpu-set 3 4
Il est possible de réduire mais pas d'augmenter le nombre de vCPU plus que la valeur de la configuration.
Pour récupérer les messages XEN (pas Linux!) au boot:
$ xm dmesg
Liste des consoles disponible:
$ xm consoles
Mettre en pause une machine virtuelle:
$ xm pause 3
Retirer la pause d'une machine virtuelle:
$ xm unpause 3
Sauvegarder dans un fichier le disque d'une machine virtuelle:
$ xm save 3
Restaurer une machine virtuelle à partir d'un fichier:
$ xm restore 3
Récupérer les informations concernant le domaine 0:
$ xm info
Appeler l'API xend HTTP directement:
$ xm call
Avoir de l'aide en ligne sur les commandes xm:
$ xm help