根據 RPM 文檔,%預,%郵政,%preun和%postunscriptlet 必須返回 0 才能進行(卸載)安裝。
(1)但是這些腳本之一會傳回非零值會產生什麼影響呢?
(2)到目前為止所做的操作是否會被撤消,使系統保持在呼叫 RPM(卸載)安裝之前的狀態?
(3)是否涉及交易機制?
我瀏覽了文件(在許多頁面上,包括 Fedora 的官方文件),但我沒有找到任何線索(至少根據我的理解,沒有任何「白底黑字」)。
答案1
我查到的資料來自於 紅帽錯誤 216221 從2006年11月開始。
貼文的最後一個條目說:
- %pre 和 %preun scriptlet 以非零代碼退出會導致安裝/擦除失敗,就像以前一樣。需要保留此行為,因為各種套件使用它來防止在某些情況下安裝/卸載。
- 來自其他 scriptlet 的非零退出程式碼僅被視為警告(即 %postun 失敗將記錄警告,但無論如何該套件都會被刪除)
- 因訊號和其他「異常」方式而死亡的小腳本仍被視為錯誤
- 對於所有 scriptlet 錯誤,將向回呼發出 RPMCALLBACK_SCRIPT_ERROR 通知,並在「amount」參數和包含 RPMRC_OK / RPMRC_FAIL 的「total」參數中傳遞失敗腳本的標記,以指示 rpm 是否將其視為警告或錯誤
答案2
我只有部分答案,但希望對你有幫助......
- 安裝會被考慮失敗的
%preun
,但據我所知,沒有真正的影響:這些文件仍然存在於您的系統上等。 - 沒有操作被撤銷。
rpm
無法神奇地知道如何撤銷您放入 scriptlet 中的指令。 - 我真的不知道是否涉及交易機制。您可以為此執行一些測試:安裝一個好的 rpm 和一個
%post
腳本損壞的 rpm...