rpm詳解

rpm詳解

rpm詳解

  • rpm使用方法

  • rpm起源

  • rpm是什么

  • rpm命名格式

  • rpm優缺點

  • rpm獲取注意

  • rpm命令使用

rpm起源

 由于在linux中安裝應用程序需要源碼包編譯安裝,對于非專業人員而言難度太大,因而出現一種將源碼編譯好的二進制程序,庫文件,配置文件,幫助文件等打包成一個或多個特定格式的程序包,而管理這類包的工具之一,則稱為rpm.

rpm是什么

rpm 是 reahat package manage,最開始由redhat公司在其rhel系統上提供的程序包管理器,但是由于rpm的使用十分的方便,因此現在rpm是rpm is package manager,成為linux中通用的程序包管理器之一.

rpm命名格式

首先我們先了解一下,此類程序包的命令方法.直接上實例更加明顯,
    php-5.4.16-21.el7.x86_64.rpm
格式為name-VERSION-rpm_release.os.arch.rpm
name:程序的名稱,php
VERSION:程序源碼包的版本號,5.4.16
rpm_release:rpm的發行號,21
os:操作系統版本,el7
arch:編譯此包的cpu架構,x86_64
注:arch中有noarch,其表示此包可在任何架構平臺上安裝;

對于用戶而言,程序能夠運行則足夠,但是對于某些需要在此程序上進行二次開發,或者添加額外組件的專業人員,那該怎么辦呢?
因此rpm有一個拆包的機制,將一個程序分為主包跟其子包來管理,一般用戶只需要安裝主程序就能穩定使用,專業人員根據自己需求去安裝其它子包.以下來看看哪些是子包,
    openssl-1.0.1e-34.el7.x86_64
    openssl-devel-1.0.1e-34.el7.x86_64
    openssl-libs-1.0.1e-34.el7.x86_64
子包格式為application-function-VERSION-rpm_release.os.arch.rpm
function:該程序的某功能組件
常見的有:libs-->庫文件
         utils-->工具程序
         devel-->開發組件

rpm優缺點

優點

 為了更好的管理程序包的安裝,卸載,更新和查詢等操作,rpm提供
  1.rpm包的組成文件列表(每個rpm包所必有的)
  2.rpm包安裝或卸載時的腳本信息
  3.公共數據庫保存
            程序包的名稱和版本
            依賴關系
            功能說明
            安裝生成的各文件的文件路徑及校驗碼信息
            等信息

缺點

    1 rpm包都是在特定環境定制的,因此對安裝環境有所要求.
    2 在linux中,各程序之間的依賴關系由作者所設計,但由于程序包多種多樣,其依賴關系則非常的復雜,如果安裝一個應用程序,它會需要很多其它程序,才能正常運行起來,在安裝中很常見.因此這在rpm中是個弊端.

rpm獲取注意

 由于rpm包是源碼編譯再將其打包,則rpm包也隨處可見,任何人都能夠進行發布rpm包.我們所需注意的是
 1.包的來源性
 2.包的完整性

rpm命令使用

rpm作用有:安裝,卸載,更新,查詢,校驗常用功能

rpm 
     RPM Package Manager
     rpm包管理器
     rpm [options] PACKAGE_FILE ...
基本選項:
    --version:顯示RPM版本號
    -v:顯示操作過程詳細信息
    -vv:顯示更加詳細的信息

