Lorsqu’on recycle un serveur dont l’usage initial a changé, on peut, au choix :
Cette troisième option semble clairement la plus alléchante. Néanmoins, cela n’est en général possible qu’avec de serveur disposant du carte de management haut de gamme, sachant faire du virtual media, telles les DRAC sur les serveurs Dell.
Si l’on dispose d’une telle carte, il suffit d’envoyer à la carte de managament l’image ISO du système d’installation et d’utilisation la redirection de console pour procéder à cette dernière.
Mais si la machine n’a qu’une carte de management ne sachant que faire de la redirection de console ? On pourrait bien installer un serveur PXE sur le réseau (di-netboot-assistant facilite bien la chose)… mais c’est là qu’on s’aperçoit que la redirection du BIOS n’est pas configuré et donc qu’il est impossible de demander au système de démarrer à partir du réseau.
Et si la machine ne dispose pas du tout d’une carte de management ? Est-on vraiment obligé d’en passer par une séance de ventilateurs ?
Que nenni ! On voit qu’accourent au loin les sauveurs de l’admin. sys. : kexec et le toujours flexible debian-installer !
kexec est un mécanisme introduit dans le noyau Linux avec la version 2.6.13 (en 2005). Ce dernier permet de redémarrer un système en basculant d’un noyau Linux à un autre.
Avec kexec, on peut donc de démarrer une machine avec un noyau, un initrd et une ligne de commande sans avoir besoin d’accéder à GRUB (ou un autre bootloader).
Le système d’installation de Debian (et aussi d’Ubuntu), baptisé debian-installer a été conçu pour être extrêmement flexible. Entre autre dans les méthodes utilisés pour le démarrer.
L’une de ces méthodes, baptisée netboot est celle utilisée lorsque l’on démarre le programme d’installation par le réseau (via PXE). Cette variante ne nécessite que le noyau Linux et un initrd. Ce dernier contient uniquement les éléments du debian-installer le permettant de configurer le réseau, et ensuite de continuer tout le reste du processus d’installation à travers le réseau.
Un autre élément bien pratique du debian-installer est le module baptisé network-console. Ce dernier permet de démarrer un serveur SSH dans l’environnement d’installation, et donc de pouvoir continuer cette dernière à travers un simple client SSH.
Enfin, le mécanisme baptisé preseeding permet de préselectionner des réponses aux questions posées et donc d’automatiser tout ou partie du processus d’installation.

