1. 程式人生 > >linux rpm程序包管理器

linux rpm程序包管理器

man 功能 獲取 group eas 沒有 可行性 硬件 x86

在linux中的應用程序結構形式分為三種:
1)源代碼形式
2)二進制形式
3)程序包形式
其中源代碼是最權威的,二進制形式經過了一系列的編譯、匯編、連接等等其他操作得到可以執行的程序及其他相關的文件,而程序包形式則是二進制形式進一步進行操作,使之可以自動安裝程序包中的所有文件,當然在卸載的時候,也可以一並刪除;
一般來說,我們對於程序包形式的程序的操作比較常用。比較方便。

有了程序包之後,我們就需要程序包管理器來管理程序包,借此來方便終端用戶的安裝、卸載、升級、安裝信息查詢及校驗等工作;

我們在這只說Redhat系列的linux的使用的管理器;用.rpm後綴名的軟件包;

rpm的命名規則
源代碼包:
name-VERSION.tar.gz(純源碼包)

name-VERSION.src.rpm(rpm封包的源代碼包)
VERSION: Major.Minor.Release
Major: 主版本號,通常只有程序進行了重大的功能改進才會修改;
Minor:次版本號,通常在在某個主版本中的對某個特定的功能進行改進或添加新功能才會修改
Release:發行版本號,一般修復bug或進行代碼優化都會更改;

                        如:apache-tomcat-7.0.63.tar.gz

   二進制包:
            name-VERSION-[release].[os].arch.rpm
                VERSION: Major.Minor.Release
                [Release]:rpm封包的發行版本號
                [os]:此程序包所能夠支持的操作系統的版本;如:el7(RHEL7,CENTOS7),suse11,fedora21...
                arch:此程序包所依賴的硬件平臺類型;
                    i386,x64(amd64),ppc,sparc,noarch,...

                    如:hping3-0.0.20051105-24.el7.x86_64.rpm

    在制作rpm程序包時,通常其制作者會根據自己的理解將程序編譯後的結果分別放置於不同的rpm包中,用以實現對於該程序的不同需求;將此種封包方式,稱為分包技術;一旦程序被分包,則程序包就被分為兩類:
        主程序包:
            name-VERSION-[release].[os].arch.rpm
        子程序包(分支程序包):
            name-function-VERSION-[release].[os].arch.rpm
                function:
                    devel:開發包;
                    utils:工具包;
                    libs:共享庫包;
                    manual:離線幫助文檔包;
                    ...

rpm命令行工具:
功能:
1.將編譯好的應用程序的各個文件打包成一個或多個程序包
2.支持rpm程序包的安裝、卸載、升級、降級、查詢、校驗及程序包信息數據庫管理功能;

    rpm程序包文件的組成:
        1.被封包的程序文件;
        2.文件清單
        3.程序在安裝或卸載是所需要運行的腳本,共有四種:
            preinstall:在正式安裝操作開始之前所需要運行的腳本,標識為"%pre"
            postinstall:在安裝完成之後所需要運行的腳本,標識為"%post"
            preuninstall:在正式的卸載操作開始之前所需要運行的腳本,標識為"%prsun"
            postuninstall:在卸載完成之後所需要運行的腳本,標識為"%postun"

        註意:在一個rpm程序包中,並不一定同時有哦這四類腳本,也可以沒有這些腳本;

    rpm數據信息的數據庫(公共):
        目錄:/var/lib/rpm

    rpm程序包的獲取途徑:
        1.系統的發行版光盤;
        2.官方的文件服務器或者鏡像站點;
            阿裏雲鏡像
            網易鏡像
            搜狐鏡像 mirror.souhu.com
            ...
        3.某個應用程序項目的官方站點;
        4.第三方自組織制作的rpm程序包站點;
            Fedora EPEL:Extra Package for Enterprise Linux; 紅帽官方的社區組織,通常來說,在上述的鏡像站點中也會包括EPEL鏡像
        5.某些專用你的搜索引擎:
            http://pkgs.org
            http://rpmfind.net
            http://rpm.pbone.net
        6.自己動手制作rpm程序包

rpm命令行工具:
rpm - Red Hat 包管理器

OPSIS

QUERYING AND VERIFYING PACKAGES:
rpm {-q|--query} [select-options] [query-options]
rpm {-V|--verify} [select-options] [verify-options]
rpm --import PUBKEY ...
rpm {-K|--checksig} [--nosignature] [--nodigest]
PACKAGE_FILE ...

INSTALLING, UPGRADING, AND REMOVING PACKAGES:
rpm {-i|--install} [install-options] PACKAGE_FILE ...
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts]
[--notriggers] [--test] PACKAGE_NAME ...

