• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst] /usr teils gelöscht - Rettung durch zypper?

altair3

Newbie
Hallo alle,

mir ist ein ziemliches Mißgeschick passiert. Ich wollte ein Unterverzeichnis von /usr/share/ati Namens /usr rekursiv löschen und habe den Befehl 'rm -R /usr' als root eingegeben. Sekundenbruchteile später habe ich bemerkt, was ich da getan habe und habe den Befehl mit 'Strg c' abgebrochen. Leider sind wohl schon einige Dateien dem Löschen zum Opfer gefallen.

Was nun tuen?

Meine Idee wäre entweder über zypper alle installierten Pakete neu zu installieren, oder aber versuchen herauszufinden, welche Dateien (und evtl. Verzeichnisse) mir abhanden gekommen sind und nur deren Pakete neu zu installieren.

Für beide Vorgehensweisen fehlen mir leider die entsprechenden Befehle.

Könnt Ihr mir hierbei helfen?

Gruß,
altair3

P.S. Einen Lösungsvorschlag zur Idee alle installierten Pakete neu mit zypper zu installieren habe ich inzwischen hier gefunden https://www.unixboard.de/vb3/showpost.php?s=ab70897b60931ec5d2692fec484147f8&p=289179&postcount=21
 

rolle

Guru
Einfach alle installierten Pakete neu zu installieren dürfte der einfachste Weg sein.
Alternativ könntest Du per 'rmp -qal | grep /usr' alle Dateien aus Paketen unter /usr finden. Mittels find und den richtigen Optionen könntest Du dann das Vorhandensein der Dateien überprüfen. Wenn Du aus den beiden Ausgaben je eine Datei erstellst per Ausgabeumleitung könntest Du per diff herausfinden was fehlt. Dieses Ergebnis könntest Du dann an 'rpm -q --whatprovides' übergeben und so eine Liste erhalten, die alle angeknabberten Pakete in ein- oder mehrfacher Ausführung enthält. Die Einträge der Liste könntest Du jetzt noch unique machen und dann die Liste an zypper zum Reinstallieren übergeben.
Oder kurz gesagt: Mache es, wie RainMaker es vorschlägt. :D
 
OP
A

altair3

Newbie
Hallo rolle,

danke für Deine Antwort. Leider hat sich herausgestellt, daß das Porblem noch einen Schritt früher beginnt.

Der von Rain_Maker vorgeschlagene Befehl schlägt mit folgender Fehlermeldung fehl:
rpm: error while loading shared libraries: librpm-4.4.so cannot open shared object file: No such file ore directory

Erst dachte ich die Meldung würde auf eine fehlende library nämlich librpm-4.4.so hinweisen.
Ein
Code:
ls -la /usr/lib/libr*
ergab unter anderem:
-rwxr-xr-x 1 root root 407204 Dec 3 2008 /usr/lib/librpm-4.4.so

Was also will die Fehlermeldung eigentlich ausdrücken?

P.S. Unter /usr/lib64 ist sie nicht vorhanden. Wahrescheinlich wohl deshalb die Fehlermeldung s.o.?!?
 

whois

Ultimate Guru
Puh

Sind folgende libs noch da?

Code:
locate libncurses

Mal die Rep Funktion der DVD versucht?
 

rolle

Guru
Hm, langsam wird's kompliziert. ;) Wenn ich mich recht erinnere, dann sind RPM Pakete mittels cpio gepackte Archive. Du könntest jetzt also einfach mal das Paket rpm für Deine Version auf den Rechner kopieren und mittels cpio an die richtigen Stellen entpacken. Dann könnte rpm auch wieder laufen.
Eine andere Idee wäre die Reparaturfunktion der SuSE-DVD, eventuell hilft die Dir auch schon weiter.
 
OP
A

altair3

Newbie
@ whois

Danke für Deine Antwort.

Der Befehl locate bricht leider auch mit einer Fehlermeldung ab.

Ein:
Code:
find /usr -name libncurses*
bringt folgendes:
/usr/lib64/libncursesw.a
/usr/lib64/libncurses.a
/usr/lib64/libncurses.so
/usr/lib64/libncursesw.so
/usr/lib64/libncurses++w.a

Yast bricht leider auch mit einer Fehlermeldung den Start ab.

Ein Reparaturversuch mit DVD brachte leider auch keinen Erfolg.

@rolle

Danke für den Tipp. Ich habe das Paket "rpm-4.4.2.3-20.1.i586.rpm" auf dem Rechner.
Was soll ich sagen...

Code:
rpm2cpio <paket.rpm> | cpio --extract --make-directories
--no-absolute-filenames --preserve-modification-time

rpm2cpio: error while loading shared libraries: librpm-4.4.so cannot open shared object file: No such file ore directory
GRRMMLLLL

