20170802 軟件包管理

目錄

  • 軟件運行環境介紹
  • 包管理器
  • rpm 包管理器的使用
  • yum rpm包管理器前端工具的使用
  • 編譯安裝

一、軟件運行環境

  • ABI(Application Binary Interface) 導致不同系統的文件不兼容,linux遵循ELF標準,Windows遵循PE標準

  • API(Application Programming Interface)是編程使用的統一接口,linux遵循POSIX標準

  • 程序從源代碼轉變為二進制可執行文件經歷的一般過程:
    程序源代碼--->預處理--->編譯--->匯編--->鏈接

  • 鏈接將各個模塊之間相互引用部分處理好,使各個模塊之間能夠正確銜接,分為靜態鏈接動態鏈接

    • 靜態鏈接 libxxx.a

      • 把程序對應的依賴庫復制一份到包
      • 嵌入程序包
      • 升級難,需重新編譯
      • 占用較多空間,遷移容易
    • 動態鏈接 libxxx.so

      • 只把依賴加做一個動態鏈接
      • 連接指向
      • 占用較少空間,升級方便
  • 系統開發語言:C,C++
    應用開發語言:Java,Python,Go

二、包管理器

(一)包的分類、命名、管理

  • 二進制應用程序組成:
    二進制文件、庫文件、配置文件、幫助文件

  • 程序包管理器:將編譯好的應用程序的各組成文件打包一個或幾個程序包文件,從而方便快捷地實現程序包的安裝、卸載、查詢、升級和校驗等管理操作

    • dpkg包管理器:Debian,文件格式.deb
    • rpm包管理器:Redhat,文件格式.rpm
  • 源代碼包命令格式:name-VERSION.tar.gz|bz2|xz

  • rpm包命名格式:name-VERSION-release.arch.rpm

  • 將軟件包拆分成幾個包,便于管理、按需安裝

    • Application-VERSION-ARCH.rpm 主包
    • Application-devel-VERSION-ARCH.rpm 開發子包
    • Application-utils-VERSION-ARHC.rpm 工具子包
    • Application-libs-VERSION-ARHC.rpm 庫子包

(二)包依賴

  • 包之間可能存在依賴關系,解決包依賴的管理工具

    • yum: rpm包管理前端工具
    • apt-get: deb包管理前端工具
  • ldd 查看二進制程序依賴的庫文件,如ldd /bin/cat

  • ldconfig 加載庫文件
    /sbin/ldconfig -p: 顯示本機已經緩存的所有可用庫文件名及文件路徑映射關系

  • 配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
    緩存文件:/etc/ld.so.cache

(三)rpm包基本知識

  • rpm包文件組成:

    • rpm包內的應用程序
    • rpm包元數據:名稱、版本、依賴性、描述等
    • 安裝、卸載時運行的腳本
  • 數據庫/var/lib/rpm包含:

    • 程序包名稱及版本
    • 依賴關系
    • 功能說明
    • 包安裝后生成的各文件路徑及校驗碼信息
  • 獲取程序包的途徑

三、rpm 包管理器

(一)rpm 包安裝

  • 語法:rpm {-i|--install} [install-options] PACKAGE_FILE…

  • 選項:

-i                              //安裝
-v                              //顯示安裝過程
-vv                             //顯示詳細過程
-h                              //以#符號顯示執行進度
--test                          //測試安裝,但不真正執行安裝
--nodeps                        //忽略依賴關系
--replacepkgs| replacefiles     //覆蓋安裝
--nosignature                   //不檢查來源合法性
--nodigest                      //不檢查包完整性
--noscripts                     //不執行程序包腳本
  • 實驗:安裝tree軟件包,顯示安裝過程

(二)rpm 包升級

  • 語法:
rpm {-U|--upgrade} [install-options] PACKAGE_FILE...
rpm {-F|--freshen} [install-options] PACKAGE_FILE...
//U和F的區別:當存在舊程序,都執行升級;當不存在舊程序,U選項執行安裝,F選項跳過
  • 選項
