Laut der RPM-Dokumentation ist der%Vor,%Post,%preunUnd%postunScriptlets müssen für die (De-)Installation den Wert 0 zurückgeben.
(1)Doch welche Auswirkungen hat es, wenn eines dieser Scriptlets einen Wert ungleich Null zurückgibt?
(2)Wird der bisher durchgeführte Vorgang rückgängig gemacht, sodass das System im Zustand vor dem Aufruf der RPM-(De-)Installation bleibt?
(3)Ist der Transaktionsmechanismus beteiligt?
Ich habe die Dokumentation durchgesehen (auf vielen Seiten, einschließlich der offiziellen Dokumentation von Fedora), aber keinen Hinweis gefunden (zumindest nichts „Schwarz auf weiß“, soweit ich weiß).
Antwort1
Die Informationen, die ich gefunden habe, stammen von Redhat-Fehler 216221 vom November 2006. Ich weiß nicht, ob der folgende Text noch gültig ist.
Der letzte Eintrag des Beitrages lautet:
- Wenn %pre- und %preun-Scriptlets mit einem Code ungleich Null beendet werden, schlägt die Installation/Löschung wie zuvor fehl. Dieses Verhalten muss beibehalten werden, da verschiedene Pakete es verwenden, um die Installation/Deinstallation unter bestimmten Bedingungen zu verhindern.
- Ein Exitcode ungleich Null von anderen Scriptlets wird nur als Warnung behandelt (d. h. wenn %postun fehlschlägt, wird eine Warnung protokolliert, das Paket wird jedoch trotzdem entfernt)
- Scriptlets, die aufgrund von Signalen oder auf andere „abnormale“ Weise abstürzen, werden weiterhin als Fehler behandelt
- für alle Scriptlet-Fehler wird eine Benachrichtigung RPMCALLBACK_SCRIPT_ERROR an den Rückruf gesendet, wobei das Tag des fehlerhaften Scripts im Parameter „amount“ und im Parameter „total“ übergeben wird und RPMRC_OK / RPMRC_FAIL enthält, um zu signalisieren, ob RPM es als Warnung oder Fehler behandelt hat
Antwort2
Ich habe nur Teilantworten, aber ich hoffe, es hilft Ihnen weiter ...
- Die Installation wird berücksichtigtfehlgeschlagen, aber meines Wissens nach hat das keine wirklichen Auswirkungen: Die Dateien sind weiterhin auf Ihrem System vorhanden usw. Ich hatte
%preun
jedoch Probleme beim Entfernen eines Pakets, bei dem das Skriptlet fehlgeschlagen ist. - Es werden keine Vorgänge rückgängig gemacht.
rpm
kann nicht auf magische Weise wissen, wie die Befehle, die Sie in Ihre Scriptlets eingeben, rückgängig gemacht werden. - Ich weiß nicht wirklich, ob der Transaktionsmechanismus eine Rolle spielt. Sie könnten dazu einige Tests durchführen: Installieren Sie ein gutes RPM und eines mit einem defekten
%post
Skript ...