Tout à l’heure, en voulant paramètrer un add-on Firefox, je me suis retrouvé avec un PC qui ne bootait plus (relevant xkcd). Je vous passe les détails de comment je suis arrivé là, mais comment j’ai essayé de le résoudre c’était plutôt intéressant.

En fait, pour ma configuration BTRFS + dm-crypt, j’ai besoin de trois options dans GRUB: cryptdevice pour lui dire qu’il doit déchiffrer tel disque, root pour lui dire sur quoi il doit booter (le disque déchiffré) et rootflags pour lui dire de booter sur un certain sous-volume BTRFS.

Ces trois paramètres sont définis dans ma config GRUB, sauf que depuis une mise à jour root et rootflags se génèrent automatiquement, faisant en sorte que ces deux machins soient dupliqués, ce que GRUB aime pas du tout, d’où le système non-bootable 1.

Pour corriger le problème, c’est très simple, il suffit d’enlever les paramètres en double du fichier de config, et si le système est déjà plus bootable, le faire dans l’éditeur de config integré de GRUB. Hyper simple.

Sauf que ça, je l’ai appris bien plus tard, et entre temps j’ai énormément perdu de temps. Voyez plutôt :

  1. Forcer le reboot après avoir lancé des programmes qui abusaient un peu sur l’I/O.
  2. Voir que ça démarre pas. Soupçonner la corruption disque à cause du reboot forcé.
  3. Tooter sur le fait.
  4. Survoler la config GRUB délibérément ignorer le fait qu’il y a deux root: « Bah, ça devrait pas gêner c’est deux fois la même chose » (spoiler: non).
  5. Préparer à manger en guise de procrastination en croyant connaître les étapes qui arrivent.
  6. Télécharger la dernière ISO d’Arch via DriveDroid2 sur mon téléphone, et attendre (oui ça aurait été moins con une étape plus tôt).
  7. Tenter de booter dessus via DriveDroid, voir que ça marche pas.
  8. Trifouiller les paramètres de DriveDroid.
  9. Trifouiller les paramètres de boot du PC.
  10. Lancer l’assistant de configuration de DriveDroid au cas où.
  11. Abandonner et aller chercher une clef USB et un adaptateur USB-OTG pour graver l’image dessus.
  12. Retrouver la bonne commande pour passer en root sur Termux.
  13. Vérifier si il n’y a pas d’arguments nécessaire pour graver l’image avec dd sur le wiki Arch.
  14. Se perdre sur le Arch Wiki à l’idée d’avoir une clef bootable Arch avec tous les drivers dont j’ai besoin dessus afin d’éviter 14 étapes.
  15. Tooter sur la reflexion.
  16. Lancer dd, et attendre (oui ça aurait été moins con deux étapes plus tôt).
  17. Booter sur la clef, voir que ça marche pas.
  18. Défaire les paramètres trifouillés en 9.
  19. Booter sur la clef, voir que ça marche.
  20. Entrer en mode : « Va falloir installer des trucs, il me faut une connexion internet ».
  21. Vouloir installer les pilotes Wi-Fi. Je vous passe les détails, c’est chiant.
  22. Se rendre compte que c’était pas nécessaire parce qu’ils sont déjà inclus pour ce PC là.
  23. Vouloir configurer wpa_supplicant en récupérant tant bien que mal de la conf un peu partout.
  24. Se rendre compte que j’ai foutu ma conf /etc sur un git privé et que j’ai qu’à recopier la config.
  25. Probablement quelques instants avant, se rendre compte qu’on utilie pas DriveDroid et qu’on peut faire un partage de connexion par le téléphone, c’est quand même beaucoup plus simple.
  26. Faire un pacman -Syu parce que va falloir installer des trucs.
  27. Essayer d’installer yay parce qu’on va avoir besoin de trus de AUR.
  28. Raté, il faut un compte non-root pour créer des paquets. En créer un.
  29. Lancer la création, partir manger (ça a refroidi en attendant) le temps que go se télécharge (oui j’ai pas été con cette fois. Sauf que…).
  30. Revenir, voir que ça a foiré au bout de 60 secondes parce que go est super lourd et que le disque d’installation a un espace limité d’écriture (sur la RAM).
  31. Taper la commande pour augmenter l’espace en écriture, voir que ça marche pas.
  32. Chercher sur internet la bonne commande, pas comprendre parce que c’est ce qu’on a tapé.
  33. Taper la commande pour augmenter l’espace en écriture SANS FAUTE DE FRAPPE, voir que ça marche.
  34. Attendre que go se re-télécharge.
  35. Juste quand c’est fini, se rendre compte que ça fait deux mois qu’on utilise plus ZFS mais BTRFS donc que les drivers sont déjà installés.
  36. Tant qu’on y est, ptet que dm-crypt est déjà installé. Semblerait que oui. Oh cool !
  37. Tester si bcache serait pas déjà là lui aussi. Non, modprobe bcache renvoie une erreur.
  38. Se rendre compte qu’on a qu’un seul paquet à installer depuis AUR, bcache-tools. Annuler l’installation de yay et installation manuelle de bcache-tools.
  39. Pardon, installation manuelle SANS FAUTE DE FRAPPE (oui ça m’a pris une putain de minute pour m’en rendre compte).
  40. modprobe bcache. Module pas trouvé. What?.
  41. Se rendre compte qu’en ayant fait un pacman -Syu à l’étape 26., on a installé Linux et ses headers version 5.2.8 alors que le LiveUSB a démarré en 5.2.5. Du coup on a compilé bcache pour une version qu’on lance pas.
  42. Essayer de forcer le chargement du module même si c’est pas la bonne version. Le système remarque le subterfuge, et refuse. Tsss…
  43. Vouloir redémarrer. Taper reboo et se rendre compte que vu que c’est un LiveUSB, on perdra tous les changements et on redémarrera en 5.2.5.
  44. Essayer de trouver un moyen de faire persister les changements sur la clef.
  45. Abandonner au bout de 5 minutes au regard de la complexité du truc.
  46. Redémarrer le LiveUSB en pensant au moyen d’installer tout ce qui est nécessaire pour compiler bcache-tools sans mettre à jour Linux.
  47. Taper modprobe bcache pour le voir pas trouver le module.
  48. Ça marche. QUOI !? MAIS D’OÙ ???? DSAJ3R3QIJAKLDLKAJDKLSANLKDA .
  49. Se rendre compte que bcache-tools inclus pas le module. Il est déjà inclus dans le LiveUSB, c’est juste en faisant un pacman -Syu j’ai remplacé le module du 5.2.5 par celui du 5.2.8, incompatbile.
  50. Voir que c’est marqué dans le premier paragraphe sur bcache du wiki Arch, que j’avais ouvert sur mon téléphone depuis longtemps.
  51. Aller faire un tour 10 minutes dehors, profiter du soleil pour se reconcentrer après.
  52. Suivre minutieusement les étapes de /dev/bcache device does not exist on bootup.
  53. Se planter quand même.
  54. Réussir à déchiffrer le disque, le monter.
  55. Chrooter dessus.
  56. Pardon, chrooter sur le bon sous-volume.
  57. Tenter un pacman -Syu (mer il é fou).
  58. Foutre un dahua pas possible parce que j’ai pas monter les sous-volumes des sous-volumes. Les monter.
  59. Re-tenter le pacman -Syu. Voir qu’il me demande d’accepter de nouvelles clefs PGP, les accepter.
  60. Y a beaucoup de clefs PGP à accepter. Bon, admettons, ça vient ptet du dahua.
  61. Attendre qu’il télécharge les paquets.
  62. Y a un problème avec les clefs PGP, truc corrompus ou je sais pas quoi. Supprimer ? Oui.
  63. Supprimer ? Oui. Supprimer ? Oui. Supprimer ? Oui. Supprimer ? Oui. Supprimer ? Oui.
  64. Relancer la commande. Se rendre compte que ce que j’ai supprimé tous les paquets que je venais de télécharger.
  65. Attendre que ça se re-télécharge.
  66. Pester pourquoi j’ai pas fait un pacman -Syu plus récemment.
  67. Supprimer ? NON VA TE FAIRE FOUTRE.
  68. Trifouiller avec pacman-key pour récupérer les clefs GPG. Erreur. Erreur.
  69. Supprimer TOUTES les clefs PGP, relancer un pacman-key --init et un pacman-key --populate. Aucune erreur.
  70. Relancer pacman -Syu. « J’ai pas de clef PGP ! ». Ah, je suis ptet allé un peu loin.
  71. Réinstaller archlinux-keyring comme un sale à coup de tar xzvf.
  72. Relancer un pacman-key --init et un pacman-key --populate. Erreur. Erreur. ERREUR.
  73. Chercher sur internet les messages d’erreur. Tomber sur deux bugs de 2014 et 2017 avec les mêmes symptômes mais marqué comme corrigé depuis.
  74. Ça me casse les coilles de chercher comment corriger ce problème sur mon téléphone, du coup je désactive temporairment la vérification de clefs PGP pour pacman et on verra plus tard.
  75. pacman -Syu. « Pas trouvé / ». « Pas assez d’espace disque ». « Refuse d’installer ».
  76. Ah oui, avec le chroot, / est pas réellement monté. Le monter.
  77. pacman -Syu. « Pas pu trouvé / dans /etc/mtab ». « Pas assez d’espace disque ». « Refuse d’installer ».
  78. Mais /etc/mtab c’est celui du système hôte, pas celui du chroot. Rooh, et puis va te faire foutre, je re-nique mon /etc/pacman.conf pour passer la vérification d’espace libre.
  79. pacman -Syu. J’appréhende la prochaine emmerde. Roulements de tambours… Oh ça a marché. Ben ça alors.
  80. Avec tous les hooks qu’il a lancé, je me dit qu’il a ptet corrigé le problème, un petit reboot pour tester ça peut pas faire de mal.
  81. Avant ça, je re-regarde quand même /boot/grub/grub.cfg pour voir si tout va bien, tu sais, la même chose que l’étape 4., juste pas depuis Grub directement.
  82. ENFIN, se redre compte du vrai problème. Corriger /etc/default/grub, et lancer grub-mkconfig. Rebooter.
  83. Ça reboote pas. Évidemment, j’ai lancé un chroot comme un pécore du coup moon /boot/grub/grub.cfg utilise des préfixes du genre /boot/archlinux/ au liu de /
  84. Changer les 2 occurences du préfixe dans l’éditeur de config de GRUB, rebooter.
  85. Pardon, changer les 3 préfixes. Rebooter.
  86. Pardon, changer les 4 préfixes. Rebooter.
  87. Welcome to Mario Kart Arch Linux!
  88. Voir que tout fonctionne à partir de là. Respirer.

