軟件包管理詳解

1、簡介前端

    咱們知道在操做系統上所使用的程序都是由程序員經過開發工具得來,程序員直接編寫的純文本的文檔咱們稱之爲源代碼,因爲計算機識別的是二進制程序,所以在完成源代碼編寫以後,就必需要通過編譯成爲操做系統能夠看得懂的二進制程序,這裏的編譯就是經過編譯器來進行的操做,編譯器的功能就是將源代碼程序轉換成二進制程序,而後經過必定的安裝步驟安裝到操做系統上來,進而被系統用戶使用。
node

2、程序包管理器程序員

    目前Linux系統之上軟件安裝方式最多見的兩種,分別是:數據庫

    dpkg
centos

        這個機制最先是由Debian Linux社區所開發出來的,透過dpkg的機制,Debian提供的軟件就可以簡單的安裝起來,同時還能提供安裝後的資訊,實在很是不錯。只要是衍生於Debian的其它Linux發行版,大多使用dpkg機制來管理軟件,文件後綴爲.deb結尾的,包括B2D,Ubuntu等。
緩存

    rpm:
bash

        這個機制最先是由Redhat這家公司開發出來的,後來實在很好用,所以不少發行版就使用這個機制來做爲軟件安裝的管理方式,文件後綴爲.rpm結尾的,包括Centos,Fedora,SuSE等知名的發行廠商。
服務器

    程序包管理器:ide

        功能:將編譯好的應用程序的各組成文件打包一個或幾個程序包文件,從而方便快捷地實現程序包的安裝、卸載、查詢、 升級和校驗等管理操做;工具

        一、包文件組成 (每一個包獨有)

            RPM包內的文件;

            PM的元數據;

            如名稱,版本,依賴性,描述等;

            安裝或卸載時運行的腳本;

        二、數據庫(公共)

            程序包名稱及版本;

            依賴關係;

            功能說明;

            包安裝後生成的各文件路徑及校驗碼信息;

3、包命名和工具

    1.rpm包命名方式:

        name-VERSION-release.arch.rpm

        例:bash-4.2.46-19.el7.x86_64.rpm

                bash:軟件名稱

                4.2.46:軟件版本號,分爲主板本和次版本,4爲主版本,2爲次版本

                19:軟件編譯的次數

        VERSION: major.minor.release

        release:release.OS

        常見的arch:

            x86: i386, i486, i586, i686

            x86_64: x64, x86_64, amd64

            powerpc: ppc

            跟平臺無關:noarch

    2.包分類和拆包:

        Application-VERSION-ARCH.rpm: 主包

        Application-devel-VERSION-ARCH.rpm 開發子包

        Application-utils-VERSION-ARHC.rpm 工具子包 

        Application-libs-VERSION-ARHC.rpm 庫子包

    3.包之間可能存在依賴關係,甚至循環依賴;

    4.解決依賴包管理工具:

        yum:rpm包管理器的前端工具

        apt-get:deb包管理器前端工具

        zypper: suse上的rpm前端管理工具

        dnf: Fedora 18+ rpm包管理器前端管理工具

