歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux系統之程序包管理器-RPM

Linux系統之程序包管理器-RPM

日期:2017/2/28 14:01:43   编辑:Linux教程

在早期我們使用源代碼的方式來安裝軟件時,都需要先把源程序代碼編譯成可執行的二進制安裝程序,然後進行安裝。這就意味著每次安裝軟件都需要經過預處理-->編譯-->匯編-->鏈接-->生成安裝文件--> 安裝,這個復雜而艱辛的過程。為簡化安裝步驟,便於廣大用戶的安裝部署程序,程序提供商就在特定的系統上面編譯好相關程序的安裝文件並進行打包,提供給大家下載,我們只需要根據自己的系統去下載相應的安裝包進行安裝即可,其類似 Windows 的安裝方式,由程序開發者直接在已知的系統上面編譯好,再將該程序直接給用戶來安裝,如此而已。但是,程序包該怎麼管理呢,這就是我們程序包管理器的事啦!

什麼是程序包管理器
用於管理Linux 下軟件包的軟件,其主要功能為:將編譯好的程序打包成一個文件或有限的幾個文件,可用於實現安裝、卸載、升級、查詢等功能。
程序包管理器的兩大主流
dpkg: 最早是由 Debian Linux 社群所開發出來的, 只要是衍生亍 Debian 的其他 Linux distributions 大多使用 dpkg 這個機制來管理軟件的, 包括B2D, Ubuntu 等等,其前端工具有apt-get。
RPM: 最早是由 Red Hat 這家公司開發出來的,後來實在太好用,因此很多distributions 就使用其來作為軟件安裝的管理方式。包括 Fedora, CentOS, SUSE 等等,其前端工具有yum。

程序包的組成格式與存放路徑:
1、二進制程序
主要存放的路徑:/bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin, /usr/local/APP/{bin,sbin}
注意:有些特殊的應用程序放置於libexec目錄中;有些第三方應用默認安裝於/opt目錄。
2、庫文件(開發庫、運行庫)
主要存放的路徑:/lib64, /usr/lib64, /usr/local/lib64, /usr/local/APP/lib
3、配置文件
主要存放的路徑:/etc, /usr/local/APP/etc或conf目錄
4、幫助文件
主要存放的路徑:/usr/share/man, /usr/local/share/man, /usr/local/APP/man

RPM程序包管理器使用詳解
RPM包的命名格式:


但對於一個程序來說,其可能具有很多功能,其中有些是常用功能,有些是特殊功能,有些是二次開發相關的功能,如果把所有的功能打包在一塊,無疑程序包會增大很多,對一些普通用戶無需使用的功能都需一並下載安裝,無形間就造成了資源的浪費,特此在對程序包的打包就衍生出了分包機制,一般把程序分包成主包與子包。例如一個bash程序有20個功能:常用功能有10個,特殊A:4個,特殊B:3個,二次開發相關功能:3個,那麼包的命名方式如下:
核心包,主包:命名與源程序一致
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


RPM-安裝程序包:
命令格式: rpm [option] /path/to/package_file...
常用選項說明:
-i:安裝程序;
-v:顯示安裝執行過程;
-vv:詳細顯示安裝執行過程;
-vvv:更詳細的顯示安裝執行過程;
-h:用#來標記安裝進度
常用組合選項:-ivh
--test: 僅作測試,沒有真正執行安裝
--nodeps:忽略依賴關系,強制安裝,能安裝上,但有可能無法運行
--replacepkgs:重新安裝,如果原有配置文件作了修改,很有可能不執行替換,而是將應該安裝生成的配置文件重命名為 .rpmnew
[root@CentOS6 Packages]# rpm -ivh zsh-4.3.10-7.el6.i686.rpm --test
Preparing... ########################################### [100%]
[root@CentOS6 Packages]# rpm -ivh zsh-4.3.10-7.el6.i686.rpm
Preparing... ########################################### [100%]
1:zsh ########################################### [100%]

[注意]:該命令後面接的是RPM包文件,可以用空格做分割同時安裝多個程序,如電腦可以上網的話,也可以直接指定網絡上的RPM包,進行安裝。

RPM-卸載程序包:

命令格式:rpm [option] package_name
常用選項說明:-e: 卸載程序
--nodeps:忽略依賴關系,強行卸載,其他依賴於此包的程序可能無法正常運行
[root@CentOS6 Packages]# rpm -e zsh
warning: /etc/zshrc saved as /etc/zshrc.rpmsave #對/etc/zshrc做過修改,提示文件不會被刪會被保存為/etc/zshrc.rpmsave
[root@CentOS6 Packages]# rpm -e httpd #卸載httpd,提示有其他程序依賴於該程序,無法卸載,如需卸載先卸載相依賴的程序
error: Failed dependencies:
httpd >= 2.2.0 is needed by (installed) gnome-user-share-2.28.2-3.el6.i686
[root@CentOS6 Packages]# rpm -e httpd --nodeps #忽略依賴關系,強行卸載
[root@CentOS6 Packages]#