--oldpackage        //降級
--force             //強制安裝
  • 注意:
    1、內核可以多版本并存,故不推薦對內核進行升級操作,直接安裝新版本即可
    2、若原程序的配置文件有修改,升級后將不覆蓋舊配置文件,新配置文件以增加后綴.rpmnew方式存在

  • 實驗:升級tree程序

(三)rpm 包查詢

  • 語法:rpm {-q|--query} [select-options] [query-options]

  • 選項:

// select-options
-a                           //所有包
-f                           //查看指定的文件由哪個程序包安裝生成
-p rpmfile                   //針對尚未安裝的程序包文件做查詢操作
--whatprovides CAPABILITY    //查詢指定的CAPABILITY由哪個包所提供
--whatrequires CAPABILITY    //查詢指定的CAPABILITY被哪個包所依賴

// query-options
--changelog                  //查詢rpm包的changelog
-c                           //查詢程序的配置文件
-d                           //查詢程序的文檔
-i                           //information
-l                           //查看指定的程序包安裝后生成的所有文件
--scripts                    //程序包自帶的腳本
--provides                   //列出指定程序包所提供的CAPABILITY
-R                           //查詢指定的程序包所依賴的CAPABILITY
  • 實驗:
    1.查看/bin/grep文件由哪個包生成
    2.查看光盤下zlib文件的詳細信息

3.查詢grep程序的配置文件、文檔


(四)rpm 包刪除

  • 語法:rpm {-e|--erase} [options] PACKAGE_NAME ...

  • 選項:

--allmatches     //刪除匹配包名的所有版本程序包
--nodeps         //忽略依賴關系
--noscripts      //不執行程序包腳本
--notriggers     //不執行觸發器腳本
--test           //測試刪除,不實際刪除
  • 實驗:卸載tree程序

(五)rpm 包校驗

  • 包校驗:將本地文件信息與rpm數據庫中包文件的元數據相比較

  • 語法:rpm {-V|--verify} [select-options] [verify-options]

  • 選項:

// select-options
select-options 選項同rpm查詢中的相應選項

// verify-options
--nodeps       //不校驗包依賴
--nodigest     //不校驗包完整性
--nofiles      //不校驗包文件屬性
--noscripts    //不執行校驗腳本
--nosignature  //不校驗來源合法性
  • 包完整性驗證加密算法:SHA256;來源合法性驗證:RSA
    驗證包文件完整性和簽名:rpm -K|checksig rpmfile

  • 加密方式:

    • 對稱加密:加密、解密使用同一秘鑰
    • 非對稱加密:秘鑰成對,公鑰對外公開,私鑰不能公開
  • 導入公鑰:rpm --import PathToGPGKeys

  • 光盤根目錄有公鑰:以RPM-GPG-KEY開頭的文件,如CentOS 7光盤根目錄的RPM-GPG-KEY-CentOS-7文件

  • 查看當前導入的公鑰:rpm -qa "gpg-pubkey*"

  • 實驗:校驗vim-common包,有報警提示,導入公鑰后再次校驗成功進行

四、yum rpm 包管理器前端工具

  • yum (yellowdog update modifier)可以解決包之間的依賴性問題,可在多個庫之間定位軟件包

  • yum設計為C/S架構,服務器端儲存包文件和包文件的元數據信息,客戶端執行rpm包管理操作時通過緩存包文件元數據信息解決包依賴性問題,并進行相關操作

  • 服務器通信協議:http://,https://,ftp://,file://

