linux之rpm包管理

我們知道計(jì)算機(jī)上運(yùn)行的程序都是通過(guò)開(kāi)發(fā)工具來(lái)制作而成的,而程序員直接編寫(xiě)的純文本文檔稱為源代碼,由于計(jì)算機(jī)識(shí)別的是二進(jìn)制程序,因此在編寫(xiě)完源代碼之后,如果想讓計(jì)算機(jī)運(yùn)行此源代碼,必須要把源代碼編譯成計(jì)算機(jī)能夠讀懂的二進(jìn)制程序。對(duì)于用戶來(lái)說(shuō),編譯源代碼并不容易。因此,為了讓用戶能夠簡(jiǎn)單使用程序,程序員可在提供源代碼的同時(shí)提供已在生產(chǎn)環(huán)境下編譯好的程序文件,只要生產(chǎn)環(huán)境相同,就可以使用該程序了,而無(wú)需自己手動(dòng)編譯安裝。

1 源代碼編譯二進(jìn)制過(guò)程

編譯過(guò)程

二進(jìn)制應(yīng)用程序的組成部分:二進(jìn)制文件、庫(kù)文件、配置文件、幫助文件

而程序包管理器的功能就是將編譯好的應(yīng)用程序的各組成文件打包成一個(gè)或幾個(gè)程序包文件,從而更方便地實(shí)現(xiàn)程序包的安裝、升級(jí)、卸載和查詢等管理操作。

2 rpm包管理器的由來(lái)

早期,rpm包管理工具是Redhat公司針對(duì)自己的操作系統(tǒng)RHEL提出的,全稱為RedHat Package Manager,后來(lái)由于rpm包管理器的使用方便以及Redhat公司采取各種商業(yè)策略,使得rpm成為了工業(yè)標(biāo)準(zhǔn),后來(lái)包括Fedora,Centos,Suse等知名廠商也引用了該工業(yè)標(biāo)準(zhǔn)。,因此rpm全稱后來(lái)改為:RPM Package Manager。在各個(gè)廠商中流行起來(lái)。

3 rpm包管理器功能

我們知道,安裝一個(gè)軟件,可能需要依賴其他的軟件才能使用,即軟件屬性相依的問(wèn)題,那我們?nèi)绾谓鉀Q依賴問(wèn)題呢?此時(shí),rpm包管理器就可以派上用場(chǎng)了,它可以很好的解決軟件包之間的依賴問(wèn)題。rpm包管理器可將編譯好的各個(gè)應(yīng)用程序組成文件打包成一個(gè)或有限個(gè)rpm程序包,每個(gè)包中會(huì)記錄當(dāng)前包的依賴性。一旦程序包安裝了之后,rpm會(huì)追蹤其各個(gè)文件的安裝路徑。rpm包管理器就是通過(guò)這種方式來(lái)實(shí)現(xiàn)對(duì)rpm程序包的管理的,而對(duì)程序包的管理無(wú)外乎是安裝、升級(jí)、卸載、查詢等操作。

程序包管理器有

發(fā)行版代表 軟件管理機(jī)制 使用命令
debian dpkg 包管理器 deb
redhat rpm 包管理器 rpm
Fedora(+18之后 ) dnf 包管理器 dnf

4 rpm包管理器的組成部分

程序包管理器由程序包組成清單和數(shù)據(jù)庫(kù)兩部分組成:

(1)程序包的組成清單(每個(gè)程序都單獨(dú)實(shí)現(xiàn)):

***文件清單

***安裝或卸載時(shí)運(yùn)行的腳本

(2)數(shù)據(jù)庫(kù)(為所有rpm程序包所共用):

***程序包的名稱和版本

***依賴關(guān)系

***功能說(shuō)明

***安裝生成的各個(gè)文件的文件路徑及校驗(yàn)碼信息

5 rpm包命名格式

** 源代碼:name-VERSION.tar.gz|bz2|xz**
** rpm 包命名方式:name-VERSION-release.arch.rpm**

name-VERSION-release.arch.rpm
例: :bash-4.2.46-19.el7.x86_64.rpm
VERSION: major.minor.release
release :release.OS
常見(jiàn)的arch: :
x86: i386, i486, i586, i686
x86_64: x64, x86_64, amd64
powerpc: ppc
跟平臺(tái)無(wú)關(guān):noarch

6 程序包的來(lái)源途徑

http://pkgs.org
http://rpmfind.net
http://rpm.pbone.net
https://sourceforge.net/

7 rpm命令管理程序包之安裝、卸載、升級(jí)、查詢、校驗(yàn)、數(shù)據(jù)庫(kù)維護(hù)

rpm包安裝

rpm {--install} [install-options] PACKAGE_FILE

>{--install}
>>  -i :安裝軟件

-v:顯示詳細(xì)的安裝過(guò)程
-vv:顯示更為詳細(xì)的安裝過(guò)程
-h:以# 顯示程序包管理執(zhí)行進(jìn)度

Preparing...                          ################################# [100%]
    package lrzsz-0.12.20-36.el7.x86_64 is already installed

[install-options]

--test: 測(cè)試安裝,但不真正 執(zhí)行安裝,即dry run 模式
--nodeps :忽略依賴關(guān)系
--replacepkgs | replacefiles
--nosignature: 不檢查來(lái)源合法性
--nodigest :不檢查包完整性
--noscripts :不執(zhí)行 程序包腳本
.... %pre: ; 安裝前腳本; --nopre
.... %post: ; 安裝后腳本; --nopost
....%preun: ; 卸載前腳本; --nopreun
....%postun: 卸載后腳本; --nopostun

