Ma vie sans libc
Avoir des amis geeks, c’est mal. Ça pousse à parler de blagues de geek, ce
qui pousse à tester des trucs pas clairs. Pas plus tard qu’aujourd’hui, je
parlais à un ami du message marrant lancé par apt-get, aptitude ou dpkg
(je ne sais plus) quand on demande à désinstaller la libc : au lieu de
confirmer seulement en appuyant sur y, on doit recopier textuellement une
longue phrase du style « Oui, je sais que ça a l’air bizarre, mais je suis un
grand garçon et je veux le faire quand même ».
Petite parenthèse pour qui se demande d’où vient cette idée de désinstaller la
libc : ça fait partie du folklore de fr.misc.bavardages.linux, un
groupe iouzenette ma foi fort sympathique (voir ses conseils
d’utilisation et notamment les liens de la section 4 (alerte
procrastination) mais aussi le fortune-file (alerte bis)). La
vérification du rapport avec la désinstallation de libc est laissée
au lecteur.
Bref, souhaitant retrouver les termes exacts de la phase de sécurité en question
(pour vérifier si elle suppose bien que l’utilisateur est de sexe masculin, ce
qui ne serait pas forcément sexiste : une fille est bien trop responsable pour
désinstaller sa libc…), me voilà parti à bidouiller les trois commandes
sus-citées pour leur faire cracher le message. Quand, sûr de moi car n’ayant pas
précisé --force-remove-essential je tape (en root sur mon laptop, qui est
ma machine principale) :
dpkg --force-depends --remove libc6
à ma grande surprise ça « marche » (si l’on peut dire), sauf les scripts post-désinstallation, qui échouent, comme on devrait s’en douter. J’ai alors le plaisir d’entretenir avec mon shell préféré un dialogue aussi réjouissant que
% /bin/ls
zsh: command not found: /bin/ls
% ??!
le temps de réaliser ce que je viens de faire.
Arrivés à ce stade de votre lecture, vous êtes sans doute mort de rire. Même si
j’en suis heureux, ce n’est pas la finalité principale de ce blog, qui avait
plutôt pour but de partager des astuces techniques en LaTeX, ou en geekeries
linuxiennes. La partie technique arrive : je vais vous expliquer comment il est
facile de réinstaller sa libc. (Je lis la déception dans votre regard :
rassurez-vous, ça m’a quand même pris un bon moment avant de comprendre que
c’était facile.)
On s’arme bien sûr d’un bon Live CD, car le système n’est pas bootable (on
pourrait en fait, avec l’option init=/sbin/sash mais je ne pense pas que ça
avance à grand chose). Mon choix se porte que grml pour sa parenté avec
Debian, son état d’esprit et sa finition que j’apprécie (je pratique aussi
sysresccd à l’occasion). Je vous épargne les détails, mais je finis par
découvrir ici l’option --root de dpkg qui semble résoudre mon
problème.
Après avoir monté toutes les partition adéquates de mon disque dur (petit
instant de doute en voyant qu’il n’y a rien dans /dev/mapper, mais la FAQ grml
me conseille Start lvm et a bien raison), j’essaie et là c’est le drame : la
version de dpkg du CD grml gravé il y a un an est trop vieille pour toucher à
ma Lenny (la prochaine version de Debian) à jour. Yaka en graver une plus
récente. Ou pas, parce que graver un CD en tournant sur Live CD, euh…
Bref, vivent le boot sur clé USB, et les tutoriels qui marchent du
premier coup (c’est aussi pour ça que j’aime grml).
Deuxième essai. Ok, dpkg fait de son mieux mais c’est le script d’installation
qui marche pas : command not found: /bin/ls, ça vous dit quelque chose ?
Visiblement --root en fait un peu trop. On passe donc au 6.3.7 de la
page qui en parlait : faire soi-même le boulot de dpkg. Enfin, juste
une partie de son boulot, lui il est plus subtil. Mais ça suffit, ouf.
Donc résumé en deux mots, le how-to (même si le mieux c’est de pas commencer, hein) :
- Démarrer sur Live CD, récent ou pas.
- Télécharger le
.debde lalibcsur http://packages.debian.org. - Monter ses partoches ou volumes LVM du système cassé quelque part.
ar x lic6-*.deboù vous voulez, puistar xf data.tar.gzà la racine du point de montage.- Redémarrage sur le système anciennement cassé, et
dpkg -i libc6-*.debquand même, juste pour que les petits papiers dedpkgsoient à jour.
Morale de l’histoire : ne plus jamais tester des trucs idiots ailleurs que sur une machine de test (fut-ce une machine virtuelle ou un simple chroot).