Le mpg-blog

LaTeX et autres geekeries

Ma vie sans libc

with 4 comments

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) :

  1. Démarrer sur Live CD, récent ou pas.
  2. Télécharger le .deb de la libc sur http://packages.debian.org.
  3. Monter ses partoches ou volumes LVM du système cassé quelque part.
  4. ar x lic6-*.deb où vous voulez, puis tar xf data.tar.gz à la racine du point de montage.
  5. Redémarrage sur le système anciennement cassé, et dpkg -i libc6-*.deb quand même, juste pour que les petits papiers de dpkg soient à 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).

Written by mpg

janvier 12th, 2009 at 4:46

Posted in Geekeries diverses

Tagged with ,