安裝格式:
    rpm {-i|--install} [install-options] PACKAGE_FILE ...
         -i:安裝
         -h:hash,以#表示安裝進度
         --force:強制安裝
         --nodeps:不檢查包的依賴關系
         --test:不安裝,簡單的檢查和報告可能的沖突
         --replacepkgs:覆蓋安裝

        example:
            安裝rpm包,時會因依賴關系而無法安裝,若想忽略依賴關系安裝,則需使用--nodeps
         ]# rpm -ivh httpd-2.2.15-53.el6.centos.x86_64.rpm 
            error: Failed dependencies:
	    apr-util-ldap is needed by httpd-2.2.15-53.el6.centos.x86_64
	    httpd-tools = 2.2.15-53.el6.centos is needed by httpd-2.2.15-53.el6.centos.x86_64
	    libdb-4.7.so()(64bit) is needed by httpd-2.2.15-53.el6.centos.x86_64
	    libpcre.so.0()(64bit) is needed by httpd-2.2.15-53.el6.centos.x86_64
	        忽略依賴關系并安裝
	    ]# rpm -ivh --nodeps httpd-2.2.15-53.el6.centos.x86_64.rpm 
	             Preparing...                          ################################# [100%]
                       Updating / installing...
                            1:httpd-2.2.15-53.el6.centos       ################################# [100%]

卸載格式:

    rpm {-e|--erase} {ERASE OPTIONS} PACKAGE_NAME ...
        -e:卸載
        --nodeps:不檢查包的依賴關系
        --test:測試卸載,跟-vv連用
        --allmatches:刪除此包所有的版本

    注:如果程序包的配置文件被修改過,卸載時,此文件通常不會被刪除,而是被重命名(加后綴.rpmsave)后留存.
       還需要注意卸載時,不要加.rpm后綴,因為安裝完成之后,就不是以rpm結尾的包.
    建議:盡量不要卸載程序,只要不啟用就可以,以免由依賴關系所引起不必要的麻煩.
        example:
            卸載tcsh的rpm包
            ]# rpm -e tcsh-6.17-24.el6.x86_64
            ]#

更新格式:  
    rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
    rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
        -U:升級或安裝(如果不存在舊文件,直接安裝最新包)
        -F:升級(如果舊文件不存在,則什么都不做)
        --oldpackage:降級到舊版本
        --force:有沖突時強制升級
        --nodeps:不檢查包的依賴關系
        --test:不安裝,簡單的檢查和報告可能的沖突
    注意:(1) 不要對內核做升級操作;Linux支持多內核版本并存,因此,直接安裝新版本內核;同樣不要對python進行升級.
       (2) 如果某原程序包的配置文件安裝后曾被修改過,升級時,新版本的程序提供的同一個配置文件不會覆蓋原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.rpmnew)后提供;
        
    
    example:
             (只是為做演示,是rpm的發行號更新)
             1 舊版本httpd升級為新版本httpd  
        ]# rpm -Uvh  --nodeps --oldpackage httpd-2.2.15-53.el6.centos.x86_64.rpm 
           Preparing...                          ################################# [100%]
                  Updating / installing...
                   1:httpd-2.2.15-55.el6.centos.2     ################################# [ 50%]
                  Cleaning up / removing...
                   2:httpd-2.2.15-53.el6.centos       ################################# [100%]
         2 新版本降級到舊版本  
        ]# rpm -Uvh  --nodeps --oldpackage httpd-2.2.15-53.el6.centos.x86_64.rpm
        Preparing...                          ################################# [100%]
            Updating / installing...
               1:httpd-2.2.15-53.el6.centos       ################################# [ 50%]
            Cleaning up / removing...
               2:httpd-2.2.15-55.el6.centos.2     ################################# [100%]

