軟件包管理(rpm)

1、軟件包基礎:
2、rpm包管理:
3、移動lib64庫文件修復過程:
4、卸載內核修復過程

1、軟件包基礎

軟件運行與編譯:
ABI:應用程序二進制接口
API:應用程序編程接口
靜態、動態鏈接

二進制應用程序的組成部分:

二進制文件、庫文件、配置文件、幫助文件

二進制文件


ls二進制文件,依賴于庫文件,查看ls二進制文件which ls--,file /bin/ls

庫文件


lib64庫文件

配置文件
有些服務、軟件較大,復雜的程序需要通過配置文件來執行實現特性、通過修改配置文件修改來影響程序的運行。(/etc/...)

幫助文件
……

包命名;

源代碼:name-VERSION.tar.gz|bz2|xz
VERSION版本:major、minor、release發行
rmp包命名方式:

包名稱、版本號、編譯者后加注、cpu架構

包分類和拆包
Application-VERSION-ARCH.rpm: 主包
Application-devel-VERSION-ARCH.rpm 開發子包(開發類放置devel)
Application-utils-VERSION-ARHC.rpm 其它子包(應用相關放置utils)
Application-libs-VERSION-ARHC.rpm 其它(與庫相關放置libs)
包之間:可存在依賴關系,甚至循環關系

解決依賴包管理工具:
yum: rpm包管理器的前段工具
apt-get:deb包管理器前端工具
zypper:suse上的rpm前端管理工具
dnf:Fedora 18+ rmp包管理器前端管理工具

rpm.安裝包依賴性。

查看二進制程序所依賴的庫文件
ldd /path/to/binar_FILE

查看ls所依賴的庫文件ldd命令

管理及查看本機裝載的庫文件
ldconfing
/sbin/ldconfig -p:顯示本機已緩存的所有可用庫文件名及文件路徑映射關系
配置路徑:/etc/ld.so.conf,/etc/ld.so.conf.d/.conf
緩存文件:/etc/ld.so.cache
/etc/ld.so.conf.d/
.conf---配置文件,當使用第三方軟件,庫文件加載,指定方在一個目錄里,需要單獨編一個配置文件、將路徑編寫到配置文件。
保存后需執行#ldconfig ,讀取內容后生效。
ldconfig -p 可以查看已經加載到內存的庫文件路徑,庫文件信息。

包管理器
debian;deb文件,dpkg包管理器
redhat;rpm文件,rpm包管理器
redhat Package Manager(rpm)
內核版本一般用偶數版本,奇數版本不穩定測試開發階段。
1、包文件的組成
文件內容(文件列表、路徑,元數據,一些腳本)
RPM包內的文件
RPM的元數據,
安裝或卸載時運行的腳本
2、數據庫(公共):/var/lib/rpm(安裝好的包的信息)
程序包名稱及版本
依賴關系
功能說明
包安裝后生成的文件路徑及效驗碼信息
程序包的來源
管理程序包的方式
使用包管理器:rpm

數據庫--安裝包的信息。不能隨意刪除,刪除將不能管理包。
rpm命令

使用前端工具:yum,dnf
獲取程序包的途徑:
1、系統發行版的光盤或官方的服務器:
Centos鏡像:
https://www.centos.org/download/
http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com
2、項目官方站點

官方站點
md5 效驗

md5 效驗,輸入命令。

3、第三方組織(軟件)
光盤里不帶的軟件放到epel源里(官網),企業版額外的包。
搜索引擎 :專門搜索安裝包;
http://pkgs.org
http://rpmfind.net
http://rpm.pbone.net
https://sourceforge.net/
4、自己制作
rpmbuild、FPM工具自作安裝包。

2、rpm包管理

Centos系統上使用rpm命令管理程序包:
rpm [option..] file
-i --install --- 安裝
-v或vv(更詳細)--- 顯示過程
-h--------------- 進度
-e--------------- 卸載

卸載時只需寫包名

[install-options]
--test:測試安裝,但不真正執行安裝,即dry run模式、模擬安裝
--nodeps:忽落依賴關系(安裝時,后續依賴的包安裝、否則無法運行)A依賴于B 安裝順序,先安裝B后安裝A。卸載時,先卸載A,后卸載B。
--replacepkgs | replacefiles 替換、覆蓋安裝
--oldpackage :降級

降級使用,內核并存

cat /boot/grup/grup.conf 執行命令,可以查看當前Linux運行那個內核;

查看運行內核
刪除內核

刪除以后查看當前運行內核是還是還是刪除的在運行,內和放在內存和磁盤兩個地方,刪除的是磁盤里的。內核還在內存中,才重啟后才會消失。(uname -r)

rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
安裝有舊版程序包,則“升級”
如果不存在舊版程序包,則“安裝”
升級會覆蓋舊內核,生產中最好不使用升級,使用i安裝。
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
安裝有舊版程序包,則“升級”
如果不存在舊版程序包,則不執行升級操作
--force-----強制安裝,只能在安裝升級時候用,卸載時不能使用。
rpm -e kernel --nodeps(不檢查相關性 忽略依賴關系 不檢查依賴性關系)----卸載內核

--nosignature:不檢查來源合法性
--nodigest:不檢查包完整性
-noscriptts:不執行程序腳本
%pre:安裝前腳本-----nopre
%post:安裝后腳本----nopst
%preun:卸載前腳本---nopreun
%postun: 卸載猴腳本---nopostun

(1)不要對內核做升級操作:Linux支持多內核版本并存,因此,可以對其直接安裝新版本內核。

