概述:
本章內容:軟件的運行環境,軟件包基礎,rpm包管理,yum管理,定制yum倉庫,編譯安裝
一、軟件運行環境
1.□API:Application Programming Interface (應用程序開發接口)
POSIX:Portable OS(國際標準)
?程序源代碼–> 預處理–> 編譯–> 匯編–> 鏈接
靜態編譯:
共享編譯:.so
?ABI:Application Binary Interface(應用二進制程序接口)
Windows與Linux不兼容
linux:文件格式:ELF(Executable and Linkable Format)
win:文件格式:exe,msl PE(Portable Executable)
□庫級別的虛擬化:
Linux: WINE(提供模擬windows的庫,運行win環境)
Windows: Cywin(提供linux的運行環境)
2.開發語言
□系統級開發
C/C++(依賴于c庫);
httpd,nginx,vsftpd,go
?應用級開發
java(依賴于jvm虛擬機)
Python(openstack云站),php,perl(依賴于per解釋器),ruby
3.程序格式:
?c/c++
源代碼:文本格式的程序代碼;
編譯開發環境:編譯器,頭文件,開發庫
二進制格式:文本格式的程序代碼–>編譯器–>二進制格式(二進制程序、庫文件、配置文件、幫助文件)
?java/Python
源代碼:編譯能夠在其虛擬機(jvm/pvm)運行的格式;
開發環境:編譯器、開發庫
二進制
?項目構建工具
c/c++:make jave:maven
二、包管理
1.二進制應用程序的組成部分:
二進制文件、庫文件、配置文件、幫助文件
2.程序包管理:
?源代碼–>目標二進制格式(二進制程序、庫文件、配置文件、幫助文件)–>組織成為一個或有限幾個“包文件”(安裝,升級,卸載,查詢,校驗)
?程序包管理器:
deblan: dpt,dpkg 以".deb"后綴
redhat: rpm (redhat package manager) 以 ".rpm"后綴
S.u.S.E:rpm, ".rpm"命令
3.包命令格式
□源代碼:
name-VERSION.tar.gz|bz2|xz
VERSION: major(主版本號).minor(次版本號).release(發行號)
?rpm包命名格式:
name-VERSION-release.arch.rpm
VERSION: major.minor.release(rpm包發行號)
changelog文檔(內容修復改進的相關文檔)
例:bash-4.2.46-19.el7.x86_64.rpm
release:release.OS
常見的arch:
x86: i386, i486, i586, i686
x86_64: x64, x86_64, amd64powerpc: ppc
跟平臺無關:noarch (適用于所有平臺)
4.包:分類和拆包
Application-VERSION-ARCH.rpm: 主包
Application-devel-VERSION-ARCH.rpm 開發子包
Application-utils-VERSION-ARHC.rpm 其它子包
Application-libs-VERSION-ARHC.rpm 其它子包
?包之間:可能存在依賴關系,甚至循環依賴
?自動解決依賴包管理前端工具:
yum:rpm包管理器的前端工具
apt-get:deb包管理器前端工具
zypper: suse上的rpm前端管理工具
dnf: Fedora 18+ rpm包管理器前端管理工具
5.庫文件
□查看二進制程序所依賴的庫文件:
ldd /PATH/TO/BINARY_FILE
?管理及查看本機裝載的庫文件:
ldconfig
/sbin/ldconfig-p: 顯示本機已經緩存的所有可用庫文件名及文件路徑映射關系
配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
緩存文件:/etc/ld.so.cache
6.包管理器
□程序包管理器:
功能:將編譯好的應用程序的各組成文件打包一個或幾個程序包文件,從而方便快捷地實現程序包的安裝、卸載、查詢、升級和校驗等管理操作
?程序包的組成清單(每個程序包單獨實現)
RPM包內的文件清單
RPM的元數據,如名稱,版本,依賴性,描述等
安裝或卸載時運行的腳本
?數據庫(公共) 路徑:/var/lib/rpm
程序包名稱及版本
依賴關系
功能說明
包安裝后生成的各文件路徑及校驗碼信息
7.程序包的來源
□管理程序包的方式:
使用包管理器:rpm
使用前端工具:yum, dnf
?獲取程序包的途徑:
(1) 系統開發版的光盤或官方的服務器(或CentOS鏡像站點)
https://www.centos.org/download/
http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com
(2) 項目官方站點
(3) 第三方組織:
Fedora-EPEL:
Extra Packages for Enterprise Linux
Rpmforge:RHEL推薦,包很全
搜索引擎:
http://pkgs.org
http://rpmfind.net
http://rpm.pbone.net
https://sourceforge.net/
(4) 自己制作
注意:檢查其合法性:來源合法性,程序包的完整性
三、CentOS 系統上rpm命令管理程序包:
1.安裝、升級、卸載、查詢和校驗、數據庫維護 (都是通過rpm命令來實現的)
rpm命令:rpm [OPTIONS] [PACKAGE_FILE]
安裝:-i,–install
升級:-U,–update,-F,–freshen
卸載:-e,–erase
查詢:-q,–query
校驗:-V,–verify
數據庫維護:–builddb,–initdb
2.安裝:
□ rpm {-i|–install} [install-options] PACKAGE_FILE…
-v: verbose 顯示詳細信息
-vv: 更詳細的輸出
rpm -ivh PACKAGE_FILE(真正安裝執行操作使用的命令)
□[install-options]
-h: hash marks 輸出進度條;每個#號表示2%的進度
–test: 測試安裝,檢查并報告依賴關系及沖突關系,但不真正執行安裝;稱為dry run(干跑)模式
–nodeps:忽略依賴關系,不建議;
–replacepkgs:替代原來的包,重新安裝(先把由原來的包刪除再重裝)
–nosignature: 不檢查包簽名信息,不檢查來源合法性
–nodigest:不檢查包完整性
–noscipts:不執行程序包腳本片斷
注意:rpm自帶四類腳本
%pre:安裝前腳本; –nopre
%post:安裝后腳本; –nopost
%preun:卸載前腳本; –nopreun
%postun:卸載后腳本;–nopostun
3.升級
□rpm {-U|–upgrade} [install-options] PACKAGE_FILE…
rpm {-F|–freshen} [install-options] PACKAGE_FILE…
-U(upgrade):安裝有舊版程序包,則“升級”
如果不存在舊版程序包,則“安裝”
-F(freshen):安裝有舊版程序包,則“升級”
如果不存在舊版程序包,則不執行升級操作
□升級命令:
rpm -Uvh PACKAGE_FILE …
rpm -Fvh PACKAGE_FILE …
–oldpackage:降級(回滾操作)
–force: 強行升級
注意:
(1) 不要對內核做升級操作;Linux支持多內核版本并存,因此,可以直接安裝新版本內核;
(2) 如果源程序包的配置文件安裝后曾被修改,升級時,新版本的提供的同一個配置文件并不會直接覆蓋老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留。
4.卸載
移除已安裝的程序包
rmp {-e|–erase}[–allmatches][–nodeps][–test] PACKAGE_NAME
(注意:卸載和查詢是包的名,因為包已經存在了;而安裝和升級,包是不存在的,所以是包的文件路徑)
簡單用法:rpm -e PACKAGE_NAME…
–allmatches:卸載所有匹配名稱的程序包各版本
–nodeps:忽略依賴關系
–test:測試卸載,dry run 模式
5.查詢
□rpm {-q|–query} [select-options] [query-options]
?[select-options]
-q PACKAGE_NAME :查詢某包或某些包是否安裝
-qa: 查詢已安裝的所有包
-qf FILE: 查看指定的文件由哪個程序包安裝生成
-p PACKAGE_FILE:針對尚未安裝的程序包文件做查詢操作;
–whatprovides CAPABILITY(能力):查詢指定的CAPABILITY由哪個包所提供
–whatrequires CAPABILITY:查詢指定的CAPABILITY被哪個包所依賴
?rpm2cpio 包文件|cpio–itv預覽包內文件
?rpm2cpio 包文件|cpio–id “*.conf”釋放包內文件
□[query-options]查詢選項
–changelog:查詢rpm包的changelog(變更記錄)
-c: 查詢指定的程序包的配置文件
-d: 查詢程序包安裝完成后所生成的幫助文檔
-qi,-info: information 程序包相關的信息,版本號,大小,所屬的包組等
-l,–list: 查看指定的程序包安裝后生成的所有文件列表;
–scripts:查看程序包自帶的腳本片斷
-R,–requires: 查詢指定的程序包所依賴的CAPABILITY;
–provides: 列出指定程序包所提供的CAPABILITY
□用法:
-qi PACKAGE; -qf FILE; -qc PACJAGE; -ql PACKAGE; -qd PACKAGE
-qpi PACKAGE_FILE; -qpl PACKAGE_FILE; -qpc PACKAGE_FILE,..
6.校驗:
□rpm {-V|–verify} [select-options] [verify-options]
常見用法:rpm -V PACHAGE_NAME
當沒有輸出結果時表示軟件包完整ok,當有相應的結果輸出表明對應的內容有修改,及具體如下:
S:file Size differs(文件的容量大小是否被改變)
M:Mode differs (includes permissions and file type)文件的類型或屬性是否被改變;
5:digest (formerly MD5 sum) differs 這是一種指紋內容已經不同;
D:Device major/minor number mismatch 裝置的主/次代碼已經改變;
L:readLink(2) path mismatch 路徑已被改變
U: User ownership differs 文件的屬主已被改變
G:Group ownership differs 文件的屬組已被改變
T:mTimediffers 文件的創建時間已被改變
P:capabilities differ
□包來源合法性驗正及完整性驗正:
完整性驗正:SHA256
來源合法性驗正:RSA
?獲取并導入信任的包制作者的秘鑰
對于CentOS發行版來說:rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
?驗證:
(1)安裝此組織簽名的程序時,會自動執行驗證;
(2)手動驗證:rpm -K PACKAGE_FILE
?公鑰加密:
對稱加密:加密、解密使用同一密鑰;
非對稱加密:密鑰是成對兒的
public key: 公鑰,公開所有人
secret key: 私鑰, 不能公開
?導入所需要公鑰:
rpm -K |checksigrpmfile檢查包的完整性和簽名
rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
CentOS 7發行版光盤提供:RPM-GPG-KEY-CentOS-7
rpm -qagpg-pubkey*
7.數據庫重建
rpm數據庫路經:/var/lib/rpm
查詢操作:通過此處得到數據庫進行
?rpm {–initdb|–rebuilddb}
獲取幫助:CentOS6 man rpm
CentOS7 man rpmdb
–initdb: 初始化數據庫。當前無任何數據庫,則新建之;當前有時不執行任何操作。
–rebuilddb:重新構建。無論當前存在與否,都會直接重新創建數據庫。
原創文章,作者:zhumengxiaotao,如若轉載,請注明出處:http://www.www58058.com/37717