Je suis Charlie

Autres trucs

Accueil

Seulement les RFC

Seulement les fiches de lecture

Ève

Dépanner un Raspberry Pi utilisé comme serveur

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)