#1 Le 12/12/2006, à 09:38
- m2nis
Restaurer (tous) les paquets après un "rm" malheureux
Contrairement aux apparences, ouvrir un sujet en mettant déjà "résolu" n'est pas une idée si farfelue. L'objectif est juste de partager une solution que je n'avais pas trouvée sur ce forum (même si certains sujets m'ont mis sur la bonne piste de recherche) et qui pourrait à mon avis en sauver quelque-uns.
On ne le répètera jamais assez, mais la commande "sudo rm -r -f" est très dangereuse. A chaque fois que je l'utilisais, je prenais mille précautions pour ne pas faire de boulette. Et puis hier, la faute d'inattention de trop, l'erreur à ne pas faire, bref, la catastrophe (même si ça aurait finalement pu être pire). Au lieu de faire "sudo rm /usr/share/mon_prog/* -r -f", j'ai oublié un niveau et tapé "sudo rm /usr/share/* -r -f". Aïe aïe aïe
J'ai limité un peu la casse en voyant que le résultat de la commande n'était pas immédiat comme il aurait du l'être. Un rapide "Ctrl+C" a stoppé l'hémorragie à... /usr/share/doc. Mais ça fait pas mal de disparus quand même. Avec tout ça, le système tourne encore, mais je n'ai plus rien dans les menus et pas la moindre idée des paquets qui ont été cassés.
Mais premières recherches se tournent vers la récupération des fichiers perdus façon "undelete". Et là, je comprends vite mon malheur. Sur ext3, il n'existe rien ou presque. Quelques utilitaires visiblement orientés vers la récupération de photos et quelques autres programmes de gurus un peu obscurs et visiblement pleins de limitations.
Je prends donc le risque de redémarrer ma machine. La session standard ne fonctionne plus, mais la session de secours se lance correctement. Toujours rien dans les menus, mais mon navigateur configuré pour se lancer au démarrage me simplifie la tache.
Nouvelles recherches et je finis par trouver que:
-apt-get --reinstall install <nom_du_paquet> permet de réinstaller un paquet déjà installer et donc de corriger les problèmes de fichiers éventuellement manquants.
-dpkg permet de lister les paquets installés.
Ne connaissant pas les paquets cassés, il me fallait forcer la réinstallation de tous les paquets. Et mes tests pour lier les deux commandes n'étaient pour le moins pas très concluants.
La solution (j'y arrive ), c'est sur cette page que j'ai fini par la trouver:
http://forums.knoppix-fr.org/viewtopic.php?pid=69115
Je recopie le message qui sauve au cas où le lien viendrait à disparaitre et remercie au passage chaleureusement son auteur (raoul):
Salut,
Pour reinstaller tout le système tu peux passer une commande du genre :
# apt-get --reinstall install `dpkg --get-selections | awk '{ if ($2 == "install") print $1 }' | perl -e 'while($pkg = <STDIN>){ $pkg =~s/\n/ /; print $pkg }'`
Ca marchera si tous les packages sont disponibles et qu'il n'y a pas de problème de dépendances.
Ca peut être utile uniquement dans le cas où le problème est dut à une mauvaise manipe ( suppression de fichiers ) ou à un problème de disque dur ayant engedré une perte de donnée.
C'est beaucoup plus puissant qu'une reinstallation de windows vu que ça reinstalle aussi toutes les applications.
Ca m'est arrivé de le faire une fois suite à de très gros problèmes de disque dur l'alime de la machine était à moitié morte donc les disque durs s'arrêtaient, la machine rebootait en boucle et à la fin elle avait même plus le temps de terminer ses verrifications/réparation de disque. Après changement de l'alime, elle est repartie avec un dossier lost+found bien remplit et n'était plus très stable. Cette manipe a reglé le problème.Il n'est pas rare que quelques packages posent problème, dans ce cas il faut faire la manipe en plusieurs fois :
Créer la liste des packages installés :# dpkg --get-selections | awk '{ if ($2 == "install") print $1 }' > packages.list
Puis editer le fichier et retirer les packages qui posent des problèmes de dépendances ou ne sont pas disponibles
# apt-get --reinstall install `cat packages.list | perl -e 'while($pkg = <STDIN>){ $pkg =~s/\n/ /; print $pkg }'`
et recommancer jusqu'a ce que ça veuille bien passer.
Ce genre de réinstallation ne modifie ni la configuration ni les fichiers utilisateurs.
Il est rare d'en venir à de telles extrémités, linux étant très bavard, on sait généralement d'ou vient le problème et on réinstall juste ce qu'il fautS'il y a un problème de configuration il y a la commande dpkg-reconfigure nom-du-package-qui-m..de.
Lorsqu'une installation/mise à jour est interrompue apt-get donne la commande qui reglera le problème, généralement dpkg --configure -a ou apt-get -f install.
Bien sure si le système ne démarre plus dutout toutes ces manipes sont réalisables depuis un live CD en environnement chrooté.
Je n'ais jamais eu besoin de réinstaller une debian, il y a toujours un moyen de la récupérer... même avec un /var/lib/dpkg/status endomagé (le fichier qui contient les informations sur les packages installés etc.) il exite un moyen de le recréer à partir de rien.
Si tu veux reproduire une installation à l'identique (les même packages) c'est très simple :
Sur la machine qui sert de modèle :# dpkg --get-selections > ma_selection.list
Sur la machine fraichement installée :
# dpkg --set-selections < ma_selection.list # apt-get dselect-upgrade
apt est un outil d'une puissance extra-ordinaire, on fait presque tout ce qu'on peut imaginer avec, même les trucs les plus loufoques :
J'ai déjà down-gradé une debian unstable vers stable, migré une knoppix installée vers debian (totalement) et dernièrement une Ubuntu vers debian (contrairement à knoppix, ubuntu utilise ces propres packages).Si ça ne suffit pas à te rassurer cherches "apt howto" dans google.
La reinstallation n'est jamais la bonne solution sous Debian, il est toujours posible de réparrer, beaucoup plus facilement que dans Windows, en général on gagne du temps et on apprend des choses en réparant. Le système ne se corromp jamais tout seul, une corruption vient généralement d'un problème de matériel. Il n'y a presque pas de virus sous linux et ceux qui existent ne sont pas très dangereux.
Voilà. Je n'ai pas suivi la méthode à la lettre. J'ai commencé par réinstaller les paquets par morceaux car les problèmes de dépendances étaient un peu trop présents (faire vi sur vi pour supprimer le paquet qui ne va pas puis l'installer seul avec apt-get --reinstall...). Le problème, c'est que certains paquets se sont réinstallés en pensant que leurs dépendances étaient en place. Bref, j'ai fait presque deux fois le travail, mais le résultat est là. Mon système est à nouveau opérationnel, je n'ai encore rien trouvé qui ne fonctionne pas, et toutes mes données perso et de config sont là.
En espérant que ce fil sera utile, mais pas trop souvent... ;-)
Edit: Déplacé dans une section d'information informatique qui peut aider les gens. J'ai éliminé le résolu.
Dernière modification par coffee (Le 05/01/2007, à 20:57)
Michaël.
Hors ligne
#2 Le 12/12/2006, à 10:21
- pabix
Re : Restaurer (tous) les paquets après un "rm" malheureux
Eh oui, apt, c'est vraiment un outil puissamment puissant. L'histoire du 'perl -e' pour supprimer les retours à la ligne, je pense qu'il y aurait plus efficace en disant à awk de ne pas retourner à la ligne, je suis en train de chercher.
Benoit
Dernière modification par pabix (Le 12/12/2006, à 10:22)
Utilisateur du clavier BÉPO.
mortgat (()) gmail () com
GPG 0x377D716D
Hors ligne
#3 Le 12/12/2006, à 22:22
- m2nis
Re : Restaurer (tous) les paquets après un "rm" malheureux
L'histoire du 'perl -e' pour supprimer les retours à la ligne, je pense qu'il y aurait plus efficace en disant à awk de ne pas retourner à la ligne, je suis en train de chercher.
C'est gentil de donner l'explication de la commande perl, car je dois bien avouer que dans la bataille que je menais, je n'ai pas pris le temps de vérifier ce qu'elle faisait. J'ai fait confiance...
Quant à la simplification, même pour ceux qui comprennent bien le perl, plus simple limiterait déjà les risques d'erreur de saisie... Et rien que pour l'apprentissage, je suis pour ma part preneur.
Michaël.
Hors ligne
#4 Le 12/12/2006, à 22:43
- mulima
Re : Restaurer (tous) les paquets après un "rm" malheureux
heu je connais pas perl .. mais si il s'agit de virer les retours a la ligne
ca c'est plus simple il me semble
apt-get --reinstall install `cat packages.list | tr "\n" " "`
Hors ligne
#5 Le 13/12/2006, à 09:44
- pabix
Re : Restaurer (tous) les paquets après un "rm" malheureux
merci, c'est parfait comme solution
Benoit
Utilisateur du clavier BÉPO.
mortgat (()) gmail () com
GPG 0x377D716D
Hors ligne
#6 Le 13/12/2006, à 11:00
- m2nis
Re : Restaurer (tous) les paquets après un "rm" malheureux
ca c'est plus simple il me semble
Magique ! J'aurais dû garder mes problèmes pour aujourd'hui ou demain...
Michaël.
Hors ligne
#7 Le 23/12/2006, à 14:31
- pilote
Re : Restaurer (tous) les paquets après un "rm" malheureux
Je me demande si cette magique commande n'aurait pas résolu mon problême
CF:un paquet casse bloque la mise à jour
je l'ai juste vu un peu tard -> suis en train de tout reinstaller
en tout cas je la garde sous le coude
et a part ça Mrs. Kennedy, comment trouvez vous Dallas ?
---------------------------------------------------------
2.6.32-45-generic-pae #101-Ubuntu SMP Mon Dec 3 15:56:38 UTC 2012 i686 GNU/Linux
Hors ligne