_posts/2019-08-11-un-probleme-tout-con.markdown
This commit is contained in:
		
							parent
							
								
									7942a88c28
								
							
						
					
					
						commit
						f0afe301ed
					
				
					 1 changed files with 158 additions and 0 deletions
				
			
		
							
								
								
									
										158
									
								
								_posts/2019-08-11-un-probleme-tout-con.markdown
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										158
									
								
								_posts/2019-08-11-un-probleme-tout-con.markdown
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,158 @@ | |||
| --- | ||||
| layout: post | ||||
| title:  "Un problème tout con" | ||||
| date:   2019-08-10 15:00:00 | ||||
| categories: linux grub arch probleme | ||||
| --- | ||||
| 
 | ||||
| Tout à l'heure, | ||||
| en voulant paramètrer un add-on Firefox, | ||||
| je me suis retrouvé avec un PC qui ne bootait plus ([relevant xkcd](https://www.xkcd.com/349/)). | ||||
| 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 [^passur]. | ||||
| 
 | ||||
| [^passur]: | ||||
|     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. | ||||
| 
 | ||||
| 
 | ||||
| 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. | ||||
| 1. Voir que ça démarre pas. Soupçonner la corruption disque à cause du reboot forcé. | ||||
| 1. [Tooter sur le fait](https://social.frogeye.fr/notice/9lm0GRCCNcS0ryZq0e). | ||||
| 1. 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). | ||||
| 1. Préparer à manger en guise de procrastination en croyant connaître les étapes qui arrivent. | ||||
| 1. Télécharger la dernière ISO d'Arch via [DriveDroid](https://www.drivedroid.io/)[^drivedroid] sur mon téléphone, et attendre (oui ça aurait été moins con une étape plus tôt). | ||||
| 1. Tenter de booter dessus via DriveDroid, voir que ça marche pas. | ||||
| 1. Trifouiller les paramètres de DriveDroid. | ||||
| 1. Trifouiller les paramètres de boot du PC. | ||||
| 1. Lancer l'assistant de configuration de DriveDroid au cas où. | ||||
| 1. Abandonner et aller chercher une clef USB et un adaptateur USB-OTG pour graver l'image dessus. | ||||
| 1. Retrouver la bonne commande pour passer en root sur Termux. | ||||
| 1. Vérifier si il n'y a pas d'arguments nécessaire pour graver l'image avec `dd` sur le wiki Arch. | ||||
| 1. 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. | ||||
| 1. [Tooter sur la reflexion](https://social.frogeye.fr/notice/9lm4PF3XHg5xdqyk2C). | ||||
| 1. Lancer `dd`, et attendre (oui ça aurait été moins con deux étapes plus tôt). | ||||
| 1. Booter sur la clef, voir que ça marche pas. | ||||
| 1. Défaire les paramètres trifouillés en 9. | ||||
| 1. Booter sur la clef, voir que ça marche. | ||||
| 1. Entrer en mode : « Va falloir installer des trucs, il me faut une connexion internet ». | ||||
| 1. Vouloir installer les pilotes Wi-Fi. Je vous passe les détails, c'est chiant. | ||||
| 1. Se rendre compte que c'était pas nécessaire parce qu'ils sont déjà inclus pour ce PC là. | ||||
| 1. Vouloir configurer `wpa_supplicant` en récupérant tant bien que mal de la conf un peu partout. | ||||
| 1. Se rendre compte que j'ai foutu ma conf `/etc` sur un git privé et que j'ai qu'à recopier la config. | ||||
| 1. 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. | ||||
| 1. Faire un `pacman -Syu` parce que va falloir installer des trucs. | ||||
| 1. Essayer d'installer `yay` parce qu'on va avoir besoin de trus de AUR. | ||||
| 1. Raté, il faut un compte non-root pour créer des paquets. En créer un. | ||||
| 1. 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...). | ||||
| 1. 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). | ||||
| 1. Taper la commande pour augmenter l'espace en écriture, voir que ça marche pas. | ||||
| 1. Chercher sur internet la bonne commande, pas comprendre parce que c'est ce qu'on a tapé. | ||||
| 1. Taper la commande pour augmenter l'espace en écriture SANS FAUTE DE FRAPPE, voir que ça marche. | ||||
| 1. Attendre que `go` se re-télécharge. | ||||
| 1. 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. | ||||
| 1. Tant qu'on y est, ptet que `dm-crypt` est déjà installé. Semblerait que oui. Oh cool ! | ||||
| 1. Tester si `bcache` serait pas déjà là lui aussi. Non, `modprobe bcache` renvoie une erreur. | ||||
| 1. 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`. | ||||
| 1. Pardon, installation manuelle SANS FAUTE DE FRAPPE (oui ça m'a pris une putain de minute pour m'en rendre compte). | ||||
| 1. `modprobe bcache`. Module pas trouvé. What?. | ||||
| 1. 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. | ||||
| 1. 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... | ||||
| 1. 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`. | ||||
| 1. Essayer de trouver un moyen de faire persister les changements sur la clef. | ||||
| 1. Abandonner au bout de 5 minutes au regard de la complexité du truc. | ||||
| 1. Redémarrer le LiveUSB en pensant au moyen d'installer tout ce qui est nécessaire pour compiler `bcache-tools` sans mettre à jour Linux. | ||||
| 1. Taper `modprobe bcache` pour le voir pas trouver le module. | ||||
| 1. Ça marche. QUOI !? MAIS D'OÙ ???? DSAJ3R3QIJAKLDLKAJDKLSANLKDA . | ||||
| 1. 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. | ||||
| 1. Voir que c'est marqué dans [le premier paragraphe sur bcache du wiki Arch](https://wiki.archlinux.org/index.php/Bcache), que j'avais ouvert sur mon téléphone depuis longtemps. | ||||
| 1. Aller faire un tour 10 minutes dehors, profiter du soleil pour se reconcentrer après. | ||||
| 1. Suivre minutieusement les étapes de [/dev/bcache device does not exist on bootup](https://wiki.archlinux.org/index.php/Bcache#/dev/bcache_device_does_not_exist_on_bootup). | ||||
| 1. Se planter quand même. | ||||
| 1. Réussir à déchiffrer le disque, le monter. | ||||
| 1. Chrooter dessus. | ||||
| 1. Pardon, chrooter sur le bon sous-volume. | ||||
| 1. Tenter un `pacman -Syu` (mer il é fou). | ||||
| 1. Foutre un dahua pas possible parce que j'ai pas monter les sous-volumes des sous-volumes. Les monter. | ||||
| 1. Re-tenter le `pacman -Syu`. Voir qu'il me demande d'accepter de nouvelles clefs PGP, les accepter. | ||||
| 1. Y a beaucoup de clefs PGP à accepter. Bon, admettons, ça vient ptet du dahua. | ||||
| 1. Attendre qu'il télécharge les paquets. | ||||
| 1. Y a un problème avec les clefs PGP, truc corrompus ou je sais pas quoi. Supprimer ? Oui. | ||||
| 1. Supprimer ? Oui. Supprimer ? Oui. Supprimer ? Oui. Supprimer ? Oui. Supprimer ? Oui. | ||||
| 1. Relancer la commande. Se rendre compte que ce que j'ai supprimé tous les paquets que je venais de télécharger. | ||||
| 1. Attendre que ça se re-télécharge. | ||||
| 1. Pester pourquoi j'ai pas fait un `pacman -Syu` plus récemment. | ||||
| 1. Supprimer ? NON VA TE FAIRE FOUTRE. | ||||
| 1. Trifouiller avec `pacman-key` pour récupérer les clefs GPG. Erreur. Erreur. | ||||
| 1. Supprimer TOUTES les clefs PGP, relancer un `pacman-key --init` et un `pacman-key --populate`. Aucune erreur. | ||||
| 1. Relancer `pacman -Syu`. « J'ai pas de clef PGP ! ». Ah, je suis ptet allé un peu loin. | ||||
| 1. Réinstaller `archlinux-keyring` comme un sale à coup de `tar xzvf`. | ||||
| 1. Relancer un `pacman-key --init` et un `pacman-key --populate`. Erreur. Erreur. ERREUR. | ||||
| 1. 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. | ||||
| 1. Ç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. | ||||
| 1. `pacman -Syu`. « Pas trouvé / ». « Pas assez d'espace disque ». « Refuse d'installer ». | ||||
| 1. Ah oui, avec le `chroot`, `/` est pas réellement monté. Le monter. | ||||
| 1. `pacman -Syu`. « Pas pu trouvé / dans /etc/mtab ». « Pas assez d'espace disque ». « Refuse d'installer ». | ||||
| 1. 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. | ||||
| 1. `pacman -Syu`. J'appréhende la prochaine emmerde. Roulements de tambours... Oh ça a marché. Ben ça alors. | ||||
| 1. 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. | ||||
| 1. 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. | ||||
| 1. ENFIN, se redre compte du vrai problème. Corriger `/etc/default/grub`, et lancer `grub-mkconfig`. Rebooter. | ||||
| 1. Ç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 `/`... | ||||
| 1. Changer les 2 occurences du préfixe dans l'éditeur de config de GRUB, rebooter. | ||||
| 1. Pardon, changer les 3 préfixes. Rebooter. | ||||
| 1. Pardon, changer les 4 préfixes. Rebooter. | ||||
| 1. Welcome to ~~[Mario Kart](https://youtu.be/Qxn3g9qbF3Q?t=9)~~ Arch Linux! | ||||
| 1. Voir que tout fonctionne à partir de là. Respirer. | ||||
| 
 | ||||
| [^drivedroid]: | ||||
|     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. | ||||
| 
 | ||||
| 
 | ||||
| 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 [^no_ego]. | ||||
| 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 :) | ||||
| 
 | ||||
| 
 | ||||
| [^no_ego]: | ||||
|     Je parle pas de moi là, hein :D | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue