一、什么是RPM
RPM全稱為“RedHat Package Manager”,看名字就知道這是RedHat公司搞出來的,后來因為RPM發展的很好,逐漸成為了一種通用的標準,就更名為“RPM is Package Manager"。
RPM最大的特點就是將軟件先編譯,并打包成為RPM機制的安裝包,包中包含了該軟件安裝時所必須依賴屬性軟件信息,如果這些被依賴的軟件已經安裝,則安裝包可順利安裝完成,否則軟件將會安裝失敗。
RPM安裝時會將該軟件的信息寫入到RPM數據庫中,那么軟件的查詢、驗證、升級、卸載等操作都可以從數據中直接調用執行。
二、認識RPM包
1、RPM包的命名格式
name-version-release.OS.arch.rpm
解釋:
name:軟件名稱。
version:major.minor
major:主版本號;
minor:次版本號;
release:rpm自身的發行號,與程序源碼的發行號無關,僅用于標識對rpm包不同制作的修訂;同時,release還包含此包適用的OS。
arch:適用于的硬件平臺;
x86:i386,i486,i586,i686等;
x86_64:支持64位CPU;
noarch:依賴于虛擬機。
例如:bash-4.2.3-3.centos5.x86_64.rpm
2、分包機制
對于一個功能比較多的軟件來說,而用戶可能并不會用戶其所有的功能,那么OS Vendor(系統發行商)在制作RPM包時只會用將他們認為用戶會經常用到的功能打包成為與源程序名一致的核心包,而將其它的功能再次的打包成為子包;比如:bash程序有20個功能,常用功能有8個,特殊功能A:3個,特殊功B:6個,二次開發相關功能:3個,那么其RPM的形式有可能是這樣的:
核心包:
bash-4.2.3-3.centos7.x86_64.rpm
子包:
bash-a-4.2.3-3.centos7.x86_64.rpm
bash-b-4.2.3-3.centos7.x86_64.rpm
bash-devel-4.2.3-3.centos7.x86_64.rpm
如果需要用到子包中的功能的話,就需要把對應的子包進行安裝。
3、獲取rpm包的途徑
1)發行的光盤式站點服務器
鏡像:
http://mirrors.163.com
http://mirrors.sohu.com
2)項目的官網
源代碼
RPM包
3)很多第三方機構或個人制作并公開發布許多rpm包
http://rpmfind.net
http://rpm.phone.net
可靠的途徑:EPEL
Fedora-EPEL
4、RPM包的合法性驗證
RPM包的制作者使用單向加密提取原始數據的特征碼,而后使用自己的私鑰加密這段特征碼,附加在原始數據后面,如果想要正確的安裝RPM包必須使用可靠機制獲取到包制作者的公鑰;其公鑰的作用:
1、使用制作者的公鑰解密加密的特征碼,能解密則意味著來源合法;
2、使用與制作者同樣的意向加密算法提取原始數據的特征碼,并與解密出來的特征作比對,相同,由意味著完整性沒問題;
三、RPM包管理器的使用
1、安裝程序包
命令格式:rpm [option] package_name
option:
-i:安裝;
-v:顯示信息;
-h:顯示進度;
-vv:顯示詳細信息;
-vvv:顯示更加詳細信息;
組合選項:-ivh;
–test:僅作測試,不真正執行安裝;
rpm -ivh –test 程序包
–nodeps:忽略依賴關系;
忽略依賴關系可以將軟件安裝上,但可能無法運行;
–replacepkgs:重新安裝;
如果原有配置文件作了修改,很有可能不執行替換,而是將應該由安裝生成的配置文件重命名為.rpmnew;
2、卸載程序包
命令格式:rpm [option] package_name
option:
-e:卸載;
–nodeps:忽略依賴關系;
軟件能卸載,但依賴于此包的程序可能運行不正常;
注意:如果包的配置文件發生改變,安裝后曾被改動過,卸載時,此文件不會卸載,而是被重命名并保留。
3、升級程序包
命令格式:rpm [option] package_file
option:
-Uvh:升級或安裝;
-Fvh:純升級;
必須存在老版本,否則不安裝;
–force:強制升級;
注意:不應該對內核執行升級操作;而要安裝。系統允許多內核并存。
4、查詢操作
1)查詢某包是否已安裝
rpm -q package_name
2)查詢所有已經安裝的包
rpm -qa
3)查詢包的描述信息
rpm -qi package_name
4)查詢某包安裝生成了哪些文件
rpm -ql package_name
5)查詢某包安裝生成了哪些配置文件
rpm -qc package_name
6)查詢某包安裝生成了哪些文檔(幫助文件)
rpm -qd package_name
7)查詢程序包的相關腳本
rpm -q –scripts package_name
腳本有四類:
preinstall:安裝前腳本
postinstall:安裝后腳本
preuninstall:卸載前腳本
postuninstall:卸載后腳本
8)查詢某文件是由哪個包安裝生成的
rpm -qf /path/to/some_file
9)對尚未安裝的包執行查詢
rpm [option] /path/to/package_file
option:
-qpi:包描述信息;
-qpl:包會生成哪些文件;
-qpc:包會生成哪些配置文件;
-qpd:包會生成哪些幫助文件;
5、RPM包的校驗
校驗:檢查包安裝生成的文件屬性是否發生變化
rpm -V package_name
httpd的內容沒有被修改的情況下rpm -V httpd命令不會有任何輸出結果,但上例中出現了一行奇怪的符號,說明httpd的屬性已經發生了變化,下面來我看一下前面的文字所代表的含義:
S:文件的容量大小是否被改變;
M:文件的類型或文件的屬性是否被改變;
5:MD5指紋的內容已發生了變化;
D:設備的主/次代碼已經改變;
L:Link路徑已被改變;
U:文件的所有者已被改變;
G:文件的屬組已被改變;
T:文件的創建時間被改變。
文件名前還有個c,這一位代表不同的文件類型:
c:配置文件;
d:文檔;
g:鬼文件;
l:授權文件;
r:自述文件。
rpm包來源合法性及完整性檢驗:
前提:在當前系統上導入包的制作者的公鑰
rpm –import /path/to/key-file
rpm -qa gpg-pubkey* 顯示所有已經導入的gpg格式的公鑰
rpm -qi gpg-pubkey-NAME 顯示密鑰的詳細信息
CentOS系統安裝好后,會將原廠的gpg公鑰存放在以下目錄中:
導入這個公鑰:
查看已經導入的公鑰:
顯示公鑰的詳細信息:
檢查包
手動檢查:
rpm -K /path/to/package_file
rpm –checksig /path/to/pachage_file
不檢查包完整性:
rpm -K –nodigest
不檢查來源合法性:
rpm -K –nosignature
6、RPM數據庫重建
數據庫目錄:/var/lib/rpm
數據庫重建:
rpm –initdb
初始化:如果事先沒有庫會新建一個;如果有,則不新建;
rpm –rebuilddb
重建:直接重建,覆蓋原有的數據庫。
原創文章,作者:petmaster,如若轉載,請注明出處:http://www.www58058.com/2327