Linux的應用程序安裝提供了兩中格式的軟件包:一種是軟件開發者直接提供的源碼包;另一種是發行版廠商提供事先編譯好打包的軟件包;用戶需要根據需要來選擇何種方式安裝軟件,作為系統管理運維人員,要想合理應用,必須熟悉這兩者之間的內在聯系以及各自的特性和差異;
*軟件包管理工具)
— RPM軟件包管理工具
— YUM軟件包前端管理工具
軟件包管理工具:
早先用戶安裝軟件是非常痛苦的,只能編譯安裝,尤其對于一個不是軟件開發人員,不熟悉編譯過程的人,要想編譯安裝軟件幾乎沒有辦法做到,不過后來有大量的發行版廠商,根據他們自己對用戶需求的理解,事先通過軟件包管理器在一個通用平臺上(比較老的硬件平臺架構,因為軟件向下兼容)添加一些特性進行編譯,然后打包成自己特定的軟件包格式,要想靈活應用,必須使用與之對應的軟件包管理工具,每個發行版的廠商都有自己對軟件組織打包的理解方式,雖然廠商之間的管理工具不同,但是要實現的目的和功能基本上都是一致的,這包含他們必須能夠實現軟件包的安裝、升級、卸載、查詢、校驗等功能;目前主流的Linux發行版redhat系使用的是自己rpm工具,debian系使用的是dpt工具,雖然都是軟件包管理工具,但是理解層次深度還是有所差別的,經過多年相互借鑒學習,為了適應管理更加合理,redhat做出了更多調整進去,事實現在的rpm更是Linux系統中軟件包管理模式的一種規范;下面也主要介紹它.
軟件包獲取途徑:
首先要知道軟件包獲取的途徑,跟對一般信息的獲取不同,首先要找信任的官方機構或網站;確保程序包是安全可信任的,沒有內置其他不正當的后門或惡意程序,作為系統運維人員,系統安全必須考慮到位;下面介紹一下比較值得信任的獲取途徑:
(1)系統發行版安裝光盤;
(2)官方鏡像站點;
http://mirrors.aliyum.com
http://mirrors.sohu.com
http://mirrors.163.com
(3)項目官方站點:
apache
(4)第三方組織:
EPEL
(5)搜索站點:
http://rpm.pbone.net
http://pkgs.org
http://rpmfind.net
RPM工具功能詳解:
rpm 工作原理:
rpm工具使用rpm命令對軟件包進行管理,同時在內部維護一個叫PMS(Package Management Systme)軟件包管理系統;rpm工具借助數據庫,對rpm軟件進行管理;主要記錄信息如下:
a:Linux系統安裝了什么軟件包;
b:每個軟件包安裝后生產了什么文件在系統中;
c:每個安裝后的軟件包版本
b:包之間的依賴關系
rpm軟件包格式:
一般rpm分為主包和輔助包;帶devel字符串的開發包、帶utils字符串的工具包等輔助包,通常實現功能較多軟件程序包會有較多的輔助包;
一般程序包名稱格式如下:
軟件名詞-軟件版本發行號-軟件打包發行號-支持的平臺架構-以“.”rpm結尾
這里主要介紹一下架構:
一般分為運行在32位CPU系統上的x86系列,和運行在64位CPU系統上的x64位系列,同時64位的平臺兼容x86,程序有向下兼容的特性, 需要注意:程序中的高級特性依賴較新的硬件,如果運行在較老的硬件平臺架構上,高級功能特性有可能無法實現;noarch字符串表示跟平臺無關,不依賴;
rpm包內文件類型:
rpm的元數據,如名稱,版本,依賴,描述等
rpm程序文件
rpm腳本:一般有如下腳本:
1.preinstall:安裝之前;
2.postinstall:安裝之后;
3.preuinstall:卸載之前;
4.postuninstall:卸載之后
(1)安裝:
語法格式:
rpm -i[option] PACKAGE_FILE
常用選項:
-i:表示install安裝
-v -vv:表示顯示安裝過程,后者顯示更加詳細;
-h:以#號顯示進度條格式;
–nodeps:忽略依賴關系
–force:強制動作,注意安裝成功后可能不能運行;
–test:測試安裝,作為測試檢查
–nosignature:不檢查簽名就是來源合法性;
–nodigest:不檢查包完整性;MD5頭;
注意:根據Linux的哲學之一,每個程序只做好一件事,單一小程序組成完成復雜任務;這樣結果就導致每個程序的要想運行,有較強的依賴性,有時A程序依賴B,B又依賴C,這樣要想安裝A必須先安裝最底層依賴的C,如果強制或忽略依賴關系,將會導致程序無法運行,安裝也沒有意義;
(2)升級:
語法格式:
rpm -U|F[optIon] PACAGE_FILE
常用選項:
-U:表示不管軟件事先是否存在都要升級,存在就升級,不存在就安裝;
-F:表示軟件軟件存在就升級,如何不存在,就放棄升級;
–oldpackage:降級,如果升級之后發現有Bug或者兼容性問題,可以使用此選項回滾到升級前的版本;
–force:強制動作,注意安裝成功后可能不能運行;
–replacepkgs:注意不能替換配置文件;
注意
(1)不要對kernel做升級操作;支持多kernel并存;可以直接安裝;
(2)修改過的配置升級不會覆蓋,升級同新文件,會重命名為file.rpmnew
(3)卸載:
語法格式:
rpm -e[option] PACKAGE-NAME
常用選項:
-vh:顯示過程
–nodeps:忽略依賴
–noscripts:忽略腳本
–allmatches:卸載所有匹配指定名稱的程序包,也就是說卸載軟件名稱中包含此名稱的所有包;
–test:測試檢查卸載,不是真卸載
注意:
卸載會檢查依賴關系,如果卸載的軟件被其他程序依賴,請謹慎卸載,否則導致其依賴程序無法運行;
(4)查詢:
語法格式:
rpm -q[option] [PACKAGE-NAME|PACKAGE_FILE]
常用選項:
-qa:查詢系統所有已安裝的程序包;
-qf /path/to/file:查詢文件是由那個程序包生成;
-ql:查詢程序生成的文件:
-qi:查詢程序屬性信息;
-qc:查詢程序配置文件;
-qd:查詢程序提供的文檔
-q –whatprovides CAPABILITY(功能):查詢這種CAPABILITY由那個程序提供;
-q –whatrequires CAPABILITY:查詢這種CAPABILITY被哪些程序包依賴;
-q –scripts:查詢程序包生成的腳本;
-q –changelog:查詢軟件歷史
查詢未安裝的軟件包信息,需要加-p選項跟上面的選項結合使用,后面的參數必須是PACKAGE_FILE;
列如:
-qpi:查詢指定PACKAGE_FILE的程序屬性信息;
…
(5)校驗:
工作原理:校驗檢查的是軟件包來源的合法性和完整性,要想對它們校驗檢查,必須要有校驗機制,這種機制是根據簽名和加密實現的,通常發行版的光盤中會有一個包含所有軟件特征碼的文件,特征碼是根據軟件包特征提取的,通過單項加密實現的用來校驗軟件包的完整性,如果軟件包在獲取途中被修改,在系統中再次提取軟件包特征碼,跟系統已有的特征碼文件比對,不同則判斷被攥該,修改過的軟件包,根據相同的加密算法提取的特征肯定不同;來源合法性是根據簽名實現的;特征碼文件被稱為公鑰;校驗是由校驗程序完成的,默認rpm命令安裝時會調用;
a.公鑰獲取:
官方網站
系統光盤
系統配置文件中,這是系統在安裝時從安裝光盤復制進去的
系統公鑰位置:/etc/pik/rpm-gpg/RPM-GPG-KEY-CentOS-7
b.導入公鑰:
rpm –import /path/to/pub.key
校驗軟件:
rpm -V PACKAGE-NAME:校驗安裝文件自安裝后是否被修改過,根據PMS記錄信息判斷;
rpm -K PACKAGE_FILE:對指定未安裝的軟件包進行手工校驗;
(6)RPM數據庫維護:
默認數據庫目錄位置:/var/lib/rpm
語法格式:
rpm –initdb :初始化數據庫
rpm –rebuilddb :重新構建
–dbpath=/path/ :指定數據庫創建位置;
2.yum軟件包管理:
前面的rpm安裝和卸載都需要檢查依賴關系,尤其是對依賴關系較多較復雜的軟件進行管理,是很難快速部署管理的;有沒有一種軟件管理工具能自自行解決依賴關系呢?yum就可以自動解決依賴關系,實現快速部署;
Yum(全稱為 Yellow dog Updater, Modified)是一個在Fedora和RedHat以及CentOS中的Shell前端軟件包管理器?;赗PM包管理,能夠從指定的服務器自動下載RPM包并且安裝,可以自動處理依賴性關系,并且一次安裝所有依賴的軟件包;
yum工作原理:yum工作原理遵循C/S架構(客戶端/服務器);在客戶端僅需安裝yum客戶端軟件,并且配置yum配置文件指向的yum服務器端地址,為了故障冗余,可以指向多個yum源;在yum服務器端需要創建yum倉庫,作為放置所有rpm軟件的倉庫,同時創建一個名為repodata數據庫目錄文件,用不同的文件分門別類記錄倉庫內所有軟件包信息,通過網絡服務把資源地址發布出去;當客戶端yum請求軟件包時,同時會先把yum服務器端數據庫記錄文件請求下載到本地,經過校驗信息比對在判斷操作是否可行;yum源數據庫保存在yum客戶端的/var/cache/yum中,每次yum啟動都會通過校驗碼與yum服務器同步更新列表信息。
(1)yum客戶端服務配置:
a.首先檢查yum程序包是否安裝,安裝好yum工具才能使用yum工具;
b.確保rpm程序和rpm的數據庫記錄是完整正常的;yum軟件管理依賴rpm管理工具;
c.yum服務主配置文件配置選項說明:
d.yum服務的主配置文件在系統/etc/yum.conf
[root@xia7 ~]# vim /etc/yum.conf
[main] ###倉庫ID,在系統中必須全局唯一
cachedir=/var/cache/yum/$basearch/$releasever ###(yum緩存目錄,用來緩存請求的yum服務端數據,包括rpm軟件和yum源數據庫文件)
keepcache=0 ###安裝完成后是否清空yum緩存,0表示不保留,1表示清空
debuglevel=2 ###Debug 信息輸出等級,范圍為0-10,缺省為2
logfile=/var/log/yum.log ###yum日志文件位置,根據日志查詢過去的操作
exactarch=1 ### 是否安裝跟根系統架構平臺匹配的軟件,1表示只安裝匹配的,0表示兩者不檢查;
obsoletes=1 ### 是否允許更新老的RPM包,1表示允許,0表示進制更新老的軟件包
gpgcheck=1 ###安裝時驗檢查包的合法性和完整性,1表示開啟,0表示不檢查
plugins=1 ###是否如允許使用插件,1表示允許使用,0表示禁用插件
installonly_limit=5 ###允許保留多少個內核包
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_repor
t_page.php?category=yum
distroverpkg=centos-release
補充選項:
exclude=PACKAGE_NAME ####屏蔽不想更新的軟件包,可以使用通配符,多個軟件包之間用空格分割
enabled=1 ###是否啟用當前的倉庫配置指向;1表示開啟,0表示禁用;
gpgkey=/file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 ###如果啟用了gpg校驗機制,需要指定校驗的文件位置;
baseurl=http://10.1.0.1/cobbler/ks_mirror/7/###yum倉庫的位置可以指定多個,當無法訪問時才選擇下一個;
cost= ###開銷,默認是1000,開銷越大,優先使用級越低。
補充說明:baseurl= 有三種提供倉庫資源獲取方式:
a:http:// #htt服務
b:ftp:// #ftp服務
c:file:/// 本地yum源倉庫,或者是安裝光盤,注意事先需要掛載光盤;
yum配置文件中的路徑變量意義:
$releasever:當前系統的發行版本的主版本號;
$arch:平臺
$basearch:基礎平臺;
YUM-$YUM9
d.自定義配置yum配置文件:在/etc/yum.repos.d/YUM-NAMA.repo 注意必須是以“.repo”結尾的文件;
[root@xia7 ~]# vim /etc/yum.repos.d/local.repo
[base]
name=centos 7
baseurl=http://10.1.0.1/cobbler/ks_mirror/7/ ###配置http服務提供的yum源倉庫
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
[local]
name=local centos 7
baseurl=file:///media/cdrom ####配置本地光盤作為yum源倉庫
enabled=1
gpgcheck=0
(2)yum服務端倉庫創建:
a:首先檢查createrepo創建yum倉庫程序是否安裝;
b:創建倉庫目錄,并且放置rpm軟件包在此目錄下;
c:使用createrepo命令在倉庫目錄中創建倉庫生成yum數據庫目錄repodb
(3)yum命令工具使用:
語法格式:
yum [option] [PACKAGE-NAME]…
常用選項:
查詢倉庫列表:
repolist [all|deabled|disable]
顯示軟件包:
list [all|glob_expl]
list [available |installed|updates]
安裝程序包
install package1 package2…
升級程序包
update package1 package2…
檢查升級包:
check-update
卸載程序包:
remove package1 package2…
查詢程序包information
info […]
查看指定的某文件是由那個程序所提供;
provides|whatprovides feature1
清理本地緩存
clean package |metadate |all
構建緩存:
makecache
搜索關鍵字名軟件包
search string1 string2…
重新安裝程序包
reinstall package1…
降級程序包:
downgrade package
查看指定包所依賴的capability
deplist package
查詢安裝程序事物歷史;
history info|list |stats
撤銷安裝
history undo
包組管理:
grouplist :查詢包組
groupinstall :安裝包組
groupupdate :升級包組
groupinfo :查詢包組詳細信息
groupremove :刪除包組
其他選項
–nogpgcheck :安裝不檢查包的來源性合法性和完整性;
-y :自動回答交互信息為yes
-q :靜默模式,不輸出打印信息
–disablerepo=repoid :禁用指定的倉庫
–enablerepo=repoid :啟用指定的倉庫
–noplugins:禁用插件;
特別注意提醒:
(1)很多對yum工具理解不是很深的初學者認為,有了yum工具,不必再使用學習RPM工具,這里需要特別注意的,首先yum只是RPM的前端管理工具,底層完全依賴RPM的數據庫,不是很清楚,可以多看幾 遍yum工作原理;
(2)yum軟件管理操作機制對于突發故障解決不是很好,比如說安裝過程中系統宕機,這時根本沒辦法分析破損的依賴關系和從新部署;目前已經有解決工具DNF;在測試系統上使用,成熟后終將替代YUM;
不過企業版目前還是yum工具;
原創文章,作者:xiashixiang,如若轉載,請注明出處:http://www.www58058.com/40840
文章對yum工具的使用進行了詳細的介紹,通讀整篇文章后能學到很多東西,但文章在邏輯表達的組織上顯得略微混亂,如果能再優化下邏輯規劃會更讓人印象深刻