Comment réparer une Gentoo après avoir tout cassé

Cette astuce est surtout dédiée à ceux dont le système déconne grave mais qui est toujours capable d’amorcer…

Matériel nécessaire :
[]Un liveCD équipé d’un noyau 2.6 (celui de knoppix par exemple)
[
]La dernière archive stage 1 disponible
[]toutes les sources des programmes installés ou au moins ceux de system et ceux nécessaire à l’établissement d’une connexion internet
[
]Avoir pensé à sauvegarder la liste des paquets installé avant la cata…
[*]de la patience

1 - Réalisation de la sauvegarde de la liste des paquets
Cette sauvegarde doit avoir été réalisée avant que tout n’ai été cassé car sinon, il vous faudra faire appel à votre mémoire.
La commande à lancer est :
[fixed]qpkg -I -v -nc | cut -d ’ ’ -f1 > liste-pkg[/fixed]
La liste de touts les paquets installés avec leur n° de version est enregistré dans le fichier “liste-pkg” qu’il faut garder en lieu sûr

2 - début des opérations
Lancer l’ordi à l’aide du liveCD puis montez la partition racine du votre Gentoo, par exemple, dans /mnt/gentoo
Placez vous sur cette partition puis copiez l’intégralité de votre répertoire “/mnt/gentoo/etc” ailleurs sur le disque dur et supprimez-en le contenu.

3 - Mise en place de l’environnement de récupération
Toujours depuis votre liveCD, décompressez l’archive contenant le stage 1 dans /mnt/gentoo à l’aide de la commande suivante :
[fixed]cd /mnt/gentoo
tar xjvpf stage1-blablabla.tar.bz2[/fixed]

Il faut ensuite restaurer certains fichiers importants. Depuis votre sauvegarde de /etc, restaurez :
[]fstab
[
]lilo.conf (si vous utilisez lilo)
[*]rc.conf

(chez moi, ça a suffit)
Rebootez sur le disque dur en mode “single”. Restaurez l’intégralité du répertoire /etc. Virez le gcc ~arch que vous avez installé pour ne laisser que la version stable (chez moi, c’est lui qui a foutu la merde). Assurez vous que les CFLAGS seront bien acceptés par cette version de GCC (en particulier, le “-mtune” de GCC 3.4 ne passe pas avec GCC 3.3 et vous serez insulté…)

4 - Restauration du système
On va commencer par réinstaller tous le système de base :
[fixed]emerge -e system[/fixed]
une fois le système de base réinstallé sans problème, rebootez normalement (le mode single user, c’est pas non plus le pied !)
Une fois le système réamorcé, on va restaurer tout le système.

Si vous n’avez pas pu faire une sauvegarde de tous les paquets installé avant vous allez devoir faire jouer votre mémoire puisque la base de données des paquets installés a été supprimer lors de la mise en place de l’archive stage 1 (à moins qu’il y ait une astuce que je ne connais pas).

Sinon, un petit script pourra prendre le fichier de sauvegarde et tout restaurer. Voici un exemple de script :
[cpp]
touch emerge-fait
for i in cat liste-pkg;
do
cat emerge-fait | grep $i
if test $? != 0;
then
ACCEPT_KEYWORDS="~x86" emerge “=$i”
if test $? != 0;
then
echo $i >> emerge-erreur
else
echo $i >> emerge-fait
fi
fi
done
[/cpp]

Ce script permet d’interrompre la manip et de la reprendre là où elle en était en créant divers fichiers :
[]emerge-fait : contient la liste des paquets installés avec succès
[
]emerge-erreur : contient la liste des paquets dont l’installation a foiré

Si un paquet refuse de s’installer, il se peut que ce soit dû à un problème de dépendance vis-à-vis d’un autre paquet qui lui même déconnait. On peut tenter de les ré-émerger en renommant le fichier “emerge-erreur” en “liste-pkg” et en relançant le script (il ne faut pas supprimer “emerge-fait”.

Voilà, normalement, le système devrait se retrouver fonctionnel après ça.

EDIT : mise à jour au niveau de la description du script

Sympa ton how-to. bookmarked :slight_smile:

Dommage qu’il ne soit pas paru 1 mois avant :stuck_out_tongue:

Il est paru parce que j’viens juste d’en avoir besoin (cf, mon topic avec les instructions illégales)

j’ajoute de ce pas a la liste des topics, c’est un bon exemple de sauvetage comme on les aime :smiley:

Mirchiiiiiiii !

J’vais devenir célèbre :stuck_out_tongue: [:linval]

Si vous avez des suggestions/ajouts/questions, dites le

EDIT : petite mise à jour au niveau de la description du script.