Reset Debian

Bonjour à tous,

J’ai rencontré ces derniers temps quelques soucis avec une installation de Debian Sid qui date de 6 ans (mise à jour, évidemment). Bizarrement, je n’ai pas rencontré ces problèmes sur une installation récente (6 mois), avec pourtant les même fichiers de configuration et les même versions de paquets. Un petit extrait de ces problèmes :
[ul][li]openvpn ne configure pas les routes par défaut ni le fichier resolv.conf ;[/li]
[li]l’installation des drivers propriétaires de nvidia casse glx (voir ce thread) ;[/li]
[li]KMail n’arrive plus à récupérer les mails d’une boîte chez Yahoo ;[/li]
[li]Spotify crash régulièrement (à la première interaction avec le client après trois heures de lecture) ;[/li]
[li]des menus manquent dans la configuration de KDE (la configuration des raccourcis clavier, par exemple) ;[/li]
[li]le rétro-éclairage du clavier ne s’allume plus automatiquement au démarrage de Debian.[/li][/ul]
J’ai tenté de réparer ces problèmes en créant un nouvel utilisateur (pour remettre à zéro les préférences stockées dans le dossier $HOME), en purgeant puis réinstallant les paquets incriminés (openvpn, systemsettings, voire KDE tout entier puis X tout entier), en comparant les fichiers dans /etc entre les deux installations, mais seuls quelques problèmes (non listés ici) ont été résolus.

Comparer la totalité du système est bien évidemment un boulot trop monstrueux, et j’envisage une autre voie. Si j’en crois Raphael Plasson, une Debian est un système irréversible. Les slink créent de l’entropie, mais j’imagine que les mises à jour et installation/désinstallation de paquets en créent aussi. C’est pour ça que j’envisage la réinstallation. Mon lecteur CD étant mort, et n’ayant pas de clef USB sous la main (ni de Cd, d’ailleurs), je vais tenter la réinstallation in vivo. Mieux encore, je tente le challenge de réinstaller ma Debian sans redémarrer. Le noyau et ses modules étant les mêmes, tout devrait théoriquement passer en ne relançant que les différents services concernés.

Pour le moment, j’envisage un plan d’action de ce type :
[ul][li]Sauvegarde de /home en dehors de mon PC ;[/li]
[li]sauvegarde de la liste des paquets installés ;[/li]
[li]installation d’une Debian toute neuve dans un nouveau répertoire grâce à debootstrap ;[/li]
[li]chroot dans cette installation (ça comprend le montage des répertoires adéquats) ;[/li]
[li]mise à jour des paquets pour mettre la distribution en Sid ;[/li]
[li]rsync de cette installation fraîche vers le système courant (en ommetant /dev, /proc, /sys) ;[/li]
[li]redémarrer les services sur l’ancienne installation devenue neuve (là, c’est tricky ! Une idée serait de lister les processus actifs, de tous les killer sauf init et peut-être quelques autres, puis de relancer les services jusqu’à un retour à la normalité) ;[/li]
[li]supprimer l’installation par bootstrap ;[/li]
[li]puis du post-installation classique avec la création des utilisateurs, la réintallation des paquets intéressants, la re-configuration de tout ça…[/li][/ul]

Pour le moment, je fais des tests sur des machines virtuelles pour voir si cette idée peut fonctionner. J’avoue que je ne sens pas très bien la phase de kill des processus. Autant redémarrer apache ou sshd ne pose pas trop de problème, autant je doute que des processus appelés watchdog ou kworker puissent être impunément tués. Ça me rappelle quand je jouais à la roulette russe avec le gestionnaire des tâches de Windows XP…

Je ne demande pas vraiment d’aide. J’ai plutôt pour but de partager une expérience, mais comme je doute de l’issue, je ne poste pas dans T&A. Si cette opération est un succès, je demanderais aux modérateurs de déplacer ce sujet dans T&A et j’en fais une page du wiki.
N’hésitez pas à contribuer à cette aventure en me prévenant d’un danger que je n’aurais pas vu, en m’offrant des bières ou des pizzas.
Enfin, je sais bien qu’une réinstallation à partit d’une clef USB serait certainement plus simple. Mais j’ai soif d’aventure.

A+
Duna

Je pense d’ailleurs à faire quelque-chose d’encore plus fou. Pourquoi ne pas en profiter pour installer mon système sur des LVM ? Par chance, /home est monté sur une partition à la fin de mon disque dur. J’ai donc pensé aux étapes suivantes :
[ul][li]Démonter /home ;[/li]
[li]réduire la partition associée à /home ;[/li]
[li]créer une partition primaire à la fin du disque, sur la place libérée ;[/li]
[li]installer Debian sur cette partition ;[/li]
[li]chroot sur cette nouvelle installation ;[/li]
[li]écraser les anciennes partitions pour en faire des LVM ;[/li]
[li]copier l’installation fraîches sur les nouvelles LVM ;[/li]
[li]nouveau chroot sur l’installation sur les LVM.[/li][/ul]

