???在YUM沒出來之前,我們對(duì)程序包管理都是使用RPM程序包管理器(RPM家族),但RPM也有一個(gè)很大的詬病,那就是“軟件依賴屬性”問題,我們知道,RPM在打包軟件時(shí),加入了一些信息記錄功能,這些信息包括軟件版本、大小、說明、依賴性等,我們也稱為元數(shù)據(jù),然后在Linux系統(tǒng)上建立一個(gè)數(shù)據(jù)庫存儲(chǔ)這些信息,當(dāng)我們要安裝一個(gè)軟件時(shí),首先會(huì)去數(shù)據(jù)庫中查找是否存在該軟件的相關(guān)信息,如果沒有則無法安裝,這也就是軟件依賴的問題,直到Y(jié)UM出現(xiàn)該問題被很好的解決。
YUM原理:
yum屬于C/S架構(gòu),它分為yum客戶端及yum服務(wù)端,yum服務(wù)端主要存儲(chǔ)的是rpm包及元數(shù)據(jù)(包名、
大小、依賴關(guān)系、軟件制作者等),通常我們也會(huì)把這些元數(shù)據(jù)稱為清單列表,yum服務(wù)器是對(duì)外共享的,
當(dāng)我們要下載某個(gè)程序包時(shí),yum客戶端對(duì)yum服務(wù)器發(fā)送一個(gè)指令(例如:yum isntall httpd),
yum服務(wù)器接收到該指定首先會(huì)在元數(shù)據(jù)中查找該程序包名即依賴的包是否存在,然后將查找出來的
元數(shù)據(jù)(mata_data)發(fā)送給yum客戶端(存儲(chǔ)在yum_cache緩存中),然后yum客戶端再向yum服務(wù)端
發(fā)送一個(gè)指定告知要下載的包并下載,最后整個(gè)安裝的就此結(jié)束,如圖:

10.png
配置yum倉庫:
在上面提到過在使用yum安裝程序包的時(shí)候,客戶端發(fā)送指令給yum服務(wù)器,那服務(wù)端不能莫名其妙
的就能接收指令啊,是不是需要客戶端指定一個(gè)yum服務(wù)器的路徑,對(duì)的,就是這樣,我們?cè)谑褂?yum的時(shí)候需要配置yum倉庫,里面涉及到一些相關(guān)的屬性配置,主要的兩個(gè)配置文件`/etc/yum.conf
(為所有倉庫提供的公共配置)`、`/etc/yum.repos.d/*.repo(為倉庫的指向提供配置)`,相
的屬性配置釋義可以通過man yum.conf配置文件進(jìn)行了解。
yum.conf相關(guān)參數(shù)詳解:
| cachedir | yum緩存及db文件目錄 |
|---|---|
| keepcache | 在yum安裝完整后是否要保留頭文件和yum包的緩存,不是“1”就是“0”,默認(rèn)為1,保留文件 |
| logfile | yum日志存放路徑 |
| debuglevel | 調(diào)試級(jí)別(0-10),默認(rèn)為2 |
| exactarch | 在更新的時(shí)候,是否允許更新不同版本的RPM包,比如是否在i386上更新i686的RPM包 |
| obsoletes | 這是一個(gè)update的參數(shù),具體請(qǐng)參閱yum(8),簡(jiǎn)單的說就是相當(dāng)于upgrade,允許更新陳舊的RPM包 |
| gpgcheck | 是否檢查包的簽名,不是“1”就是“0”,默認(rèn)為0,不檢查 |
| plugins | 是否允許使用插件,默認(rèn)是0不允許,但是我們一般會(huì)用yum-fastestmirror這個(gè)插件 |
| installonly_limit | 允許保留多少個(gè)內(nèi)核包 |
| bugtracker_url | bug跟蹤器,提交給錯(cuò)給給指定路徑y(tǒng)um |
| distroverpkg | 確定發(fā)行版版本的包 |
配置yum倉庫:
配置yum倉庫是以.repo擴(kuò)展名結(jié)尾,放在/etc/yum.repo.d目錄下,例如我自己配置的一個(gè)yum
倉庫(11、12圖),

11.png