需要依賴關(guān)系才可以安裝

error: Failed dependencies:
    httpd-tools = 2.4.6-45.el7.centos is needed by httpd-2.4.6-45.el7.centos.x86_64`
**可以使用--nodeps解決依賴關(guān)系**

```[root@centos7 ~]#rpm -ivh /run/media/root/CentOS\ 7\ x86_64/Packages/httpd-2.4.6-45.el7.centos.x86_64.rpm --nodeps 
Preparing...                          ################################# [100%]
Updating / installing...
   1:httpd-2.4.6-45.el7.centos        ################################# [100%]`



**rpm包升級(jí)**

**rpm {-U|--upgrade} [install-options]  PACKAGE_FILE ...**
**rpm {-F|--freshen} [install-options]  PACKAGE_FILE ...**
>upgrade :安裝有舊版程序包,則“升級(jí)”
 .....如果不存在舊版程序包,則“安裝”
freshen :安裝有舊版程序包,則“升級(jí)”
.....如果不存在舊版程序包,則不執(zhí)行升級(jí)操作
rpm -Uvh PACKAGE_FILE ...
rpm -Fvh PACKAGE_FILE ...
--oldpackage :降級(jí)
--force:   強(qiáng)行安裝
**升級(jí)安裝**
```[root@centos7 ~]#rpm -Uvh /run/media/root/CentOS\ 7\ x86_64/Packages/lrzsz-0.12.20-36.el7.x86_64.rpm 
Preparing...                          ################################# [100%]
`
**rpm包查詢**

** rpm {-q|--query} [select-options] [query-options]**
> [select-options]
>>-a:  所有包
-f:  查看指定的文件由哪個(gè)程序包安裝生成
-p rpmfile :針對(duì)尚未安裝的程序包文件做查詢操作
--whatprovides CAPABILITY :查詢指定的 CAPABILITY由哪個(gè)包所提供
--whatrequires CAPABILITY :查詢指定的 CAPABILITY 被
哪個(gè)包所依賴

> [query-options]
>>--changelog :查詢r(jià)pm 包的changelog
-c:  查詢程序的配置文件
-d:  查詢程序的文檔
-i: information
-l:  查看指定的程序包安裝后生成的所有文件
--scripts :程序包自帶的腳本
--provides:  列出指定程序包所提供的CAPABILITY
-R:  查詢指定的程序包所依賴的CAPABILITY

**查詢安裝包信息**
```[root@centos7 ~]#rpm -qi httpd
Name        : httpd
Version     : 2.4.6
Release     : 45.el7.centos
Architecture: x86_64
Install Date: Sun 11 Jun 2017 10:07:51 PM CST
Group       : System Environment/Daemons
Size        : 9807149
License     : ASL 2.0
Signature   : RSA/SHA256, Mon 21 Nov 2016 02:14:03 AM CST, Key ID 24c6a8a7f4a80eb5
Source RPM  : httpd-2.4.6-45.el7.centos.src.rpm
Build Date  : Tue 15 Nov 2016 02:06:40 AM CST
Build Host  : c1bm.rdu2.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem <http://bugs.centos.org>
Vendor      : CentOS
URL         : http://httpd.apache.org/
Summary     : Apache HTTP Server
Description :
The Apache HTTP Server is a powerful, efficient, and extensible
web server.`

**rpm包校驗(yàn)**
** rpm {-V|--verify} [select-options] [verify-options]**
>常見(jiàn)用法:rpm -V PACKAGE_NAME
當(dāng)沒(méi)有輸出結(jié)果是表示軟件來(lái)源完整性O(shè)K
**當(dāng)有相應(yīng)的結(jié)果輸出是表明:**
>>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

> **導(dǎo)入所需要公鑰**
>> rpm -K|checksig rpmfile 檢查包的完整性和簽名
rpm --import / etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
CentOS 7 發(fā)行版光盤(pán)提供: RPM-GPG-KEY-CentOS-7

**rpm數(shù)據(jù)包重建**
>  rpm {--initdb|--rebuilddb}
>> initdb:  初始化
如果 事先不存在數(shù)據(jù)庫(kù),則新建之
否則 ,不執(zhí)行任何操作
rebuilddb :重建已 安裝的包頭的數(shù)據(jù)庫(kù) 索引目錄
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 采用1條命令:sudo yum install qgis qgis-python qgis-grass qgis-...
    測(cè)繪小兵閱讀 4,499評(píng)論 1 1
  • 背景: 閱讀新聞 12C CDB模式下RMAN備份與恢復(fù) [日期:2016-11-29] 來(lái)源:Linux社區(qū) 作...
    陽(yáng)屯okyepd閱讀 3,828評(píng)論 0 7
  • Linux-Server-Notes PMS /home/softwareluke/圖片/2017-09-11 0...
    燕京博士閱讀 637評(píng)論 0 1
  • 軟件包管理 軟件運(yùn)行和編譯 鏈接主要作用是把各個(gè)模塊之間相互引用的部分處理好,使得各個(gè)模塊之間能夠正確地銜接,分為...
    塵曦的雨閱讀 777評(píng)論 0 0
  • 軟件運(yùn)行和編譯 鏈接主要作用是把各個(gè)模塊之間相互引用的部分處理好,使得各個(gè)模塊之間能夠正確地銜接,分為靜態(tài)鏈接和動(dòng)...
    塵曦的雨閱讀 308評(píng)論 0 0

友情鏈接更多精彩內(nèi)容