2021-05-12 14:32:11
rpm -Uvh 升級時的陷阱
2020-06-16 16:57:18
問題現象
用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了。
本文永久更新連結地址:http://www.linuxidc.com/Linux/2018-01/150234.htm
相關文章