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