• 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] rpm Deinstallation schlägt fehl

Hallo,

ich habe da ein kleines Probelm mit einem rpm-Paket das ich installiert habe.
Es handelt sich um gpar2. Ich habe es mittels rpm -ivh installiert und da habe ich eine Fehlermeldung bekommen, dann habe ich versucht es mittels rpm -e zu deinstallieren und nun bekomme ich auch eine Fehlermelung und zwar:

Code:
postrm called with unknown argument `0'
error: %postun(gpar2-0.3-2.i386) scriptlet failed, exit status 1

Danach gibt mir rpm -q gpar2 immer noch die Meldung das das Paket installiert ist und in yast steht das Paket mit einem Schloss so das ich es auch dort nicht wegbekomme....

Hab versucht das Programm aus den Quellen zu installieren, aber beim ausfürhren bekomme ich auch einen Fehler. Ich vermute das liegt daran das das Paket noch auf dem System ist...

Achja, nach rpm -e gpar2 ist das Programm gpar2 nicht mehr im Ordner /usr/bin...

Wie bekomm ich das rpm weg um eine Neuinstallation zu versuchen???

Für Lösungsvorschläge wäre ich sehr dankbar......
 

Anomander

Newbie
Bei der Neuinstallation per rpm kannst du es mit der Option "--force" versuchen.

Dann sollten eigentlich alle bereits/noch vorhanden Dateien überschrieben werden...
 
Eine eiserne Regel beim RPM-Paketieren lautet "eigentlich", dass scriptlets niemals fehlschlagen dürfen. Ein fehlschlagendes scriptlet deutet auf einen Bug hin: Entweder ist das scriptlet falsch (viele Leute wissen beispielsweise gar nicht, dass rpm keine definierte Reihenfolge beim Deinstallieren einhält) oder es fehlen Abhängigkeiten oder das scriptlet ist so unwichtig, dass es besser gewesen wäre, Fehler zu ignorieren.

Fehlschlagende %postun-scriptlets sind die schlimmsten von allen, weil rpm %postun als letztes ausführt, d.h. Fehler an der Stelle sind praktisch unmöglich nachträglich zu beheben und blockieren die Beseitigung des Pakets aus der rpm-Datenbank. Das kann fatale Folgen haben, weil rpm denkt, das Paket sei noch installiert, obwohl es in Wirklichkeit schon längst nicht mehr im Dateisystem ist. Folgefehler sind vorprogrammiert.
 
traffic schrieb:
Fehlschlagende %postun-scriptlets sind die schlimmsten von allen, weil rpm %postun als letztes ausführt, d.h. Fehler an der Stelle sind praktisch unmöglich nachträglich zu beheben
Man will ja auch nichts beheben - sondern das Paket loswerden.
und blockieren die Beseitigung des Pakets aus der rpm-Datenbank. Das kann fatale Folgen haben, weil rpm denkt, das Paket sei noch installiert,
Es ist nicht mehr installiert, "rpm -q blafasel" gibt auch bei fehlgeschlagen %postun "is not installed" zurück, Dateien sind auch nicht mehr im Filesystem - zumindest ist das bei mir immer so gewesen.
 
OP
S

smaragdestes

Newbie
Hallo,

ja das Paket bzw. das Programm hat einen Bug, hab auf SourceForge schon davon gelesen das jemand das gleiche Problem hat, das das Programm sich nicht ausführen lässt. Werd ich halt die Commandozeilen version benutzen.

Danke für die Tips

Gruß

smaragdestes
 
jengelh schrieb:
Es ist nicht mehr installiert, "rpm -q blafasel" gibt auch bei fehlgeschlagen %postun "is not installed" zurück, Dateien sind auch nicht mehr im Filesystem - zumindest ist das bei mir immer so gewesen.
Dann verwendest Du eine wirklich eigenartige rpm-Version.

Wer testen will, wie es wirklich ist, kann einfach mal ein Paket mit dieser .spec-Datei hier bauen:
Code:
Name:           postuntest
Version:        0
Release:        0
Summary:        This is a test package
Group:          System/Packages
License:        GPL
BuildArch:      noarch

%description
This package demonstrates that a failing %%postun scriptlet
blocks the removal of a package from the rpmdb.

%postun
/bin/false

%files
Ich kann allerdings gleich vorwegnehmen, dass ich selbstverständlich Recht habe. Das Ergebnis könnte z.B. so aussehen:
Code:
# rpm -q postuntest
package postuntest is not installed
# rpm -i postuntest-0-0.noarch.rpm
# rpm -q postuntest
postuntest-0-0
# rpm -e postuntest
error: %postun(postuntest-0-0.noarch) scriptlet failed, exit status 1
# rpm -q postuntest
postuntest-0-0
# rpm -e postuntest
error: %postun(postuntest-0-0.noarch) scriptlet failed, exit status 1
# rpm -q postuntest
postuntest-0-0
# rpm -e postuntest
error: %postun(postuntest-0-0.noarch) scriptlet failed, exit status 1
# rpm -q postuntest
postuntest-0-0
# for i in `seq 1 10`; do rpm -e postuntest; rpm -q postuntest; done
error: %postun(postuntest-0-0.noarch) scriptlet failed, exit status 1
postuntest-0-0
error: %postun(postuntest-0-0.noarch) scriptlet failed, exit status 1
postuntest-0-0
error: %postun(postuntest-0-0.noarch) scriptlet failed, exit status 1
postuntest-0-0
error: %postun(postuntest-0-0.noarch) scriptlet failed, exit status 1
postuntest-0-0
error: %postun(postuntest-0-0.noarch) scriptlet failed, exit status 1
postuntest-0-0
error: %postun(postuntest-0-0.noarch) scriptlet failed, exit status 1
postuntest-0-0
error: %postun(postuntest-0-0.noarch) scriptlet failed, exit status 1
postuntest-0-0
error: %postun(postuntest-0-0.noarch) scriptlet failed, exit status 1
postuntest-0-0
error: %postun(postuntest-0-0.noarch) scriptlet failed, exit status 1
postuntest-0-0
error: %postun(postuntest-0-0.noarch) scriptlet failed, exit status 1
postuntest-0-0
# rpm -e postuntest --nopostun
# rpm -q postuntest
package postuntest is not installed
Es führt kein Weg an der Wahrheit vorbei: Ein Paket mit kaputtem postun-Skript ist ohne mindestens --nopostun (oder gleich --noscripts) nicht aus der Datenbank zu bekommen!
 
Oben