RPM包管理詳解

RPM

    Red Hat開發的一種程序包管理器Red Hat Package Manager的縮寫,因其簡便易用,現已成爲公認的行業標準,演變爲RPM Package Manager的遞歸縮寫;有特定的格式【1】;能夠實現對兼容格式的程序包進行管理【2】:安裝、卸載、升級、查詢、校驗等。

    

【1】RPM包的命名格式

    appname-VERSION-RELEASE.ARCH.rpm

    示例bash-4.3.2-2.centos6.x86_64.rpm

        VERSION:

            major: 主版本號,上例中的4.3.2中的4

            minor: 次版本號,上例中的4.3.2中的3

            release: 發行號,上例中的4.3.2中的2

        RELEASE: 包自身的修訂號;有時候還會包含適用於的OS信息;上例中的2.centos6(第2次發行,適用於centos6)

        ARCH: 適用的平臺,上例中的x86_64

           常見平臺:

           x86: i386, i486, i586, i686

           x86_64:x86_64, amd64

           powerpc:ppc

           noarch:跟平臺無關



    程序包的獲取途徑

    1、系統的發行光盤鏡像或官方站點(或站點鏡像服務器)

        掛載光盤:

        spacer.gifwKiom1UqI3eTfTUoAAId6VWEwlY718.jpg

        注意:光盤下的程序包存儲於 Packages 目錄下

        官方站點,鏡像:

            mirrors.sohu.com

            mirrors.163.com

            mirrors.aliyun.com

                        

    2、程序包的官方站點


    3、第三方組織:epel

            示例教室:http://172.16.0.1/fedora-epel/6/


    4、搜索引擎

            示例http://rpmfind.net

                      http://rpm.pbone.net
                      http://pkgs.org

    建議:安裝之前要驗證程序包的合法性(包括來源合法性及程序包的完整性),驗證方法後文會提及。

    