Putain. Tout ça pour ça.

Morale de l’histoire ? Vous avez beau connaître votre domaine sur le bout des doigts, vous vous passerez toujours trois heures sur des trucs à la con.

J’ai ai dépanné des systèmes qui bootaient pas. J’en ai fait des chroots. J’ai ai parametré des systèmes avec des configurations alambiquées pour pouvoir bien comprendre comment ça fonctionne. Mais ça m’a pas enpêché de me foutre des bâtons dans les roues à une étape sur deux de la résolution de ce problème :D.

Petit message à tous les nouveaux administrateurs systèmes en herbe. Si vous passez trois heure sur un truc tout con, c’est normal, Ça arrive même aux meilleurs 3. En fait, vous avez même l’avantage de bien analyser le problème et de ne pas sauter sur des conclusions hâtives qui vous feront perdre du temps. Courage :)

Bon, sur ce je vous laisse, je dois

  1. Corriger mon grub.cfg
  2. Rectifier le bordel que j’ai mis dans mon pacman.conf
  3. Corriger le bordel des clefs de pacman
  4. Tooter pour se marrer du fait que je suis allé loin pour un souci de ce genre
  5. Écrire le toot sur un fichier parce qu’il commence à devenir long et si le navigateur crashe j’aimerais pas le réécrire
  6. Tant qu’à faire, autant publier un article de blog
  7. Oh wait
  1. J’en suis pas totalement sûr, peut-être qu’un truc que j’ai fais durant ce debug a corrigé le problème sans que je m’en rende compte. 

  2. C’est une application qui permet de faire croire à votre PC que votre téléphone est une clef USB. Vous pouvez vous en servir (entre autres) pour installer une distro avec son image d’installation, ça vous évite de la graver. 

  3. Je parle pas de moi là, hein :D