YUM 線上升級機制

yum 是透過分析 RPM 的標頭數據後, 根據各軟件的相關性製作出屬性相依時的解決方案,然後可以自動處理軟件的相依屬性問題,以解決軟件安裝或移除與升級的問題。 

由於 distribution 必須要先釋出軟件,然後將軟件放置於yum 服務器上面,以提供用戶端來要求安裝與升級之用的。 因此我們想要使用 yum 的功能時,必須要先找到適合的 yum server 才行!而每個 yum server 可能都會提供許多不同的軟件功能!


事實上 CentOS 在釋出軟件時已經製作出多部映射站臺 (mirror site) 提供全世界的軟件升級之用。 所以,理論上我們不需要處理任何配置值,只要能夠連上 Internet ,就可以使用 yum 羅!底下就讓我們來玩玩看吧!

--------------------------------------------------------------------------------
1.1 利用 yum 進行查詢、安裝、升級與移除功能

1.1.1 查詢功能:yum [list|info|search|provides|whatprovides] 參數

如果想要查詢利用 yum 來查詢原版 distribution 所提供的軟件,或已知某軟件的名稱,想知道該軟件的功能, 可以利用 yum 相關的參數爲:


[root@instructor ~]#  yum [option] [查詢工作項目] [相關參數]
選項與參數:
[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),那麼你還是得要重新啓動纔會讓安裝的軟件順利運行的! 所以還是得分析登錄檔,若有新核心安裝,就重新啓動,否則就讓系統自動維持在最新較安全的環境! 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章