Ça pourrait marcher, à condition que chroot crée un processus indépendant. Bon, j’ai l’impression de raconter des ânneries, là. L’idée est faisable, si on charge la totalité de l’installation en RAM avant d’écraser les partitions, puis qu’on redémarre l’ordinateur.

De façon similaire, il y a des différences entre un système installé directement en version stable N et un système installé en version stable N-1 et mis à jour en version N.

Les processus dont le nom commence par k et/ou qui sont entre crochets sont des processus internes du noyau. Ils ne sont pas liés à un fichier exécutable et n’ont pas à être tués (si jamais ils le peuvent).

Si tu peux le faire, ne t’en prive pas. Quand on aime bien bidouiller avec son système, LVM apporte une flexibilité appréciable (et d’autre fonctions sympa comme les snapshots). Tant que tu y es, tu peux aussi passer à btrfs si ce n’est pas déjà le cas. Soyons fous, hein. Par contre je laisserais /boot sur une partition simple en ext{2,3,4} pour assurer l’amorçage.

Pour le reste, je n’ai pas tout examiné en détail mais ça me paraît quand même délicat si tu n’as aucun moyen de booter avec un système de secours en cas de problème.

Note : il y a un environnement qui permet de faire des choses sans monter aucune partition : l’initramfs. S’il manque une commande, on peut l’ajouter ; les éventuelles bibliothèques nécessaires seront automatiquement ajoutées aussi.

C’est de l’info critique ! Merci :slightly_smiling:

Je ne connaissais pas btrfs. Tentons.

Enfin, concernant l’initramfs, j’y pense sérieusement. Deux scenarios sont envisageables.
Le premier est de garder les partitions telles quelles et d’écraser le contenu. Dans ce cas, pas besoin de changer la partition montée sur la racine. Dans ce cas, tout doit être faisable dans une tty, avec redémarrage de tous les services.
Le second scenario est de remplacer les partitions existantes pour en faire des LVM en btrfs. Ici, une étape est de changer la partition montée sur /. Démonter / alors qu’une Debian tourne dessus semble impossible. (Quoique, en théorie, on devrait pouvoir charger des outils en RAM, démonter /, puis la remonter, non ?) Dans ce cas, le passage par initramfs semble obligatoire. Mais y’a-t-il un moyen d’arrêter Debian pour redescendre en initrd, sans avoir à redémarrer totalement ?

Peut-être avec [mono]pivot_root[/mono] (qui était utilisé dans l’initrd, ancêtre de l’initramfs actuel) pour changer de racine. Mais dans ce cas il n’est pas nécessaire de passer par un initramfs, il suffit de remplir un tmpfs avec ce dont on a besoin et d’en faire la nouvelle racine. L’intérêt de l’initramfs, c’est qu’il est disponible en redémarrant.

Wow ! J’ai passé une après-midi à chercher comment changer de racine, mais je n’avais pas trouvé ça ! En particulier, dans le man, on trouve la procédure complète pour changer de racine :

mount /dev/hda1 /new-root cd /new-root pivot_root . old-root exec chroot . sh <dev/console >dev/console 2>&1 umount /old-root

C’est vraiment intéressant, en particulier le coup du exec pour avoir un processus qui ne dépend pas de la session sh courante, tournant donc sur l’ancienne racine. J’aime !

Merci pour tes conseils :slightly_smiling:

Pour information, tout a parfaitement fonctionné. J’ai pris une clef USB avec une Live-Debian. Un chroot dessus pour la mettre à jour vers une Sid, et surtout pour utiliser la même version du noyau. Je ne sais pas à quel point c’est important, mais j’ai l’intuition que c’est vital !
Une fois mise à jour, j’ai quitté le chroot, puis j’ai utilisé pivot_root comme indiqué précédemment pour migrer de la racine du disque dur vers la racine de la clef USB. À partir de là, le disque dur n’est plus utilisé (penser au swap, home, ou autre choses qui pourraient encore être utilisées). J’ai donc viré toutes les partitions pour tout réinstaller sur des LVM et partitionner en btrfs. Puis j’ai installé Debian dessus, puis même processus que précédemment pour mettre à jour via un chroot, puis pivot_root. Il ne reste qu’à démonter la clef USB et on tourne sur un système tout neuf sans avoir à redémarrer une seule fois le système !

J’ai décrit assez grossièrement le processus ici. Au moment de l’installation et des pivot_root, il y a quelques subtilités à ne pas oublier. J’en fais une page wiki bientôt.

Merci PascalHambourg pour ton aide :slightly_smiling:

On dirait de l’art, complètement inutile mais indispensable.

C’est d’ailleurs pour ça que je l’ai fait.

(Et au passage, c’est formateur !)