Versehentlich gelöscht /usr/lib/*.so.*

9

Während ich MRTG anbrachte, versehentlich habe ich gelöscht /usr/lib/*.so.*und/usr/lib/*.so

Ich kann mein System jetzt nicht starten, es bleibt auf dem Begrüßungsbildschirm hängen und wenn ich die PAGEDOWN-Taste drücke, kann ich sehen, dass einige Dinge nicht geladen werden können.

DHCP und WebMin werden jedoch ausgeführt, und in Webmin werden die Systemprotokolle angezeigt, aus denen hervorgeht, dass Tassen nicht geladen werden, weil sie libpipeline.so.1fehlen, und mehrere andere.

Auf meinem Computer läuft 11.04

Ahsan
quelle
1
Cross gepostet auf Unix und Linux
Marco Ceppi
Verwenden Sie Ubuntu für Ubuntu-spezifische Fragen stellen. und nicht Pfosten kreuzen. Wenn Sie nicht sicher sind, ob es Ubuntu-spezifisch ist, fragen Sie zuerst hier, und wir werden migrieren, wenn es Ubuntu-spezifisch ist.
2
auch ein Tipp für die Zukunft ... wenn Sie wussten, dass Sie vor dem Neustart etwas so Schlimmes getan haben ... starten Sie nicht neu. Lassen Sie das System laufen und beginnen Sie sofort mit der Reparatur. Ich habe mich erholt /binund /etcso in der Vergangenheit

Antworten:

5

Da Sie nur gelöscht haben /usr/lib/*und nicht /lib/*, können Sie wahrscheinlich wiederherstellen. Ich denke, alle Programme, die Sie dringend benötigen, um Ihr System wiederherzustellen, verwenden nur Bibliotheken /usr/lib.

Starten Sie eine Eingabeaufforderung für die Textanmeldung. Wenn Sie beim normalen Start login:im Textmodus keine Eingabeaufforderung erhalten, starten Sie mit nur minimalen Diensten. Halten ShiftSie gedrückt , wenn Ihr Computer die Grub-Eingabeaufforderung anzeigt. Sie müssen die Taste drücken, nachdem das BIOS die Tastatur initialisiert hat, aber bevor Grub geladen wird, was auf einigen Computern nur ein kleines Zeitfenster lässt und möglicherweise mehrere Versuche erfordert. Drücken Sie Downan der Grub-Eingabeaufforderung, um den Starteintrag für den Einzelbenutzermodus zu markieren und diesen zu starten.

Sobald Sie eine Befehlszeile haben, führen Sie diese aus, um apt-get --reinstall install PACKAGE1 PACKAGE2 …die Pakete mit den Dateien neu zu installieren /usr/lib. Sie können dieses Shell-Snippet ausführen, um die Liste der Namen der neu zu installierenden Pakete abzurufen:

egrep -l '/usr/lib/[^/]*\.so\.' /var/lib/dpkg/info/a*.list |
sed -e 's!^/var/lib/dpkg/info/!!' -e 's!\.list$!!'

Bei einigen Paketinstallationsskripten müssen möglicherweise Bibliotheken aus anderen Paketen vorhanden sein. Daher müssen Sie die Neuinstallationen möglicherweise in einer bestimmten Reihenfolge ausführen. Wenn Sie feststellen, dass die Installationsskripte eines Pakets versuchen, ein bestimmtes Programm zu verwenden, können Sie herausfinden, mit welchen Bibliotheken dieses Programm benötigt wird ldd. Dies weist beispielsweise darauf hin, dass in Python drei Bibliotheken fehlen, die Sie neu installieren müssen:

$ ldd /usr/bin/python | grep 'not found'
    libssl.so.0.9.8 => not found
    libcrypto.so.0.9.8 => not found
    libz.so.1 => not found

dpkg -S /usr/lib/libz.so.1zeigt, dass diese Datei stammt zlib1gund so weiter.

Wenn Sie feststellen, dass apt-getPakete nicht heruntergeladen werden können, laden Sie zunächst einige Schlüsselpakete von einer Live-CD herunter. zlib1gund libssl0.9.8sind zwei Pakete, die Sie sehr wahrscheinlich früh brauchen werden.

Gilles 'SO - hör auf böse zu sein'
quelle
10

Sie können eine Woche damit verbringen, alles zu finden, was fehlt, oder Sie können eine Stunde damit verbringen, eine Neuinstallation von der CD durchzuführen und dann alle Ihre alten Pakete zurückzubekommen.

Ich würde vorschlagen, dass Sie zuerst in eine LiveCD-Umgebung booten, um zuerst Backups von Dingen zu erhalten (kopieren Sie diese auf ein externes USB-Laufwerk oder eine andere Partition) und dann erneut starten.

Oli
quelle
2
Genau, wenn Sie nicht alles neu installieren, können Sie erwarten, dass seltsame Fehler, Abstürze usw. für Monate danach auftauchen .
Januar
3

/usr/libenthielt ehrlich gesagt die gemeinsam genutzten Bibliotheken von allem außer startkritischer Software (das ist es, worauf es ankommt /lib/und was Sie (normalerweise /usr/local/lib) nicht über den Paketmanager installiert haben .

Kurzversion, Sie haben gerade Ihr System abgespritzt.

Wenn Sie noch /var/cache/apt/archivesviel Zeug haben, können Sie mit ein wenig vernünftiger Magie möglicherweise die Situation retten.

Überprüfen Sie, ob es noch Archive für die folgenden Pakete enthält:

libxapian
libsigc++
apt
libcwidget
libsqlite
libboost-iostreams 

Diese Pakete enthalten Bibliotheken /usr/lib, aptitudedie funktionieren müssen. Wenn Sie die Pakete darin finden /var/cache/apt/archives, können Sie sie manuell neu installieren. dpkg -i <packagenameSobald sie alle installiert sind, sollte aptitude ausgeführt werden können.

Wenn aptitude reinstall ~iSie dann den Befehl ausführen, erzwingen Sie eine Neuinstallation aller bereits installierten Pakete, wodurch Ihr System hoffentlich wiederhergestellt werden sollte. Ich kann keine absoluten Garantien geben, weil der Schaden, den Sie angerichtet haben, in diesem Fall wirklich spektakulär ist ...

Shadur
quelle
1

Ich wäre versucht, von einer Ubuntu 11.04-Live-CD zu booten und zu versuchen, die fehlenden Dateien zurück zu kopieren.

Bevor Sie etwas unternehmen, überprüfen Sie, ob Sie über gute Backups von benutzergenerierten Datendateien verfügen. Wenn nicht, würde ich eine Live-CD starten, die die Festplatte schreibgeschützt einbinden und so schnell wie möglich Backups erstellen.

RedGrittyBrick
quelle
0

Als ich etwas Ähnliches tat, hatte ich das Glück, es zu realisieren, bevor ich einen Neustart versuchte. Zu diesem Zeitpunkt funktioniert Ihr System noch größtenteils. Mein Ansatz war es, eine Virtualbox mit derselben Version des Betriebssystems zu erstellen und die fehlenden Dateien daraus zu kopieren. Wenn Sie den SSH-Zugriff auf Ihren Virtualbox-Gast zulassen, können Sie rsync von einem Terminal auf Ihrem Hauptsystem aus verwenden, um nur die fehlenden Dateien und Links einzusaugen. In meinem Fall fehlten nur wenige Dateien, so dass es am einfachsten / sichersten war, manuell mit scp zu kopieren. Daher ist Folgendes nicht getestet (!)

sudo rsync -avu user@guestVB:/usr/lib /usr/lib

-a ist der Archivierungsmodus (rekursiv, kopiert Symlinks und Attribute wie Zeitstempel, Berechtigungen usw.)

-u überspringt, wenn die Zielkopie neuer ist

-v ist ausführlich

Kim SJ
quelle