Linux——RPM包管理

    啥是RPM?

    原來RPM就是redhat package manager的縮寫,這一文件格式名稱雖然打上了RedHat的標誌,但是其原始設計理念是開放式的,後來採取名稱採取了遞歸縮寫的方式,即:RPM Package Manager(RPM 軟件包管理器)。現在包括OpenLinux、S.u.S.E.以及Turbo Linux等Linux的分發版本都有采用,可以算是公認的行業標準了。注:據說RPM文件在Linux系統中的安裝最爲簡便


    RPM是用來幹嘛的?

    軟件包管理器嘛,聽名字就知道是管理軟件包的啊。也就是一種用於互聯網下載包的打包及安裝工具,它包含在某些Linux分發版中。它生成具有.RPM擴展名的文件。主要功能呢就是:打包、安裝、卸載、升級、校驗、數據庫管理。


     RPM包的名字是啥樣的?

    在用之前呢,要先明白RPM包的命名格式,不然廢了半天勁下載下來的包,竟然發現不可用那就傻眼了。

     name-version-relase.arch.rpm

        name:就是包的名稱

        version:major.minor.release 版本號

        relase:RPM包自身的發行號,與程序源碼的發行號無關,僅用於標識RPM包不同製作

            的修訂;同時,relase還包含此包適用的OS。例如:bash-4.2.3-3.centos5

        arch:標識RPM包適用的硬件平臺

            x86: i386, i486, i586, i686等;

            x86_64: x86_64

            powerpc: ppc

            noarch: 依賴於虛擬機

            例如:bash-4.2.3-3.centos5.x86_64.rpm

還有一點需要注意的是一個程序可能有很多的功能,比如常用的6個,特殊的2個,還包含二次開發的相關功能,我們需要的可能就是一些常用的功能,那些非常用的我們能不能不安裝呢?其實RPM包還有一種分包機制;

        核心包(也就是主包):命名與源程序一樣

            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


    獲取RPM包的途徑

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

     鏡像:

       http://mirrors.163.com

       http://mirrors.sohu.com

    2、項目的官網

     源代碼

     rpm包

    3、很多第三方機構或個人製作並公開發布許多rpm包

     http://rpmfind.net

     http://rpm.pbone.net

    可靠的途徑:EPEL

     Fedora-EPEL


    RPM包的合法性校驗

    我們知道現在無聊的駭客越來越多,那怎麼保證我們從網站下載到我們PC上的數據沒有在路上遭遇埋伏呢?對頭,就是對下載到的RPM包進行合法性校驗。一般情況下包的作者製作完成之後都會附加數字簽名於包上,用於確定包的來源合法性及完整性。

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

    驗正過程:

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

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

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


    RPM包的安裝

    好的,經過前面的努力,我們終於拿到了我們想要的RPM包,那麼要怎麼用呢?聽俺慢慢道來~

    安裝程序包:

     rpm [option] /path/to/package_file

        -i: install

        -v:顯示安裝信息

        -vv:更詳細

        -vvv:更更詳細

        -h: 顯示安裝進度

   

      組合選項:-ivh  安裝時顯示安裝信息及進度條

        

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


    如果安裝時提示依賴於其它包的解決方法:

     1、解決依賴關係

     2、忽略依賴關係

       使用 --nodeps 忽略依賴關係,但是安裝上後可能無法運行。


    重新安裝:

    --replacepkgs

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

    卸載程序包:

    rpm [option] package_name

    -e: erase

    如果被其它包所依賴:

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

     2、忽略依賴關係

       使用 --nodeps 忽略依賴關係,但是所有依賴於此包的程序可能會無法正常運行。


    注意:如果包的配置文件安裝後曾被改動過,卸載時,此文件將不會卸載,而是被重命名並保留,例如:warning: /etc/zprofile saved as /etc/zprofile.rpmsave

    升級程序包:

    rpm [option] /path/to/package_file

     1、升級或安裝

        -Uvh

     2、純升級

        -Fvh


    升級版本後可能會引起版本衝突等;

      可使用 --force 強制升級

    注意:不應該對內核執行升級操作,而是安裝,因爲系統允許多內核並存。


    EPM包的查詢操作

    1、查詢某包是否安裝

     rpm -q package_name...

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

     rpm -qa 

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

    3、查詢包的描述信息

     rpm -qi package_name

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

     rpm -ql package_name

    (1) 查詢某包安裝生成了哪些配置文件

     rpm -qc package_name

    (2) 查詢某包安裝生成了哪些幫助文件

     rpm -qd package_name

    (3) 查詢程序包的相關腳本

     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

    校驗:

    用於檢查包安裝生成的文件屬性是否發生變化,通過此信息可查看已安裝的程序有無被人修改過,防黑必備。

     rpm -V package_name

          S file Size differs  

          M Mode differs (includes permissions and file type)  

          5 digest (formerly MD5 sum) differs    

          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

         某屬性無變化,顯示爲.


    RPM來源合法性及完整性檢驗

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

    導入:

     rpm --import /path/to/key_file

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

     # rpm -qa gpg-pubkey*

    顯示密鑰的詳細信息

      # rpm -qi gpg-pubkey-NAME

    

    安裝過程中會自動執行可以檢查,想手動檢查當然也是可以的。

    手動檢查:

     rpm -K /path/to/package_file

     rpm --checksig /path/to/package_file

    不檢查包完整性:

     rpm -K --nodigest

    不檢查來源合法性:

      rpm -K --nosignature


    數據庫重建

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

    重建:

     rpm --initdb:初始化

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

     rpm --rebuilddb: 重建

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


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