Linux rpm軟件包管理

1. linux軟件管理概念:

Linux整個體系的關鍵不在於系統本身,而是在於可以基於Linux系統去安裝和配置企業中相關的軟件、 數據及應用程序,所以對軟件的維護是運維工程師的重中之重。 

 

2. 軟件管理的三種方式:

rpm管理:

yum管理:

源碼方式管理:

Linux軟件包管理大致可分爲二進制包、源碼包,使用的工具也各不相同。

Linux常見軟件包分爲兩種,分別是源代碼包(Source Code)、二進制包(Binary Code),源代碼包是沒有經過編譯的包,需要經過GCC、C++編譯器環境編譯才能運行,二進制包無需編譯,可以直接安裝使用。

通常而言,可以通過後綴簡單區別源碼包和二進制包,例如.tar.gz、.zip、.rar結尾的包通常稱之爲源碼包,以.rpm結尾的軟件包稱之爲二進制包。

真正區分是否爲源碼還是二進制還得基於代碼裏面的文件來判斷,例如包含.h、.c、.cpp、.cc等結尾的源碼文件,稱之爲源碼包,而代碼裏面存在bin可執行文件,稱之爲二進制包。

 

2.1 RPM管理:

2.1.1 rpm工作原理:

當我們使用rpm工具安裝軟件包時,它會首先找到軟件包中的一個記錄文件,該文件記錄了這個軟件安裝時需要的依賴包,如果包已經存在,則可以順利安裝,如果不存在,則提示缺少相應的依賴。

 

RPM優點:

(1)軟件已經編譯打包,所以傳輸和安裝方便,讓用戶免除編譯。

(2)在安裝之前,會先檢查系統的磁盤、操作系統版本等,避免錯誤安裝。

(3)在安裝好之後,軟件的信息都已經記錄在linux主機的數據庫上,方便查詢、升級和卸載。

 

RPM缺點:

(1)軟件包安裝的環境必須與打包時的環境一致。(rpm包非常吃版本,32位不能裝64位)

(2)必須安裝了軟件的依賴軟件。

 

2.1.1.1 安裝httpd rpm包 

http://mirrors.163.com/centos/7/os/x86_64/Packages/  --這個網站是用來下載rpm包的

[root@localhost ~]# yum install wget

Loaded plugins: product-id, search-disabled-repos, subscription-manager

This system is not registered with an entitlement server. You can use subscription-manager to register.

local                                                                                                   | 4.1 kB  00:00:00

.......................................................

 

[root@localhost ~]# wget http://mirrors.163.com/centos/7/os/x86_64/Packages/httpd-2.4.6-90.el7.centos.x86_64.rpm

--使用wget命令獲取163網站上的httpd軟件包

--2020-02-24 14:32:56--  http://mirrors.163.com/centos/7/os/x86_64/Packages/httpd-2.4.6-90.el7.centos.x86_64.rpm

Resolving mirrors.163.com (mirrors.163.com)... 59.111.0.251

Connecting to mirrors.163.com (mirrors.163.com)|59.111.0.251|:80... connected.

HTTP request sent, awaiting response... 200 OK

Length: 2844388 (2.7M) [application/x-redhat-package-manager]

Saving to: ?.ttpd-2.4.6-90.el7.centos.x86_64.rpm?

 

100%[=====================================================================================>] 2,844,388   5.41MB/s   in 0.5s   

 

2020-02-24 14:32:56 (5.41 MB/s) - ?.ttpd-2.4.6-90.el7.centos.x86_64.rpm?.saved [2844388/2844388]

 

[root@localhost ~]# ls

anaconda-ks.cfg  fstab  httpd-2.4.6-90.el7.centos.x86_64.rpm  redhat.bak

 

[root@localhost ~]# rpm -ivh httpd-2.4.6-90.el7.centos.x86_64.rpm

warning: httpd-2.4.6-90.el7.centos.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY

error: Failed dependencies:

/etc/mime.types is needed by httpd-2.4.6-90.el7.centos.x86_64

httpd-tools = 2.4.6-90.el7.centos is needed by httpd-2.4.6-90.el7.centos.x86_64

--i是安裝 v是展示詳細信息 h是指顯示安裝進度,可以看到軟件包依賴性出現問題,需要這個工具包httpd-tools,所以必須先安裝httpd-tools。

 

[root@localhost ~]# wget http://mirrors.163.com/centos/7/os/x86_64/Packages/httpd-tools-2.4.6-90.el7.centos.x86_64.rpm

--2020-02-24 14:45:10--  http://mirrors.163.com/centos/7/os/x86_64/Packages/httpd-tools-2.4.6-90.el7.centos.x86_64.rpm

Resolving mirrors.163.com (mirrors.163.com)... 59.111.0.251

Connecting to mirrors.163.com (mirrors.163.com)|59.111.0.251|:80... connected.

HTTP request sent, awaiting response... 200 OK

Length: 92944 (91K) [application/x-redhat-package-manager]

Saving to: ?.ttpd-tools-2.4.6-90.el7.centos.x86_64.rpm?

 

100%[=====================================================================================>] 92,944      --.-K/s   in 0.02s   

 

2020-02-24 14:45:10 (4.21 MB/s) - ?.ttpd-tools-2.4.6-90.el7.centos.x86_64.rpm?.saved [92944/92944]

 

[root@localhost ~]# rpm -ivh httpd-tools-2.4.6-90.el7.centos.x86_64.rpm

warning: httpd-tools-2.4.6-90.el7.centos.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY

Preparing...                          ################################# [100%]

Updating / installing...

   1:httpd-tools-2.4.6-90.el7.centos  ################################# [100%]

 

 

[root@localhost ~]# rpm -ivh httpd-2.4.6-90.el7.centos.x86_64.rpm

warning: httpd-2.4.6-90.el7.centos.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY

error: Failed dependencies:

/etc/mime.types is needed by httpd-2.4.6-90.el7.centos.x86_64

--可以看到,缺少/etc/mime.type這個文件,這個文件在mailcap-2.1.41-2.el7.noarch.rpm包裏面,再次從163獲取  mailcap-2.1.41-2.el7.noarch.rpm解決httpd的依賴性問題

[root@localhost ~]# wget http://mirrors.163.com/centos/7/os/x86_64/Packages/mailcap-2.1.41-2.el7.noarch.rpm

--2020-02-24 15:03:54--  http://mirrors.163.com/centos/7/os/x86_64/Packages/mailcap-2.1.41-2.el7.noarch.rpm

Resolving mirrors.163.com (mirrors.163.com)... 59.111.0.251

[root@localhost ~]# rpm -ivh mailcap-2.1.41-2.el7.noarch.rpm

warning: mailcap-2.1.41-2.el7.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY

Preparing...                          ################################# [100%]

Updating / installing...

   1:mailcap-2.1.41-2.el7             ################################# [100%]

[root@localhost ~]# rpm -ivh httpd-2.4.6-90.el7.centos.x86_64.rpm  --可以看到已經成功安裝上httpd解決了依賴 httpd-tools-2.4.6-90.el7.centos.x86_64.rpm,mailcap-2.1.41-2.el7.noarch.rpm

這兩個軟件包的問題

warning: httpd-2.4.6-90.el7.centos.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY

Preparing...                          ################################# [100%]

Updating / installing...

   1:httpd-2.4.6-90.el7.centos        ################################# [100%]

 

[root@localhost ~]# rpm -qp --requires httpd-2.4.6-90.el7.centos.x86_64.rpm  --查看安裝httpd需要依賴的文件和軟件包

warning: httpd-2.4.6-90.el7.centos.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY

/etc/mime.types

system-logos >= 7.92.1-1

httpd-tools = 2.4.6-90.el7.centos

 

使用rpm包安裝,安裝的目錄是分散的,有的在/etc下面,那些是配置文件,有的在/var下面是日誌等文件。

 

使用rpm安裝了httpd,但是多了一個apache用戶。在使用rpm在安裝包的時候,創建了對應於服務的用戶。

[root@localhost ~]# rpm -q --scripts httpd

preinstall scriptlet (using /bin/sh):

# Add the "apache" group and user

/usr/sbin/groupadd -g 48 -r apache 2> /dev/null || :

/usr/sbin/useradd -c "Apache" -u 48 -g apache \

-s /sbin/nologin -r -d /usr/share/httpd apache 2> /dev/null || :

postinstall scriptlet (using /bin/sh):

 

 

2.1.2 rpm常用命令:

2.1.2.1 查詢包是否已安裝和查詢已安裝的包

[root@node-2 ~]# rpm -q tk

package tk is not installed

[root@node-2 ~]# rpm -q httpd

httpd-2.4.6-88.el7.centos.x86_64

# 查詢所有已經安裝的軟件包