查詢格式:  
    rpm {-q|--query} [select-options] [query-options] [PACKAGE_FILE ...]     
        -q:是否安裝指定的程序包
        select-options
            -a:查看所有已經安裝的包
            -f:查看某個文件自己的安裝包,/path/to/file
            -p:查看沒有安裝的包

        query-option
            --changelog:查看程序包的變化信息
            -i,--info:查看包的詳細信息
            -c:查看包的配置文件
            -l:查看包安裝的文件列表
            -d:查看包安裝的幫助文件列表
            --dump:查看包文件列表元數據的詳細信息
            --provides:查看包的capabilities
            --requires:查看包所依賴的capabilities
            --scripts:查看包安裝或卸載時執行的腳本
                    此類腳本有四種:
                        preinstall:安裝過程開始之前執行的腳本
                        postinstall:安裝過程完成之后執行的腳本
                        preuninstall:卸載開始之前執行的腳本
                        postuninstall:卸載之后執行的腳本
            Capabilities:即該包能夠提供的能力(例如:httpd能提供web server的能力)
            
            
    example:
        1 查看httpd是否已經安裝
        ]# rpm -q  httpd
        httpd-2.2.15-55.el6.centos.2.x86_64
        2 查看系統上所有以安裝的rpm包
        ]# rpm -qa
        gcc-4.8.2-16.el7.x86_64
        policycoreutils-2.2.5-11.el7.x86_64
        cairomm-1.10.0-8.el7.x86_64
        ...
        3 查看安裝/usr/sbin/httpd的rpm包
        ]# rpm -qf /usr/sbin/httpd
        httpd-2.2.15-55.el6.centos.2.x86_64
        4 查看尚未安裝的包
        ]# rpm -qp httpd-2.2.15-53.el6.centos.x86_64.rpm 
        httpd-2.2.15-53.el6.centos.x86_64
        5 查看httpd包的版本修改日志 
        ]# rpm -q --changelog httpd
        * Fri Nov 18 2016 Johnny Hughes <johnny@centos.org> - 2.2.15-54.2
                - Roll in CentOS Branding
        6 查看httpd包所安裝的所有文件清單
        ]# rpm -ql httpd
        /etc/httpd/conf.d/welcome.conf
        /etc/httpd/conf/httpd.conf
        /etc/httpd/conf/magic
        /etc/logrotate.d/httpd
        ...
        7 查看httpd包的詳細信息 
        ]# rpm -qi httpd
        Name        : httpd
        Version     : 2.2.15
        Release     : 55.el6.centos.2
        Architecture: x86_64
        ...
        The Apache HTTP Server is a powerful, efficient, and extensible web server.
        8 查看httpd包提供的capabilities 
        config(httpd) = 2.2.15-55.el6.centos.2
        httpd-mmn = 20051115
        httpd-suexec = 2.2.15-55.el6.centos.2
        mod_actions.so()(64bit)
        ...
        webserver
        httpd = 2.2.15-55.el6.centos.2
        httpd(x86-64) = 2.2.15-55.el6.centos.2
        9 查詢httpd包所依賴的capabilities
        ]# rpm -q --requires httpd
        /bin/bash
        /bin/sh
        ...
        rtld(GNU_HASH)
        system-logos >= 7.92.1-1
        rpmlib(PayloadIsXz) <= 5.2-1
        10 查詢httpd包安裝及卸載時所執行的腳本
        ]# rpm -q --scripts httpd
        preinstall scriptlet (using /bin/sh):
        # Add the "apache" user
        getent group apache >/dev/null || groupadd -g 48 -r apache
        ...
        preuninstall scriptlet (using /bin/sh):
        if [ $1 = 0 ]; then
        ...
        /sbin/service httpd condrestart >/dev/null 2>&1 || :
   
   技巧使用:
       一般當安裝出現缺少某庫時,可以使用-qf來查詢此庫由哪個程序包所提供,進而解決.
       例如:
       當安裝時出現缺少,liblogin.so.2庫時:
       # find / -name "liblogin.so.2"|xargs rpm -qf 
          cyrus-sasl-plain-2.1.23-13.el6_3.1.x86_64
校驗格式:
    rpm {-V|--verify} [select-options] [verify-options]
        -V:檢查包安裝之后生成的文件是否發生了改變
            如果沒有輸出結果,則
            當有結果輸出時,則根據下面查詢對應原因:
                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
            S:文件大小改變
            M:文件權限和類型發生改變
            5:MD5這一種指紋碼內容改變
            D:設備主/次號改變
            L:Link路徑改變
            U:文件所屬人改變
            G:文件所屬組改變
            T:文件修改時間改變
            p:文件的Capabilities發生改變
        example:
            在httpd所安裝的文件中添加一個數
            echo 1 >>  /etc/httpd/conf/httpd.conf
            大小改變,MD5碼改變,文件修改時間改變 
            # rpm -V --nodeps  httpd
            S.5....T.  c /etc/httpd/conf/httpd.conf

