2013-02-07 228 views
1

我正在構建rpm pacakge,但是我注意到了這種情況。當我的rpm腳本失敗時,rpm仍然被認爲安裝在我的系統中。我正在考慮在清理邏輯中添加如果在我的rpm腳本中檢測到錯誤,我可以在代碼中調用'rpm -e'並卸載腳本。然而,它似乎有點不方便。如果腳本失敗,是否有更清晰的方式確保rpm被卸載?rpm包失敗,包仍然安裝

謝謝!

+0

你能給我們在你的spec文件中的例子嗎?我認爲這是在你的spec文件的%post部分?爲什麼不把它放在%pre部分,然後如果腳本失敗,它會退出? – Forrest

+0

我在%post中這樣做,因爲我需要訪問安裝包後纔可用的某些文件。如果%post步驟中的某些內容失敗,腳本退出並打印出一個錯誤,但在執行「rpm -qa | grep'軟件包名稱'」時仍認爲rpm已安裝。我正在考慮向腳本添加邏輯,以便在腳本失敗時手動卸載當前軟件包。 (也在%post)部分。這會是一個很好的做法嗎? – user459811

+1

正如Aaron的答案所說,這不起作用,您應該考慮將任何代碼遷移到%post部分,而不是讓它運行腳本。 – Forrest

回答

2

你不能。 %pre可能會失敗並且未安裝,或者您已安裝。您不能撥打rpm -e,因爲您的交易的RPM數據庫已被鎖定。

如果出現問題,我建議您寫出STDERR並確保您[重新]運行chkconfig以關閉服務,以便下次重啓時不會嘗試啓動。