軟件包管理(rpm)

1、軟件包基礎(chǔ):
2、rpm包管理:
3、移動(dòng)lib64庫(kù)文件修復(fù)過(guò)程:
4、卸載內(nèi)核修復(fù)過(guò)程

1、軟件包基礎(chǔ)

軟件運(yùn)行與編譯:
ABI:應(yīng)用程序二進(jìn)制接口
API:應(yīng)用程序編程接口
靜態(tài)、動(dòng)態(tài)鏈接

二進(jìn)制應(yīng)用程序的組成部分:

二進(jìn)制文件、庫(kù)文件、配置文件、幫助文件

二進(jìn)制文件


ls二進(jìn)制文件,依賴(lài)于庫(kù)文件,查看ls二進(jìn)制文件which ls--,file /bin/ls

庫(kù)文件


lib64庫(kù)文件

配置文件
有些服務(wù)、軟件較大,復(fù)雜的程序需要通過(guò)配置文件來(lái)執(zhí)行實(shí)現(xiàn)特性、通過(guò)修改配置文件修改來(lái)影響程序的運(yùn)行。(/etc/...)

幫助文件
……

包命名;

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

包名稱(chēng)、版本號(hào)、編譯者后加注、cpu架構(gòu)

包分類(lèi)和拆包
Application-VERSION-ARCH.rpm: 主包
Application-devel-VERSION-ARCH.rpm 開(kāi)發(fā)子包(開(kāi)發(fā)類(lèi)放置devel)
Application-utils-VERSION-ARHC.rpm 其它子包(應(yīng)用相關(guān)放置utils)
Application-libs-VERSION-ARHC.rpm 其它(與庫(kù)相關(guān)放置libs)
包之間:可存在依賴(lài)關(guān)系,甚至循環(huán)關(guān)系

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

rpm.安裝包依賴(lài)性。

查看二進(jìn)制程序所依賴(lài)的庫(kù)文件
ldd /path/to/binar_FILE

查看ls所依賴(lài)的庫(kù)文件ldd命令

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

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

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

使用前端工具:yum,dnf
獲取程序包的途徑:
1、系統(tǒng)發(fā)行版的光盤(pán)或官方的服務(wù)器:
Centos鏡像:
https://www.centos.org/download/
http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com
2、項(xiàng)目官方站點(diǎn)

官方站點(diǎn)
?
md5 效驗(yàn)

md5 效驗(yàn),輸入命令。

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

2、rpm包管理

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

卸載時(shí)只需寫(xiě)包名

[install-options]
--test:測(cè)試安裝,但不真正執(zhí)行安裝,即dry run模式、模擬安裝
--nodeps:忽落依賴(lài)關(guān)系(安裝時(shí),后續(xù)依賴(lài)的包安裝、否則無(wú)法運(yùn)行)A依賴(lài)于B 安裝順序,先安裝B后安裝A。卸載時(shí),先卸載A,后卸載B。
--replacepkgs | replacefiles 替換、覆蓋安裝
--oldpackage :降級(jí)

降級(jí)使用,內(nèi)核并存

cat /boot/grup/grup.conf 執(zhí)行命令,可以查看當(dāng)前Linux運(yùn)行那個(gè)內(nèi)核;

查看運(yùn)行內(nèi)核
刪除內(nèi)核

刪除以后查看當(dāng)前運(yùn)行內(nèi)核是還是還是刪除的在運(yùn)行,內(nèi)和放在內(nèi)存和磁盤(pán)兩個(gè)地方,刪除的是磁盤(pán)里的。內(nèi)核還在內(nèi)存中,才重啟后才會(huì)消失。(uname -r)

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

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

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

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

包查詢

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

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

不是每一個(gè)文件都來(lái)自安裝包。

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

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

指定的能力所依賴(lài)的包、包具有的能力、指定的包所依賴(lài)的能力
bash所依賴(lài)的庫(kù)

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

rpm2copi命令預(yù)覽、解包、解壓縮進(jìn)行安裝、需注意文件元數(shù)據(jù)(權(quán)限之類(lèi))

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

bash包更新歷史查詢

沒(méi)有安裝tree包,但可以查詢tree安裝列表,

兩種查看tree安裝包列表

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

查詢文件列表信息

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

查詢包相關(guān)的腳本

-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][——測(cè)試]package_name . .

包效驗(yàn)(查看屬性變化)
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 |——驗(yàn)證}[選項(xiàng)][verify-options]
年代文件大小不同
M模式不同(包括權(quán)限和文件類(lèi)型)
5摘要(前MD5和)不同
D設(shè)備/小數(shù)字不匹配
L指向(2)路徑不匹配
U用戶擁有不同
G組所有權(quán)不同
T mTime不同
P能力不同

定期查看指定文件變化

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

安裝軟件包效驗(yàn)

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

缺少檢查工具,md5 not ok
導(dǎo)入密鑰,檢測(cè),md5 ok

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

查詢蜜鑰、卸載
光盤(pán)與磁盤(pán)的蜜鑰位置
消除報(bào)警,導(dǎo)入蜜鑰
rpm數(shù)據(jù)庫(kù)

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

3、庫(kù)文件移動(dòng)后的修復(fù)過(guò)程

lib64,如ls、cat、bc、cp……通用lib64庫(kù),節(jié)約空間。不能隨意移動(dòng)庫(kù)文件否則將無(wú)法運(yùn)用外部命令
用mv命令移動(dòng)庫(kù)文件后,無(wú)法重新啟動(dòng)系統(tǒng)。centos6無(wú)法運(yùn)用圖形界面

不使用快照的情況下,修復(fù)移除lib64庫(kù)文件導(dǎo)致系統(tǒng)無(wú)法啟動(dòng)故障,在VMware下的修復(fù)方法。

重新啟動(dòng)客戶機(jī),用光盤(pán)進(jìn)救援模式

客戶機(jī)重新啟動(dòng)后,運(yùn)行光盤(pán),當(dāng)進(jìn)度條走動(dòng)的瞬間按一次Esc鍵,進(jìn)入選項(xiàng)界面。(只能按一次,不能重復(fù))

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

1、重新啟動(dòng)客戶機(jī)
2、光盤(pán)引導(dǎo)進(jìn)入
3、按ESC鍵進(jìn)入
4、選擇第三項(xiàng),檢測(cè)排錯(cuò)
5、選擇第二項(xiàng),進(jìn)入救援模式
6、選擇1回車(chē)
7、c繼續(xù)
8、回車(chē)開(kāi)啟shell
9、不能切根,移動(dòng)回復(fù)lib64庫(kù)文件

4、卸載內(nèi)核后,Linux沒(méi)有啟動(dòng)菜單項(xiàng),系統(tǒng)無(wú)法啟動(dòng)。修復(fù)過(guò)程;

沒(méi)有Linux啟動(dòng)項(xiàng)

進(jìn)入救援模式

掛在光盤(pán)
安裝內(nèi)核
切換到根
強(qiáng)行安裝內(nèi)核
xx
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容