RPM包管理總結node
1、 簡介數據庫
RPM全名是redhatpackage manage ,是用來管理軟件的各類操做,包括安裝、更新、刪除、查詢、認證。它最大的特色是將軟件事先編譯,而後打包成爲RPM機制的包文件,而且包中記錄了此軟件在安裝時須要的其餘依賴軟件。在安裝時RPM會根據記錄比較本地主機數據庫中的記錄是否知足依賴,若知足則安裝,而且把此軟件的信息也寫入數據庫,不知足則不予安裝。centos
2、 RPM包命名格式服務器
RPM包分爲主包和子功能包架構
主包:name-version-release.(os).arch.rpmide
子包:name-function-version-release.(os).arch.rpm測試
name:包名ui
version:源碼的版本號,version的格式爲major.minor.release,major源代碼的主版本號、minor爲次版本號、release爲源代碼的發行次數搜索引擎
release:rpm包的發行號阿里雲
os:操做系統(無關緊要)
arch:硬件架構,有i38六、i48六、i58六、i68六、x86_6四、powerpc等,其中noarch指無硬件架構限制
function:說明子包的功能特性
3、 RPM包的獲取途徑
一、系統光盤或者或者官方文件服務器或者各個鏡像站點
http://mirrors.aliyun.com 阿里雲鏡像
二、項目的官方站點
三、第三方組織
EPEL:ExtraPackages for Enterprise Linux(企業版Linux附加軟件包)
搜索引擎
4、 rpm命令的使用
rpm命令按照用途能夠分爲 安裝、升級、卸載、查詢、校驗、數據庫維護這六個區塊,下面咱們就對各個區塊的經常使用使用方法進行說明
一、安裝
rpm {-i|--install} [install-option] PACKAGE_FILE(包完整文件名)…
-i或者—install爲安裝選項,通常會配合-v、-h參數一同使用。-v爲顯示具體的安裝信息,-h爲顯示安裝進度。
[install-option] 爲安裝選項下具體功能選項,經常使用的有
--nodeps |
安裝時忽略軟件的依賴關係強制安裝 |
--nodigest |
安裝時不驗證包數據的完整性 |
--nosignature |
安裝時不驗證包的數字簽名即不驗證包的來源合法性 |
--noscripts |
禁止軟件在安裝前或後自動執行某些腳本 |
--replacefiles |
若是在安裝時遇到某個文件已經安裝,則覆蓋該文件 |
--replacepkgs |
若是在安裝時遇到該軟件已經安裝,則覆蓋安裝 |
--force |
強制安裝,--replacefiles和—replacepkgs的綜合體 |
--justdb |
只更新軟件在數據庫中的信息 |
--test |
不安裝只是測試軟件可否安裝到當前環境,若不能會給出提示 |
--prefix |
將軟件安裝到想要的路徑中,後面接路徑名 |
二、更新
rpm {-U|--upgrade} [install-options]PACKAGE_FILE(包完整文件名) ...
rpm {-F|--freshen} [install-options]PACKAGE_FILE(包完整文件名) ...
同安裝同樣,更新也會和-h、-v選項一同使用
-Uvh |
後面接的軟件若不存在,則予以安裝,存在則更新 |
-Fvh |
後面接的軟件若不存在,則不安裝,存在則更新 |
三、卸載
rpm {-e|--erase} [erase-option] PACKAGE_NAME(已安裝的軟件名) ...
[erase-option]
--allmatches |
卸載全部匹配後面接的軟件名的程序包 |
--nodeps |
忽略依賴關係,強制卸載。但卸載後依賴此軟件的其餘軟件會不能使用 |
--noscripts |
在卸載過程前或後不執行任何腳本 |
--test |
只測試,不真正卸載 |
四、查詢
rpm {-q|--query} [select-options][query-options]
rpm在查詢時是查詢/var/lib/rpm這個數據庫中的信息,而且rpm還能夠查詢未安裝的rpm文件內的信息
[query-option]
-i |
列出該軟件的詳細信息 |
-l |
列出軟件安裝生成的全部文件列表 |
-c |
列出該軟件的配置文件 |
-d |
列出該軟件的說明文件 |
-R |
查詢該軟件的依賴關係 |
-s |
列出軟件包中全部文件的狀態 |
--provides |
列出這個軟件包提供的功能 |
--scripts |
列出這個軟件包在安裝或卸載先後能夠運行的腳本 |
--changelog |
顯示軟件包的歷史更改信息 |
[select-options]
-a |
列出全部已經安裝的軟件 |
-f FILE |
後面接文件名,查詢該文件屬於哪一個程序 |
--whatprovides CAPABILITY |
查詢指定的CAPABILITY由哪一個程序包提供 |
--whateequires CAPABILITY |
查詢哪些程序包依賴此CAPABILITY |
[root@jojohyj ~]# rpm-q --whatprovides zsh 由程序名查找rpm包名
zsh-4.3.11-4.el6.centos.2.x86_64
五、校驗
rpm {-V|--verify} [select-options] [verify-options]
[verify-options]
--nodeps |
不驗證包的依賴關係 |
--nodigest |
不驗證包的完整性 |
--nosignature |
不驗證包的來源可靠性 |
-f FILE |
驗證某個文件的完整性 |
通常咱們校驗時都最好都檢查下,因此直接使用rpm -V package_name 便可。
校驗後無任何顯示輸出,說明包的完整性;若是有變化,會顯示具體的變化項目
S:文件容量被改變
M:文件屬性被改變
5:MD5和被改變,即數據的內容被改變
D:設備的主、次代碼被改變
L:link路徑被改變
U:文件屬主被改變
G:文件屬組被改變
T:文件的修改時間被改變
P:功能被改變
[root@jojohyj ~]# rpm-V logrotate
..5....T. c /etc/logrotate.conf
顯示logrotate這個程序中的/etc/logrotate.conf這個文件的數據內容和修改時間有過變更
5、 rpm包來源合法性及包完整性驗證機制
rpm包的製做者經過單向加密技術提取出包數據的特徵碼,特徵碼用於確保包數據的完整性,若是包中數據被改動,那特徵碼也必定會發生改變。以後包製做者使用非對稱加密技術,利用其中的私鑰對以前產生的特徵碼進行加密,此加密被稱爲數字簽名,並公佈與私鑰對應的公鑰給下載者,因爲公鑰只能解密對應的私鑰,若數字簽名被改動,則公鑰不能解密,說明下載來源出現問題,從而保證了rpm包的來源合法性。以後下載者經過一樣的單向加密技術對rpm包提取特徵碼,若是提取出的特徵碼和原特徵碼一致,就說明rpm包中的數據沒有被改動過,從而保證了rpm包的數據完整性
導入包製做者的公鑰,這裏使用的是centos7的公鑰位置
rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
對於其餘版本的GPG密鑰位置,咱們能夠對GPG-KEY進行搜索位置來肯定後再安裝
find /etc -name 「*GPG-KEY*」 或者 locate GPG-KEY
導入完成後,咱們能夠查看密鑰的具體軟件名稱和它的基本信息
[root@jojohyj ~]# rpm -qa | grep pubkey 查找安裝後的公鑰軟件名稱
gpg-pubkey-f4a80eb5-53a7ff4b
[root@jojohyj ~]# rpm -qigpg-pubkey-f4a80eb5-53a7ff4b 查詢公鑰軟件的信息
Name : gpg-pubkey
Version : f4a80eb5
Release : 53a7ff4b
Architecture: (none)
Install Date: Tue 30 May 2017 08:23:05 PM CST
Group : Public Keys
Size : 0
License : pubkey
Signature : (none)
Source RPM : (none)
Build Date : Mon 23 Jun 201406:19:55 PM CST
Build Host : localhost
Relocations : (not relocatable)
Packager : CentOS-7 Key(CentOS 7 Official Signing Key) <security@centos.org>
Summary : gpg(CentOS-7 Key(CentOS 7 Official Signing Key) <security@centos.org>)
咱們在安裝rpm包時,會自動執行驗證簽名,咱們也能夠手動驗證
rpm -K /path/to/rpmpackage_file
[root@jojohyj ~]# rpm -K zsh-5.0.2-28.el7.x86_64.rpm
zsh-5.0.2-28.el7.x86_64.rpm: rsa sha1 (md5) pgp md5 OK 簽名沒有問題
[root@jojohyj ~]# rpm -K zsh-4.3.11-4.el6.centos.2.x86_64.rpm
zsh-4.3.11-4.el6.centos.2.x86_64.rpm: RSA sha1 ((MD5) PGP) md5 NOT OK (MISSING KEYS:(MD5) PGP#c105b9de) 公鑰沒有安裝,因此檢查簽名有問題
6、 rpm數據庫重建
經過rpm 命令查詢一個rpm 包是否安裝了,也是要經過rpm 數據庫來完成的;有時rpm 系統出了問題,不能安裝和查詢,可能會是數據庫出現問題,可使用下面命令重建
rpm --initdb:若是事先沒有數據庫,則會新建一個,若是已經存在數據庫則不進行任何操做
rpm –rebuilddb:從新構建數據庫,會覆蓋原有數據庫