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