(2)如果源程序包的配置文件安裝后增被修改,升級時,新版本的提供的同一個配置文件并不會直接覆蓋老版本的配置文件,而把新版本的文件重命名(FILENAME.RPMNEW)后保留。

包查詢

rpm{-p| --query}[select-options][query-option]
rpm { - p |——查詢}[選項][查詢選項]
rpm -p 【包名】
[select-options]
-a;所有包 ----加上管道grep可以模糊搜索

-f:查看指定的文件有那個程序包安生成,來自哪個安裝包。
用rm刪除后可以用rpm -pf查詢到文件生成的安裝包
磁盤上是否每一個文件都來自安裝包

不是每一個文件都來自安裝包。

-p rpmfile;針對尚未安裝的程序包文件做查詢操作

有那個包所提供
--whatprovides CAPABILITY;查詢指定的CAPABILITY背那個包所依賴
--provides:列出指定的程序包所提供的CAPABILITY[性能、能力]
-R:查看指定的程序包所依賴的CAPABILITY

指定的能力所依賴的包、包具有的能力、指定的包所依賴的能力
bash所依賴的庫

rmp2cpio(rpm to cpio) 包文件|cpio -itv 預覽包內文件
rpm2cpio (rpm to cpio) 包文件|cpio -id "*.conf" 釋放包內文件

rpm2copi命令預覽、解包、解壓縮進行安裝、需注意文件元數據(權限之類)

【query-options】
--changelog:查尋rpm包的changelog[變更日志,版本歷史]

bash包更新歷史查詢

沒有安裝tree包,但可以查詢tree安裝列表,

兩種查看tree安裝包列表

-c:查詢程序的配置文件
-d:查詢程序的文檔
-i:information

查詢文件列表信息

-l:查詢指定的程序安裝后生成的所有文件
--scripts:程序包自帶的腳本

查詢包相關的腳本

-qi packege, -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 { - e |——消除}[——allmatches][——nodeps][——noscript][——被重置為notrigger][——測試]package_name . .

包效驗(查看屬性變化)
rpm {-V|--verify} [select-options] [verify-options]
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 mTime differs
P capabilities differ
rpm { - v |——驗證}[選項][verify-options]
年代文件大小不同
M模式不同(包括權限和文件類型)
5摘要(前MD5和)不同
D設備/小數字不匹配
L指向(2)路徑不匹配
U用戶擁有不同
G組所有權不同
T mTime不同
P能力不同

定期查看指定文件變化

也可以查看所有文件屬性變化,(-va)命令

安裝軟件包效驗

包來源合法性驗證及完整性驗證
完整性驗證:SHA256
來暈啊合法性驗證:RSA
公鑰加密
對稱加密:加密,解密使用同一個秘鑰
非對稱加密:密鑰是成對兒的
pablic key:公鑰,公開所有人
secret key:私鑰,不能公開
導入所需要公鑰
rpm -k|checksig rpmfile 檢查包的完整性和簽名
rpm--import /etc/pki/rpm-gpg/rpm-gpg-key-Centos-7
Centos7發行版光盤提供:RPM-GPG-KEY-Centos7
rpm -qa "gpg -pubkey*"
查看是否是廠家出廠原安裝包,-K

缺少檢查工具,md5 not ok
導入密鑰,檢測,md5 ok

卸載蜜鑰,查詢裝好的蜜鑰

查詢蜜鑰、卸載
光盤與磁盤的蜜鑰位置
消除報警,導入蜜鑰
rpm數據庫

數據庫重建:
/var/lib/rpm
rpm{--initdb|--rebuilddb}
initdb:初始化
如果事先不存在數據庫,新建之
否則,不執行任何操作
rebuilddb;重建已安裝的包頭的數據庫索引目錄
!數據庫初始化及重建數據都為空,沒有意義。

3、庫文件移動后的修復過程

lib64,如ls、cat、bc、cp……通用lib64庫,節約空間。不能隨意移動庫文件否則將無法運用外部命令
用mv命令移動庫文件后,無法重新啟動系統。centos6無法運用圖形界面

不使用快照的情況下,修復移除lib64庫文件導致系統無法啟動故障,在VMware下的修復方法。

重新啟動客戶機,用光盤進救援模式

客戶機重新啟動后,運行光盤,當進度條走動的瞬間按一次Esc鍵,進入選項界面。(只能按一次,不能重復)

選擇第三項
選擇第三項,救援模式
選擇語言,默認即可
不需要配置網絡,選擇NO
繼續 只讀 忽略 高級
初始安裝系統時掛載點為根、救援模式時掛載點為/mnt/sysimares.
進行下一步,回車得到一個shell,打開字符界面,更改根的位置。當前根位置為/mnt/sysimages,將其改為/,需在字符界面下執行命令 #chroot /mnt/sysmages.
您的系統安裝在/mn/sysimage目錄下
開shell,進入字符界面
輸入#pwd命令顯示當前為“/”,“/”為偽根、真正的根為/mnt/sysimage/。將lib64庫文件移動還原,執行命令#chroot /mnt/sysimages可以切根“/”。
將庫文件還原到lib64下,輸入exit 退出
重啟,復原。
centos7移動lib64庫文件,并進行修復。(類似centos6操作)

1、重新啟動客戶機
2、光盤引導進入
3、按ESC鍵進入
4、選擇第三項,檢測排錯
5、選擇第二項,進入救援模式
6、選擇1回車
7、c繼續
8、回車開啟shell
9、不能切根,移動回復lib64庫文件

4、卸載內核后,Linux沒有啟動菜單項,系統無法啟動。修復過程;

沒有Linux啟動項

進入救援模式

掛在光盤
安裝內核
切換到根
強行安裝內核
xx
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容