Linux—軟體管理
Linux 軟體管理
1、軟體管理簡介
Redhat和Centos中軟體管理是依靠軟體包管理器(RPM)來實現的。
RPM(Redhat Package Manager)軟體包管理器提供了在linux作業系統中安裝,升級,解除安裝軟體(程式)的方法,並提供對系統中所有軟體(程式)狀態資訊的查詢;除了這些功能外,RPM軟體包管理器還提供了製作軟體包的功能。
1.1 軟體安裝方式
- 通過前端工具安裝
- 通過後端工具安裝
- 編譯安裝
2、軟體包管理器簡介
2.1 軟體包管理器的職責
- 將二進位制軟體(程式),庫檔案,配置檔案,幫助檔案打包成一個檔案;
- 安裝軟體時按需將二進位制檔案,庫檔案,配置檔案,幫助檔案放到相應的位置;
- 生成資料庫,追蹤所安裝的每一個檔案;
- 軟體解除安裝時根據安裝時生成的資料庫將對應的檔案刪除。
2.2 軟體包管理器的核心功能
- 製作軟體包
- 安裝軟體
- 解除安裝軟體
- 升級軟體
- 查詢軟體
- 校驗軟體
3、軟體包簡介
3.1 軟體包組成
- 軟體包的組成清單
- 檔案清單
- 安裝或解除安裝的執行指令碼
- 資料庫(公共)
- 程式包名稱及版本
- 依賴關係
- 功能說明
- 安裝生成的各個檔案的路徑及校驗碼資訊
3.2 軟體包分類
原始碼格式
特點:需要編譯成二進位制格式才能執行
- 命名方式:name-VERSION.tar.gz
- VERSION:主版本號.次版本號.系統發行版本
二進位制格式
特點:編譯好的,安裝之後可以直接執行
- 軟體的作者將軟體的原始碼編譯配置為二進位制軟體包
- Redhat和Centos中使用的二進位制包為rpm包
為什麼有了二進位制格式的包還要有原始碼格式的包?
- 我們在將原始碼格式的包編譯為二進位制包時可以選擇需要的特性,如果編譯時未選擇某些特性,那麼編譯後安裝後的軟體就不會有相應的功能
- 原始碼包在編譯成為二進位制包時可以實現軟體功能的定製。
注意:二進位制(rpm)包的版本會落後於原始碼包,甚至落後很多。
4、軟體包管理工具
- 分類:
- 前端工具,常用的前端工具有以下這些:
- yum
- apt-get
- zypper (suse上的rpm前端管理工具)
- dnf(Fedora 22+ rpm前端管理工具)
- 後端工具,常用的後端工具有以下這些:
- rpm
- dpt
- 前端工具,常用的前端工具有以下這些:
- 注意:
- 前端工具是依賴於後端工具的
- 前端工具是為了自動解決後端工具的依賴關係而存在的
5、rpm包簡介
Redhat和Centos中二進位制包的副檔名為.rpm,這是由紅帽公司最先發布的一種用來打包軟體的檔案格式,我們叫做rpm包;RPM軟體包管理器就是管理rpm包。
5.1 rpm包命名規範
包名具體格式說明:
bash(軟體名稱):軟體名為bash
4(主版本號):重大改進
2(次版本號):某個子功能發生重大變化
46(修正號):修正了部分bug,調整了一點功能
28.el7(釋出版本號):用於標識rpm包本身的發行號,還包含適應的作業系統
x86_64(硬體平臺):表示包的適用的硬體平臺
- 常見的硬體平臺:
- x86:i386,i486,i586,i686
- x86_64:x64,x86_64,amd64
- 跟硬體平臺無關:noarch
從軟體包的名稱可以知道包與包之間的關係;例如:
- 主包:bind-9.7.1-1.el5.i586.rpm
- 子包:bind-libs-9.7.1-1.el5.i586.rpm
- 子包:bind-utils-9.7.1-1.el5.i586.rpm
6、軟體包的獲取途徑
6.1 系統發行版本的光碟
linux的ISO映象檔案自帶了非常多的RPM安裝包,且這些軟體版本是最適合當前linux系統的。
ISO映象檔案自帶的RPM安裝包的存放目錄為:BaseOS和Appstream 。
使用ISO映象檔案自帶的RPM安裝包前必須先掛載ISO映象,掛載方法如下:
//進行光碟機掛載
[root@zsl~]#mount /dev/cdrom /mnt/
//驗證掛載
[root@zsl ~]#ls /mnt/
6.2 開源映象站
開源映象站上會存放RPM安裝包;例如:
- http://mirrors.163.com
- http://mirrors.sohu.com
- https://mirrors.tuna.tsinghua.edu.cn
- http://mirrors.aliyun.com
6.3 第三方組織
Fedora-EPEL的方式
Fedora-EPEL這種方式同樣使用開源映象站,只不過Fedora-EPEL是一個rpm包,安裝之後會自動配置網路源,使本地作業系統直接連線到開源映象站獲取軟體包。
Fedora-EPEL方式rpm包的名稱為:epel-release
搜尋引擎
有一些搜尋引擎直接提供rpm包搜尋功能;例如:
7、rpm包管理
7.1 什麼是rpm及其作用
rpm是Redhat Package Manager的簡稱,用於管理軟體包。
rpm有一個強大的資料庫/var/lib/rpm。
rpm的管理工作包括軟體的安裝、解除安裝、升級、查詢、校驗、重建資料庫、驗證軟體包來源合法性等等。
7.2 RPM包安裝
// 語法: rpm -ivh /PATH/TO/PACKAGE_FILE ...
// 常用選項:
-i: 安裝
-v: 顯示詳細資訊
-h: 顯示安裝進度條
--nodeps: 忽略依賴關係
--force: 強行安裝,可以實現重灌或降級
--test: 測試安裝,但不真正執行安裝過程
--replacepkgs: 重新安裝,替換原有安裝
--oldpackage: 降級
--nodigest: 不檢查包的完整性
--nosignature: 不檢查包的來源合法性
--noscripts:不執行rpm包自帶的四類指令碼;
--nopre:不執行rpm包自帶的preinstall指令碼;
--nopost:不執行rpm包自帶的postinstall指令碼;
--nopreun:不執行rpm包自帶的preuninstall指令碼;
--nopostun:不執行rpm包自帶的postuninstall指令碼;
preinstall:安裝過程開始之前執行的指令碼,標記為%pre;--nopre
postinstall:安裝過程完成之後執行的指令碼,標記為%post;--nopost
preuninstall:解除安裝過程真正開始執行之前執行的指令碼,標記為%preun;--nopreun
postuninstall:解除安裝過程完成之後執行的指令碼,標記為%postun;--nopostun
//安裝軟體包, 指定軟體包絕對路徑
[root@zsl ~]# rpm -ivh /mnt/AppStream/Packages/wget-1.19.5-10.el8.x86_64.rpm
//在軟體包所在目錄下可以不指定絕對路徑
[root@zsl ~]# cd /mnt/AppStream/Packages/
[root@zsl Packages]# rpm -ivh zsh-html-5.5.1-6.el8_1.2.noarch.rpm
//測試一個軟體包是否能在該系統上安裝
[root@zsl ~]# rpm -ivh --test /mnt/AppStream/Packages/wget-1.19.5-10.el8.x86_64.rpm
Verifying... ################################# [100%]
Preparing... ################################# [100%]
//如果軟體包已經安裝, 強制再次安裝
[root@zsl ~]# rpm -ivh --force /mnt/BaseOS/Packages/tree-1.7.0-15.el8.x86_64.rpm
//安裝httpd服務需要依賴其他元件, 使用--nodeps可忽略依賴強制安裝
[root@zsl ~]# rpm -ivh --nodeps /mnt/AppStream/Packages/httpd-2.4.37-30.module_el8.3.0+462+ba287492.0.1.x86_64.rpm
7.3 RPM包查詢
rpm -q PACKAGE_NAME //查詢指定的已安裝的軟體包
rpm -qa //查詢已經安裝的所有包
rpm -qi PACKAGE_NAME //查詢已安裝的包的說明資訊
rpm -ql PACKAGE_NAME //查詢指定軟體包安裝後生成的檔案列表
rpm -qc PACKAGE_NAME //查詢指定已安裝的包的配置檔案
rpm -qd PACKAGE_NAME //查詢指定已安裝的包的幫助檔案
rpm -qf /path/to/somefile //查詢指定的檔案是由哪個rpm包安裝生成的
rpm -q --scripts PACKAGE_NAME //查詢指定已安裝的包所包含的指令碼檔案
rpm -q --changelog PACKAGE_NAME //查詢指定已安裝的包的製作日誌
rpm -qR PACKAGE_NAME //查詢已安裝的軟體包所依賴的CAPABILITY(能力),也就是安裝的最低依賴要求
如:rpm -qR vsftpd(檔案傳輸服務)
rpm -q --whatprovides CAPABILITY //查詢已存在的CAPABILITY(能力)由哪個包所提供
rpm -q --provides PACKAGE_NAME //查詢已安裝的軟體包所提供的CAPABILITY(能力)
rpm -q --whatrequires CAPABILITY //查詢已存在的CAPABILITY(能力)被哪個包所依賴
rpm -q --requires CAPABILITY //查詢已存在的CAPABILITY(能力)所依賴的能力
rpm -qpi /PATH/TO/PACKAGE_FILE //查詢指定未安裝包的說明資訊
rpm -qpl /PATH/TO/PACKAGE_FILE //查詢未安裝的軟體包會產生哪些檔案
//查詢tree這個rpm包是否安裝
[root@zsl ~]# rpm -q tree
tree-1.7.0-15.el8.x86_64
//模糊查詢系統已安裝的rpm包
[root@zsl ~]# rpm -qa | grep tree
tree-1.7.0-15.el8.x86_64
//查詢已安裝的tree軟體包的相關資訊
[root@zsl ~]# rpm -qi tree
//查詢已安裝的rpm包生成的檔案
[root@zsl ~]# rpm -ql tree
/usr/bin/tree
/usr/lib/.build-id
/usr/lib/.build-id/d8
/usr/lib/.build-id/d8/6d516d7cb07fb9334cb268af808119e33a5ac5
/usr/share/doc/tree
/usr/share/doc/tree/LICENSE
/usr/share/doc/tree/README
/usr/share/man/man1/tree.1.gz
//查詢已安裝的rpm包生成的配置檔案
[root@zsl ~]# rpm -qc tree
//查詢配置檔案或命令來自於哪個rpm包
[root@zsl ~]#rpm -qf /etc/vsftpd/vsftpd.conf
//查詢未安裝的軟體包會產生哪些檔案
[root@zsl ~]# rpm -qpl /mnt/AppStream/Packages/httpd-tools-2.4.37-30.module_el8.3.0+462+ba287492.0.1.x86_64.rpm
//查詢未安裝的軟體包的說明資訊
[root@zsl ~]# rpm -qpi /mnt/AppStream/Packages/httpd-tools-2.4.37-30.module_el8.3.0+462+ba287492.0.1.x86_64.rpm
7.4 RPM包升級
rpm -Uvh /PATH/TO/NEW_PACKAGE_FILE //如果裝有老版本的,則升級;否則,則安裝
rpm -Fvh /PATH/TO/NEW_PACKAGE_FILE //如果裝有老版本的,則升級;否則,退出
--oldpackage:降級,強制執行;和-ivh或者-Uvh一起使用。
//升級wget軟體包
[root@zsl ~]# rpm -ivh --nodeps wget-1.14-18.el7_6.1.x86_64.rpm
warning: wget-1.14-18.el7_6.1.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Verifying... ################################# [100%]
Preparing... ################################# [100%]
Updating / installing...
1:wget-1.14-18.el7_6.1 ################################# [100%]
[root@zsl ~]# rpm -qa | grep wget
wget-1.14-18.el7_6.1.x86_64
[root@zsl ~]# rpm -Uvh /mnt/AppStream/Packages/wget-1.19.5-10.el8.x86_64.rpm
Verifying... ################################# [100%]
Preparing... ################################# [100%]
Updating / installing...
1:wget-1.19.5-10.el8 ################################# [ 50%]
Cleaning up / removing...
2:wget-1.14-18.el7_6.1 ################################# [100%]
[root@zsl ~]# rpm -qa | grep wget
wget-1.19.5-10.el8.x86_64
升級注意事項
- 不要對核心做升級操作
- Linux支援多核心版本並存,因此,可直接安裝新版本核心
- 如果原程式包的配置檔案安裝後被修改,升級時,新版本提供同一個配置檔案但不會直接覆蓋老版本的配置檔案,而把新版本的檔案重新命名(FILENAME.rpmnew)後保留
7.5 RPM包解除安裝
//語法:rpm -e PACKAGE_NAME
//先查詢, 然後解除安裝
[root@zsl ~]# rpm -qa |grep tree
tree-1.7.0-15.el8.x86_64
[root@zsl ~]# rpm -e tree
7.6 RPM包校驗
//校驗已經安裝的軟體包的檔案是否被修改
// 如果執行以下命令無內容輸出說明安裝的軟體包的檔案未被修改過
[root@zsl ~]# rpm -V vsftpd
S.5....T. c /etc/pam.d/vsftpd
.......T. c /etc/vsftpd/ftpusers
S.5....T. c /etc/vsftpd/vsftpd.conf
.M....... /var/ftp/pub
S //檔案的容量大小是否被改變
M //檔案的型別或者檔案的屬性是否被修改
5 //MD5加密的內容已經不同
D //裝置的主/次程式碼已經改變
L //路徑已經被改變
U //檔案的所屬主已被修改
G //檔案的所屬組已被修改
T //檔案的建立時間已被改變
7.7 RPM重建資料庫
//資料庫資訊在/var/lib/rpm目錄
rpm --rebuilddb //重建資料庫,重建Packages資料庫,一定會重建
rpm --initdb //初始化資料庫,重建所有資料庫,沒有才建立,有就不建立
7.8 簽名檢測機制
非對稱加密 //一對金鑰,公鑰和私鑰。公鑰隱含於私鑰中,可以提取出來並公佈出去
/etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release //紅帽官方公鑰存放位置
rpm -K PACKAGE_FILE //檢查指定rpm包合法性,出現OK字樣表示包沒問題
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release //匯入金鑰檔案