linux的程序包管理
? ? ? ? ??? ? ? ? ??API: 兼容,意味開發庫兼容,因此,源代碼可跨平臺
? ? ? ? ??? ? ? ? ??ABI: 兼容,編譯后的程序可以跨平臺;
? ? ? ? ??? ? ? ? ??? ? ? ? ??庫:可執行程序,本身不能作為程序執行入口,但可以被調用編譯好的二進制格式
程序源代碼:預編譯,編譯,匯編,鏈接
? ? ? ? ??靜態.a
? ? ? ? ??動態:.so(shared object)
注意: 1OS平臺:應用程序必須為特定平臺所支持的版本
—————————————————————————————————————————–
軟件包的組成部分
二進制應用程序的組成部分
? ? ? ? ??二進制程序: /bin,/sbin,/usr/bin,/usr/sbin,/usr/local/bin,/usr/local/sbin
? ? ? ? ??庫文件: /lib,/usr/lib,/lib64,/usr/lib64,/usr/local/lib,/usr/local/lib64,
? ? ? ? ??配置文件 /etc
? ? ? ? ??幫助文件 man文件,info文件,README,INSTALL,Changelog
總結
? ? ? ? ??二進制程序:bin,sbin
? ? ? ? ??庫:lib
? ? ? ? ??頭文件:include
? ? ? ? ??幫助文件:man
? ? ? ? ??配置文件:etc/conf
—————————————————————————————————————————–程序包管理器:
? ? ? ? ??debian: deb文件,dpkg包管理器
? ? ? ? ??redhat: rpm文件,rpm包管理器
? ? ? ? ??rpm:Redhat Package Manager
? ? ? ? ??RPM Package Manager
應用程序管理器:
? ? ? ? ??1數據庫
? ? ? ? ??軟件名和版本
? ? ? ? ??安裝生成的各文件路徑及校驗碼
? ? ? ? ??依賴關系
? ? ? ? ??提供功能性說明
? ? ? ? ??2提供程序組成格式
? ? ? ? ??文件清單
? ? ? ? ??安裝卸載時運行的腳本
依賴關系:x –> y
? ? ? ? ??? ? ? ? ??循環依賴
? ? ? ? ??? ? ? ? ??版本依賴
包管理器的基本功能
? ? ? ? ??打包
? ? ? ? ??安裝
? ? ? ? ??查詢
? ? ? ? ??升級
? ? ? ? ??卸載
? ? ? ? ??校驗
? ? ? ? ??數據庫管理
? ? ? ? ??依賴關系 X,Y,M,N,L,I,K
前端管理工具
? ? ? ? ??yum rpm包管理器的前端工具
? ? ? ? ??apt-get deb包管理器的前端工具
? ? ? ? ??zypper suse上的rpm前端管理工具
? ? ? ? ??dnf Fedora 18+ rpm包管理器前端管理工具
總結:應用的安裝方式
? ? ? ? ??使用包管理器:便捷,易用
? ? ? ? ??包管理器的前端工具
? ? ? ? ??源代碼編譯:
? ? ? ? ??簡單打包的二進制格式:
—————————————————————————————————————————–
庫文件
查看二進制程序所依賴的庫文件
? ? ? ? ??idd/PATH/TO/BINARY_FILE
管理及查看本機裝載的庫文件
? ? ? ? ? ?ldconfig 加載庫文件
? ? ? ? ??/sbin/ldconfig -p 顯示本機已經緩存的所有可用庫文件名及文件路徑
映射關系
? ? ? ? ??配置文件 /etc/ld.so.conf /etc/ld/so/conf.d/*.conf
? ? ? ? ??緩存文件 /etc/ld.so.cache
rpm包命名格式:
? ? ? ? ??源程序:name-version.tar.{gz|bz2|xz}
? ? ? ? ??version: major,minor,release
? ? ? ? ??rpm包: name-varsion-release.arch.rpm
? ? ? ? ??release:通常包含rpm的制作發行號,還包含適用的OS
OS平臺
? ? ? ? ??bash-4.3.2-2.e16.x86_64.rpm
? ? ? ? ??e16: redhat enterprise linux 6
? ? ? ? ??e15:CentOS5
? ? ? ? ??CentOS6
? ? ? ? ??suse11
arch:
? ? ? ? ??x86_64
? ? ? ? ??i386,i586,i686
? ? ? ? ??ppc
? ? ? ? ??noarch
比如:一個源碼,有10個功能
大多數用戶只用其6個功能,余下的4個呢
分包:把一個大的程序打包制作成多個包
主包: bash-4.3.2-2.e16.x86_64.rpm
子包 bash-4.3.2-2.e16.x86_64.rpm1
bash-hello-4.3.0-2.e16.x86_64.rpm
DNS: bind,bind-devel,bind-libs,bind-utils
來源合法性驗證:
源程序;通過md5或sha1校驗碼驗證
rpm包,發行商提供的合法性是可信的
驗證包完整性:校驗碼
驗證來源合法:公鑰
注意:
1,發行商,發行光盤中的包,需要升級時,官方釋放出升級包;
—————————————————————————————————————————–
rpm包管理:安裝
語法
#rpm -i /run/media/root/CentOS 7 x86_64
參數
? ? ? ? ??-v:
? ? ? ? ??-vv:
? ? ? ? ??-vvv:
? ? ? ? ??-h:hash 以#的個數顯示安裝進度.一個#表示2%的進度
? ? ? ? ??-test: 僅測試;不真正執行安裝過程
? ? ? ? ??–nodeps 如果存在依賴,解決依賴關系,忽略依賴關系:
? ? ? ? ??–noscripts 不執行程序包腳本
? ? ? ? ??-ivh –replacepkgs 重新安裝:
原來的配置文件不會被覆蓋,新安裝的配置文件將會重命名為以.rpmnew為后綴的文件
rpm包管理:檢查來源合法性和軟件包完整性
? ? ? ? ??包完整性;通過單向加密機制(md5|sha1)
? ? ? ? ??來源合法性:通過公鑰加密機制(RSA)
? ? ? ? ??命令:gpg,pgp
? ? ? ? ??導入制作者的公鑰,ContOS發行版的公鑰在iso文件中
? ? ? ? ??導入命令 rpm –import /path/to/gpg-key-file
? ? ? ? ??檢查 ? ? ? ? ??rpm -K /path/to/package_file
? ? ? ? ?? ? ? ? ??? ? ? ? ???–nosignature:不檢查來源合法性
? ? ? ? ??? ? ? ? ??? ? ? ? ??–nodigest: 不檢查包完整性
查詢包相關的腳本
? ? ? ? ??rpm -q –scripts package_name
腳本有四類:
? ? ? ? ??–nopre %pre(preinstall):安裝前腳t6
? ? ? ? ??–nopost %post(postinstall)安裝后腳本
? ? ? ? ??–nopreun %preun(preuninstall):卸載前腳本
? ? ? ? ??–nopostun %postun(postuninstall):卸載后腳本
rpm包管理:卸載
? ? ? ? ??語法
? ? ? ? ??rpm -e , –erase
? ? ? ? ??rpm -e , package_name
注:如果卸載被其他程序所依賴的包
? ? ? ? ??? ? ? ? ??1把依賴著一同卸載
? ? ? ? ??? ? ? ? ??2忽略依賴關系
? ? ? ? ??? ? ? ? ??–nodeps
? ? ? ? ??? ? ? ? ??3不再卸載
rpm包管理:查詢
? ? ??語法
? ? ? ? ??rpm -q
參數
? ? ? ? ??rpm -q package_name 查詢某單個包是否安裝
? ? ? ? ??rpm -qa 查詢所有已經安裝的包
? ? ? ? ??? ? ? ? ??例如:常用rpm -qa |grep “httpd”
? ? ? ? ??rpm -qi package_name 查詢包的描述信息
? ? ? ? ??rpm -ql package_name 查詢包安裝之后在當前系統生成的文件列表
? ? ? ? ??rpm -qf package_name 查詢某文件是哪個包安裝生成的
? ? ? ? ??rpm -qd package_name 查詢包安裝后生成的幫助文檔
? ? ? ? ??rpm -qc package_name 查詢包安裝后生成的配置文件
? ? ? ? ??rpm -q –whatrequires 查詢由哪個包所提供
? ? ? ? ??rpm -q –whatprovides 查詢由哪個包所依賴
? ? ? ? ??? ? ? ? ??–scripts 程序包自帶的腳本
? ? ? ? ??? ? ? ? ??–provides 列出指定程序包所提供的CAPABILITY
? ? ? ? ??-R 查詢指定的程序包所依賴的CAPABILITY
查詢尚未安裝的rpm包文件的相關信息:
? ? ? ? ??查詢安裝后會生成的文件列表:
? ? ? ? ??rpm -qpl /path/to/package_file
? ? ? ? ??查詢其簡單描述信息
? ? ? ? ??rpm -qpi /path/to/package_file
rpm包之升級:
? ? ? ? ??rpm -U: 安裝有舊版程序包,則升級,如果不存在舊版程序包,則安裝
? ? ? ? ??rpm -F:安裝有舊版程序包,則升級,如果不存在舊版程序包,不執行升級操作
? ? ? ? ??rpm {-Uvh| -Fvh} /path/to/package_file
? ? ? ? ??? ? ? ? ??–oldpackage 降級
? ? ? ? ??? ? ? ? ??–nodeps 忽略依賴關系
? ? ? ? ??? ? ? ? ??–force 強行安裝
①注意:不要對內核執行升級操作
多版本內核可并存,因此,建議執行安裝操作;
②如果原程序包的配置文件安裝后曾被修改,升級時,新版本的提供的同一個配置文件
并不會直接覆蓋老版本的配置文件,而把新版本的文件重命名
(filename.rpmnew)后保留
rpm包管理:校驗
? ? ? ? ??檢查包安裝后生成的文件是否被修改過:
? ? ? ? ??rpm -V package_name
rpm包管理:數據庫重建
? ? ? ? ??數據庫: /var/lib/rpm/
重建:
rpm –initdb:初始化
如果事先不存在一個數據庫,則新建之;
rpm –rebuilddb;重建
直接重建數據庫,會覆蓋原有的庫
常用組合
-ivh,-e.-qi,qf,qp,ql,q –scripts
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/96635