1. 程式人生 > >軟件包管理RPM

軟件包管理RPM

網絡 linux

RPM

程序包管理器,可實現對程序包的安裝、更新、查詢和卸載操作,應用廣泛

下面通過實際操作來更好的理解RPM的功能


安裝程序:

-i //安裝數據包參數

-v //顯示安裝過程

-vv //顯示更詳細的安裝信息

-h //配合-v更加直觀的顯示程序安裝過程,但是在程序卸載時不能使用

[[email protected] ~]#rpm -ivh /media/CentOS_6.9_Final/Packages/tree-1.5.3-3.el6.x86_64.rpm 
Preparing...                ########################################### [100%]
   1:tree                   ########################################### [100%]  //顯示安裝進度條

rpm要安裝程序包必須得指定程序包的具體路徑,否則無法安裝


rpm包管理器有一個非常重要的數據庫,/var/lib/rpm

程序包名稱及版本

包之間的依賴關系

包安裝後的文件路徑及校驗碼信息

這些信息都存儲在rpm的數據庫中,一旦數據庫被破壞,包管理就會受到影響,

不僅rpm不能用,yum也不能用



如果我們僅僅是想測試下某個程序包能不能安裝,可以使用以下參數

--test //測試安裝,並不真正安裝

[[email protected] Packages]#rpm -ivh --test tree-1.5.3-3.el6.x86_64.rpm 
warning: tree-1.5.3-3.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
Preparing...                ########################################### [100%]
[[email protected]
/* */ Packages]#echo $? //通過$?來驗證上述命令是否執行成功,0表示成功,非0表示失敗 0 [[email protected] Packages]#

測試安裝完成,但是有一個警告,程序包缺少密鑰

其實每個程序包安裝時RPM都會對其進行身份驗證,如果沒有導入密鑰,RPM認為數據包無法驗證就會彈出告警信息。不過這樣也不影響安裝,如果想要取消這個告警,可以嘗試下述方法

[[email protected] ~]#cd /media/CentOS_6.9_Final/
[[email protected] CentOS_6.9_Final]#rpm --import RPM-GPG-KEY-CentOS-6

因為我是掛了光盤,所以進入光盤所在的目錄下,找到RPM-GPG-KEY-CentOS-6這個密鑰文件,然後導入即可

導入完成之後,再安裝程序就不會提示warn警告,我是在centos6下操作,如果是centos7就要進入/run/media/root/CentOS\ 7\ x86_64/這個目錄下

當然還有一種自欺欺人的方法,就是不導入密鑰,使用參數--nosignature忽略這個警告


因為我使用的是centos6的光盤,GPG-KEY密鑰文件也是這個光盤上的,也就是說,這個光盤的rpm程序包經過GPG這個密鑰文件再加上hash算法計算,會得到簽名信息,也就是一串摘要信息,然後,通過這些摘要信息與rpm數據庫對應的校驗碼進行比較,如果二者一致,說明此數據包信息完整,如果不一致說明此數據包有問題。

所以,如果我從centos7上拷貝一份tree的程序包,那用centos6的密鑰文件進行計算,其結果肯定是跟數據庫不一致的

已經在centos6上導入了GPG-KEY文件

