一、什麼是yum
Yum(全稱爲 Yellow dog Updater, Modified)是一個在Fedora和RedHat以及CentOS中的Shell前端軟件包管理器。基於RPM包管理,能夠從指定的服務器自動下載RPM包並且安裝,可以自動處理依賴性關係,並且一次安裝所有依賴的軟件包,無須繁瑣地一次次下載、安裝。
yum工作流程:
要用yum程序來管理程序包,得先需要有一個yum倉庫。yum和yum倉庫之間是通過文件傳輸協議來實現的。yum倉庫的構建是在yum倉庫的某個路徑下放上一堆的rpm包並使用一個倉庫構建程序把這對rpm包的信息抽取出來保存在repodata的目錄下當作這個倉庫元數據保存起來。客戶端每一次使用一個倉庫時,首先會聯繫這個倉庫,獲取這個倉庫的元數據緩存在本地,從而知道這個倉庫上到底有哪些程序包,每一個程序包到底依賴於哪個程序,每一個程序包安裝時生產哪些文件目錄列表等等一些信息。但需要安裝數據包時,在本地通過分析已經安裝的數據包,未安裝的數據包,獲取差異性,把本地沒有的、此時又需要的數據包通過文件傳輸協議,從yum倉庫中下載下來,然後調用rpm程序工具完成安裝
從yum的工作流程可以看出,yum的核心是yum倉庫中的各種程序包及倉庫程序包信息的元數據repodata,使用yum的重點是構建yum倉庫。
yum與rpm的關係:
rpm爲基礎包管理器,可以獨立工作
yum則是rpm的前端工具,是rpm的補充,不能獨立工作。
二、yum的使用
(一)從0開始構建本地的yum倉庫
(1) 在基於發行版安裝樹安裝createrepo程序包
# yum install createrepo
createrepo是構建倉庫時生存repo的命令。
(2) 確定repository輸出方式:
A、本地輸出:提供一個放置rpm包的本地路徑;
B、網絡輸出:提供一個文件服務器,配置好ftp服務或http服務;
a、配置ftp服務:
安裝程序包: # yum install vsftpd
(系統默認的文件存放路徑爲:/var/ftp/pub)
啓動服務:# service vsftpd start
關閉防火牆:# service iptables stop
如此可以在windows瀏覽器裏輸入 ftp://172.16.20.97(換成自己linux的ip地址) 回車,這時會有一個pub目錄,進行下面的(4)的createrepo命令後就會在pub目錄裏有一個repodata了。
這時可以將此時得到的地址,編輯/etc/yum.repos.de/NAME.repo的baseurl了
創建完就可以yum clean all,再 yum makecache,更新repos
工作done!!!
b、http服務:
安裝程序包:# yum install httpd
(系統默認的文件存放路徑:/var/www/html)
啓動服務:# service httpd start
PS:確保防火牆服務關閉;
(3) 在準備好的目錄中放置rpm程序包文件
本地輸出的,就放置在自己準備好的目錄裏;ftp輸出的就放置在/var/ftp/pub裏;http輸出的就放置在/var/www/html裏。
(4) 對此目錄運行createrepo命令
# createrepo /DIR/IN/LOCAL (/DIR/IN/LOCAL爲自己準備好的存儲程序包的目錄)
# createrepo /var/ftp/pub
# createrepo /var/www/html
運行上述命令後,程序會自動在該目錄裏生成一個“repodata”文件目錄,裏面存放了本程序包倉庫的元數據。
(5)修改倉庫配置文件
A. 知識補充:
配置文件:指向倉庫的位置以及相關的各種配置信息;每個yum命令行可以同時指向多個倉庫,倉庫間可以有優先級等相關的配置;
有兩部分組成:
主配置文件:/etc/yum.conf
爲各倉庫指向提供公共配置文件;
各倉庫的配置:/etc/yum.repos.d/*.repo
man yum.conf查看詳細說明
各倉庫配置參數:
a、[repositoryid]
# 對於當前系統的yum來講,此repositoryid用於唯一標識此repository指向,因此,其必須惟一;
b、name=
# 當前倉庫描述信息;
c、baseurl=url://path/to/repository/
url2://path/to/repository/
url3://path/to/repository/
# 指明repository的訪問路徑;通常爲一個文件服務器上輸出的某repository;(和mirrorslist是有排斥性的)
url:
ftp服務
ftp://SERVER/PATH/TO/REPOSITORY
http服務
http://SERVER/PATH/TO/REPOSITORY
本地目錄:
倉庫指向的路徑:repodata目錄所在的父目錄
http://172.16.0.1/cobbler/ks_mirror/CentOS-6.6-x86_64/
d、enabled={1|0}
此倉庫是否可被使用,不指明的話默認是1
e、gpgcheck={1|0}
是否對程序包做校驗,不指明的話默認也爲1
f、gpgkey=url://path/to/keyfile
指明gpgkey文件路徑;當gpgcheck=1時必須指明gpgkey的路徑
g、cost=#
指明當前repository的訪問開銷,默認爲1000;訪問消耗越小的越優先允許其訪問本倉庫
B. 操作:
[root@test ~]# vim /etc/yum.repos.d/test.repo 其中test可以換成自己取的易辨識的文件名
然後安裝上面說明,設置好repo id,name,baseurl,gpgcheck,enabled基本配置即可。
(6)更新repolist
(6.1)清理緩存
clean
[ packages | metadata | expire-cache | rpmdb | plugins | all ]
[程序包|倉庫的元數據|過期的緩存|rpm數據庫|插件|所有緩存]
PS:前面都是清理指定的文件數據,all是清理除目錄的其他所有文件數據
命令格式例子: # yum clean all
(6.2)重新創建緩存
makecache: 緩存創建,自動連接至每一個可用倉庫,下載其元數據,將其創建爲緩存
命令格式:# yum makecache
(6.3)查看所有可用倉庫
repolist: 列出已經配置的所有可用倉庫 (默認是隻列出已經啓用的,即enabled=1的倉庫)
repolist [all|enabled|disabled]
PS:用# yum repolist 命令,系統會自動更新並重建yum 倉庫的緩存
(二)yum倉庫的使用與維護
(1)程序包查看:
(1.1)# yum list [all | glob_exp1] [glob_exp2] [...]
[root@test ~]# yum list bash
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
Installed Packages
bash.x86_64 4.1.2-29.el6 @anaconda-CentOS-201410241409.x86_64/6.6
[root@test ~]#
(1.2)# yum list {available|updates|installed|extras|obsoletes|recent} [glob_exp1] [...]
available: 可安裝而尚未安裝的
updates:可用於升級的包
installed:已安裝過的包
extras:系統已安裝但任何一個yum倉庫都不存在的包
obsoletes:系統已安裝但已被yum倉庫廢棄的包(有更新的包供升級)
recent:最近剛剛加進倉庫的包
(1.3) # yum grouplist [hidden] [groupwildcard] [...] 程序包組的查看
可以用# yum grouplist查看yum分的各個組:
Installed Groups:已安裝的組
Installed Language Groups:已安裝的語言組
Available Groups:可用的組
Available Language Groups:可用的語言組
每個組下面都有列表,可選擇安裝一個組或者多個組。
(2)程序包安裝:
# yum install package1 [package2] [...]
PS: 只需要提供一個或多個包名(如 bash,zsh,xen);
如果某包有在不同倉庫中有多個不同版本,默認會安裝最新版本,因此不需要提供版本號、發行號、適用的平臺等信息;
如果要安裝指定版本:install PACKAGE-VERSION ...
(3)重新安裝(覆蓋安裝)
# yum reinstall package1 [package2] [...]
(4)程序包升級:包名+版本號
# yum update [package1] [package2] [...]
upgrade package1 [package2] [...]這個已經不常用了,紅帽7已經可以用update代替了
(5) 程序包降級:包名+版本號
# yum downgrade package1 [package2] [...]
(6) 檢查有哪些升級可用:
# yum check-update
(7)卸載:
# yum remove | erase package1 [package2] [...]
所有依賴於正卸載的程序包的程序包會被一併卸載
(8)查詢:
(8.1)查詢程序的相關簡要信息:
# yum info PACKAGE ...
(8.2)在包名和sumary信息中搜索指定的關鍵字:
# yum search KEYWORD ...
(8.3)查詢指定文件由哪個程序包安裝生成:
# yum provides|whatprovides /PATH/TO/SOMEFILE
例子:
[root@test ~]# yum provides /bin/echo
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
coreutils-8.4-37.el6.x86_64 : A set of basic GNU tools commonly used in shell scripts
Repo : base-test
Matched from:
Filename : /bin/echo (後面還有多行顯示內容,太長,省略)
(9)安裝或升級本地的程序包文件:
# yum localinstall rpmfile1 [rpmfile2] [...]
用於安裝倉庫中並不存在的程序包文件,這些程序包有可能又依賴於倉庫中的某些程序包;
# yum localupdate rpmfile1 [rpmfile2] [...]
上面安裝和升級裏的rpmfile1和rpmfile2 要指明有效路徑——使用絕對路徑或者切換到程序包所在目錄裏使用命令。
PS:在紅帽7中已經統一到 install和update、remove中了,但仍能用這個命名。
(10)包組管理:
(10.1) 列出所有包組:# yum grouplist
包組一般都多詞,中間有空格,所以一個包組需要用引號引起來。否則會被當作多個包組而報錯。
[root@test ~]# yum groupinfo Compatibility libraries Loaded plugins: fastestmirror, refresh-packagekit, security Setting up Group Process Loading mirror speeds from cached hostfile Warning: Group Compatibility does not exist. Warning: Group libraries does not exist.
(10.2)顯示指定包組詳情:# yum groupinfo group1 [...]
包組的信息只能用groupinfo查看,info報錯
[root@test ~]# yum info "Compatibility libraries" Loaded plugins: fastestmirror, refresh-packagekit, security Loading mirror speeds from cached hostfile Error: No matching Packages to list
(10.3)安裝:# yum groupinstall group1 [group2] [...]
(10.4)卸載:# yum groupremove group1 [group2] [...]
(10.5)升級:# yum groupupdate group1 [group2] [...]
在紅帽7中已經統一到install、remove、update中,組名加雙引號,引號前加@
Note: 可直接用install、remove或update來管理包組:
@GROUP_NAME
例子: # yum install @"Server Platform Development"
三、練習
創建xen4倉庫,分別通過本地及ftp或http服務輸出
練習題解參考見附錄