RPM包管理總結

RPM包管理與YUM的使用總結

 

一、rpm包管理

簡介

GNU/Linux操作系統中,RPMDPKG爲最常見的兩類軟件包管理工具,他們分別應用於基於RPM軟件包的Linux發行版本和DEB軟件包的Linux發行版本。軟件包管理工具的作用是提供在操作系統中安裝,升級,卸載需要的軟件的方法,並提供對系統中所有軟件狀態信息的查詢。


    RPM The RPM PackageManager),是由Red Hat公司開發的一個Linux軟件包安裝與管理程序,是以一種數據庫記錄的方式來將所需要的軟件安裝到你的Linux系統的一套管理機制。用戶可以方便地在Linux系統中安裝、升級和刪除軟件,以及在一個統一的界面中對所有的RPM軟件包進行管理。

RPM軟件包分爲二進制包(Binary)、源代碼包(Source)和Delta包三種。二進制包(.rpm)可以直接安裝在計算機中,而源代碼包將會由RPM自動編譯、安裝。源代碼包經常以src.rpm作爲後綴名

 

特點

將你要安裝的軟件先編譯過,並且打包成爲RPM機制的包裝檔案,透過包裝好的軟件裏頭默認的數據庫記錄,記錄這個軟件要安裝的時候必須具備的相依屬性軟件,當安裝在你的Linux主機時,RPM會先依照軟件裏面的數據查詢Linux主機的相依屬性軟件是否滿足,若滿足則予以安裝,若不滿足產則不予安裝。那麼安裝的時候就將該軟件的信息整個寫入RPM的數據庫中,以便未來的查詢、驗證與反安裝。

 

rpm包的命令格式

              Name-Version-Relase.Arch.rpm

                     eg:bash-4.1.2-15.el6_4.x86_64

Name:軟件的名稱,bash

