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 ,

4 Responses to 'Ma vie sans libc'

  1. <

    p>[...] lancer aucun programme qui serait li

  2. debian:~# apt-get remove libc6 Reading Package Lists… Done Building Dependency Tree… Done The following extra packages will be installed: gcc-3.3-base The following packages will be REMOVED: adduser apt apt-utils aptitude at base-config base-files base-passwd bash bsdmainutils bsdutils clamav clamav-base clamav-daemon clamav-freshclam console-common console-data console-tools coreutils cpio cpp cpp-3.3 cramfsprogs cron dash debconf debconf-i18n debianutils defoma dhcp-client diff discover1 docbook-xml dpkg dselect e2fslibs e2fsprogs ed exim4 exim4-base exim4-config exim4-daemon-light fdutils file findutils fontconfig gettext-base gksu grep groff-base grub gzip hermes1 hostname hotplug ifupdown info initrd-tools initscripts ipchains iptables iputils-ping kernel-image-2.4-686 kernel-image-2.4.27-1-686 klogd lbxproxy less libacl1 libapt-pkg-perl libatk1.0-0 libattr1 libblkid1 libbz2-1.0 libc6 libcanlock2 libcap1 libclamav1 libcomerr2 libconfig-inifiles-perl libconsole libcurl3 libdb1-compat libdb3 libdb4.2 libdiscover1 libdps1 libexpat1 libfontconfig1 libfreetype6 libgcc1 libgcrypt11 libgcrypt7 libgdbm3 libgksu1.2-0 libgksuui1.0-0 libglade2-0 libglib2.0-0 libgmp3 libgnutls10 libgnutls11 libgpg-error0 libgtk2.0-0 libgtk2.0-bin libgtk2.0-common libice6 libidn11 libjpeg62 liblocale-gettext-perl liblockfile1 liblzo1 libmagic1 libncurses5 libnewt0.51 libopencdk8 libpam-modules libpam0g libpango1.0-0 libpango1.0-common libpcap0.7 libpcre3 libpng12-0 libpopt0 libscrollkeeper0 libsigc++-1.2-5c102 libsm6 libss2 libssl0.9.7 libstdc++5 libtasn1-2 libtext-charwidth-perl libtext-iconv-perl libtext-wrapi18n-perl libtextwrap1 libtiff4 libungif4g libusb-0.1-4 libuuid1 libvte4 libwrap0 libwraster2 libx11-6 libxaw7 libxcursor1 libxext6 libxft1 libxft2 libxi6 libxml2 libxmu6 libxmuu1 libxp6 libxpm4 libxrandr2 libxrender1 libxslt1.1 libxt6 libxtrap6 libxtst6 libxv1 locales localization-config login logrotate mailx makedev man-db mawk mdetect menu modutils mount nano ncurses-bin net-tools netbase netkit-inetd nvi p3scan passwd pciutils perl perl-base perl-modules ppp pppconfig pppoe pppoeconf procps proxymngr psmisc read-edid scrollkeeper sed sgml-base sgml-data slang1 slang1a-utf8 slrn ssh synaptic sysklogd sysvinit tar tasksel tcpd telnet ttf-bitstream-vera twm usbutils util-linux wget whiptail wmaker x-window-system x-window-system-core xbase-clients xdm xfonts-100dpi xfonts-75dpi xfonts-base xfonts-scalable xfree86-common xfs xfwp xlibmesa-dri xlibmesa-gl xlibmesa-glu xlibs xml-core xnest xonix xprt-common xprt-xprintorg xserver-common xserver-xfree86 xterm xutils xvfb zlib1g The following packages will be upgraded: gcc-3.3-base WARNING: The following essential packages will be removed This should NOT be done unless you know exactly what you are doing! apt libc6 (due to apt) libgcc1 (due to apt) libstdc++5 (due to apt) base-files base-passwd (due to base-files) bash passwd (due to bash) libncurses5 (due to bash) bsdutils coreutils libacl1 (due to coreutils) debianutils diff dpkg dselect (due to dpkg) e2fsprogs e2fslibs (due to e2fsprogs) libblkid1 (due to e2fsprogs) libcomerr2 (due to e2fsprogs) libss2 (due to e2fsprogs) libuuid1 (due to e2fsprogs) findutils grep gzip hostname login libpam-modules (due to login) libpam0g (due to login) mount ncurses-bin perl-base sed sysvinit initscripts (due to sysvinit) tar util-linux slang1a-utf8 (due to util-linux) zlib1g (due to util-linux) 1 upgraded, 0 newly installed, 239 to remove and 4 not upgraded. Need to get 148kB of archives. After unpacking 315MB disk space will be freed. You are about to do something potentially harmful To continue type in the phrase ‘Yes, do as I say!’

    Kevin

    6 fév 09 at 17:33

  3. Euh, comment dire ? dans fr.misc.bavargaes.linux il y a un mot qui semble un peu brotché, non ?

    tth

    13 jan 10 at 18:20

  4. @tth Hum, ce n’est pas faux. Je viens de corriger.

    mpg

    13 jan 10 at 18:39