rpm——軟件包管理工具

  一、軟件包管理簡介 

    1軟件包組成 

    我們都在windows系統中安裝過軟件,基本就是用鼠標點擊下一步,因而有些人認爲安裝軟件是一件非常容易的事,無論是在何種操作系統上。然而,事實並非如此。在Linux系統上安裝軟件的方法完全不同於在Windows上安裝,至少不會是簡單的用鼠標點擊下一步就行了。要想在Linux系統上安裝軟件包,首先要了解軟件包的組成。

    軟件包由二進制程序、庫文件、配置文件、幫助文件等重要部分組成。

    軟件包的安裝目錄如下:

       二進制程序:

          默認:/bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, 

                /usr/local/sbin

          自定義:/usr/local/APP/{bin,sbin}

        庫文件(開發庫和運行庫):

             默認:/lib64, /usr/lib64, /usr/local/lib64

          自定義: /usr/local/APP/lib

       配置文件:

          默認:/etc

          自定義/usr/local/APP/etc或conf目錄

        幫助文件:

          默認:/usr/share/man, /usr/local/share/man           

          自定義:/usr/local/APP/man

    2軟件包管理

    問:安裝軟件包時,會在很多不同的目錄下存放文件,如果要卸載軟件包,怎樣才能卸載得乾淨呢?

    答:如果在安裝軟件包時,把安裝存放軟件包文件的目錄記錄下來,卸載時,根據這個記錄就能把軟件包卸載得乾淨。這就是軟件包管理器中數據庫的作用了!

    在Linux系統中,一般會使用軟件包管理工具對軟件包進行管理。        

    程序包管理器功能:將編譯好的程序打包成一個文件或有限的幾個文件,可用於實現安裝、卸載、升級、查詢等功能; 

     程序包管理器中應該包含:

       (1)數據庫:

           程序名及版本

           程序的依賴關係:X --> Y,Z (X依賴於Y、Z)

           程序的功能性說明

           安裝生成的各文件路徑及校驗碼

       (2)程序的組成清單:

           文件清單

           安裝卸載時運行的腳本

    常見的軟件包管理器有:        

            Debian: dpkg,(以.deb後綴結尾)

          RedHat: rpm(redhat package manager),(以.rpm後綴結尾)

  二、rpm包介紹

    RPM是RedHat Package Manager(RedHat軟件包管理工具)的縮寫,這一文件格式名稱雖然打上了RedHat的標誌,但是其原始設計理念是開放式的,現在包括OpenLinux、S.u.S.E.以及Turbo Linux等Linux的分發版本都有采用,可以算是公認的行業標準了。

    利用rpm軟件包管理工具可以把軟件包打包成rpm格式(以.rpm爲後綴),rpm包可以用rpm工具統一管理。

    1、rpm包命名格式    

      rpm包命名格式name-version-relase.arch.rpm

        name : 表示軟件包的名字,包括主包名和分包名           

                分包機制:

                核心包,主包:命名與源程序一致

                    bash-4.2.3-3.centos7.x86_64.rpm

                子包:(在主包名後加上子包的功能性描述字串)

                     bash-a-4.2.3-3.centos7.x86_64.rpm

                    bash-b-4.2.3-3.centos7.x86_64.rpm

                    bash-devel-4.2.3-3.centos7.x86_64.rpm

        version:包源代碼的版本號          

                version:    major.minor.release

                主版本號.次版本號.源代碼的發行版本號

          relaserpm自身的發行號,與程序源碼的發行號無關,僅用於標識對rpm包不同製作的修訂;同時,release還包含此包適用的OS

                        如:bash-4.2.3-3.centos5

        arch :該程序包使用的硬件平臺

              如:x86: i386, i486, i586, i686等;

               x86_64: x86_64

               powerpc: ppc

               noarch: 依賴於虛擬機

    2、rpm包獲取的途徑       

        (1)發行的光盤或站點服務器

            鏡像:

                http://mirrors.163.com

                http://mirrors.sohu.com

      (2)項目的官網

            源代碼

            rpm

      (3)很多第三方機構或個人製作並公開發布許多rpm包(不一定安全)

            http://rpmfind.net

            http://rpm.pbone.net

      (4)可靠的途徑:EPEL(建議使用可靠的包)

           Fedora-EPEL(Fedora官方維護,會驗證包的合法性和可靠性)

    3、rpm包的合法性驗正        

        rpm包的合法性驗正主要包括:

            a、來源合法性

            b、包的完整性 

      (包製作者製作完成之後會附加數字簽名於包上)     

        包的製作者使用單向加密提取原始數據的特徵碼,而後使用自己的私鑰加密這段特性碼,附加原始數據後面。

        驗正過程:

        前提:必須有可靠機制獲取到包製作者的公鑰;

        (1)使用製作者的公鑰解密加密的特徵碼,能解密則意味着來源合法;

        (2)使用與製作者同樣的意向加密算法提取原始數據的特徵碼,並與解密出來的特徵作比對,相同,則意味着完整性沒問題;

  三、rpm的核心功能

    1、安裝程序包

     安裝程序包:

        rpm [option] /path/to/package_file (要指明包文件才能安裝)

            -i: install  安裝指定的程序包

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

            -vv: 顯示更詳細的安裝信息

            -vvv: 顯示更多的詳細安裝信息(比-vv更詳細)

            -h: 使用“#”顯示安裝進度,一個“#”表示%2的安裝進度      

        組合選項:-ivh   

            --test: 僅作測試,沒有真正執行安裝     

        如果依賴於其它包:

        (1)解決依賴關係

        (2)忽略依賴關係

            能安裝上,但有可能無法運行;

                --nodeps (忽略依賴關係)    

        重新安裝:

        --replacepkgs 

        如果原有配置文件作了修改,很有可能不執行替換,而是將應該安裝生成的配置文件重命名爲 .rpmnew      

        2、卸載程序包:

        rpm [option] package_name

        -e: erase 卸載指定包名的程序包

        如果被其它包所依賴:

        (1)將依賴於此包的所有包一併卸載

        (2)忽略依賴關係

            能卸載,但依賴於此包程序包可能會運行不正常;

                --nodeps (忽略依賴關係)

        如果包的配置文件安裝後曾被改動過,卸載時,此文件將不會卸載,而是被重命名並保留,例如:

        warning: /etc/zprofile saved as /etc/zprofile.rpmsave         

        3、升級程序包:

        新版本替換老版本

        rpm [option] /path/to/package_file

        (1)升級或安裝

            -Uvh   (如果裝有老版本的,則升級,否則,則安裝    

        (2)純升級

            -Fvh  (如果裝有老版本的,則升級,否則,退出       

        --force: 強制升級    

        注意:不應該對內核執行升級操作,而是安裝

        系統允許多內核並存

        4、查詢操作:

        (1)查詢某包是否安裝

            rpm -q package_name...     

        (2)查詢所有已經安裝的包

            rpm -qa  

        按條件過濾:rpm -qa | grep 'PATTERN' 

        (3)查詢包的描述信息

            rpm -qi package_name

        (4)查詢某包安裝生成了哪些文件

            rpm -ql package_name

            a、查詢某包安裝生成了哪些配置文件

                rpm -qc package_name

            b、查詢某包安裝生成了哪些幫助文件

                rpm -qd package_name

            c、查詢程序包的相關腳本

                rpm -q --scripts package_name

                腳本有四類:

                preinstall:安裝前腳本

                postinstall: 安裝後腳本

                preuninstall: 卸載前腳本

                postuninstall: 卸載後腳本

        (5)查詢某文件是由哪個包安裝生成的

            rpm -qf /path/to/some_file

        (6)對尚未安裝的包執行查詢

            rpm [option] /path/to/package_file

                -qpi :查詢尚未安裝的包的描述信息

                -qpl :查詢尚未安裝的包安裝後會生成哪些文件

                -qpc :查詢尚未安裝的包安裝後會生成哪些配置文件

                -qpd :查詢尚未安裝的包安裝後會生成哪些幫助文件

        5、校驗:

        用於檢查包安裝生成的文件屬性是否發生變化

        rpm -V package_name

               S file Size differs (大小發生了改變)

               M Mode differs (includes permissions and file type) (權限發生改變了,包括文件類型)

               5 digest (formerly MD5 sum) differs (MD5校驗碼發生了改變)

               D Device major/minor number mismatch (設備文件的主設備號或次設備號發生了改變)

               L readLink(2) path mismatch (路徑發生了改變)

               U User ownership differs (屬主改變了)

               G Group ownership differs (屬組改變了)

               T mTime differs (修改時間變化了)

               P caPabilities differ (能力發生改變了)

             某屬性無變化,顯示爲.

        6、rpm包來源合法性及完整性檢驗:

        前提:在當前系統上導入包的製作者的公鑰

        導入:

            rpm --import /path/to/key_file

            # rpm -qa gpg-pubkey*

            顯示所有已經導入的gpg格式的公鑰

            # rpm -qi gpg-pubkey-NAME

            顯示密鑰的詳細信息

        檢查包:安裝過程中會自動執行

        手動檢查:

            rpm -K /path/to/package_file

            rpm --checksig /path/to/package_file

                不檢查包完整性:

                    rpm -K --nodigest

                不檢查來源合法性:

                    rpm -K --nosignature

        7、數據庫重建:

        數據庫目錄:/var/lib/rpm

        重建:

            rpm --initdb:初始化

                如果事先沒有庫,會新建一個;如果有,則不新建;

            rpm --rebuilddb: 重建

                直接重建,覆蓋原有的數據庫

    


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