Version: 版本信息。同源代碼(4.1.2  

源代碼的versionmajor.minor.release 

Release: rpm自身釋放的發行號(次數),通常是編譯的次數。與程序源碼的發行號無關,僅用於標識對rpm包不同製作的修訂;同時,release還包含此包適用的OS

Arch:硬件平臺,

       x86: i386, i486, i586, i686等;

       x86_64: 針對64位的CPU進行優化編譯設定

       powerpc: ppc

       noarch: 依賴於虛擬機,沒有任何硬件等級上的限制。

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

 

獲取rpm包的途徑:

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

           鏡像:

             http://mirrors.163.com

             http://mirrors.sohu.com

             http://centos.ustc.edu.cn/centos/

       2、項目的官網

             源代碼

             rpm

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

             http://rpmfind.net

             http://rpm.pbone.net

       4、可靠的途徑:EPEL

        EPELExtra Packages forEnterprise Linux的縮寫,企業版 Linux 附加軟件包。https://fedoraproject.org/wiki/EPEL/zh-cn


rpm包的合法性驗證:

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

來源合法性

包的完整性

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

驗證過程:

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

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

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

 

rpm命令使用方法:

RPM軟件包的安裝、刪除、升級、查看和驗證等所有的操作都由rpm這一命令來進行的。rpm命令有12種模式,不同模式有不同的命令模式,能完成不同的管理功能。常用的模式的有:

安裝模式:rpm  {-i |--install}  [install-options]  PACKAGE_File …

升級模式:rpm  {-U|--upgrade}  [install-options]  PACKAGE_File …

卸載(刪除)模式:rpm {-e|--erase} [erase-options]PACKAGE_Name …

查詢模式:rpm  {-q |--query }  [select-options]  [query-options]

驗證模式:rpm  {-V |--verify}  [select-options]  [verify-options]

 

一般選項:可以用於rpm命令的所有模式。

       -h :用#顯示完成的進度。

       --version:顯示當前使用的RPM版本。

 

選擇選項select-options,用於查詢和驗證模式。

       -a:查詢所安裝的軟件包。

       -f--file FILE :查詢擁有<文件>的軟件包,即是哪一個軟件包安裝的<解文件>

 

查詢選項query-options,可用於查詢和驗證模式。

       -i--info:顯示軟件包的信息,包括名稱、版本、描述信息。

       -l--list:列出這個軟件包內所包含的文件。

       --provides:顯示這個軟件包所提供的功能。

       -R--requires:查詢安裝該軟件包所需要的其他軟件包。

       -s--state:列出軟件包中所有文件的狀態。

驗證選項verify-options,只能用於驗證模式。

       --nodeps:不驗證依賴的軟件包。

       --nofiles:不驗證軟件包文件的屬性。

安裝選項install-options,用於安裝模式和升級模式。

       --force:同--replacepkgs,--replacefiles一樣,就算要安裝的軟件版本已經安裝在系統上,或者是系統上現在的版本比要安裝的版本高,依然強制覆蓋安裝。

       --nodeps:使用RPM安裝前,RPM會檢查該軟件包的依賴關係,即正確運行該軟件包所需的其他軟件是否已經安裝。使用該選項將忽略軟件包所依賴的其他軟件強制安裝。但不推薦這種做法,因爲這樣安裝的軟件大部是不能運行的。

       --test:模擬安裝,軟件包並不會實際安裝到系統中,只是檢查並顯示可能存在的衝突。

 

刪除選項:erase-options,只能用於刪除模式。

       --nodeps:忽略其他依賴該軟件包的軟件,強制刪除該軟件包。正常情況下不建議這樣做,因爲刪除軟件包後,其他相關的軟件就不能運行了。

       --test:不真正刪除,只是模擬。

 

rpm包管理器的常見使用場景

 

安裝軟件包:-i --install

軟件包的安裝分爲兩個階段,首先是安裝準備階段,在準備階段會檢查磁盤空間、軟件是否已安裝、依賴軟件包是否已安裝等,準備階段完成後纔會進行軟件包的安裝。

       -i--install 安裝新軟件包可用於內核的升級和安裝可以同時保留老內核版本和新版本兩個內核

-h--hash #(hash)符顯示rpm安裝過程
-v
--verbose詳述安裝過程

-vv 顯示調試信息 

常用組合選項:-ivh

--test:安裝準備階段,模擬安裝,檢查爲了檢查一個軟件包的安裝是否會有衝突,可以事先使用--test選項進行模擬安裝,例如

[root@stu19 Packages]# rpm-ivh --test zsh-4.3.10-7.el6.x86_64.rpm 
Preparing...                ###########################################[100%]
[root@stu19 Packages]# rpm-ivh zsh-4.3.10-7.el6.x86_64.rpm 
warning:zsh-4.3.10-7.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de:NOKEY
Preparing...                ###########################################[100%]
   1:zsh                  ###########################################[100%]

 

RPM軟件包有可能會依賴於其他軟件包,也就是說在安裝了特定的軟件包之後纔可以安裝該軟件包。如果軟件依賴於其它包則:

1、解決依賴關係

如果多個包之間相互依賴,可以同時使用rpm命令安裝多個包,或者使用yum進行安裝。

有依賴關係包的會報錯,error: Faileddependencies:。根據提示安裝所依賴包,其中一些>=<=符號。

>=:表示必須要大於或等於某個版本。

<=:表示要小於或等於某個版本。

2、忽略依賴關係

--nodeps,強制安裝軟件包,但有可能無法運行;一般不建議。

[root@stu19Packages]# rpm -ivh --test libgnomecanvas-devel-2.26.0-4.el6.x86_64.rpm 
error: Faileddependencies:
         gtk-doc is needed bylibgnomecanvas-devel-2.26.0-4.el6.x86_64
         gtk2-devel >= 2.1.2 is needed bylibgnomecanvas-devel-2.26.0-4.el6.x86_64
         libart_lgpl-devel >= 2.3.8 is neededby libgnomecanvas-devel-2.26.0-4.el6.x86_64
         libglade2-devel >= 2.6.3-2 is neededby libgnomecanvas-devel-2.26.0-4.el6.x86_64
         pkgconfig(gail) is needed bylibgnomecanvas-devel-2.26.0-4.el6.x86_64
         pkgconfig(gtk+-2.0) is needed bylibgnomecanvas-devel-2.26.0-4.el6.x86_64
 
[root@stu19Packages]# rpm -ivh --nodeps libgnomecanvas-devel-2.26.0-4.el6.x86_64.rpm 
Preparing...               ########################################### [100%]
   1:libgnomecanvas-devel   ###########################################[100%]

                   

--force:同 --replacepkgs,--replacefiles一樣,就算要安裝的軟件版本已經安裝在系統上,或者是系統上現在的版本比要安裝的版本高,依然強制覆蓋安裝。

      

卸載程序包:-e-- erase

rpm [option] package_name

-e: erase 刪除軟件包

--test模擬刪除,可以先檢查被刪除軟件包是否有依賴軟件包

--nodeps,強制刪除,忽略依賴關係,但依賴於此包程序包可能會運行不正常;同安裝的選項類似。     

注意:在卸載時,如果原有配置文件作了修改,系統提示警告信息,並將安裝生成的配置文件重命名爲以 .rpmsave結尾。

[root@stu19 Packages]# rpm -e --test libgnome 
error: Failed dependencies:
         libgnome-2.so.0()(64bit)is needed by (installed) libbonoboui-2.24.2-3.el6.x86_64
         libgnome-2.so.0()(64bit)is needed by (installed) gnome-power-manager-2.28.3-7.el6_4.x86_64
         libgnome-2.so.0()(64bit)is needed by (installed) gnote-0.6.3-3.el6.x86_64
         libgnome-2.so.0()(64bit)is needed by (installed) mousetweaks-2.28.2-1.el6.x86_64
         libgnome >= 2.8.0 isneeded by (installed) gnome-python2-gnome-2.28.0-3.el6.x86_64
         libgnome is needed by(installed) gnome-terminal-2.31.3-8.el6.x86_64
 
[root@stu19 Packages]# rpm -e --nodeps libgnome



查詢軟件包:-q--query

    使用rpm命令可以查看指定軟件包的詳細信息、安裝的文件清單、依賴的軟件包清單、某個軟件包是否已經安裝、系統中所有已安裝軟件包的清單等信息。

    常用組合選項:

    -q--query查詢某軟件包是否安裝,如果有則表示軟件全名。

    格式rpm -qpackage_name...

    # rpm -q bash

    bash-4.1.2-15.el6_4.x86_64

    -aq      --all查詢系統中所有已經安裝的軟件包列表

    按條件過濾:rpm -qa | grep 'PATTERN'等同於選項-qi

     

    -iq--info查詢軟件包的詳細描述信息。輸出中包括軟件名稱(name)、版本(Version)、修正版(Release)、軟件包的安裝時間(Install Date)、安裝軟件包的文件名稱(Source RPM)、程序的佔用空間(Size   

   

 [root@stu19 Packages]# rpm -qi bash
    Name        : bash                         Relocations: (not relocatable)
    Version     : 4.1.2                             Vendor: CentOS
    Release     : 15.el6_4             Build Date: Thu 18 Jul 201309:21:24 PM CST
    Install Date: Mon 30 Jun 2014 12:27:55 PM CST      Build Host: c6b10.bsys.dev.centos.org
    Group       : SystemEnvironment/Shells     Source RPM:bash-4.1.2-15.el6_4.src.rpm
    Size        : 3139291                          License: GPLv3+
    Signature   : RSA/SHA1, Thu 18Jul 2013 09:46:10 PM CST, Key ID 0946fca2c105b9de
    Packager    : CentOS BuildSystem<http://bugs.centos.org>
    URL         :http://www.gnu.org/software/bash
    Summary     : The GNU BourneAgain shell
    Description :
    The GNU Bourne Again shell (Bash) is a shell or command language
    interpreter that is compatible with the Bourne shell (sh). Bash
    incorporates useful features from the Korn shell (ksh) and the C shell
    (csh). Most sh scripts can be run by bash without modification.


     

    -lq--list   查詢系統中已安裝軟件包生成的文件列表。

          rpm -ql package_name

    [root@stu19 ~]# rpm -ql bash
    /bin/bash
    /bin/sh
    /etc/skel/.bash_logout
    /etc/skel/.bash_profile
    /etc/skel/.bashrc
    /usr/bin/bashbug-64
    /usr/share/doc/bash-4.1.2/COPYING
    … … … ….


    -cq,--configfiles查詢某包安裝生成了哪些配置文件

    #rpm -qc bash

          /etc/skel/.bash_logout

    /etc/skel/.bash_profile

    /etc/skel/.bashrc

    -dq,--docfiles查詢某包安裝生成了哪些幫助文件

    #rpm -qd bash

    --scripts查詢程序包的相關腳本

    #rpm -q --scripts bash

    顯示的腳本有四類:

            preinstall:在安裝之前運行腳本

        postinstall: 在安裝之後腳本

              preuninstall: 在卸載之前腳本

              postuninstall: 在卸載之後腳本

     

    -fq--queryformat QUERYFMT查詢某文件是由哪個軟件包安裝生成的。
        格式:
   rpm -qf /path/to/some_file

    # rpm -qf/bin/cat

    coreutils-8.4-31.el6.x86_64

     

    -p,--package PACKAGE_FILE:對尚未安裝的軟件執行相關查詢

        格式:    rpm [option] /path/to/package_file

    可以結合選項-qpi-qpl-qpc-qpd使用,查看未安裝軟件包的相關信息。

    [root@stu19 Packages]# rpm -q zsh
    package zsh is not installed
    [root@stu19 Packages]# rpm -qpc zsh-4.3.10-7.el6.x86_64.rpm 
    /etc/skel/.zshrc
    /etc/zlogin
    /etc/zlogout
    /etc/zprofile
    /etc/zshenv
    /etc/zshrc


    -Rq--requires查看已安裝的某個軟件包所依賴的軟件包清單。格式rpm –qR 軟件包名稱

[root@stu19 Packages]# rpm -qR vim-common
/bin/sh  
config(vim-common) = 2:7.2.411-1.8.el6
libc.so.6()(64bit)  
libc.so.6(GLIBC_2.2.5)(64bit)  
libc.so.6(GLIBC_2.3)(64bit)  
libc.so.6(GLIBC_2.3.4)(64bit)  
libc.so.6(GLIBC_2.4)(64bit)  
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rtld(GNU_HASH)  
rpmlib(PayloadIsXz) <= 5.2-1

    

     

升級程序包:

格式rpm [option]/path/to/package_file

-U--upgrade升級或安裝。如果有老版本,則升級爲新版本,否則安裝。

由於版本過低,希望升級到更高的版本。新版的軟件包安裝文件覆蓋舊版本的文件。

用戶要注意的是:rpm會自動反安裝相應軟件包的老版本。如果老版本軟件的配置文件通新版本的不兼容,rpm會自動將其保存爲另外一個文件,用戶會看到下面的信息:
saving /etc/foo.conf as /etc/foo.conf.rpmsave

這樣用戶就可以自己手工去更改相應的配置文件。
另外如果用戶要安裝老版本的軟件,用戶就會看到下面的出錯信息:

-Uvh,如果有老版本,則升級爲新版本,否則安裝。

-F--freshen純升級,如果沒有老版本,則不升級。

組合選項:-Uvh -Fvh

      升級後的版本可能會有依賴關係的衝突等;

      --force: 強制升級

注意:內核升級一般使用安裝-ivh,而不是升級-Uvh(直接升級),系統允許多內核並存。

 

軟件包校驗:-V--verify

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

    格式:rpm -V package_name

    檢驗項目共九項,結果以下面8個字母來和一個可能的屬性標記:

    S : 表示文件大小;

    M : 表示權限;

    5 : 表示MD5檢查和;

    D : 表示主從設備號;

    L : 表示符號連接;

    U : 表示屬主;

    G : 表示屬組;

    T : 表示最後修改時間根據文件類型的不同檢驗的項目也不同

    PcaPabilities differ

    c %config  configuration file.

    d %doc  documentation file.

    l %license  license file.

    r %readme  readme file.

    某屬性無變化,顯示爲.

    示例:

    [root@stu19 Packages]# vi /etc/zshrc

    [root@stu19 Packages]# rpm -V zsh

    S.5....T.  c /etc/zshrc

    表示zsh包的配置文件/etc/zshrc文件大小、MD5、修改時間發生改變。

 

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


    在安裝軟件的時候,會warning提示  NOKEY相關信息,說明rpm包對來源合法性驗證有警示信息。需要在當前系統上導入包的製作者的公鑰

    [root@stu19 Packages]# rpm -vhizsh-4.3.10-7.el6.x86_64.rpm
    warning: zsh-4.3.10-7.el6.x86_64.rpm:Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
    Preparing...                ###########################################[100%]
      1:zsh                  ###########################################[100%]

    

    導入格式:#rpm --import/path/to/key_file

    導入光盤鏡像軟件包公鑰:

    #rpm --import/media/cdrom/RPM-GPG-KEY-CentOS-6


    # rpm -qa gpg-pubkey*    顯示所有已經導入的gpg格式的公鑰

    # rpm -qi gpg-pubkey-NAME   #顯示密鑰的詳細信息

    示例:

    [root@stu19 Packages]# rpm -K zsh-4.3.10-7.el6.x86_64.rpm 
    zsh-4.3.10-7.el6.x86_64.rpm: RSA sha1 ((MD5) PGP) md5 NOT OK (MISSINGKEYS: (MD5) PGP#c105b9de) 
    [root@stu19 Packages]# rpm --checksig zsh-4.3.10-7.el6.x86_64.rpm 
    zsh-4.3.10-7.el6.x86_64.rpm: RSA sha1 ((MD5) PGP) md5 NOT OK (MISSINGKEYS: (MD5) PGP#c105b9de) 
    [root@stu19 Packages]# rpm --import ../RPM-GPG-KEY-CentOS-6
    [root@stu19 Packages]# rpm --checksig zsh-4.3.10-7.el6.x86_64.rpm 
    zsh-4.3.10-7.el6.x86_64.rpm: rsa sha1 (md5) pgp md5 OK
    [root@stu19 Packages]# rpm -K zsh-4.3.10-7.el6.x86_64.rpm 
    zsh-4.3.10-7.el6.x86_64.rpm: rsa sha1 (md5) pgp md5 OK


    

    手動檢查:

    #rpm -K/path/to/package_file

    #rpm --checksig/path/to/package_file

     

    不檢查包完整性:

    #rpm -K --nodigest

    不檢查來源合法性:

    #rpm -K --nosignature


數據庫重建:

         通過rpm 命令查詢一個rpm 包是否安裝了,也是要通過rpm 數據庫來完成的;有時rpm 系統出了問題,不能安裝和查詢,可能會是數據庫出現問題,可以使用下面命令重建;

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

    #rpm --initdb:初始化數據庫

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

    #rpm --rebuilddb: 重建數據庫

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

 

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