由於 distribution 必須要先釋出軟件,然後將軟件放置於yum 服務器上面,以提供用戶端來要求安裝與升級之用的。 因此我們想要使用 yum 的功能時,必須要先找到適合的 yum server 才行!而每個 yum server 可能都會提供許多不同的軟件功能!
--------------------------------------------------------------------------------
1.1 利用 yum 進行查詢、安裝、升級與移除功能
1.1.1 查詢功能:yum [list|info|search|provides|whatprovides] 參數
如果想要查詢利用 yum 來查詢原版 distribution 所提供的軟件,或已知某軟件的名稱,想知道該軟件的功能, 可以利用 yum 相關的參數爲:
選項與參數:
[option]:主要的選項,包括有:
-y :當 yum 要等待使用者輸入時,這個選項可以自動提供 yes 的迴應;
--installroot=/some/path :將該軟件安裝在 /some/path 而不使用默認路徑
[查詢工作項目] [相關參數]:這方面的參數有:
search :搜尋某個軟件名稱或者是描述 (description) 的重要關鍵字;
list :列出目前 yum 所管理的所有的軟件名稱與版本,有點類似 rpm -qa;
info :同上,不過有點類似 rpm -qai 的運行結果;
provides:從文件去搜尋軟件!類似 rpm -qf 的功能!
範例一:搜尋磁盤陣列 (raid) 相關的軟件有哪些?
[root@instructor ~]# yum search raid
....(前面省略)....
mdadm.i386 : mdadm controls Linux md devices (software RAID arrays)
lvm2.i386 : Userland logical volume management tools
....(後面省略)....
# 在冒號 (:) 左邊的是軟件名稱,右邊的則是在 RPM 內的 name 配置 (軟件名)
# 瞧!上面的結果,這不就是與 RAID 有關的軟件嗎?如果想了解 mdadm 的軟件內容呢?
範例二:找出 mdadm 這個軟件的功能爲何
[root@instructor ~]# yum info mdadm
Installed Packages <==這說明該軟件是已經安裝的了
Name : mdadm <==這個軟件的名稱
Arch : i386 <==這個軟件的編譯架構
Version: 2.6.4 <==此軟件的版本
Release: 1.el5 <==釋出的版本
Size : 1.7 M <==此軟件的文件總容量
Repo : installed <==容器回報說已安裝的
Summary: mdadm controls Linux md devices (software RAID arrays)
Description: <==看到否?這就是 rpm -qi 嘛!
mdadm is used to create, manage, and monitor Linux MD (software RAID)
devices. As such, it provides similar functionality to the raidtools
package. However, mdadm is a single program, and it can perform
almost all functions without a configuration file, though a configuration
file can be used to help with some common tasks.
範例三:列出 yum 服務器上面提供的所有軟件名稱
[root@instructor ~]# yum list
Installed Packages <==已安裝軟件
Deployment_Guide-en-US.noarch 5.2-9.el5.centos installed
Deployment_Guide-zh-CN.noarch 5.2-9.el5.centos installed
Deployment_Guide-zh-TW.noarch 5.2-9.el5.centos installed
....(中間省略)....
Available Packages <==還可以安裝的其他軟件
Cluster_Administration-as-IN.noarch 5.2-1.el5.centos base
Cluster_Administration-bn-IN.noarch 5.2-1.el5.centos base
....(底下省略)....
# 上面提供的意義爲:『 軟件名稱 版本 在那個容器內 』
範例四:列出目前服務器上可供本機進行升級的軟件有哪些?
[root@instructor ~]# yum list updates <==一定要是 updates 喔!
Updated Packages
Deployment_Guide-en-US.noarch 5.2-11.el5.centos base
Deployment_Guide-zh-CN.noarch 5.2-11.el5.centos base
Deployment_Guide-zh-TW.noarch 5.2-11.el5.centos base
....(底下省略)....
# 上面就列出在那個容器內可以提供升級的軟件與版本!
範例五:列出提供 passwd 這個文件的軟件有哪些
[root@instructor ~]# yum provides passwd
passwd.i386 : The passwd utility for setting/changing passwords using PAM
passwd.i386 : The passwd utility for setting/changing passwords using PAM
# 找到啦!就是上面的這個軟件提供了 passwd 這個程序!
透過上面的查詢,你應該大致知道 yum 如何用在查詢上面了吧?那麼實際來應用一下:
例題:
利用 yum 的功能,找出以 pam 爲開頭的軟件名稱有哪些?而其中尚未安裝的又有哪些?
答:
可以透過如下的方法來查詢:
[root@instructor ~]# yum list pam*
Installed Packages
pam.i386 0.99.6.2-3.27.el5 installed
pam_ccreds.i386 3-5 installed
pam_krb5.i386 2.2.14-1 installed
pam_passwdqc.i386 1.0.2-1.2.2 installed
pam_pkcs11.i386 0.5.3-23 installed
pam_smb.i386 1.1.7-7.2.1 installed
Available Packages <==底下則是『可升級』的或『未安裝』的
pam.i386 0.99.6.2-4.el5 base
pam-devel.i386 0.99.6.2-4.el5 base
pam_krb5.i386 2.2.14-10 base
--------------------------------------------------------------------------------
安裝/升級功能:yum [install|update] 軟件
既然可以查詢,那麼安裝與升級呢?很簡單啦!就利用 install 與 update 這兩項工作來處理即可喔!
[root@instructor ~]# yum [option] [查詢工作項目] [相關參數]
選項與參數:
install :後面接要安裝的軟件!
update :後面接要升級的軟件,若要整個系統都升級,就直接 update 即可
範例一:將前一個練習找到的未安裝的 pam-devel 安裝起來
[root@instructor ~]# yum install pam-devel
Setting up Install Process
Parsing package install arguments
Resolving Dependencies <==先檢查軟件的屬性相依問題
--> Running transaction check
---> Package pam-devel.i386 0:0.99.6.2-4.el5 set to be updated
--> Processing Dependency: pam = 0.99.6.2-4.el5 for package: pam-devel
--> Running transaction check
---> Package pam.i386 0:0.99.6.2-4.el5 set to be updated
filelists.xml.gz 100% |=========================| 1.6 MB 00:05
filelists.xml.gz 100% |=========================| 138 kB 00:00
-> Finished Dependency Resolution
Dependencies Resolved
=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
pam-devel i386 0.99.6.2-4.el5 base 186 k
Updating:
pam i386 0.99.6.2-4.el5 base 965 k
Transaction Summary
=============================================================================
Install 1 Package(s) <==結果發現要安裝此軟件需要升級另一個相依的軟件
Update 1 Package(s)
Remove 0 Package(s)
Total download size: 1.1 M
Is this ok [y/N]: y <==確定要安裝!
Downloading Packages: <==先下載!
(1/2): pam-0.99.6.2-4.el5 100% |=========================| 965 kB 00:05
(2/2): pam-devel-0.99.6.2 100% |=========================| 186 kB 00:01
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction <==開始安裝!
Updating : pam ######################### [1/3]
Installing: pam-devel ######################### [2/3]
Cleanup : pam ######################### [3/3]
Installed: pam-devel.i386 0:0.99.6.2-4.el5
Updated: pam.i386 0:0.99.6.2-4.el5
Complete!
--------------------------------------------------------------------------------
移除功能:yum [remove] 軟件
那能不能用 yum 移除軟件呢?將剛剛的軟件移除看看,會出現啥狀況啊?
[root@instructor ~]# yum remove pam-devel
Setting up Remove Process
Resolving Dependencies <==同樣的,先解決屬性相依的問題
--> Running transaction check
---> Package pam-devel.i386 0:0.99.6.2-4.el5 set to be erased
--> Finished Dependency Resolution
Dependencies Resolved
=============================================================================
Package Arch Version Repository Size
=============================================================================
Removing:
pam-devel i386 0.99.6.2-4.el5 installed 495 k
Transaction Summary
=============================================================================
Install 0 Package(s)
Update 0 Package(s)
Remove 1 Package(s) <==還好,並沒有屬性相依的問題,單純移除一個軟件
Is this ok [y/N]: y
Downloading Packages:
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Erasing : pam-devel ######################### [1/1]
Removed: pam-devel.i386 0:0.99.6.2-4.el5
Complete!
1.2 yum 的配置檔
雖然 yum 是你的主機能夠連線上 Internet 就可以直接使用的,不過,由於 CentOS 的映射站臺可能會選錯, 舉例來說,我們在臺灣,但是 CentOS 的映射站臺卻選擇到了大陸北京或者是日本去,有沒有可能發生啊! 有啊!鳥哥教學方面就常常發生這樣的問題,要知道,我們連線到大陸或日本的速度是非常慢的呢!那怎辦? 當然就是手動的修改一下 yum 的配置檔就好了!目前高速網絡中心對於 CentOS 所提供的相關網址如下:
http://ftp.twaren.net/Linux/CentOS/5/
如果你連接到上述的網址後,就會發現裏面有一堆連結,那些連結就是這個 yum 服務器所提供的容器了! 所以高速網絡中心也提供了 addons, centosplus, extras, fasttrack, os, updates 等容器,最好認的容器就是 os (系統默認的軟件) 與 updates (軟件升級版本) !
最重要的特色就是那個『 repodata 』的目錄!該目錄就是分析 RPM 軟件後所產生的軟件屬性相依數據放置處!因此,當你要找容器所在網址時, 最重要的就是該網址底下一定要有個名爲 repodata 的目錄存在!那就是容器的網址了! 其他的容器正確網址,就請各位看倌自行尋找一下喔!現在讓我們修改配置檔吧!
[root@instructor ~]# vi /etc/yum.repos.d/CentOS-Base.repo
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
上面的數據需要注意的是:
[base]:代表容器的名字!中刮號一定要存在,裏面的名稱則可以隨意取。但是不能有兩個相同的容器名稱, 否則 yum 會不曉得該到哪裏去找容器相關軟件清單文件。
name:只是說明一下這個容器的意義而已,重要性不高!
mirrorlist=:列出這個容器可以使用的映射站臺,如果不想使用,可以註解到這行;
baseurl=:這個最重要,因爲後面接的就是容器的實際網址! mirrorlist 是由 yum 程序自行去捉映射站臺, baseurl 則是指定固定的一個容器網址!我們剛剛找到的網址放到這裏來啦!
enable=1:就是讓這個容器被啓動。如果不想啓動可以使用 enable=0 !
gpgcheck=1:還記得 RPM 的數碼簽章嗎?這就是指定是否需要查閱 RPM 文件內的數碼簽章!
gpgkey=:就是數碼簽章的公鑰檔所在位置!使用默認值即可
瞭解這個配置檔之後,接下來讓我們修改整個文件的內容,讓我們這部主機可以直接使用高速網絡中心的資源!
[root@instructor ~]# vi /etc/yum.repos.d/CentOS-Base.repo
[base]
name=CentOS-$releasever - Base
baseurl=http://ftp.twaren.net/Linux/CentOS/5/os/i386/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
# 底下其他的容器項目,請自行到高速網絡中心去查詢後自己處理!
接下來當然就是給他測試一下羅!如何測試呢?再次使用 yum 即可!
範例一:列出目前 yum server 所使用的容器有哪些?
[root@instructor ~]# yum repolist all
repo id repo name status
addons CentOS-5 - Addons enabled
base CentOS-5 - Base enabled
c5-media CentOS-5 - Media disabled
centosplus CentOS-5 - Plus disabled
extras CentOS-5 - Extras enabled
updates CentOS-5 - Updates enabled
# 上面最右邊有寫 enabled 纔是有啓動的!由於 /etc/yum.repos.d/
# 有多個配置檔,所以你會發現還有其他的容器存在。
--------------------------------------------------------------------------------
修改容器產生的問題與解決之道
由於我們是修改系統默認的配置檔,事實上,我們應該要在 /etc/yum.repos.d/ 底下新建一個文件, 該擴展名必須是 .repo 才行!但因爲我們使用的是指定特定的映射站臺,而不是其他軟件開發生提供的容器, 因此才修改系統默認配置檔。但是可能由於使用的容器版本有新舊之分,你得要知道, yum 會先下載容器的清單到本機的 /var/cache/yum 裏面去!那我們修改了網址卻沒有修改容器名稱 (中刮號內的文字), 可能就會造成本機的清單與 yum 服務器的清單不同步,此時就會出現無法升級的問題了!
那怎麼辦啊?很簡單,就清除掉本機上面的舊數據即可!需要手動處理嗎?不需要的, 透過 yum 的 clean 項目來處理即可!
[root@instructor ~]# yum clean [packages|headers|all]
選項與參數:
packages:將已下載的軟件文件刪除
headers :將下載的軟件檔頭刪除
all :將所有容器數據都刪除!
範例一:刪除已下載過的所有容器的相關數據 (含軟件本身與清單)
[root@instructor ~]# yum clean all
--------------------------------------------------------------------------------
1.3 yum 的軟件羣組功能
透過 yum 來線上安裝一個軟件是非常的簡單,但是,如果要安裝的是一個大型專案呢? 舉例來說,一部主機就只有 GNOME 這個窗口管理員, 那我如果想要安裝 KDE ,只要透過 yum的軟件羣組功能即可! 來看看命令先:
[root@instructor ~]# yum [羣組功能] [軟件羣組]
選項與參數:
grouplist :列出所有可使用的『套件組』,例如 Development Tools 之類的;
groupinfo :後面接 group_name,則可瞭解該 group 內含的所有套件名;
groupinstall:這個好用!可以安裝一整組的套件羣組,相當的不錯用!
groupremove :移除某個套件羣組;
範例一:查閱目前容器與本機上面的可用與安裝過的軟件羣組有哪些?
[root@instructor ~]# yum grouplist
Installed Groups:
Office/Productivity
Editors
System Tools
....(中間省略)....
Available Groups:
Tomboy
Cluster Storage
Engineering and Scientific
....(以下省略)....
你會發現系統上面的軟件大多是羣組的方式一口氣來提供安裝的!還記全新安裝 CentOS 時, 不是可以選擇所需要的軟件嗎?而那些軟件不是利用 GNOME/KDE/X Window ... 之類的名稱存在嗎? 其實那就是軟件羣組羅!如果你運行上述的命令後,在『Available Groups』底下應該會看到一個 『XFCE-4.4』的軟件羣組,想知道那是啥嗎?就這樣做:
[root@instructor ~]# yum groupinfo XFCE-4.4
Setting up Group Process
Group: XFCE-4.4
Description: This group contains the XFCE desktop environment.
Mandatory Packages:
xfce4-session
....(中間省略)....
Default Packages:
xfce4-websearch-plugin
....(中間省略)....
Optional Packages:
xfce-mcs-manager-devel
xfce4-panel-devel
....(以下省略)....
你會發現那就是一個壁紙環境 (desktop environment) ,也就是一個窗口管理員啦! 至於底下就列出主要的與選擇性 (optional) 的軟件名稱羅!讓我們直接安裝看看:
[root@instructor ~]# yum groupinstall XFCE-4.4
你會發現系統進行了一大堆軟件的安裝!那就是啦!整個安裝 XFCE 這個窗口介面所需的所有軟件! 這個咚咚真是非常的方便呢!這個功能請一定要記下來,對你未來安裝軟件是非常有幫助的喔! ^_^
--------------------------------------------------------------------------------
1.4 全系統自動升級
我們可以手動選擇是否需要升級,那能不能讓系統自動升級,讓我們的系統隨時保持在最新的狀態呢? 當然可以啊!透過『 yum -y update 』來自動升級,那個 -y 很重要,因爲可以自動回答 yes 來開始下載與安裝! 然後再透過 crontab 的功能來處理即可!假設我每天在3:00am 網絡頻寬比較輕鬆的時候進行升級, 你可以這樣做的:
[root@instructor ~]# vim /etc/crontab
....(前面省略並保留配置值)....
0 3 * * * root /usr/bin/yum -y update
從此你的系統就會自動升級!很棒吧!此外,你還是得要分析登錄檔與收集 root 的信件的, 因爲如果升級的是核心軟件 (kernel),那麼你還是得要重新啓動纔會讓安裝的軟件順利運行的! 所以還是得分析登錄檔,若有新核心安裝,就重新啓動,否則就讓系統自動維持在最新較安全的環境!