Zypper kann ein nicht mehr vorhandenes Paket nicht aus der DB entfernen

Moin!

Vor ein paar Wochen hatte ich Microsoft Edge für ein paar Tests installiert. Das Paket wurde dann im Laufe der nächsten Tage aktualisiert, aber das erste Paket war wohl “buggy” gewesen und konnte auch beim Aktualisieren nicht mehr entfernt werden.

Laut Yast waren dann beide Versionen installiert und ließen sich beide per Yast nicht mehr entfernen.

Das aktuelle Paket habe ich dann mit zypper direkt entfernt:

sudo zypper remove microsoft-edge-stable-147.0.3912.98-1

Leider funktioniert es aver auch nach einigen Aufräum-Versuchen immer noch nicht den obsoleten Eintrag wieder loszuwerden:

sudo zypper clean --all
sudo zypper refresh
sudo rpm --rebuilddb

sudo zypper remove microsoft-edge-stable-147.0.3912.72-1

/var/tmp/rpm-tmp.5g7Ysb: line 191: syntax error near unexpected token `}'
/var/tmp/rpm-tmp.5g7Ysb: line 191: `}'
error: %preun(microsoft-edge-stable-147.0.3912.72-1.x86_64) scriptlet failed, exit status 2
error: microsoft-edge-stable-147.0.3912.72-1.x86_64: erase failed
(1/1) microsoft-edge-stable-147.0.3912.72-1.x86_64 wird entfernt ........................................................[Fehler]
Entfernen von (3765)microsoft-edge-stable-147.0.3912.72-1.x86_64(@System) fehlgeschlagen:
Fehler: Subprocess failed. Error: RPM fehlgeschlagen: Kommando mit Status 1 beendet. 

Leider kann ich dieses Paket auch nicht erneut installieren. Das noch vorhandene im Paket Cache produzierte den selben Fehler - daraufhin habe ich es dann gelöscht. Leider ist aber genau diese Version auch im Microsoft Repository entfernt worden (wahr wohl fehlerhaft!).

Lange Rede, kurzer Sinn:

Wie lässt sich der obsolete Verweis im Zypper “Gedächtnis”, also vermutlich der RPM-Datenbank endgültig löschen?

Auch sudo zypper verifyscheitert jedes Mal am selben Fehler.

Danke schon mal!
jhhh

Das Problem hier ist wohl ein fehlerhaftes Pre-/Post-Uninstall-Script dieses Pakets. Schau’ mal mit

rpm -q --scripts microsoft-edge-stable

So kannst du vermeiden, diese Scripts auszuführen:

sudo rpm -e --noscripts microsoft-edge-stable

(Falls rpm immer noch rumzickt, kann ein zusätzliches --force helfen)

Es gibt auch --justdb, um nur die RPM-DB zu aktualisieren. Siehe man rpm.

Offensichtlich gibt es bei Zypper kein Gegenstück zu --noscripts oder --justdb.

HTH

Ok! Das löst das Problem:

sudo rpm -e --noscripts microsoft-edge-stable 

Ich hätte dazu aber noch eine Verständnisfrage…:
Wenn ich Dich richtig verstehe, wird es durch den Befehl nur ignoriert, oder?
Sollte ich es dann nicht auch löschen? Aber, wo liegt das Skript?

Ich konnte jetzt die aktuelle Version installieren und auch wieder entfernen ohne weitere Fehler!

Also vielen herzlichen Dank!
jhhh

Genau: Die Skripte werden hier nur nicht ausgeführt. Die sind Teil des RPMs. Für installierte Pakete sind die wohl in der RPM-DB /var/lib/rpm/Packages.db abgelegt. Dein rpm -e --noscripts sollte das zusammen mit den anderen Paket-Metadaten auch gelöscht haben.

Ob es bedenklich ist, daß diese Skripte nun nicht ausgeführt wurden, hängt natürlich davon ab, was sie getan hätten. Typischerweise werden damit noch irgendwelche zusätzlichen Sachen aufgeräumt; was eben darüber hinausgeht, Dateien aus der Dateiliste des Pakets zu löschen (siehe auch rpm -qf <Paketname>).

Falls du hier tiefer eintauchen möchtest, probier’s mal damit:

Damit kannst du ansehen, welche Dateien bei dir in Systemverzeichnissen herumliegen, die zu keinem installierten Paket gehören; also z.B. die Hinterlassenschaften eines sudo make install oder, wie in deinem Fall, von Paketen, die mit Notwerkzeugen aus dem System entfernt wurden.

In den meisten Fällen ist das schlicht und einfach egal. Aber manchmal können da durchaus auch dicke Brocken zurückbleiben. Und außerdem sind wir doch neugierig, oder? :slightly_smiling_face:

2 Likes

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.