12.png
提示:圖12中的“7”、“x86_64可以用$releasever跟$basearch替代,這樣就更具有通用性了”
庫選項(xiàng)(也就是配置自己的庫相關(guān)參數(shù)):
| Example: [repositoryid] | 庫的唯一標(biāo)識(shí),相當(dāng)于身份證,圖12庫標(biāo)識(shí)為“epel” |
|---|---|
| name | 倉庫名稱 |
| baseurl | 指向yum服務(wù)器的地址,這里可以指定多個(gè)地址,格式參考man yum.conf,指向的服務(wù)器可以是http://、ftp://、nfs://、file:// |
| enabled | 不是“1”就是“0”,告訴yum是否啟用該倉庫,默認(rèn)為1啟用 |
| keepcache | 覆蓋[man]中配置keepache |
| gpgcheck | 不是“1”就是“0”,告訴yum是否檢查包的簽名,默認(rèn)為“0” |
| gpgkey | 表示自動(dòng)從指定的路徑導(dǎo)入key,例如:file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6或者在光盤中/media/CentOS_6.10_Final/RPM-GPG-KEY-CentOS-6 |
....
yum用法及示例:
通過man yum獲取幫助
用法:
yum [options] [command] [package ...]
Options:
-y:安裝程序包都自動(dòng)回答yes
-nogpgcheck:禁止檢查包簽名
-q, --quiet:運(yùn)行時(shí)沒有信息,可以跟-y一起使用
--disablerepo=repoidglob:臨時(shí)禁止指定的倉庫,可以使用glob特性
--enablerepo=repoidglob:臨時(shí)啟用指定的倉庫,支持glob特性
--noplugins:禁用所有的插件
command is one of:
install package1 [package2] [...]:安裝程序包,同時(shí)確保所有依賴都滿足,同一標(biāo)準(zhǔn)
reinstall package1 [package2] [...]:重新安裝程序包
update [package1] [package2] [...]:升級(jí)程序包
downgrade package1 [package2] [...]:降級(jí)程序包
check-update:檢查可升級(jí)的程序包
remove | erase package1 [package2] [...]:卸載程序包
yum list [all | glob_exp1] [glob_exp2] [...]:列出所有的程序包,可以根據(jù)glob來查詢
yum list {available | installed | updates} [glob_exp1] [...]:列出available(可用的程序包)、已經(jīng)安裝的程序包installed、可更新的程序包
info [...]:查看程序包的基本信息
provides | whatprovides feature1 [feature2] [...]:查看指定的特性是由哪個(gè)程序包所提供的
clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]:清除緩存
search string1 [string2] [...](以指定的關(guān)鍵字搜索程序包名及summary簡(jiǎn)要信息,例如:yum search "z")
deplist package1 [package2] [...]:查詢程序包所提供的能力
history [info|list|packages-list|packages-info|summary|addon-
info|redo|undo|rollback|new|sync|stats]:查看yum事務(wù)歷史
localinstall rpmfile1 [rpmfile2] [...]:安裝本地程序包
localupdate rpmfile1 [rpmfile2] [...] :升級(jí)本地的程序包
注意:安裝或升級(jí)本地程序包需要先下載最新的程序包到本地上然后操作
示例:
`
yum -y install zsh:安裝zsh程序包,并自動(dòng)回答yes
yum -q -y install zsh:靜默安裝zsh程序包,但不建議,中間出了問題都不知道
yum -y install zsh --disablerepo=base:安裝zsh程序包,但禁止base倉庫(如圖14)
`

4
包組的相關(guān)命令:
groupinstall(安裝包組)
groupinstall group1 [group2] [...](用于在指定類型的組中安裝所有單獨(dú)的包)
grouplist(列出所有包組)
grouplist [hidden] [groupwildcard] [...]
groupremove(是用來刪除一個(gè)組中的所有包)
groupremove group1 [group2] [...]
groupinfo(用于給出組的描述和包列表以及這些包被標(biāo)記為什么類型)
groupinfo group1 [...]
rpm源碼包編譯過程:
編譯源碼的過程通常是:
源代碼 --> 預(yù)處理 --> 編譯--> 匯編--> 鏈接--> 執(zhí)行
源碼編譯三步曲:
1)運(yùn)行configure腳本
2)運(yùn)行make命令(make -j # 增加速度)
3)執(zhí)行make install
①、首先在官網(wǎng)或者其它途徑獲取源代碼,解壓后進(jìn)入文件中
②、執(zhí)行./configure腳本,通過選項(xiàng)傳遞相關(guān)的參數(shù),指定啟用的特性(如安裝路徑),執(zhí)行時(shí)會(huì)參考用戶的指定及Makefile.in生成makefile文件
在執(zhí)行該腳本時(shí),會(huì)檢查外部依賴,也就是說會(huì)需要依賴其它包才能完成該步驟
③、執(zhí)行make指令,該步驟會(huì)根據(jù)makefile文件來判定執(zhí)行預(yù)處理器、編譯器、匯編器等操作
④、執(zhí)行make install安裝程序包
⑤、添加PATH路徑、幫助文檔路徑、頭文件等
./configure腳本中的選項(xiàng):
--help:獲取其支持的選項(xiàng)
選項(xiàng)分類:
安裝路徑設(shè)定:
--prefix=/PATH/TO/SOMEWHERE:指定默認(rèn)安裝位置。
--sysconfigdir=/PATH/TO/SOMEWHERE:配置文件安裝位置
System types:
Optional Features:可選特性
--disable-FEATURE:
--enable-FEATURE[=ARG]
Optional Packages:可選程序包
--with-PACKAGE[=ARG]
--without-PACKAGE
以上為yum基本用法,Thanks