1. RPM包介紹
RPM 是RPM Package Manager(RPM軟件包管理器)的縮寫,一種用於互聯網下載包的打包及安裝工具,它包含在某些Linux分發版中。它生成具有.RPM擴展名的文件。
常見的包管理器如下:
Debian: dpkg, .deb
RedHat: rpm(redhatpackage manager), .rpm
RPM is PackageManager
2.rpm包的命名格式
name-version-relase.arch.rpm
version:major.minor.release,同源代碼
release:rpm自身的發行號,與程序源碼的發行號無關,僅用於標識對rpm包不同製作的修訂;同時,release還包含此包適用的OS
eg:bash-4.2.3-3.centos5
arch: 適用於的硬件平臺,
x86: i386,i486, i586, i686等;
x86_64:x86_64
powerpc: ppc
noarch: 依賴於虛擬機
例如:bash-4.2.3-3.centos5.x86_64.rpm
一個程序有20個功能:常用功能有8個,特殊A:3個,特殊B:6個,二次開發相關功能。
分包機制:
核心包,主包:命名與源程序一致
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 //開發包
OS Vendor: 系統發行商提供的包
3.獲取rpm包的途徑
1、發行的光盤或站點服務器
鏡像:
http://mirrors.163.com
http://mirrors.sohu.com
2、項目的官網
源代碼
rpm包
3、很多第三方機構或個人製作並公開發布許多rpm包
http://rpmfind.net
http://rpm.pbone.net
可靠的途徑:EPEL
Fedora-EPEL
rpm包的合法性驗正:
包製作者製作完成之後會附加數字簽名於包上;
來源合法性
包的完整性
包的製作者使用單向加密提取原始數據的特徵碼,而後使用自己的私鑰加密這段特性碼,附加原始數據後面。
驗正過程:
前提:必須有可靠機制獲取到包製作者的公鑰;
1、使用製作者的公鑰解密加密的特徵碼,能解密則意味着來源合法;
2、使用與製作者同樣的意向加密算法提取原始數據的特徵碼,並與解密出來的特徵作比對,相同,則意味着完整性沒問題;
4.rpm程序包的安裝/卸載/更新/查詢/校驗/庫重建
4.1 rpm程序包的安裝
rpm [option]/path/to/package_file
-i: install
-v:顯示詳細信息
-vv:
-vvv:
-h: 用%表示安裝進度
組合選項:-ivh
--test: 僅作測試,有真正執行安裝
如果依賴於其它包:
1、解決依賴關係
2、忽略依賴關係
能安裝上,但有可能無法運行;
--nodeps
重新安裝:
--replacepkgs
如果原有配置文件作了修改,很有可能不執行替換,而是將應該安裝生成的配置文件重命名爲 .rpmnew
4.2 rpm程序包的卸載
rpm [option]package_name
-e: erase
如果被其它包所依賴:
1、將依賴於此包的所有包一併卸載
2、忽略依賴關係
能卸載,但依賴於此包程序包可能會運行不正常;
--nodeps
如果包的配置文件安裝後曾被改動過,卸載時,此文件將不會卸載,而是被重命名並保留,例如
warning: /etc/zprofile saved as /etc/zprofile.rpmsave
4.3 rpm程序包的升級
新版本替換老版本
rpm [option]/path/to/package_file
1、升級或安裝
-Uvh
2、純升級(一定要有老版本)
-Fvh
--force: 強制升級
注意:不應該對內核執行升級操作,而是安裝。系統允許多內核並存
4.4 rpm程序包的查詢
1、查詢某包是否安裝
rpm -q package_name...
2、查詢所有已經安裝的包
rpm -qa
按條件過濾:rpm -qa | grep'PATTERN'
3、查詢包的描述信息
rpm -qi package_name
4、查詢某包安裝生成了哪些文件
rpm -ql package_name
(1) 查詢某包安裝生成了哪些配置文件
rpm -qc package_name
(2) 查詢某包安裝生成了哪些幫助文件
rpm -qd package_name
(3) 查詢程序包的相關腳本
rpm -q--scripts package_name
腳本有四類:
preinstall:安裝前腳本
postinstall:安裝後腳本
preuninstall:卸載前腳本
postuninstall:年前後腳本
5、查詢某文件是由哪個包安裝生成的
rpm -qf /path/to/some_file
6、對尚未安裝的包執行查詢
rpm [option]/path/to/package_file
-qpi
-qpl
-qpc
-qpd
4.5 rpm程序包的校驗
用於檢查包安裝生成的文件屬性是否發生變化
rpm -Vpackage_name
S file Size differs
M Mode differs (includes permissions andfile 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
某屬性無變化,顯示爲.
rpm包來源合法性及完整性檢驗:
前提:在當前系統上導入包的製作者的公鑰
導入:
rpm --import/path/to/key_file
# rpm -qagpg-pubkey*
顯示所有已經導入的gpg格式的公鑰
# rpm -qigpg-pubkey-NAME
顯示密鑰的詳細信息
檢查包:安裝過程中會自動執行
手動檢查:
rpm -K/path/to/package_file
rpm--checksig /path/to/package_file
不檢查包完整性:
rpm-K --nodigest
不檢查來源合法性:
rpm-K –nosignature
4.6 rpm程序包的數據庫重建
數據庫目錄:/var/lib/rpm
重建:
rpm --initdb:初始化
如果事先沒有庫,會新建一個;如果有,則不新建;
rpm --rebuilddb: 重建
直接重建,覆蓋原有的數據庫
總而言之,RPM程序包設計的功能如下:安裝、卸載、查詢、升級、校驗、公鑰導入、合法性驗正、庫重建,新手學習整理,若有錯誤或遺漏還望指正。