目錄:
- 軟件運行環(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
- dpkg包管理器:Debian,文件格式
源代碼包命令格式:
name-VERSION.tar.gz|bz2|xzrpm包命名格式:
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/catldconfig 加載庫文件
/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)系
- 功能說明
- 包安裝后生成的各文件路徑及校驗碼信息
-
獲取程序包的途徑
- 系統(tǒng)光盤、官方服務(wù)器
國內(nèi)鏡像:
http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com - 相關(guān)官方網(wǎng)站
- 第三方組織:Fedora-EPEL (Extra Packages for Enterprise Linux),注意第三方包要檢查來源合法性、程序包完整性
- 系統(tǒng)光盤、官方服務(wù)器
三、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語言源代碼編譯安裝步驟
-
configure
configure腳本通過參數(shù)選項指定安裝路徑、啟用功能等,以用戶指定、以makefile.in文件為模板并檢查依賴的外部環(huán)境,最終生成Makefile文件 -
make
make命令依據(jù)Makefile文件將源代碼文件轉(zhuǎn)換成為應(yīng)用程序 -
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端口,至此安裝完畢。