[注意]:如果包的配置文件安裝後曾被改動過,卸載時,此文件將不會卸載,而是被重命名並保留,例如
warning: /etc/zshrc saved as /etc/zshrc.rpmsave


RPM-升級程序包
命令格式:rrpm [-Uvh | -Fvh] /path/to/package_file
常用選項說明:-Uvh: 升級或安裝,後面的程序安裝此電腦已安裝則進行升級,如沒有安裝則現在安裝;
-Fvh: 升級,只對電腦上已安裝的程序進行升級,如沒有安裝則不進行安裝;
--force:強制升級
[注意]:為了保證系統的正常運行,不要對內核進行升級操作,而應該對內核進行安裝,系統允許多個內核共存。


RPM-查詢操作

命令格式:rpm [option] package_name|file
常用選項說明:
-q: 查詢某包是否安裝,可以一次查詢多個,彼此間用空格隔離;
[root@CentOS6 cd]# rpm -q zsh
zsh-4.3.10-7.el6.i686

-qa: 查詢所有已經安裝的包,可以通過管道按條件進行過濾(rpm -qa | grep 'PATTERN')
[root@CentOS6 cd]# rpm -qa
libaio-0.3.107-10.el6.i686
perl-URI-1.40-2.el6.noarch
kbd-1.15-11.el6.i686
gnome-speech-0.4.25-3.1.el6.i686
cas-0.15-1.el6.1.noarch
tzdata-2013g-1.el6.noarch
libsss_autofs-1.9.2-129.el6.i686
.........
[root@CentOS6 cd]# rpm -qa | grep "zs.*"
zsh-4.3.10-7.el6.i686

-qi: 查詢包的描述信息(只能查詢已經安裝的包的描述信息);
[root@CentOS6 cd]# rpm -qi zsh
Name : zsh Relocations: (not relocatable)
Version : 4.3.10 Vendor: CentOS
Release : 7.el6 Build Date: Sun 24 Nov 2013 12:37:44 PM EST
Install Date: Tue 21 Apr 2015 11:29:57 AM EDT Build Host: c6b9.bsys.dev.centos.org
Group : System Environment/Shells Source RPM: zsh-4.3.10-7.el6.src.rpm
Size : 4777026 License: BSD
Signature : RSA/SHA1, Sun 24 Nov 2013 02:30:40 PM EST, Key ID 0946fca2c105b9de
Packager : CentOS BuildSystem <http://bugs.centos.org>
URL : http://zsh.sunsite.dk/
Summary : A powerful interactive shell
Description :
The zsh shell is a command interpreter usable as an interactive login
shell and as a shell script command processor. Zsh resembles the ksh
shell (the Korn shell), but includes many enhancements. Zsh supports
command line editing, built-in spelling correction, programmable
command completion, shell functions (with autoloading), a history
mechanism, and more.
[root@CentOS6 cd]#

-ql: 查詢某包安裝生成了哪些文件(所有);
-qc: 查詢某包安裝生成了哪些配置文件;
-qd: 查詢某包安裝生成了哪些幫助文件;
--q --scripts package_name: 查詢程序包的相關腳本;
腳本有四類:
preinstall:安裝前腳本,包安裝之前就需安裝的腳步
postinstall: 安裝後腳本
preuninstall: 卸載前腳本
[root@CentOS6 cd]# rpm -qc zsh
/etc/skel/.zshrc
/etc/zlogin
/etc/zlogout
/etc/zprofile
/etc/zshenv
/etc/zshrc
[root@CentOS6 cd]# rpm -qd zsh
/usr/share/doc/zsh-4.3.10/BUGS
.....
/usr/share/man/man1/zshall.1.gz
....
[root@CentOS6 cd]# rpm -q --scripts zsh
postinstall scriptlet (using /bin/sh):
if [ ! -f /etc/shells ] ; then
.....
[root@CentOS6 cd]#


查詢沒有安裝的包的相關信息,只需要在選項裡加入-p即可,如下:

