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)制文件

庫(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包命名方式:

包分類(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包管理器前端管理工具

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

管理及查看本機(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


使用前端工具: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)




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--------------- 卸載

[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í)

cat /boot/grup/grup.conf 執(zhí)行命令,可以查看當(dāng)前Linux運(yùn)行那個(gè)內(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è)安裝包。


不是每一個(gè)文件都來(lái)自安裝包。
-p rpmfile;針對(duì)尚未安裝的程序包文件做查詢操作
有那個(gè)包所提供
--whatprovides CAPABILITY;查詢指定的CAPABILITY背那個(gè)包所依賴(lài)
--provides:列出指定的程序包所提供的CAPABILITY[性能、能力]
-R:查看指定的程序包所依賴(lài)的CAPABILITY


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

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

沒(méi)有安裝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][——測(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


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



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ò)程


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

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

進(jìn)入救援模式