包來源合法性驗證和完整性驗證:
    獲取并導入信任的包制造者的公匙:
        對于CentOS發行版其命令
            rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-#
        導入公匙之后時,會進行自動驗證其完整性
        也可手動驗證:
            rpm {-K|--checksig} PACKAGE_FILE...

數據庫重建:
    rpm的數據庫路徑:/var/lib/rpm/
        查詢通過此數據庫進行
        centos 6 獲取幫助: man rpm
        centos 7 獲取幫助: man rpmdb
    rpm {--initdb|--rebuilddb}[--dbpath DIRECTORY] [--root DIRECTORY]
        --initdb:初始化數據庫;當前系統中無數據庫時,創建一個新的數據庫;
        --rebuildb:通過讀取當前系統已安裝的包,重新構建一個數據庫;
        --dbpath DIRECTORY:指定數據庫安裝路徑
        --root DIRECTORY:指明所在根目錄   
     example:   
        在/tmp/rpm下創建一個數據庫
            # rpm --initdb --dbpath /tmp/rpm
            # ls /tmp/rpm
            __db.001  __db.002  __db.003  __db.004  Packages
            
           當數據庫損壞時,進入/tmp/rpm目錄下,執行以下命令
               # rpm --rebuilddb
               # rpm --initdb

原創文章,作者:N25_sadan,如若轉載,請注明出處:http://www.www58058.com/64508

(2)
N25_sadanN25_sadan
上一篇 2016-12-22
下一篇 2016-12-23

相關推薦

  • linux中權限管理

    權限的描述:           權限的意思就是用戶擁有的對系統支配能力的大小在linux中是嚴格控制用戶權限的,不同的用戶給予不同的權限,權限應遵循能少給就盡量少給的原則從而增加系統的安全性。 進程安全上下文:    進程對問件訪問權限的應用模型:進程的屬主與文件的屬主是否相同,如果相同…

    系統運維 2016-08-05
  • vim 常見用法、計劃任務和腳本初探

    vim的常用方法 gg:跳至首行 G:跳至魔行 dd:刪除光標所在行 ndd:刪除光標及以下(n-1)行 yy:復制光標所在行 p:把復制行粘貼在光標下一行 P:粘貼在上一行 u:取消上一步操作 /string:查找關鍵字 n:往下查詢 N:往上查詢 %s/string1/string2/:把string1替換為string2,后面加g表示全局替換 set&…

    Linux干貨 2016-12-04
  • vim編輯器-練習題

    1 、復制/etc/profile至/tmp/目錄,用查找替換命令刪除/tmp/profile文件中的行首的空白字符 #cp /etc/profile /tmp #vim /tmp/profile :%s/^[[:space:]]\+// 2 、復制/etc/rc.d/init.d/functions 文件至/tmp 目錄,用查找替換命令為/tmp/func…

    Linux干貨 2016-08-15
  • linux發展史

    linux發展史簡介: 20世紀60年代,MIT開發分時操作系統(Compatible TIme-Sharing System),支持30臺終端訪問主機;     ~主機負責運算,而終端負責輸入輸出; 1965年,Bell實驗室、MIT、GE(通用電氣公司)準備開發Multics系統,為了同時支持3…

    Linux干貨 2016-10-14
  • lnmp部署實驗

    Lnmp部署 實驗環境: 1、Centos 7主機一臺,客戶機一臺。 2、在centos 7主機上部署:    Nginx  php-fpm  php-mysql  mariadb-server 實驗步驟: 1、啟動nginx服務,確保80端口打開,啟動mariadb-server,確保3306端口…

    Linux干貨 2016-10-30
  • CollabNetSubversionEdge服務搭建

    準備目錄并設置權限 [root@localhost ~]# mkdir /var/svn [root@localhost ~]# chown bohui:bohui /var/svn/ [root@localhost ~]# chmod 700 /v…

    Linux干貨 2015-10-18
欧美性久久久久