安裝:rpm {-i|--install} [install-options] PACKAGE_FILE ...
install-options:
-h,--hash:用“#”表示安裝進度條;
--force:強制安裝進行,無論是否有錯誤發生;
--test:並非真正安裝軟件包,僅僅是測試安裝過程是否能夠正常進行;dry run
--nodeps:忽略因為依賴關系導致的安裝錯誤;不建議使用;
--replacefiles:在安裝程序包時,程序包中的文件會直接替換已經存在的文件;若不使用該選項,在安裝程序包中的文件之前,先將原有的同名文件名改名為filename.rpmsave
--replacepkgs:無需卸載已安裝程序包而重新安裝之;
--noscripts:在安裝前及安裝後均不允許安裝相關腳本;
--nopre:不運行安裝前腳本
--nopost:不運行安裝後腳本
--nosignature:跳過校驗程序包來源的合法性;
--nodigest:跳過校驗程序包完整性;
--oldpackage:降級安裝,指定的安裝的程序包的版本低於當前已經安裝的程序包的版本;
升級:
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...

相比較而言:兩個選項有下列特點:
    -U:既可以對已經安裝的程序包進行升級或降級安裝,又可以在未安裝該程序包時進行全新安裝;可以包括部分-i安裝模式的功能;
    -F:僅能夠對已經安裝的程序進行升級或降級;

        -h,--hash:用“#”表示安裝進度條;
           --force:強制安裝進行,無論是否有錯誤發生;
           --test:並非真正安裝軟件包,僅僅是測試安裝過程是否能夠正常進行;dry run
           --nodeps:忽略因為依賴關系導致的安裝錯誤;不建議使用;
           --replacefiles:在安裝程序包時,程序包中的文件會直接替換已經存在的文件;若不使用該選項,在安裝程序包中的文件之前,先將原有的同名文件名改名為filename.rpmsave
           --replacepkgs:無需卸載已安裝程序包而重新安裝之;
           --noscripts:在安裝前及安裝後均不允許安裝相關腳本;
               --nopre:不運行安裝前腳本
               --nopost:不運行安裝後腳本
           --nosignature:跳過校驗程序包來源的合法性;
           --nodigest:跳過校驗程序包完整性;
           --oldpackage:降級安裝,指定的安裝的程序包的版本低於當前已經安裝的程序包的版本;

  註意:
       1.強烈建議,不要使用此方法對內核進行升級操作;
       2.升級安裝程序包可能會帶來文件的變化,或引入為指導bug或漏洞,因此,在實施升級操作之前,必須要進行可行性分析;

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

    註意:卸載程序包時,rpm命令的參數是程序名稱而非程序包名稱;
        --allmatches:卸載所有能夠匹配指定名稱的程序包的各個版本;
        --nodeps:卸載時忽略依賴關系;
        --test:並非真正卸載,而是卸載過程是否能夠正常完成;dry run
                    查詢:
    rpm {-q|--query} [select-options] [query-options] 
        select-options:
            PACKAGE_NAME:指定查詢的程序名稱,不是程序包名稱;
            -a,--all:查詢所有已安裝的程序包名稱;
            -f,--file FILE:查詢指定的文件是由那個程序包提供的;
            -p,--package PACKAGE_FILE:查詢尚未安裝的程序包文件中的文件清單;
            --whatprovides CAPABILITY:查詢指定的CAPABILITY是由那個程序包提供的;
            --whatrequires CAPABILITY:查詢指定的CAPABILITY被那個程序包所依賴;

        query-options:
            --changelog:查詢程序包的歷次的版本變更記錄;
            -c,--configfiles:查詢指定的程序包中包含哪些配置文件;
            -d,--docfiles:查詢指定的程序包中有哪些文本文件;
            -i,--info:查詢指定程序包的相關屬性信息;
            -l,--list:列表顯示查詢結果;
            --provides:列出指定程序包所提供的所有的CAPABILITY;
            -R,--requires:列出指定程序包的依賴關系;
            --scripts:查詢程序包所攜帶的腳本的內容;

    常用的選項組
        -qa 
        -qf | -qc | -qd | -ql PACKAGE_NAME
        -qpl | -qpc | -qpd | -qpl PACKAGE_FILE
                    校驗:
    rpm {-V|--verify} [select-options] [verify-options]

        校驗狀態:
        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 --import /PATH/TO/SOMEFILE
導入指定的認證密鑰的路徑:

  rpmkeys {-K | --checksig } PACKAGE_NAME..
      檢查指定的程序包的數字簽名信息;

數據庫管理:
/var/lib/rpm
--initdb 初始化數據庫
--rebuilddb 從已安裝軟件包包頭重建數據庫反向列表

linux rpm程序包管理器