20170802 軟件包管理

目錄

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

一、軟件運行環(huán)境

  • ABI(Application Binary Interface) 導(dǎo)致不同系統(tǒng)的文件不兼容,linux遵循ELF標(biāo)準(zhǔn),Windows遵循PE標(biāo)準(zhǔn)

  • API(Application Programming Interface)是編程使用的統(tǒng)一接口,linux遵循POSIX標(biāo)準(zhǔn)

  • 程序從源代碼轉(zhuǎn)變?yōu)槎M(jìn)制可執(zhí)行文件經(jīng)歷的一般過程:
    程序源代碼--->預(yù)處理--->編譯--->匯編--->鏈接

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

    • 靜態(tài)鏈接 libxxx.a

      • 把程序?qū)?yīng)的依賴庫復(fù)制一份到包
      • 嵌入程序包
      • 升級難,需重新編譯
      • 占用較多空間,遷移容易
    • 動態(tài)鏈接 libxxx.so

      • 只把依賴加做一個動態(tài)鏈接
      • 連接指向
      • 占用較少空間,升級方便
  • 系統(tǒng)開發(fā)語言:C,C++
    應(yīng)用開發(fā)語言:Java,Python,Go

二、包管理器

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

  • 二進(jìn)制應(yīng)用程序組成:
    二進(jìn)制文件、庫文件、配置文件、幫助文件

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

    • 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 開發(fā)子包
    • Application-utils-VERSION-ARHC.rpm 工具子包
    • Application-libs-VERSION-ARHC.rpm 庫子包

(二)包依賴

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

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

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

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

(三)rpm包基本知識

  • rpm包文件組成:

    • rpm包內(nèi)的應(yīng)用程序
    • rpm包元數(shù)據(jù):名稱、版本、依賴性、描述等
    • 安裝、卸載時運行的腳本
  • 數(shù)據(jù)庫/var/lib/rpm包含:

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

三、rpm 包管理器

(一)rpm 包安裝

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

  • 選項:

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

(二)rpm 包升級

  • 語法:
rpm {-U|--upgrade} [install-options] PACKAGE_FILE...
rpm {-F|--freshen} [install-options] PACKAGE_FILE...
//U和F的區(qū)別:當(dāng)存在舊程序,都執(zhí)行升級;當(dāng)不存在舊程序,U選項執(zhí)行安裝,F(xiàn)選項跳過
  • 選項
--oldpackage        //降級
--force             //強(qiáng)制安裝
  • 注意:
    1、內(nèi)核可以多版本并存,故不推薦對內(nèi)核進(jìn)行升級操作,直接安裝新版本即可
    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文件的詳細(xì)信息

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


(四)rpm 包刪除

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

  • 選項:

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

(五)rpm 包校驗

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

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

  • 選項:

// select-options
select-options 選項同rpm查詢中的相應(yīng)選項

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

  • 加密方式:

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

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

  • 查看當(dāng)前導(dǎo)入的公鑰:rpm -qa "gpg-pubkey*"

  • 實驗:校驗vim-common包,有報警提示,導(dǎo)入公鑰后再次校驗成功進(jìn)行

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

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

  • yum設(shè)計為C/S架構(gòu),服務(wù)器端儲存包文件和包文件的元數(shù)據(jù)信息,客戶端執(zhí)行rpm包管理操作時通過緩存包文件元數(shù)據(jù)信息解決包依賴性問題,并進(jìn)行相關(guān)操作

  • 服務(wù)器通信協(xié)議:http://,https://,ftp://,file://

(一)yum客戶端配置

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

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

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

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

yum-config-manager --enable repo_name      //啟用倉庫
yum-config-manager --disable repo_name     //禁用倉庫
  • 實驗:建立一個阿里云的yum配置文件,文件名aliyun.repo,倉庫ID命名為aliyun,檢查簽名
    實現(xiàn):建立配置文件/etc/yum.repos.d/aliyun.repo,文件內(nèi)容如下:
[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      //列出所有啟用的倉庫列表,默認(rèn)
yum repolist disabled     //列出所有未啟用的倉庫列表

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

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


最右側(cè)一列可以看到,前三個包以@開頭表明已安裝,anaconda表明為安裝系統(tǒng)時安裝,之后的包未有安裝,安裝包倉庫為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]...

  • 查看程序包詳細(xì)信息 yum info package1

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

  • 清除本地緩存 yum clean all

  • 構(gòu)建本地緩存 yum makecache

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

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

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

1.查看screen包的詳細(xì)信息

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條歷史的詳細(xì)信息,發(fā)現(xiàn)是安裝telnet

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

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

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

五、編譯安裝

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

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

(二)編譯安裝前準(zhǔn)備

  • 源代碼獲取:官方網(wǎng)站、代碼托管網(wǎng)站

  • 配置開發(fā)工具和開發(fā)環(huán)境
    開發(fā)工具:make, gcc等
    開發(fā)環(huán)境:開發(fā)庫,頭文件等

  • 實現(xiàn):安裝開發(fā)組件包組
    yum groupinstall "Development tools"

(三)編譯安裝過程

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

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

1.系統(tǒng)默認(rèn)安裝了“apache 2.4”的舊版本,先卸載舊版本

rpm -qa "httpd*"
yum remove httpd

2.安裝開發(fā)工具包組

yum grouplist
yum groupinstall "Development tools"

3.將源代碼壓縮包解壓縮至目錄/usr/local/src,并且進(jìn)入解壓縮的目錄內(nèi)

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

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

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

5.執(zhí)行configure腳本后往往會報錯,根據(jù)錯誤提示安裝相應(yīng)包,一般為帶devel后綴的開發(fā)包,再執(zhí)行configure腳本。通常執(zhí)行configure腳本時會多次報錯,根據(jù)提示安裝各類開發(fā)包后,最終會成功執(zhí)行。如本實驗一共出現(xiàn)四次錯誤提示,分別為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     //再次執(zhí)行configure腳本

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

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

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

6.最終成功執(zhí)行configure腳本

7.執(zhí)行make命令和make install命令,成功結(jié)果如下

make & make install

8.安裝完成后,進(jìn)行相關(guān)配置,將二進(jìn)制目錄添加到PATH變量中

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

9.導(dǎo)入幫助手冊,在/etc/man_db.conf文件,添加新行MANDATORY_MANPATH /app/httpd24/man,并更新mandb數(shù)據(jù)庫

vim /etc/man_db.conf
mandb

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容