Un bug dans la mise à jour de dhcpcd sur Raspberry Pi Raspbian bullseye fait perdre la connexion réseau
Episode 1: La mise à jour mensuelle
Mon Raspberry Pi fonctionne sous Raspbian 11 (nom de code bullseye
) depui la fin du mois d’Août.
Le 27 Septembre, je m’adonnais à ma mise à jour système régulière avec un simple
# apt update
# apt upgrade
L’historique de cette mise à jour obtenu via apt history
ressemble à
Start-Date: 2021-09-27 18:15:04
Commandline: apt upgrade
Requested-By: username (42)
Install: [...]
Upgrade: [...], dhcpcd5:armhf (1:8.1.2-1+rpt1, 1:8.1.2-1+rpt2), [...], raspberrypi-kernel:armhf (...), [...]
End-Date: 2021-09-27 18:20:53
Le paquet dhcpcd5
(le paquet fournissant le client DHCP) allait être mis à jour.
Aucune crainte particulière à avoir ici, j’ai donc fait la mise à jour 🧘🏻.
Tout s’est bien déroulé et aucune erreur n’a été remontée 👍.
Le noyau de mon Raspberry Pi ayant été mis à jour, et aucune erreur n’ayant été reportée, je n’avais aucune raison de m’inquiéter. J’ai donc passé la commande reboot
pour redémarrer mon Raspberry Pi et j’ai attendu qu’il revienne.
J’ai attendu… et attendu… et attendu encore… ⏳ … et il n’est jamais revenu.
Episode 2: C’est moi où le réseau est down ?
Après plusieurs jours d'indisponibilité, j’ai finalement pu brancher un cable HDMI et un clavier à mon Raspberry Pi.
L’erreur était assez facile à identifier:
systemd[297]: dhcpcd.service: Failed to locate executable /usr/lib/dhcpcd5/dhcpcd: No such file or directory
systemd[297]: dhcpcd.service: Failed at step EXEC spawning /usr/lib/dhcpcd5/dhcpcd: No such file or directory
systemd[1]: dhcpcd.service: Control process exited, code=exited, status=203/EXEC
systemd[1]: dhcpcd.service: Failed with result 'exit-code'.
systemd[1]: Failed to start DHCP Client Daemon.
systemd[1]: dhcpcd.service: Scheduled restart job, restart counter is at 5.
systemd[1]: Stopped DHCP Client Daemon.
systemd[1]: dhcpcd.service: Start request repeated too quickly.
systemd[1]: dhcpcd.service: Failed with result 'exit-code'.
systemd[1]: Failed to start DHCP Client Daemon.
Ok, donc mon Raspberry Pi était incapable d’obtenir une adresse IP parce que son client DHCP n’arrivant pas à démarrer. C’est une erreur que je n’avais jamais vu.
Regardons de plus prêt le service dhcpcd
:
root@raspberrypi:~# systemctl cat dhcpcd
# /lib/systemd/system/dhcpcd.service
[Unit]
Description=DHCP Client Daemon
Wants=network.target
Before=network-online.target
Documentation=man:dhcpcd(8)
[Service]
Type=forking
ExecStart=/usr/sbin/dhcpcd -b
Restart=always
[Install]
WantedBy=multi-user.target
# /etc/systemd/system/dhcpcd.service.d/wait.conf
[Service]
ExecStart=
ExecStart=/usr/lib/dhcpcd5/dhcpcd -q -w
Ok, donc il semble que le fichier de surcharge systemd /etc/systemd/system/dhcpcd.service.d/wait.conf
pointe vers l’exécutable /usr/lib/dhcpcd5/dhcpcd
et que ce dernier n’existe pas. Le vrai exécutable étant:
root@raspberrypi:~# type dhcpcd
dhcpcd is /usr/sbin/dhcpcd
Episode 3: This Jane, is the Internet !
Voici le patch que j’ai appliqué au fichier /etc/systemd/system/dhcpcd.service.d/wait.conf
pour spécifier le bon exécutable pour dhcpcd
:
--- /etc/systemd/system/dhcpcd.service.d/wait.conf.orig 2021-10-03 18:43:27.958753332 +0100
+++ /etc/systemd/system/dhcpcd.service.d/wait.conf 2021-10-03 16:02:52.096425389 +0100
@@ -1,3 +1,3 @@
[Service]
ExecStart=
-ExecStart=/usr/lib/dhcpcd5/dhcpcd -q -w
+ExecStart=/usr/sbin/dhcpcd -q -w
J’ai ensuite pu redémarrer le service via:
# systemctl daemon-reload
# systemctl restart dhcpcd
et voila, mon Raspberry Pi a immédiatement obtenu son adresse IP et a pu discuter avec le monde entier. Problème résolu !
Ressources externes
- dhcpcd5 update broken in bullseye Raspberry Pi OS? sur le site Raspberry Pi Forum.
✍ Commentaires
Thank you!
Your comment has been submitted and will be published once it has been approved. 😊