[root@node-2 ~]# rpm -qa

t1lib-5.1.2-14.el7.x86_64

python-urlgrabber-3.10-8.el7.noarch

setup-2.8.71-7.el7.noarch

gpm-libs-1.20.7-5.el7.x86_64

pth-2.0.7-23.el7.x86_64

# 統計操作系統已經安裝得所有包數量:

[root@localhost ~]# rpm -qa |wc -l

624

 

2.1.2.2 根據文件反向查找包:

# 可以通過which arp 找到命令路徑,然後通過qf查詢該文件時由哪個包提供得

[root@localhost ~]# which arp

/usr/sbin/arp

[root@localhost ~]# rpm -qf /usr/sbin/arp

 

2.1.2.3 查軟件安裝路徑:

[root@node-2 ~]# rpm -ql httpd

/etc/httpd

/etc/httpd/conf

/etc/httpd/conf.d

/etc/httpd/conf.d/README

 

2.1.2.3 查軟件的配置文件路徑

[root@localhost ~]# rpm -qc httpd

/etc/httpd/conf.d/autoindex.conf

/etc/httpd/conf.d/userdir.conf

/etc/httpd/conf.d/welcome.conf

 

 

2.1.2.4 查詢一個未安裝軟件包的文件路徑:

# 查詢一個未安裝軟件包安裝後會在系統生成的文件列表

[root@node-2 Packages]# rpm -qpl tk-8.5.13-6.el7.x86_64.rpm

/usr/bin/wish

/usr/bin/wish8.5

/usr/lib64/libtk8.5.so

/usr/lib64/tk8.5

/usr/lib64/tk8.5/pkgIndex.tcl

/usr/share/doc/tk-8.5.13

2.1.2.5 查詢軟件的版本信息:

[root@node-2 ~]# rpm -qi httpd

Name : httpd

Version : 2.4.6

Release : 88.el7.centos

Architecture: x86_64

Install Date: Mon 25 Mar 2019 05:44:57 AM EDT

Group : System Environment/Daemons

Size : 9817309

License : ASL 2.0

 

2.1.2.6 安裝軟件包:

# 安裝軟件包,需要切換到軟件包所在的目錄或者使用絕對路徑安裝,否則報錯如下:

[root@node-2 ~]# rpm -ivh tk-8.5.13-6.el7.x86_64.rpm

error: open of tk-8.5.13-6.el7.x86_64.rpm failed: No such file or directory

# 需要先安裝依賴,否則報錯如下:

[root@node-2 Packages]# rpm -ivh tk-8.5.13-6.el7.x86_64.rpm

error: Failed dependencies:

libXft.so.2()(64bit) is needed by tk-1:8.5.13-6.el7.x86_64

libtcl8.5.so()(64bit) is needed by tk-1:8.5.13-6.el7.x86_64

tcl = 1:8.5.13 is needed by tk-1:8.5.13-6.el7.x86_64

tcl >= 1:8.5.13-5 is needed by tk-1:8.5.13-6.el7.x86_64

 

2.1.2.7 安裝軟件包(忽略依賴):

rpm -ivh --nodeps httpd-2.4.10-el7.x86_64.rpm

# 不太建議,這樣安裝的包往往會有問題

 

2.1.2.8 升級軟件包:

# 需要當前目錄有這個軟件包才行,否則也會報錯

rpm -Uvh httpd-2.4.6-88.el7.centos.x86_64.rpm

 

2.1.2.9 卸載軟件包:

rpm -e httpd

 

2.1.2.10 強制卸載

rpm -e --nodeps httpd

 

2.1.2.11 測試安裝:

# 一個軟件包是否能夠安裝在系統上,不真正安裝

rpm -ivh --test httpd-2.4.6-88.el7.centos.x86_64.rpm

 

2.1.2.12 rpm數據庫命令:

# 初始化系統的rpm數據庫:

rpm --initdb

# 重建系統的rpm數據庫

rpm --rebuilddb

# 向系統導入軟件包的公鑰

rpm --import

 

2.1.2.13 查詢軟件包得執行腳本:

# 查詢未安裝包的腳本:

rpm -qp --scripts httpd-2.4.6-90.el7.centos.x86_64.rpm

# 查詢已安裝包的腳本:

rpm -q --scripts httpd

 

2.1.2.14 查詢軟件包得依賴文件:

rpm -qp --requires httpd-2.4.6-90.el7.centos.x86_64.rpm

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章