(一)yum客戶端配置

  • 配置文件路徑:
    /etc/yum.conf 所有倉庫的通用配置
    /etc/yum.repos.d/*.repo 倉庫指向配置

  • *.repo倉庫指向配置文件格式

[repositoryID]     //每個倉庫唯一的標識符,一個單詞
name=the description of the repository       //簡要介紹
baseurl=url://the path to the repository     //倉庫內repodata目錄所在的父目錄
enabled={1|0}       //是否使用此倉庫
gpgcheck={1|0}     //是否檢查簽名
gpgkey=url         //公鑰的地址
  • 配置文件可以使用的變量名

    • $releasever: 當前OS的發行版的主版本號
    • $arch: 平臺,i386,i486,i586,x86_64等
    • $basearch:基礎平臺,i386, x86_64
  • yum-config-manager yum配置管理工具

yum-config-manager --enable repo_name      //啟用倉庫
yum-config-manager --disable repo_name     //禁用倉庫
  • 實驗:建立一個阿里云的yum配置文件,文件名aliyun.repo,倉庫ID命名為aliyun,檢查簽名
    實現:建立配置文件/etc/yum.repos.d/aliyun.repo,文件內容如下:
[aliyun]
name=the repository of aliyun
baseurl=https://mirrors.aliyun.com/centos/$releasever/os/x86_64
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/centos/$releasever/os/x86_64/RPM-GPG-KEY-CentOS-7

(二)yum 命令使用

  • 語法: yum [options] [command] [package ...]

  • 顯示yum倉庫列表 yum repolist

yum repolist all          //列出所有倉庫列表
yum repolist enalbed      //列出所有啟用的倉庫列表,默認
yum repolist disabled     //列出所有未啟用的倉庫列表

實驗:列出所有啟用的倉庫

  • 顯示程序包 yum list
yum list all           //列出所有可獲得和已安裝的包
yum list glob_expr     //列出所有符合通配符的包
yum list available     //列出所有可以安裝的包
yum list installed     //列出所有已安裝的包
yum list updates       //列出所有有更新的包
  • 實驗:列出所有以gp開頭的包


最右側一列可以看到,前三個包以@開頭表明已安裝,anaconda表明為安裝系統時安裝,之后的包未有安裝,安裝包倉庫為aliyun。

  • 安裝 yum install
yum install package1 [package2]...       //安裝包
yum reinstall package1 [package2]...     //重新安裝包
  • 升級 yum update [package1]...
yum update             //升級所有已安裝的包
yum update package     //升級package包
  • 檢查可用升級 yum check-update

  • 卸載 yum remove|erase package1 [package2]...

  • 查看程序包詳細信息 yum info package1

  • 查看指定特性由哪個程序包提供 yum provides|whatprovides feature

  • 清除本地緩存 yum clean all

  • 構建本地緩存 yum makecache

  • 以指定字符串搜索程序包和概要描述yum search string

  • 列出package包的依賴和提供這些依賴的程序包,yum deplist package

  • 實驗:yum安裝、卸載、查詢軟件包:

1.查看screen包的詳細信息

2.安裝screen包

3.列出screen包的依賴信息

4.卸載screen

  • 列出yum歷史yum history
yum history info 6    //查看第6條歷史的信息
yum history undo 6    //撤銷第6條歷史的操作
yum history redo 6    //重做第6條歷史的操作
  • 實驗:yum history的使用:

1.查詢yum歷史

2.查詢第6條歷史的詳細信息,發現是安裝telnet

3.撤銷第6條歷史的操作,使用undo命令,結果為卸載Telnet

  • 包組管理
yum groupinstall group1 [group2] [...]    //包組安裝
yum groupupdate group1 [group2] [...]     //包組升級
yum grouplist [groupwildcard] [...]       //按照通配符列出匹配包組
yum groupremove group1 [group2] [...]     //包組卸載
yum groupinfo group1 [...]                //顯示包組信息
  • yum 選項
--nogpgcheck                 //禁止進行gpgcheck
-y                           //自動回答為"yes",適于腳本
-q                           //靜默模式,往往和y選項配合使用
--disablerepo=repoidglob     //臨時禁用此處指定的repo
--enablerepo=repoidglob      //臨時啟用此處指定的repo
--noplugins                  //禁用所有插件
  • 實驗:靜默安裝telnet.x86_64包

注意:-y和-q選項必須分開才能同時發揮作用

五、編譯安裝

(一)C語言源代碼編譯安裝步驟

  1. configure
    configure腳本通過參數選項指定安裝路徑、啟用功能等,以用戶指定、以makefile.in文件為模板并檢查依賴的外部環境,最終生成Makefile文件
  2. make
    make命令依據Makefile文件將源代碼文件轉換成為應用程序
  3. make install
    make install命令將文件復制到指定目錄
  • 注意:安裝前查詢源代碼目錄的README和INSTALL文件

(二)編譯安裝前準備

  • 源代碼獲取:官方網站、代碼托管網站

  • 配置開發工具和開發環境
    開發工具:make, gcc等
    開發環境:開發庫,頭文件等

  • 實現:安裝開發組件包組
    yum groupinstall "Development tools"

(三)編譯安裝過程

第一步,configure腳本選項配置
  • 選項:
--prefix=/PATH             //指定安裝位置,默認為/usr/local
--sysconfdir=/PATH         //指定配置文件安裝位置
--disable-feature          //指定啟用特性
--enable-feature[=arg]     //指定禁用特性
  • 注意:執行configure腳本報錯信息中的程序包依賴問題,往往是缺少該程序的開發組件,程序包名一般格式為name-devel-VERSION
第二步,make命令
第三步,make install命令
  • 可以將第二步和第三步合并,命令為make && make install
第四步,安裝后配置
  • 二進制程序目錄導入環境變量
echo 'export PATH=/path/to/bin:$PATH' > /etc/profile.d/httpd22.sh
//將二進制程序添加到PATH變量頭部
. /etc/profile.d/httpd22.sh
//設置生效
  • 導入幫助手冊
    編輯/etc/man.config(CentOS 6)或者man_db.conf(CentOS 7)配置文件,添加一條MANPATH(CentOS 6)或MANDATORY_MANPATH(CentOS 7)條目指向幫助手冊路徑

(四)實驗:在CentOS 7上源代碼編譯安裝apache 2.4

1.系統默認安裝了“apache 2.4”的舊版本,先卸載舊版本

rpm -qa "httpd*"
yum remove httpd

2.安裝開發工具包組

yum grouplist
yum groupinstall "Development tools"

3.將源代碼壓縮包解壓縮至目錄/usr/local/src,并且進入解壓縮的目錄內

tar xvf httpd-2.4.27.tar.bz2 -C /usr/local/src/
cd /usr/local/src/httpd-2.4.27/

4.解壓縮的源代碼目錄下有README和INSTALL說明文件可在安裝時查詢,此時目錄下尚未存在Makefile文件,運行帶用戶指定參數的configure腳本,會以用戶指定設置以Makefile.in為模板文件生成Makefile,同時檢查用戶環境的依賴問題

ls
./configure --prefix=/app/httpd24 --enable-so --enable-ssl

5.執行configure腳本后往往會報錯,根據錯誤提示安裝相應包,一般為帶devel后綴的開發包,再執行configure腳本。通常執行configure腳本時會多次報錯,根據提示安裝各類開發包后,最終會成功執行。如本實驗一共出現四次錯誤提示,分別為APR not found,APR-util not found,pcre-config for libpcre not found,mod_ssl configure:error,yum分別安裝apr-devel,apr-util-devel,pcre-devel,openssl-devel包。

yum install apr-devel          //報錯APR not found,安裝apr-devel
./configure --prefix=/app/httpd24 --enable-so --enable-ssl     //再次執行configure腳本

yum install apr-util-devel     //報錯APR-util not found,安裝apr-util-devel
./configure --prefix=/app/httpd24 --enable-so --enable-ssll    //再次執行configure腳本

yum install pcre-devel         //報錯pcre-config for libpcre not found,安裝pcre-devel
./configure --prefix=/app/httpd24 --enable-so --enable-ssll    //再次執行configure腳本

yum install openssl-devel      //報錯mod_ssl configure:error,安裝openssl-devel
./configure --prefix=/app/httpd24 --enable-so --enable-ssll    //再次執行configure腳本

6.最終成功執行configure腳本

7.執行make命令和make install命令,成功結果如下

make & make install

8.安裝完成后,進行相關配置,將二進制目錄添加到PATH變量中

echo 'export PATH="/app/httpd24/bin:$PATH"'>/etc/profile.d/httpd24.sh
. /etc/profile.d/httpd24.sh

9.導入幫助手冊,在/etc/man_db.conf文件,添加新行MANDATORY_MANPATH /app/httpd24/man,并更新mandb數據庫

vim /etc/man_db.conf
mandb

10.開啟httpd服務,查看80端口是否已經開啟,如下圖成功開啟80端口,至此安裝完畢。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容