4、庫文件

    1.查看二進制程序所依賴的庫文件:

        ldd /PATH/TO/BINARY_FILE 

                wKioL1mUHXOj38OqAACj5UgnQAE490.png-wh_50


    2.管理及查看本機裝載的庫文件:

        ldconfig

    3.顯示本機已經緩存的全部可用庫文件 名及文件路徑映射關係:

        /sbin/ldconfig -p

    4.配置文件:/etc/ld.so.conf,/etc/ld.so.conf.d/*.conf

    5.緩存文件:/etc/ld.so.cache

5、程序包的來源

    管理程序包的方式:

        使用包管理器:rpm

        使用前端工具:yum,dnf

    獲取程序包的途徑:

        (1)  系統發版的光盤或官方的服務器;

            CentOS鏡像:

                https://www.centos.org/download/

                http://mirrors.aliyun.com

                http://mirrors.sohu.com

                http://mirrors.163.com

        (2)項目官方站點

        (3)第三方組織

            Fedora-EPEL:Extra Packages for Enterprise Linux

            Rpmforge:RHEL推薦,包很全

            rpm包搜索引擎:

                http://pkgs.org

                http://rpmfind.net

                http://rpm.pbone.net

                https://sourceforge.net

6、rpm包管理

    centos系統上使用rpm命令管理程序包:安裝、升級、查詢、卸載、檢驗、數據庫維護。

    rpm包安裝:

        語法:rpm {-i|--install} [install-options] PACKAGE_FILE…

        OPTION:

            -v:--verbose:顯示安裝過程當中的詳細信息

            -vv:更詳細的信息

            -h: 以#顯示程序包管理執行進度           

             示例:
                rpm -ivh PACKAGE_FILE ...
                rpm -ivh tree-1.6.0-10.el7.x86_64.rpm

        [install-options]:

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

            - -nodeps:忽略依賴關係

            - -replacepkgs:覆蓋安裝(從新安裝並覆蓋原有的文件)

            - -replacefiles:覆蓋文件(不一樣的rpm包文件,個別相同文件衝突)

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

            - -nodigest:不檢查包完整性

            - -noscipts:不執行程序包腳本片段

                %pre: 安裝前腳本;- -nopre

                %post: 安裝後腳本;- -nopost

                %preun: 卸載前腳本; - -nopreun

                %postun: 卸載後腳本;- -nopostun     

             示例:
                 rpm -ivh vsftpd-3.0.2-21.el7.x86_64.rpm
                 rpm -q vsftpd
                 rpm -ivh - -test vsftpd-3.0.2-21.el7.x86_64.rpm
                 rpm -ivh - -nodeps httpd-2.4.6-45.el7.centos.x86_64.rpm
                 rpm -ivh --replacepkgs vsftpd-3.0.2-21.el7.x86_64.rpm 
                 rpm -ivh --replacepkgs --nosignature vsftpd-3.0.2-21.el7.x86_64.rpm

                            

    rpm包升級:

        語法:

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

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

               upgrade:安裝有舊版程序包,則「升級」 若是不存在舊版程序包,則「安裝」

               freshen:安裝有舊版程序包,則「升級」 若是不存在舊版程序包,則不執行升級操做

        示例:

            rpm -Uvh PACKAGE_FILE ...

            rpm -Fvh PACKAGE_FILE ...

        OPTION:

            - -oldpackage:降級;

            - -force: 強行升級;

        升級注意事項:

            (1) 不要對內核作升級操做;Linux支持多內核版本並存,所以,能夠直接安裝多個不一樣版本內核;

            (2) 若是原程序包的配置文件安裝後曾被修改,升級時,新版本 的提供的同一個配置文件並不會直接覆蓋老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)後保留;


    rpm包查詢:

        語法:rpm {-q|--query} [select-options] [query-options] 

        [select-options]

            -a: 全部包

            -f: 查看指定的文件由哪一個程序包安裝生成

            -p rpmfile:針對還沒有安裝的程序包文件作查詢操做;

            - -whatprovides CAPABILITY:查詢指定的CAPABILITY由哪一個包所提供

            - -whatrequires CAPABILITY:查詢指定的CAPABILITY被哪一個包所依賴 

            rpm2cpio 包文件|cpio–itv 預覽包內文件 

            rpm2cpio 包文件|cpio–id  「*.conf」 釋放包內文件


            示例:刪除/usr/bin/tree,使用rpm2cpio恢復

                wKioL1mUWfahWeQYAAB5p--k0WA736.png-wh_50


                wKioL1mUWiGh6c3NAADPKcnmH38303.png-wh_50


                wKioL1mUWoaiW_eHAAByM62XXxM354.png-wh_50  


        [query-options]

            - -changelog:查詢rpm包的changelog;

            -c: 查詢某包安裝完成後生成的全部配置文件;

            -d: 查詢某包安裝完成後生成的全部幫助文件;

            -i: information(查詢某包簡要說明信息);

            -l: 查看指定的程序包安裝後生成的全部文件;

            - -scripts:程序包自帶的腳本片段;

            -R: 查詢指定的程序包所依賴的CAPABILITY;

            - -provides: 列出指定程序包所提供的CAPABILITY;        

查詢用法:
            -qi PACKAGE_NAME
            -qf FILE
            -qc PACKAGE_NAME
            -ql PACKAGE_NAME
            -qd PACKAGE_NAME
            -qpi PACKAGE_FILE
            -qpl PACKAGE_FILE
            -qa
            -q - -wathprovides bash
            -q - -wathequires bash
            -q - -changelog bash
            -q - -scripts bash
            -q -R    bash
            -q - -provides bash

 

     rpm包卸載:

        語法:rpm {-e|- -erase} [- -allmatches] [- -nodeps][--noscripts] [- -notriggers] [--test] PACKAGE_NAME ...

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

        OPTION:

            - -nodeps:忽略依賴關係;

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

            - -allmatches:若是一個程序包同時安裝多個版本,則此選項一次所有卸載;

            - -noscripts:不執行程序包腳本片斷;


    rpm包校驗:

        1.查詢包安裝以後生成的文件是否發生了改變;

        2.語法:rpm {-V|--verify} [select-options][verify-options] 

        3.常見用法:rpm -V PACKAGE_NAME

        4.當沒有輸出結果時表示軟件包完整OK,當有相應的結果輸出表妹對應的內容有修改,具體以下:

        示例:

                wKioL1mUlYLgXV6DAAC2EQ6VYng877.png-wh_50    

    S:file Size differs(文件的容量大小是否被改變)
    M:Mode differs(文件的類型或文件的屬性(rwx)是否被改變?如是否可運行等參數已被改變)
    5:MD5 sum differs(MD5這一種指紋碼的內容已經不一樣)
    D:Device major/minor number mismatch(裝置的主/次代碼已經改變)
    L:readLink(2) path mis-match(link路徑一倍改變)
    U:User ownership differs(文件的全部者已被改變)
    G:Group ownership differs(文件的所屬組已被改變)
    T:mTime differs(文件的建立時間已被改變)
    P:capabilities differ(功能改變)

   

  

   5.包來源合法性驗正及完整性驗正:
            完整性驗正:SHA256
            來源合法性驗正:RSA 
     6.公鑰加密: 對稱加密:加密、解密使用同一密鑰;
     7.非對稱加密:密鑰是成對兒的
             public key: 公鑰,公開全部人 
             secret key: 私鑰, 不能公開 
     8.導入所須要公鑰:
        rpm -K|checksig rpmfile 檢查包的完整性和簽名
        rpm - -import/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 ##導入公鑰文件
        CentOS 7發行版光盤提供:RPM-GPG-KEY-CentOS-7
        rpm -qa gpg-pubkey* 查看公鑰文件

           示例:

                wKioL1mUo17yOfChAAB4DsQLRzY369.png-wh_50


                wKioL1mUo_zQ8k3kAABtc2r41Sg133.png-wh_50

                

7、rpm數據庫

    1.rpm數據庫文件:/var/lib/rpm

    2.數據庫重建:

        語法:rpm {--initdb|--rebuilddb}

            initdb: 初始化 

                若是事先不存在數據庫,則新建之;不然,不執行任何操做;

            rebuilddb:重建 

                不管當前存在與否,直接從新建立數據庫;

相關文章
相關標籤/搜索