Il est une règle d’or sur Archlinux : il ne faut jamais forcer la main à pacman. S’il veut pas faire une mise à jour, faut l’écouter. D’ailleurs, c’est vrai pour les autres distributions.
L’exemple parfait est une énorme connerie que j’ai fait cet après-midi. Une nouvelle version de test de la glibc 2.16 était disponible. Or une des nouveautés de cette version, c’est le remplacement de /lib par un lien symbolique vers /usr/lib, surement pour une raison lié à systemd.
Ayant un logiciel qui avait installé des liens dans le répertoire /lib, la mise à jour a raté, car un logiciel y avait laissé des petits… J’ai commis l’erreur de forcer la mise à jour, ce qui m’a planté en beauté le système, le noyau ne retrouvant plus ses petits.
J’ai commis une deuxième erreur : ouvrir un bug alors que j’avais fait la connerie. Après une remontée de bretelles justifiée, ayant eu une meilleure idée, celle de poster sur la liste arch-general, j’ai eu la solution par Tom Gundersen. Petite note préliminaire : à n’appliquer que si vous ne pouvez pas faire autrement. Je ne garantis pas qu’elle fonctionnera partout.
Je la donne ici, histoire de pouvoir être utile à des personnes ayant le même problème. Il faut avoir une clé ou un CD-RW avec une ISO d’archlinux, l’idéal étant une archboot récente. On démarre dessus, et on quitte l’installateur.
Il faut monter la partition root – dans mon cas /dev/sda5 – sous /mnt
mount /dev/sda5 /mnt
Ensuite, on entre dans /mnt, et on vire /lib.
cd /mnt
rm -rf /lib
Et enfin, on applique le lien qui permet de solutionner le problème.
ln -sf /usr/lib lib
Et tout ce merdier à cause d’un paquet – je pensais au début à yaourt, mais finalement, non, c’était kvm-git (vilain paquet !) qui m’avait laissé quelques règles dans /lib/udev :/
En tout cas, j’en ai été bon pour une sacrée claque et une frayeur que je ne suis pas prêt d’oublier. Morale de l’histoire : ne pas forcer une mise à jour, et lire les notes de publications avec minutie. Même si je sens que le passage de la glibc 2.16 sur Archlinux en version stable ne sera pas de tout repos.
Héhé, sympa le tuto.
C’est pas non plus un package normal. Personnellement je prefère mettre à un kernel qu’un glibc 😛
Une fois mon glibc était HS… Impossible de revenir en arrière.
En tout cas il va servir à pas mal de gens ton articles 🙂
Surtout que pour le moment, ça ne touche que le dépot [testing] et je pense que quand cette version de la glibc sera accompagné d’un avertissement sur la page officielle, en gros, gras et large.
Et je préfère aussi une mise à jour du noyau que de la glibc…
Moi aussi j’ai eu le même problème mais je l’ai résolu autrement…
en voyant que l’update était refusée, je me suis dit « humm en cas de problème je vais installer busybox »…
Et j’ai bien fait
Busybox est un binaire statique qui contient pas mal d’utilitaires gnu. Donc même s’il n’y a plus de /lib, il est possible de le lancer et de copier, décompresser des fichiers, etc….
Du coup j’ai forcé l’upgrade, qui a foiré, en effaçant au passage mon /lib.
Et là c’est le drame:
$ ls => no such file or directory….
problème typique du linker ld-linux.so qui n’est plus présent dans /lib, puisque /lib n’existe plus…
mais heureusement, un ptit coup de:
/bin/busybox ln -s usr/lib /lib, et hop!
mon lien de /lib vers usr/lib est refait!
A partir de là, pacman veut bien m’upgrader ma glibc, il est sympa 😉
Du coup, une grosse frayer, mais pas de reboot nécessaire 😉
PS: il aurait aussi été possible avec busibox, de décompresser le glibc-xxx.pkg.xz et de récupérer les fichiers manquants, car busybox contient notemment tar et xz.
J’avoue que je ne connais pas bien busybox, donc, j’ai préféré passer par une clé USB préinstallé avec une archboot ISO récente. Sinon, au final, le résultat est le même, et une bonne frayeur au passage 😀
En tout cas c’est bien pratique. A la base ça sert surtout dans l’embarqué, ça prend pas bcp de place sur le disque et c’est tout en un 😉
Merci pour l’astuce, ça m’a évité une réinstallation que je ne pouvais me permettre.
Bonjour, j’ai fais la même erreur et votre billet ma bien aidé, merci.
Par contre, il a des « / » en trop dans vos commandes.
Règle numéro 1, ne jamais utiliser –force 😉
Régle numéro 2, poster sur le forum avant d’avoir fait la connerie et demander pouquoi ça bloque !!