-qpi 包的描述信息
-qpl 包安裝會生成的文件
-qpc 包安裝會生成的配置文件
-qpd 包安裝會生成的幫助文件
查詢某文件是由哪個包安裝生成的:rpm -qf /path/to/some_file
[root@CentOS6 cd]# rpm -qf /bin/vi
vim-minimal-7.2.411-1.8.el6.i686 #顯示/bin/vi文件是由該安裝包生成
[root@CentOS6 cd]#

RPM-校驗

用於檢查包安裝生成的文件屬性是否發生變化
命令格式:rpm [option] package_name|file
常用選項說明:
-V :後面加的是程序名稱,若該程序屬有的文件發生改變就會顯示;
-Va :顯示目前系統上面所有可能被修改過的文件;
-Vp :後面加的是文件名,顯示該程序內可能被更改過的文件;
-Vf :後面加的是文件名,顯示某個文件是否被修改過。
[root@CentOS6 cd]# rpm -V zsh
S.5....T. c /etc/zshrc
[root@CentOS6 cd]#

對應屬性位說明:
S file Size differs 表示文件大小發生改變
M Mode differs (includes permissions and file 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包的校驗主要有來源合法性驗證與包的完整性驗證。
數字簽名:包的制作者使用單向加密提取原始數據的特征碼,而後使用自己的私鑰加密這段特性碼,附加原始數據後面。
驗正過程:
前提:必須有可靠機制獲取到包制作者的公鑰;
1、使用制作者的公鑰解密加密的特征碼,能解密則意味著來源合法;
2、使用與制作者同樣的意向加密算法提取原始數據的特征碼,並與解密出來的特征作比對,相同,則意味著完整性沒問題;
rpm包來源合法性及完整性檢驗:
在當前系統上導入包的制作者的公鑰:
rpm --import /path/to/key_file
顯示所有已經導入的gpg格式的公鑰:
rpm -qa gpg-pubkey*
[root@CentOS6 cd]# rpm -qa gpg-pubkey*
gpg-pubkey-c105b9de-4e0fd3a3
[root@CentOS6 cd]#

顯示密鑰的詳細信息

rpm -qi gpg-pubkey-NAME
[root@CentOS6 cd]# rpm -qi gpg-pubkey-c105b9de-4e0fd3a3
Name : gpg-pubkey Relocations: (not relocatable)
Version : c105b9de Vendor: (none)
......
-----END PGP PUBLIC KEY BLOCK-----

【注意】安裝過程中會自動用已經導入的的公鑰,對程序包進行檢驗,一般無需進行手動校驗。

手動檢查:
rpm {-K|--checksig} [--nosignature] [--nodigest] PACKAGE_FILE
選項說明:
-K :等同於 --checksig ,進行檢查並顯示結果;
--nodigest:不檢查包完整性;
--nosignature:不檢查來源合法性。
[root@CentOS6 cd]# cd Packages/
[root@CentOS6 Packages]# rpm -K zsh-4.3.10-7.el6.i686.rpm
zsh-4.3.10-7.el6.i686.rpm: rsa sha1 (md5) pgp md5 OK
[root@CentOS6 Packages]# rpm --checksig zsh-4.3.10-7.el6.i686.rpm
zsh-4.3.10-7.el6.i686.rpm: rsa sha1 (md5) pgp md5 OK
[root@CentOS6 Packages]# rpm -K --nodigest zsh-4.3.10-7.el6.i686.rpm
zsh-4.3.10-7.el6.i686.rpm: rsa (md5) pgp OK
[root@CentOS6 Packages]# rpm -K --nosignature zsh-4.3.10-7.el6.i686.rpm
zsh-4.3.10-7.el6.i686.rpm: sha1 md5 OK


RPM- 數據庫重建:
數據庫目錄:/var/lib/rpm
重建數據庫:
rpm --initdb:初始化
如果事先沒有庫,會新建一個;如果有,則不新建;
rpm --rebuilddb : 重建
直接重建,覆蓋原有的數據庫

RPM包創建入門 http://www.linuxidc.com/Linux/2015-02/113559.htm

如何在Linux中創建RPM包? http://www.linuxidc.com/Linux/2012-05/60278.htm

制作自己的rpm包 http://www.linuxidc.com/Linux/2013-06/86435.htm

Linux 下rpm安裝後的目錄結構和一些配置 http://www.linuxidc.com/Linux/2013-06/85761.htm

rpm與yum的綜合性介紹與示例演示 http://www.linuxidc.com/Linux/2013-05/84480.htm

RedHat Linux---rpm 命令詳解 http://www.linuxidc.com/Linux/2013-03/81971.htm

使用FPM輕松制作RPM包 http://www.linuxidc.com/linux/2014-06/103019.htm

Copyright © Linux教程網 All Rights Reserved