Auf einem Rechner mit 32-bit oSuSE wurde zwar entpackt, ich fand aber nur eine librpm-4.4.so unter dem Verzeichnis ../"Entpackverzeichnis"/usr/lib/librpm-4.4.so.
Es wurde dort keine für /lib64 angelegt, was ja auch logisch erscheint, da es sich hier wie erwähnt um ein 32-bit oSuSE handelt.
Die Frage, die sich mir stellt ist, würde überhaupt eine librpm-4.4.so auf einem 64-bit oSuSE unter /usr/lib64 erstellt?
Wenn ja, wie bekomme ich dann das Ei ohne Henne?

Nochmals erwähnt: Eine librpm-4.4.so ist nach wie vor auf dem Rechner mit dem teils gelöschten /usr Verzeichnis unter /usr/lib vorhanden.
Daher nochmal die Frage, ist die Fehlermeldung also wirklich auf das Fehlen einer librpm-4.4.so unter /usr/lib64 bezogen, oder liegt vielleicht doch ein anderer Fehler vor?

Puh, mir graut vor einer evtl. Neuinstallation mit allem drum und dran...

P.S.
Zur Dummheit kommt noch B..dheit. Ich habe das falsche Paket heruntergeladen gehabt. Jetzt habe ich "rpm-4.4.2.3-20.3.x86_64.rpm" heruntergeladen und auf dem 32-bit oSuSE Rechner entpackt und siehe da...
Es gibt nunt ein Unterverzeichnis /usr/lib64 mit der entsprechenden librpm-4.4.so.

Das kopiere ich jetzt mal und dann Daumen drücken...

P.P.S.
Wer auch immer Daumen gedrückt hat... Vielen vielen Dank dafür.
Die Paketliste.txt (Vorgehensweise von RM, siehe Link oben) ist erstellt. Nun schubse ich mal zypper an und las ihn werkeln.
Hopefully klappt alles... Daher nochmals Daumen drücken.
 

whois

Ultimate Guru
Na ich hoffe das hat funktioniert.
Ich denke in Zukunft wirst du regelmässig Backups fahren. ;)
 
OP
A

altair3

Newbie
@ whois,

leider hat es bisher nicht geklappt. Zypper läuft zwar wieder, kann aber keinen Download machen. Fehlermeldung
Download (curl) error for 'http://download.opensuse.org/...'
Error code: Connection failed
Error message: Couldn't resolve host 'download.opensuse.org'
Das lies mich ping versuchen:
Code:
ping -c 2 localhost
Ergebnis
PING localhost (127.0.0.1) 56(84) bytes of data

--- localhost ping statistics ---
2 packets transmittet. 0 received, 100% packet loss, time 1014ms

Test mit Windows auf gleichem Rechner ergab: Kein Problem mit dem Internet oder internem Netzwerk. Alle Verbindungen funktionieren einwandfrei.

Somit scheint noch etwas essentielles das Netzwerk betreffend unter /usr gelöscht worden zu sein. Bisher waren alle fehlenden Dateien zypper betreffend unter /usr/lib64 gelöscht gewesen.
Ich versuche mich momentan am Vergleich zweier Textdateien, siehe Vorschlag von rolle oben.
Einerseits eine Paketliste installierter Pakete mit Dateien die unter /usr erstellt werden, andererseits eine mit 'find' erstellte Liste der vorhandenen Dateien (mit Pfadangabe, also aufgebaut wie die 'Paketliste').

Ein diff der beiden Dateien brachte sehr viele Unterschiede.
Hier bin ich momentan noch am auswerten.
 
OP
A

altair3

Newbie
So, geschafft. Alles ist wieder im Lot.

diff ist mein Freund :smile:

/usr fehlten tatsächlich noch einige notwendige Dateien.
Die Abfrage, welche Pakete es betrifft bekam ich über:
Code:
rpm -qg Productivity/Networking/System (Security und auch Other)
Die Dateien glich ich wieder mit den Vorhandenen via diff ab.
Code:
sort -u +1 Datei > neueDatei
war auch sehr hilfreich.

Ein abchließendes
Code:
zypper in -f $(cat Paketliste.txt)
brachte denn das System wieder in Ordnung.

whois und rolle, nochmal vielen Dank für die Hilfe.

Dies schreibe ich vom wieder genesenen Rechner :smile:
 

tomma

Member
Hallo,

ich habe mal das hier verfolgt, was man so alles machen kann man mal das "falsche Knöpfchen" drückt.
Sehr interessant, ich hätte nicht gedacht, dass man die openSUSE wieder zum Laufen bekommt. Respekt!
Trotz allem würde ich einer so verunstalteten Installation nur noch begrenzt vertrauen, sicher hätte ich eine Neuinstallation vorgezogen.
By(e) Tomma
 
Oben