【2】RPM程序包管理

  

     安裝

        rpm {-i|--install} [install-options] PACKAGE_FILE1...

            -v:顯示安裝過程的詳細信息;

                -vv,-vvvh:通過增加v的次數來加深顯示的詳細程度;

            -h:hash,以#來顯示安裝進度(1個#表示2%的進度);

            安裝時的常用組合:-ivh

            --test:測試安裝,不執行真正的安裝過程,僅報告依賴關係及衝突信息等;

    wKioL1UqKELiR49IAAEkqsdpJ_I992.jpg 

            注意:要安裝的程序包前一定要跟上絕對路徑或相對路徑

            --nodeps:忽略依賴關係;

                                副作用:能成功安裝,但未必能成功運行;                

                                程序包之間存在依賴關係(如下圖所示)

                                由衆多目的單一的小程序組成,結果程序之間存在相關性;

    wKiom1UqKDTjR_syAAEU7vLX3m4413.jpg


            --replacepkgs:覆蓋安裝,重新安裝並覆蓋原有的文件;

            --force:強制安裝;

            --relocate:重新指定程序包的安裝路徑(前提是程序包支持指定路徑);

            --oldpackage:降級到老版本; 

 

    升級

        rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...

            -U:升級或安裝 ,即要升級的老版本若不存就直接安裝新版本程序包

        rpm {-F|--freshen} [install-options] PACKAGE_FILE ...

            -F:升級,即要升級的老版本若不存在就不會升級

        可用選項同安裝選項


        注意:一定不要對內核執行升級操作;Linux允許多內核共存,所以可以直接安裝多個不同版本的內核;

        注意:如果程序包的配置文件安裝後曾被修改,升級時,新版本的配置文件不會覆蓋老版本的配置文件,而是把新版本的配置文件重命名(加後綴.rpmnew)後保存;


    卸載

        rpm {-e|--erase} [--allmatches] [--nodeps] [--test] PACKAGE_NAME ...

            簡單用法:rpm -e PACKAGE_NAME...

            --nodeps:忽略依賴關係;

            --test:測試卸載;dry-run模式;

            --allmatches: 如果一個程序包同時安裝多個版本,則此選項一次全部卸載之;

        注意:如果程序包的配置文件安裝後曾被修改,卸載時,此文件通常不會被刪除,而是被重命名(加後綴.rpmsave)後留存;


    查詢

        查詢某包是否已經安裝,查看安裝的所有包,以及查看某包的詳細信息

        -rpm {-q|--query} [select-options] [query-options]


        [select-options]

            1、查詢某包或某些包是否安裝:

                rpm  -q  PACKAGE_NAME          spacer.gif

      wKiom1UqKpri7cXrAAA3h75Y530513.jpg


            2、查詢已安裝的所有包:

                rpm  -qa 

                    

            3、查詢某文件是由哪個包安裝生成:

                rpm  -qf  /PATH/TO/SOMEFILE

        wKioL1UqLCChJq8cAABCAUen1jo178.jpg        spacer.gif

      4、查詢尚未安裝的包文件的相關信息:

                下邊命令選項中間加p

                    例如:rpm  -qpi  PACKAGE_FILE1...


        [query-options]

            1、查詢某包的簡要說明信息: 

                rpm  -qi  PACKAGE_NAME(安裝包名)

                spacer.gifwKioL1UqLL_gY090AAJ3v0rnFBo513.jpg

                wKioL1UqLcSxKVfYAAIqDUkV9yI935.jpg

                

            2、查詢某安裝包安裝生成的文件列表:

                rpm  -ql  PACKAGE_NAME  

                spacer.gifwKioL1UqLfWCAuwoAAEPXvgpo84091.jpg

            3、查詢某包安裝後生成的所有配置文件:

                rpm  -qc  PACKAGE_NAME

                spacer.gifwKioL1UqLhmSExwmAACACMDNoao001.jpg

            4、查詢某包安裝完成後生成的所有幫助文件:

                rpm  -qd  PACKAGE_NAME

                spacer.gifwKioL1UqLkDgUvtAAACuQebjN6Q886.jpg

          5、查看某包製作時隨版本變化的changelog信息:

                rpm  -q  --changelog  PACKAGE_NAME

                spacer.gifwKiom1UqLiLQSP7fAADIXk3tAp8015.jpg

            6、查詢某包提供的功用capabilities:

                rpm  -q  --provides  PACKAGE_NAME

                

            7、查詢某包依賴的功用capabilities:

                rpm  -q  --requires  PACKAGE_NAME

                spacer.gifwKiom1UqLomRhlj0AABHD3KKpBI975.jpg

            8、查詢某包安裝、卸載時執行的腳本:

                rpm  -q  --scripts  PACKAGE_NAME

                spacer.gifwKioL1UqMFaSCck2AADIhoWROI0897.jpg

                    腳本有四類:

                        preinstall: 安裝過程開始之前執行的腳本;

                        postinstall: 安裝過程完成之後執行的腳本;

                        preuninstall: 卸載開始之前執行的腳本 ;

                        postuninstall: 卸載過程完成之後執行的腳本;


        注意:安裝和升級時需跟帶完整路徑的安裝包名,卸載和查詢時只需跟安裝包名即可


    校驗

        查詢包安裝之後生成的文件是否發生過改變

        rpm {-V|--verify} [select-options] [verify-options]

            簡單用法: rpm -V PACKAGE_NAME

      wKiom1UqL1nTdukLAAHNmVbklRM229.jpg

               

程序包的合法性驗證

    來源合法

        由我們信任的製作者提供;

        依賴於:製作者的數字簽名;簽名是作者使用自己的私鑰加密程序包的特徵碼生成的;


    內容合法

        包未被二次修改,完整性驗證成功;        

        依賴於:製作者提供的程序特徵碼;

            驗證方式:安裝者用同樣的特徵碼提取方法提取程序包的特徵碼,並與原作者提供的相比較;


    驗證光盤中程序包的來源及完整性

        導入:rpm --import /path/to/RPM-GPG-KEY-FILE        

        驗證:rpm {-K|--checksig} PACKAGE_FILE

      wKioL1UqMQPTqQDhAADB_MID964400.jpg

      wKioL1UqMQPQO3-FAAC3kTVTvv4310.jpg     spacer.gif

            --nosignature: 不檢查來源合法性

            --nodigest: 不檢查完整性


rpm管理器數據庫

    /var/lib/rpm

    重建數據庫

        rpm {--initdb|--rebuilddb} [-v] [--dbpath DIRECTORY] 

                                默認重建在 /var/lib/rpm,只有需重新指定重建目錄時才需跟此選項

        --initdb:初始化數據庫,即數據庫完全不存在時,可新建之;

        --rebuliddb:無論當前數據庫存在與否,都會直接重建之;



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章