Neuinstallation von Paketen mit fehlenden / beschädigten Dateien

17

Nach einem unsauberen Herunterfahren und einem bunten Fsck sind eine ganze Reihe von Dateien verschwunden. Die Ausgabe von 'rpm -Va' ist mehrere hundert Zeilen lang (meist fehlen Dateien, aber auch einige Prüfsummen und andere Abweichungen). Gibt es eine einfache Möglichkeit, Pakete mit fehlenden und / oder beschädigten Dateien neu zu installieren?

Das fragliche Betriebssystem ist Fedora 22.

Jaymmer: Setzen Sie Monica wieder ein
quelle
3
Sicher möglich, aber auch ziemlich mühsam, die Ausgabe zu analysieren und für jede Datei das Paket abzufragen, das diese Datei enthält und wahrscheinlich einige Zeit in Anspruch nimmt. Warum nicht einfach alle Pakete neu installieren? yum reinstall $(rpm -qa --qf="%{N}-%{V}\n" | sort)
Doktor5000
Es könnte auch ziemlich hässlich sein, alle zusätzlichen Probleme, die durch den Prelink verursacht werden, herauszufiltern, wenn ich mich nicht irre, dass Fedora immer noch standardmäßig aktiviert ist, laut fedorahosted.org/fesco/ticket/1183
doktor5000
Ich habe in der Tat Neuinstallation alles am Ende - das Problem war , dass ich vergessen hatte , keep-Cache für DNF zu ermöglichen, endete es auf dem Herunterladen über 2 GB - Pakete (und ich habe Internet - capped)
jaymmer - wieder einzusetzen Monica

Antworten:

16

Aus Gründen der Referenz und Vollständigkeit wäre ein Befehl, der in der Lage wäre, das zu erreichen, was ursprünglich verlangt wurde, so etwas (schnell zusammengewürfelt, aber es funktioniert).

rpm -qf $(rpm -Va 2>&1 | grep -vE '^$|prelink:' | sed 's|.* /|/|') | sort -u

Hier ist eine kurze Erklärung der verschiedenen Teile:

rpm -Va 2>&1

Führt eine vollständige Überprüfung aller derzeit installierten / in der rpm-Datenbank aufgelisteten Pakete durch. Es wird auch stderr zu stdout umleiten, da hier auf meiner Box einige Fehler, die durch das Aktivieren von prelink verursacht werden, als Fehler gemeldet werden, aber wir wollen sie auf stdout haben.
Achtung: Muss als root ausgeführt werden, um alle Dateien, Berechtigungen und Besitzer / Gruppe überprüfen zu können.

grep -vE '^$|prelink:'

Unterdrückt die Anzeige von emtpy Linien und solche der prelink Fehler (Beispiel für einen solchen Fehler:
prelink: /tmp/#prelink#.B14JBi: Recorded 10 dependencies, now seeing -1)

sed 's|.* /|/|')

filtert die rpm -VaAusgabe so, dass nur Dateinamen angezeigt werden

rpm -qf $()

fragt nach allen erhaltenen Dateinamen, in denen diese enthalten sind, und gibt den Paketnamen und die Version aus

| sort -u

unterdrückt doppelte Kombinationen von Paketnamen und -version.

Insgesamt erhalten Sie eine Liste der Pakete, deren Überprüfung fehlgeschlagen ist.

rpm -Vazeigt möglicherweise immer noch einige nicht verwandte Probleme, da auch Abhängigkeiten zwischen Paketen überprüft werden, die möglicherweise durch Hinzufügen unterdrückt werden müssen --nodeps.

doktor5000
quelle
2

Ich hatte kürzlich ein ähnliches Problem mit fehlenden Dateien unter openSUSE 13.2 und habe es behoben mit:

rpm -Va --nodeps --nodigest --noscripts --nosignature --nofiledigest --nosize --nomode --nordev --nouser --nogroup --nomtime\
| awk -e '($1=="missing") && ($2=="d") {system("rpm -qf "$3);}; ($1=="missing") && ($2!="d") && ($2!="c") {system("rpm -qf "$2);}'\
| sort -u | xargs zypper in -f

Die Optionen für rpm und awk sollen in meinem Fall Zeit sparen, da keine Beschädigung aufgetreten ist.

auxsvr
quelle
1
Wenn keine Dateibeschädigung aufgetreten ist, können Sie sogar --nofilesdas Gleiche tun, yum check dependenciesda nur alle installierten RPM-Pakete auf Abhängigkeitsprobleme überprüft werden. --nofilesDies würde viel Zeit bei Nicht-SSD-Installationen sparen, aber Sie würden auch die Prüfung auf fehlende Dateien weglassen. ... nur der Vollständigkeit halber. Und bitte denken Sie daran, wenn Sie nach englischen Zeichenfolgen LC_ALL=C
suchen