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了。

        這是個坑!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM