軟件包管理
ABI:?? 應用程序和操作系統的二進制接口
API:?? 應用程序的開發接口
靜態鏈接和動態鏈接
靜態鏈接:把程序對應的依賴庫復制一份到包;libxxx.a;嵌入程序包;升級難,需重新編譯;占用較多空間,遷移容易
動態鏈接:只把依賴加做一個動態鏈接;libxxx.so;連接指向;占用較少空間,升級方便
ldd? 命令路徑???? //可以查看命令調用了哪些庫文件
包管理器:
二進制應用程序的組成部分:二進制文件、庫文件、配置文件、幫助文件
程序包管理器:
debian:deb文件,dpkg包管理器
redhat:rpm文件,rpm包管理器
包命名:
源代碼:name-VERSION.tar.gz|bz2|xz
VERSION: major.minor.release
rpm包命名方式: name-VERSION-release.arch.rpm
例:bash-4.2.46-19.el7.x86_64.rpm
VERSION: major.minor.release
release:release.OS
常見的arch:
x86: i386, i486, i586, i686
x86_64: x64, x86_64, amd64 powerpc: ppc
跟平臺無關:noarch
包:分類和拆包
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包管理器前端管理工具
庫文件:
查看二進制程序所依賴的庫文件:ldd /PATH/TO/BINARY_FILE
管理及查看本機裝載的庫文件:ldconfig 加載庫文件
/sbin/ldconfig -p: 顯示本機已經緩存的所有可用庫文件名及文件路徑 映射關系
配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
緩存文件:/etc/ld.so.cache
包管理器
程序包管理器:
功能:將編譯好的應用程序的各組成文件打包成一個或幾個程序包文件,從而方便快捷的實現程序包的安裝、卸載、查詢、升級和校驗等管理操作
包文件組成(每個包獨有):
RPM包內的文件
RPM的元數據,如名稱,版本,依賴性,描述等
安裝或卸載時運行的腳本
數據庫(公共):/var/lib/rpm??? (存放現有已安裝的rpm包的信息)
程序包名稱及版本
依賴關系
功能說明
包安裝后生成的各文件路徑及校驗碼信息
管理程序包的方式:
使用包管理器:rpm
使用前端工具:yum, dnf
rpm包管理:
安裝:rpm {-i|–install} [install-options] PACKAGE_FILE…
-v: verbose ??顯示安裝過程
-i????? 實現靜默安裝
-h: 以#顯示程序包管理執行進度
rpm -ivh PACKAGE_FILE
rpm?? -ivh? 軟件包名???? –root =/mnt/sysimage??? //指定根目錄(救援模式下)
[install-options]
–test: 測試安裝,但不真正執行安裝,即dry run模式
–nodeps:忽略依賴關系
–replacepkgs | replacefiles ???覆蓋安裝? |替換文件
–nosignature: 不檢查來源合法性
–nodigest:不檢查包完整性
–noscripts:不執行程序包腳本
%pre: 安裝前腳本; –nopre
%post: 安裝后腳本; –nopost
%preun: 卸載前腳本; –nopreun
%postun: 卸載后腳本; –nopostun
升級:rpm {-U|–upgrade} [install-options] PACKAGE_FILE…
rpm {-F|–freshen} [install-options] PACKAGE_FILE… ????//不建議用來升級內核
upgrade:安裝有舊版程序包,則“升級”
如果不存在舊版程序包,則“安裝”
freshen:安裝有舊版程序包,則“升級”
如果不存在舊版程序包,則不執行升級操作
rpm -Uvh PACKAGE_FILE …
rpm -Fvh PACKAGE_FILE …
–oldpackage:降級
–force: 強制安裝
升級注意事項:
- 不要對內核做升級操作;Linux支持多內核版本并存,因此對直接安裝新版本內核
- 如果源程序包的配置文件安裝后曾被修改,升級時,新版本提供的同一配置文件不會直接覆蓋舊版本的配置文件,而把新版本的文件名重命名(rpmnew)
后保留
包查詢:
rpm {-q|–query} [select-options] [query-options]
[select-options]
–a: 所有包
-f: 查看指定的文件由哪個程序包安裝生成
-p rpmfile:針對尚未安裝的程序包文件做查詢操作??? (后跟的是文件名)
–whatprovides CAPABILITY:查詢指定的CAPABILITY由哪個包所提供
–whatrequires CAPABILITY:查詢指定的CAPABILITY被哪個包所依賴
rpm? -q?? 包名????? 可用來檢測包是否裝好
rpm2cpio 包文件|cpio –itv 預覽包內文件
rpm2cpio 包文件|cpio –id “*.conf” 釋放包內文件
[query-options]
–changelog:查詢rpm包的changelog
-c: 查詢程序的配置文件
-d: 查詢程序的文檔
-i: information
-l: 查看指定的程序包安裝后生成的所有文件
–scripts:程序包自帶的腳本
–provides: 列出指定程序包所提供的CAPABILITY(包提供的能力列表)
-R: 查詢指定的程序包所依賴的CAPABILITY
-f? :查詢文件在由那個包生成
常用查詢用法:
-qi PACKAGE, -qf FILE, -qc PACKAGE, -ql PACKAGE, -qd PACKAGE
-qpi PACKAGE_FILE, -qpl PACKAGE_FILE安裝前查看包中文件, …
-qa
包卸載:
rpm {-e|–erase} [–allmatches] [–nodeps] [–noscripts] [–notriggers] [–test] PACKAGE_NAME …
包校驗:rpm {-V|–verify} [select-options] [verify-options]
包來源合法性驗正及完整性驗正
完整性驗正:SHA256
來源合法性驗正:RSA u
公鑰加密
對稱加密:加密、解密使用同一密鑰
非對稱加密:密鑰是成對兒的
public key: 公鑰,公開所有人
secret key: 私鑰, 不能公開 u
導入所需要公鑰
rpm -K|checksig rpmfile 檢查包的完整性和簽名
rpm –import ?/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7?? 導入鑰匙
CentOS 7發行版光盤提供:RPM-GPG-KEY-CentOS-7
rpm -qa “gpg-pubkey*
rpm 數據庫
數據庫重建:/var/lib/rpm
rpm {–initdb|–rebuilddb}
initdb: 初始化 如果事先不存在數據庫,則新建之 否則,不執行任何操作 rebuilddb:重建已安裝的包頭的數據庫索引目錄
移動lib64/libc.so.6庫文件后的修復方法:
重新啟動, esc鍵,啟用光盤修復,選擇進入救援模式,選擇OK… ,直到進入一個shell在此可以輸入命令,chroot? /mnt/sysimage (實現切換根)? ,再將lib64移動回來
救援模式將/ 掛載到 /mnt/sysimage下(/mnt/sysimage? 相當于/)[centos7可以使用圖形界面恢復]
Centos7中:
重新啟動,進入字符界面,選擇第三項排錯(troubshooting),在選第二項進入救援模式,1(繼續),c(繼續)mv? /mnt/sysimage/root/libc.so.6??? /mnt/sysimage/lib64/???? 或
cd?? /mnt/sysimage/lib64
ln? -s? libc-2.17.so????? libc.so.6
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/96561