Première rédaction de cet article le 27 juin 2015
Parmi les joies de l'administration système, il y a le dépannage d'un serveur headless (sans console physique, ni écran ni clavier), lorsque ce dernier ne veut pas redémarrer. Comment faire sur un Raspberry Pi ?
(Si vous ne connaissez pas le Pi, il y a aussi un de mes articles.) Si le Pi est habituellement connecté à une télévision et à un clavier, on voit le processus de démarrage du système et on peut intervenir. Mais c'est plus facile à dire qu'à faire, car un Pi qui ne démarre pas et qui dit juste :
Requested init /bin/systemd failed (error -2) kbd>
a de quoi laisser perplexe même l'administrateur système Unix expérimenté. Ce problème m'est arrivé avant-hier après une mise à jour d'Arch Linux. Ce système, en raison de ses rolling releases est évidemment plus vulnérable à ce genre de problèmes qu'un système très stable comme Debian, mais aucun système n'est 100 % à l'abri. Un jour ou l'autre, on se retrouve avec uniquement la diode rouge et le Pi qui n'est plus joignable en SSH.
Les gros serveurs dans les centres de données ont des cartes d'accès à distance comme les DRAC de Dell. Mais le Pi, très bon marché, n'a rien de tel. Brancher une télé, avec le câble HDMI, permet d'avoir au moins le message d'erreur. Curieusement, la plupart des articles qu'on trouve avec DuckDuckGo indiquent des méthodes compliquées pour réparer, avec des commandes tapées au clavier du Pi défaillant. Mais je trouve qu'il y a bien plus simple.
La méthode que j'ai utilisé la plupart du temps est simplement d'éteindre le Pi, de prendre la carte SD et de la mettre dans un PC Linux où on pourra réparer tranquillement. Bien sûr, cela nécessite d'avoir un PC sous la main mais je suppose que peu de gens ont un Pi sans aucun autre ordinateur.
Une fois la carte SD montée sur la machine Linux, on a alors un environnement Unix complet pour investiguer, et réparer. Cela va bien plus vite.
Et quel était le problème dans le cas cité plus haut ?
Au cours de la mise à jour, Arch Linux avait
mis dans les instructions de démarrage
init=/bin/systemd
alors que systemd était dans
/lib/systemd
. init est le
premier programme en mode utilisateur qui est lancé par le
noyau Linux du Pi, et l'erreur -2 voulait
simplement dire qu'il n'était pas trouvé. Sur la carte SD montée sur
un PC de secours, un ln -s /lib/systemd/systemd
/bin
a suffit à réparer, en mettant un lien
symbolique depuis le nom utilisé vers le « vrai » nom. Une
autre solution aurait évidemment été d'éditer le
cmdline.txt
(qui se trouve dans l'autre partition
de la carte SD, la première, celle formatée en
VFAT), et de remplacer
init=/bin/systemd
par init=/lib/systemd/systemd
.
Version PDF de cette page (mais vous pouvez aussi imprimer depuis votre navigateur, il y a une feuille de style prévue pour cela)
Source XML de cette page (cette page est distribuée sous les termes de la licence GFDL)