概述
RPM 是 Red Hat PackageManager 的縮寫,本意是Red Hat 軟件包管理,顧名思義是Red Hat 貢獻出來的軟件包管理;在Fedora 、Redhat、Mandriva、SuSE、YellowDog等主流發行版本,以及在這些版本基礎上二次開發出來的發行版采用;
RPM包里面都包含什么?里面包含可執行的二進制程序,這個程序和Windows的軟件包中的.exe文件類似是可執行的;RPM包中還包括程序運行時所需要的文件,這也和Windows的軟件包類似,Windows的程序的運行,除了.exe文件以外,也有其它的文件;
一個RPM 包中的應用程序,有時除了自身所帶的附加文件保證其正常以外,還需要其它特定版本文件,這就是軟件包的依賴關系;依賴關系并不是Linux特有的,Windows操作系統中也是同樣存在的;比如我們在Windows系統中運行3D游戲,在安裝的時候,他可能會提示,要安裝Direct 9 ;Linux和Windows原理是差不多的。
一 命名格式
源代碼:name-VERSION.tar.gz
VERSION: major.minor.release
例子:
nginx-1.8.0.tar.gz
1:是主版本號
8:是次版本號
0:是發行號
rpm包命名方式:
name-VERSION-release.arch.rpm
VERSION:major.minor.release
release.arch:rpm包的發行號
archetecture(架構或平臺):i386,x64(amd64), ppc, noarch
例子:
bash-4.1.2-33.el6.x86_64
4:是主版本號
1:是次版本號
2:修訂
33:是第幾次發布版本
el6:適用于RHEL6或兼容Centos6
x86_64:CPU架構系統平臺
el6 :enterprice linux 6 RHEL 6或centos 6
el5: rhel5
拆包:主包和支包
主包:name-VERSION-release.arch.rpm
支包:name-function-VERSION-release.arch.rpm
function:devel(開發), utils(工具程序), libs(庫文件), …
包之間存在依賴關系
比如說x包依賴Y包 但是Y包又依賴z包
前端工具:自動解決依賴關系;
yum:rpm包管理器的前端工具;
apt-get (apt-cache):deb包管理器的前端工具;
zypper:suse的rpm管理器前端工具;
dnf:Fedora 22+系統上rpm包管理器的前端工具;
二 程序包管理器的組成:
程序包管理:
功能:將編譯好的應用程序的各組成文件打包一個或幾個程序包文件,從而方便快捷地實現程序包的安裝、卸載、查詢、升級和校驗等管理操作;
1、程序的組成組成清單 (每個包獨有)
文件清單
安裝或卸載時運行的腳本
2、數據庫(公共)
程序包名稱及版本
依賴關系;
功能說明;
安裝生成的各文件的文件路徑及校驗碼信息;
rpm包的數據庫文件:/var/lib/rpm/
三 獲取程序包的途徑:
1 系統發版的光盤或官方的服務器;
CentOS鏡像:
http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com
2 項目官方站點 例如:http://www.zabbix.com/
3 第三方組織:
Fedora-EPEL
搜索引擎:
http://pkgs.org
http://rpmfind.net
http://rpm.pbone.net
4 自己制作rpm包
建議:安裝前請務必注意以下幾點:
1、檢查其合法性;
2、來源合法性;
3、程序包的完整性;
什么是EPEL?
如果既想獲得 RHEL 的高質量、高性能、高可靠性,又需要方便易用(關鍵是免費)的軟件包更新功能,那么 Fedora Project 推出的 EPEL(Extra Packages for Enterprise Linux)正好適合你。EPEL(http://fedoraproject.org/wiki/EPEL)是由 Fedora 社區打造,為 RHEL 及衍生發行版如CentOS、Scientific Linux 等提供高質量軟件包的項目。
四 CentOS系統上rpm命令管理程序包:
安裝、卸載、升級、查詢、校驗、數據庫維護
rpm命令:
rpm [OPTIONS] [PACKAGE_FILE]
安裝:-i, –install
升級:-U, –update, -F, –freshen
卸載:-e, –erase
查詢:-q, –query
校驗:-V, –verify
數據庫維護:–builddb, –initdb
提示:
-Fvh是升級RPM包的命令,它表示如果后面的軟件包沒有安裝在系統上,則這個軟件包不會安裝。也就是說只有安裝到系統上的軟件包才會被升級。
安裝:
rpm {-i|–install} [install-options]PACKAGE_FILE …
-v: verbose
-vv: 更詳細的輸入
-h: 以#顯示程序包管理執行進度;每個#表示2%的進度
rpm -ivh PACKAGE_FILE …
[install-options]
–test: 測試安裝,但不真正執行安裝過程;dry run模式;
–nodeps:忽略依賴關系;
–replacepkgs: 重新安裝;
–nosignature: 不檢查來源合法性;
–nodigest:不檢查包完整性;
–noscipts:不執行程序包腳本片斷;
%pre: 安裝前腳本; –nopre
%post: 安裝后腳本; –nopost
%preun: 卸載前腳本; –nopreun
%postun: 卸載后腳本; –nopostun
示例1:
rpm -ivh php-bcmath-5.3.3-22.el6.x86_64.rpm
這個有報錯一個是KEY 那個沒有關系,下面這個報錯是依賴關系問題
rpm -ivh –nodeps php-bcmath-5.3.3-22.el6.x86_64.rpm (–nodeps:忽略依賴關系 就可以安裝上了,但是不建議使用)
升級與降級:
rpm {-U|–upgrade} [install-options]PACKAGE_FILE …
rpm {-F|–freshen} [install-options]PACKAGE_FILE …
-U:升級或安裝,如果事先安裝了老版本包則升級,沒有安裝老版本包則安裝此包
-F:升級,如果事先沒有安裝老版本的包則不升級
–oldpackage:降級;
–force:強制升級;
注意:
1.不要對內核做升級操作;Linux支持多內核版本并存,因此,直接安裝新版本內核;
2.如果某原程序包的配置文件安裝后曾被修改過,升級時,新版本的程序提供的同一個配置文件不會覆蓋原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.rpmnew)后提供;
查詢:
rpm {-q|–query} [select-options][query-options]
[select-options]
-a, –all:查詢所有已經安裝過的包;
-f FILE:查詢指定的文件由哪個程序包安裝生成;
-p, –package PACKAGE_FILE:用于實現對未安裝的程序包執行查詢操作;
–whatprovides CAPABILITY:查詢指定的CAPABILITY由哪個程序包提供;查詢提供了 CAPABILITY 功能的軟件包。
–whatrequires CAPABILITY:查詢指定的CAPABILITY被哪個包所依賴;查詢所有需要 CAPABILITY 功能才能運行的軟件包。
[query-options]
–changelog:查詢rpm包的歷史變更信息changlog;
-l, –list:程序安裝生成的所有文件列表;
-i, –info:程序包相關的信息,版本號、大小、所屬的包組,等;
-c, –configfiles:查詢指定的程序包提供的配置文件;
-d, –docfiles:查詢指定的程序包提供的說明文檔;
–provides:列出指定的程序包提供的所有的CAPABILITY;
-R, –requires:查詢指定的程序包的依賴關系;
–scripts:查看程序包自帶的腳本片斷;
示例2:查看所有已經安裝的軟件包
示例3:查詢某個軟件是否已經安裝
示例4:查詢某一文件屬于哪個軟件包
示例5:查詢一個已經安裝的軟件包包含哪些文件
示例6:查詢一個已經安裝的軟件包的詳細信息
示例7:查看某一個已經安裝的軟件包的配置文件有哪些
示例8:查看一個已經安裝的包自帶的說明說明文檔
示例9:查詢一個已經安裝的軟件包依賴于什么軟件包
示例10:查詢一個軟件包中的腳本片段
卸載:
rpm {-e|–erase} [–allmatches] [–nodeps] [–noscripts]
[–notriggers] [–test] PACKAGE_NAME …
校驗:
rpm {-V|–verify} [select-options][verify-options]
-V:后面接軟件名稱,若該軟件所含的文件被改動過才會列出來
-Va:列出目前系統上面所有可能被改動過的文件
-Vp:后面加的是文件名稱,列出該軟件內可能被改動過的文件
-Vf:列出某個文件是否被改動過
S file Size differs:文件的容量大小是否被改變
M Mode differs (includespermissions and file type):文件的類型或文件的屬性(rwx)是否被改變
5 digest (formerly MD5 sum)differs:MD5這一種指紋碼的內容已經不同
D Device major/minor numbermismatch:設備的主/次代碼已經改變
L readLink(2) path mismatch:Link路徑已被改變
U User ownership differs:文件的所有者已被改變
G Group ownership differs:文件的所有屬用戶組已被改變
T mTime differs:文件的創建時間已被改變
P capabilities differ:capabilities已經改變
提示:當一個軟件包的文件被被動過,那么它的顯示就會是:
SM5DLUGTP c filename
c表示文件的類型
c:config file:設置文件
d:documentation:文檔文件
g:ghost file:“鬼”文件,通常是該文件不被某個軟件所包含,較少發生
l:linense file:授權文件
r:read line:自述文件
示例11:查看某個已經安裝的軟件包中的哪些文件被改動過,沒有顯示就代表沒有被改動。
示例12:列出系統上所有的rpm包中的文件中被改動的文件有哪些(針對所有rpm包中的所有文件查詢)
示例13:查看某個文件是否被改動過,沒有改動就不顯示(這個文件一定要屬于某個rpm包才行)
包來源合法性驗正及完整性驗正:
1.完整性驗正
2.來源合法性驗正
獲取并導入信任的包制作者的密鑰:
導入所需要公鑰:
對于CentOS發行版來說:rpm–import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
驗正:
1.安裝此組織簽名的程序時,會自動執行驗正;
2.手動驗正:rpm -K PACKAGE_FILE
例子14:手動驗證 php-bcmath-5.3.3-22.el6.x86_64.rpm
rpm包數據庫重建:
rpm管理器數據庫路徑:/var/lib/rpm/
查詢操作就是通過此處的數據庫進行;
rpm {–initdb|–rebuilddb} [–dbpathDIRECTORY] [–root DIRECTORY]
–initdb:如果事先不存在數據庫,則新建之;否則,不執行任何操作;
–rebuilddb:重新構建,通過讀取當前系統上所有已經安裝過的程序包進行重新創建;
–dbpath:指明要創建數據庫的目錄
例子14:如果rpm數據庫系統損壞可以使用此命令重建
原創文章,作者:liangkai,如若轉載,請注明出處:http://www.www58058.com/11369
已置頂