Pour réaliser notre petite réinstallation à distance, on va donc procéder de la façon suivante (mis en pratique sur un Dell PowerEdge 1950) :
Quelques petits aspects qu’il est toutefois important de prendre en compte :
Il vaut quand même mieux avoir a minima la possibilité de manipuler l’alimentation électrique de la machine à distance (via accès à une PDU ou commandes IPMI). Ainsi, si on se loupe avant d’avoir repartionné, il suffira de redémarrer la machine pour retrouver le système original.
Pour bien s’assurer que l’on automatise l’ensemble de l’opération jusqu’au
démarrage de network-console, cela peut-être une bonne idée de tester
avec un émulateur avant de passer à la machine de production.
Voici un exemple de fichiers de preseed du debian-installer. Il est nécessaire d’y modifier la configuration réseau, le nom de la machine, le domaine et le mot de passe pour network-console.
d-i debian-installer/language string C
d-i debian-installer/country string FR
d-i debian-installer/locale string C
d-i localechooser/supported-locales en_US.UTF-8, fr_FR.UTF-8
d-i console-keymaps-at/keymap select fr
d-i hw-detect/load_firmware boolean true
d-i netcfg/choose_interface select eth0
d-i netcfg/disable_dhcp boolean true
d-i netcfg/get_ipaddress string 192.0.2.15
d-i netcfg/get_netmask string 255.255.255.0
d-i netcfg/get_gateway string 192.0.2.1
d-i netcfg/get_nameservers string 192.0.2.10
d-i netcfg/confirm_static boolean true
d-i netcfg/get_hostname string host-mezcalito
d-i netcfg/get_domain string example.org
d-i mirror/country string manual
d-i mirror/http/hostname string ftp.fr.debian.org
d-i mirror/http/directory string /debian
d-i mirror/http/proxy string
d-i anna/choose_modules string network-console
d-i network-console/password password r00tme
d-i network-console/password-again password r00tme
On commence par télécharger et décompresser l’archive sur la machine :
# mkdir d-i ; cd d-i
# wget http://ftp.fr.debian.org/debian/dists/squeeze/main/installer-amd64/current/images/netboot/netboot.tar.gz
# tar zxf netboot.tar.gz
On va décompresser l’initrd livré avec le debian-installer :
# mkdir initrd ; cd initrd
# zcat ../debian-installer/amd64/initrd.gz | cpio -i
On ajoute ensuite les firmware non libres distribués par le projet Debian. Cela n’est nécessaire que si la carte réseau en a besoin. C’est le cas pour celles utilisant le pilote bnx2 :
# wget http://cdimage.debian.org/cdimage/unofficial/non-free/firmware/squeeze/current/firmware.tar.gz
# mkdir firmware
# tar -C firmware -zxf firmware.tar.gz
# rm firmware.tar.gz
On ajoute ensuite le fichier de preseed présenté précedemment. Ce dernier doit se trouver à la racine du répertoire initrd/ et s’appeler preseed.cfg :
# vim preseed.cfg
Reste maintenant à reconstruire l’initrd maintenant modifié :
# find . | cpio -H newc -o | gzip -9c > ../debian-installer/amd64/initrd+firmware.gz
On peut maintenant récupérer les fichiers linux et initrd+firmware.gz pour effectuer un test avec un émulateur. Par exemple, avec
qemu, la ligne de commande est la suivante :
$ qemu -enable-kvm -nographic -kernel linux -initrd initrd+firmware.gz -append 'console=ttyS0,115200n8'
Si le serveur dispose d’un accès par son port série (en direct ou par une carte de management), c’est le moment de regarder les options à passer passer au noyau
pour pouvoir en profiter. Avec GRUB 1, cela se voit dans /boot/grub/menu.lst. Pour GRUB 2, sous Debian, cela se trouve dans /etc/default/grub.
On installe le paquet kexec-tools :
# apt-get install kexec-tools
Pour éviter les suprises, on désactive le reboot avec kexec en mettant LOAD_KEXEC=false dans /etc/default/kexec.
On charge le noyau et l’initrd du programme d’installation, en passant les options du noyau qui nous intéressent (dans cet exemple, la console série est accessible par le port COM2 à 57600 bauds) :
# kexec --load --initrd=debian-installer/amd64/initrd+firmware.gz --append="-- console=ttyS1,57600n8" debian-installer/amd64/linux
Et hop, c’est parti, on redémarre :
# kexec --exec
Si on dispose d’une console série, on peut s’y connnecter pour suivre le démarrage du debian-installer. Au bout d’un moment, sur la sortie série, on doit voir un moment apparaître le message de network-console nous invitant à poursuivre l’installation par SSH.
Il ne nous reste plus qu’à nous connecter au serveur SSH. Le login
est toujours installer, et si on dispose d’un accès série, on peut
même vérifier la fingerprint pour s’assurer qu’on se connecte
au bon serveur.

Quel bonheur, quand une demi-heure plus tard, le serveur redémarre tout frais, tout neuf, sans même qu’on ait eu besoin de lui rendre visite en personne…
Note : attention, si la carte de management partage la connexion réseau avec la carte du système, l’étape de configuration réseau peut nous faire perdre la connexion à la console série. Et cela tant que le réseau n’est pas correctement configuré sur le système (et la carte « up »). Si le fichier de preseed est correct, cela ne doit pas poser de problème, si ce n’est les quelques secondes où la carte de management ne sera plus joignable.