1. 程式人生 > 其它 >Linux—軟體管理

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安裝包;例如:

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    //匯入金鑰檔案