天天看點

rpm -Uvh 更新時的陷阱

問題現象

用rpm -Uvh更新後,原先的一個軟連結被删除了,而采用先rpm -e 解除安裝rpm包,再rpm -ivh 安裝包的方法,這個軟連結還在。這個軟連結是在rpm包安裝的時候建立,也隻有在rpm解除安裝的時候會删除。

為什麼Uvh更新的時候會删除它?

解決過程

軟連結的删除是寫在 sepc檔案的%preun段,軟連結的建立在spec檔案的%post段,是以我去查了更新的時候,spec檔案裡各個段的執行順序。

更新時執行順序

1、執行新包spec檔案中 %pre 段.
2、安裝新包的相關依賴包.
3、執行新包spec檔案中的 %post 段.
4、執行舊包spec檔案中的 %preun 段.
5、删除新包中不需要的舊檔案。
6、執行舊包spec檔案中的 %postun 段.           

答案就很顯然了,更新過程中是先安裝新包,再解除安裝舊包,是以軟連結就被删除掉了。

解決方法

當進行不同操作的時候,會傳遞不同的參數給段,完整的參數傳遞及釋義如下。

%pre和%post段
當傳遞的第一個參數為1時,表示新安裝一個rpm包。
當傳遞的第一個參數為2時,表示更新一個已經存在的包。

%preun和%postun段
當傳遞的第一個參數為0時,表示删除一個包。
當傳遞的第一個參數為1時,表示更新一個包。           

是以,在删除連結之前判斷一下所傳的參數是0還是1就ok了。

這是個坑!

繼續閱讀