[[email protected] ~]#rpm -K tree-1.6.0-10.el7.x86_64.rpm   //從centos7拷貝的程序包
tree-1.6.0-10.el7.x86_64.rpm: RSA sha1 ((MD5) PGP) md5 NOT OK (MISSING KEYS: (MD5) PGP#f4a80eb5) 
[[email protected] ~]#rpm -K /misc/cd/Packages/tree-1.5.3-3.el6.x86_64.rpm 
/misc/cd/Packages/tree-1.5.3-3.el6.x86_64.rpm: rsa sha1 (md5) pgp md5 OK

-K 驗證程序包的完整性


查詢程序信息:

-q 是rpm查詢必備的參數,需要與其他參數配合使用

-a 查看所有已經安裝過的程序

-c 查看程序的配置文件

[[email protected] ~]#rpm -qc bash
/etc/skel/.bash_logout
/etc/skel/.bash_profile
/etc/skel/.bashrc

-f 查詢指定文件由哪個程序包安裝

[[email protected] ~]#rpm -qf /bin/ls
coreutils-8.4-46.el6.x86_64

-l 列出程序包安裝後所生成的所有文件

-p 針對還未安裝的程序包做查詢操作

[[email protected] Packages]#rpm -qpl tree-1.5.3-3.el6.x86_64.rpm   //前提已經把tree卸載了
/usr/bin/tree
/usr/share/doc/tree-1.5.3
/usr/share/doc/tree-1.5.3/LICENSE
/usr/share/doc/tree-1.5.3/README
/usr/share/man/man1/tree.1.gz

--whatprovides 指定功能由哪些程序包提供

--whatrequires 指定功能被哪些程序包所依賴

[[email protected] Packages]#rpm -q --whatprovides bash
bash-4.1.2-48.el6.x86_64
[[email protected] Packages]#rpm -q --whatrequires bash
mysql-5.1.73-8.el6_8.x86_64
initscripts-9.03.58-1.el6.centos.x86_64
dracut-004-409.el6_8.2.noarch
rsyslog-5.8.10-10.el6_6.x86_64
cronie-1.4.4-16.el6_8.2.x86_64
autofs-5.0.5-132.el6.x86_64
lvm2-2.02.143-12.el6.x86_64

這兩個參數記起來有點費勁,翻譯一下就很容記憶了,這兩個參數用來查找程序包

--whatprovides 什麽程序包提供指定功能,打印的就是提供此功能的程序包

--whatrequires 什麽程序包需要指定功能,打印的就是依賴此功能的程序包

-i 查詢程序信息,非常非常詳細

[[email protected] Packages]#rpm -qi gcc
Name        : gcc                          Relocations: (not relocatable)
Version     : 4.4.7                             Vendor: CentOS
Release     : 18.el6                        Build Date: Wed 22 Mar 2017 12:27:30 AM CST
Install Date: Fri 04 Aug 2017 10:16:33 PM CST      Build Host: c1bm.rdu2.centos.org
Group       : Development/Languages         Source RPM: gcc-4.4.7-18.el6.src.rpm
Size        : 19497604                         License: GPLv3+ and GPLv3+ with exceptions and GPLv2+ with exceptions
Signature   : RSA/SHA1, Thu 23 Mar 2017 11:01:10 PM CST, Key ID 0946fca2c105b9de
Packager    : CentOS BuildSystem <http://bugs.centos.org>
URL         : http://gcc.gnu.org
Summary     : Various compilers (C, C++, Objective-C, Java, ...)
Description :
The gcc package contains the GNU Compiler Collection version 4.4.
You‘ll need this package in order to compile C code.


卸載程序:

-e 卸載程序

[[email protected] ~]#rpm -e gcc 
error: Failed dependencies:
        gcc is needed by (installed) systemtap-devel-2.9-7.el6.x86_64
        gcc = 4.4.7-18.el6 is needed by (installed) gcc-c++-4.4.7-18.el6.x86_64
        gcc = 4.4.7-18.el6 is needed by (installed) gcc-gfortran-4.4.7-18.el6.x86_64
        gcc = 4.4.4 is needed by (installed) libtool-2.2.6-15.5.el6.x86_64

卸載gcc這個程序失敗,因為還有很多依賴包,所以要想卸載gcc必須先把這些依賴包卸載,但這樣做不現實

依賴關系,是rpm最大的問題,在安裝、卸載程序時都有可能會出現這樣的問題

所以為了解決依賴性的問題,又有了yum這個工具,yum是rpm的前端工具,可以自動的識別依賴關系並且執行安裝或卸載操作

yum雖然很方便,但還是基於rpm工作的:

yum客戶端從yum源下載repodata也就是程序包的元數據列表,並匹配要下載的程序包及其依賴包,然後向yum源發出請求,yum源會將請求的程序包發給客戶端,然後yum客戶端再把程序包及其依賴包一起進行安裝,整個過程對用戶透明。yum大概的工作原理就是這樣。


以上是我自己的一些學習總結,如果哪裏有錯誤,還請不吝賜教!

本文出自 “高攀” 博客,謝絕轉載!

軟件包管理RPM