在Red Hat或者其它基於RPM的操作系統中安裝或者更新軟件時,我們經常會被一些莫名其妙的錯誤提示所困擾。即便是使用Red Hat提供的基於GUI的管理工具,這個問題也沒有徹底解決。事實上,絕大部分的問題,都出在了各個軟件包的關聯性問題上。很顯然,這是RPM軟件包管理工具存在著一些不足。 Yum是一個針對RPM操作系統的非常方便的自動升級和軟件包管理工具。Yum會自動計算出程序之間的相互關聯性,並且計算出完成軟件包的安裝需要哪些步驟。對於那些管理著大量機器的系統管理員來說,這意味著不需要通過RPM手工來升級每一台機器。在安裝軟件時,也不會再被那些關聯性問題所困擾。 在Red Hat中,有一個專門用於軟件包升級的工具—Up2Date。在缺省情況下,它也是Fedora Core1中的RPM軟件包管理工具。這是一個很直觀的,基於GUI的軟件包管理工具。遺憾的是,它在使用過程中經常會出錯,並且也不夠靈活。 Yum可以代替Up2Date,或者作為其一個補充。實踐發現,Yum不僅速度更快,更加可靠,而且還提供了很多其它工具所沒有提供的功能,比如: ◆ 多個軟件倉庫 ◆ 簡單的配置文件 ◆ 正確的依賴性檢查 ◆ somps.XML組支持 ◆ 簡單的界面 如前所述,Yum不僅可以讓系統上已經安裝的軟件包處於最新狀態,也可用於直接安裝軟件包。現實中,經常會碰到的問題之一就是,無法找到足夠的光盤存儲一些需要的軟件包。而使用Yum,可以直接從網上下載安裝軟件包。 缺省情況下,Yum已經被安裝到了Fedora Core 1中,如果系統沒有安裝這個工具,可以直接從光盤安裝,也可以從以下位置下載Yum的RPM包,並安裝: http://mirrors.kernel.org/fedora/core/1/i386/os/Fedora/RPMS/ 配置Yum 在使用Yum之前,我們要編輯/etc/yum.conf配置文件,更改其中指明所使用的軟件倉庫服務器的位置。下面是缺省情況下該文件的內容: [main] cachedir=/var/cache/yum debuglevel=2 logfile=/var/log/yum.log pkgpolicy=newest distroverpkg=fedora-release tolerant=1 exactarch=1 [base] name=Fedora Core $releasever - $basearch - Base baseurl=http://fedora.redhat.com/releases/fedora-core-$releasever [updates-released] name=Fedora Core $releasever - $basearch - Released Updates baseurl=http://fedora.redhat.com/updates/released/fedora-core-$releasever #[updates-testing] #name=Fedora Core $releasever - $basearch - Unreleased Updates #baseurl=http://fedora.redhat.com/updates/testing/fedora-core-$releasever 缺省情況下,Yum使用的是Fedora Core1主下載服務器。因為使用這個服務器的人實在是太多,所以速度比較慢。如果需要的話,我們可以將Yum設置成其它的鏡像站點。請到http://fedora.redhat.com/download/mirrors.Html查看可用的鏡像站點。 一般來說,我們都會選擇在地理上與自己比較接近的站點,這通常有利於加快下載的速度(當然情況也並不總是如此)。 在本例中,我選擇mirrors.kernel.org作為升級站點。以root身份編輯/etc/yum.conf文件,將[base]和[updates-released]章節的內容改成下面的內容: [base] name=Fedora Core $releasever - $basearch - Base baseurl=http://mirrors.kernel.org/fedora/core/$releasever/$basearch/os [updates-released] name=Fedora Core $releasever - $basearch - Released Updates baseurl=http://mirrors.kernel.org/fedora/core/updates/$releasever/$basearch 當然,根據所選擇的站點不同,上述章節的內容也不同。對於文件中的[updates-testing]部分則不用對其進行更改,因為一般來說,在升級和安裝軟件包時並不需要使用它。 除了編輯yum.conf文件外,還需要更改/etc/sysconfig/rhn/sources文件,使用所選擇的鏡像站點來代替文件的內容: yum fedora-core-1 http://mirrors.kernel.org/fedora/core/1/i386/os yum updates-released http://mirrors.kernel.org/fedora/core/updates/1/i386 使用Yum 使用Yum要做的第一件事情是更新其RPM header(文件頭)列表。每一個RPM都有一個header,其中包含了完整的文件列表、軟件包描述、實現的功能和提供的庫、所需要的東西以及有什麼沖突。Yum正是使用這些信息來決定如何升級和安裝軟件包的。 下面就來解決這個問題,輸入以下命令: yum check-update 運行這個命令,Yum將從yum.conf文件中指定的軟件包服務器上下載當前的完整header文件列表。這個過程通常需要花費一定的時間,並且會有如下的一些顯示信息: Gathering header information file(s) from server(s) Server: Fedora Core 1 - i386 - Base Server: Fedora Core 1 - i386 - Released Updates Finding updated packages Downloading needed headers getting /var/cache/yum/updates-released /headers/pango-0-1.2.5-4.i386.hdr pango-0-1.2.5-4.i386.hdr 100% ======= 6.5 kB 00:02 ...... 當上述的步驟完成之後,說明Yum已經下載完了所有的header文件。如果想讓現在系統上安裝的所有軟件都處於最新的狀態,只需使用以下命令: yum update Yum會將現在系統上安裝的所有軟件和目前的軟件倉庫服務器上的軟件進行比較,比較完成後,它會給出一個有關細節的信息列表讓用戶確認,列表的內容如下所示: Gathering header information file(s) from server(s) Server: Fedora Core 1 - i386 - Base Server: Fedora Core 1 - i386 - Released Updates Finding updated packages Downloading needed headers Resolving dependencies Dependencies resolved I will do the following: [install: kernel 2.4.22-1.2188.nptl.i686] [update: pango 1.2.5-4.i386] ...... [update: XFree86-font-utils 4.3.0-55.i386] Is this ok [y/N]:y 在本例中,Yum告訴我有76個可用更新(因為我進行測試的系統在安裝完Fedora以後還從來沒有更新過)。要安裝所有這些更新,所要做的只是輸入“y”即可。如果想更新的只是某一個特定的軟件,可以將上述命令稍做修改: yum update nmap 會看到如下所述的內容: Gathering header information file(s) from server(s) Server: Fedora Core 1 - i386 - Base Server: Fedora Core 1 - i386 - Released Updates Finding updated packages Downloading needed headers No Packages Available for Update No actions to take 在上述的例子中,Yum告訴我,我的系統上的nmap已經是最新版本了,因此無需進行任何升級。下面我們來看一看如何安裝一個機器上沒有的軟件包,比如要安裝的是XChat IRC客戶端,只需要輸入以下命令即可: yum install xchat 可能會看到如下信息: Gathering header information file(s) from server(s) Server: Fedora Core 1 - i386 - Base Server: Fedora Core 1 - i386 - Released Updates Finding updated packages Downloading needed headers Resolving dependencies Dependencies resolved I will do the following: [install: xchat 1:2.0.7-1.FC1.0.i386] Is this ok [y/N]: 按“y”就可以進行軟件的安裝,會出現下列內容提示安裝成功: Getting xchat-2.0.7-1.FC1.0.i386.rpm xchat-2.0.7-1.FC1.0.i386. 100% ========== 1.1 MB 01:51 Running test transaction: Test transaction complete, SUCcess! xchat 100 % done 1/1 Installed: xchat 1:2.0.7-1.FC1.0.i386 Transaction(s) Complete 雖然我的機器上的namp已經不需要再進行升級,不過我還想為其安裝一個GUI界面,但又不知道需要什麼軟件包,這時只需要輸入以下命令: yum search nmap gui 可能看到的內容如下: Gathering header information file(s) from server(s) Server: Fedora Core 1 - i386 - Base Server: Fedora Core 1 - i386 - Released Updates Finding updated packages Downloading needed headers Looking in available packages for a providing package Available package: redhat-config-printer-gui.i386 0:0.6.79.5-1 from updates-released matches with redhat-config-printer-gui Available package: nmap.i386 2:3.48-1 from base matches with nmap Available package: nmap-frontend.i386 2:3.48-1 from base matches with Available package: nmap-frontend.i386 2:3.48-1 from base matches with nmap-frontend ...... 2 results returned 如果現在需要一個並不是獨立軟件包的庫文件,比如libc6.1-1.so.2,可以通過以下命令獲取: yum provides libc6.1-1.so.2 該命令會顯示以下信息: Gathering header information file(s) from server(s) Server: Fedora Core 1 - i386 - Base Server: Fedora Core 1 - i386 - Released Updates Finding updated packages Downloading needed headers Looking in available packages for a providing package Available package: compat-libstdc++.i386 0:7.3-2.96.118 from base matches with libstdc++-libc6.1-1.so.2 Available package: compat-libstdc++.i386 0:7.3-2.96.118 from base matches with libstdc++-libc6.1-1.so.2(GCC.INTERNAL) 2 results returned Looking in installed packages for a providing package No packages found Yum告知所查詢的庫位於compat-libstdc++的軟件包中,並且現在還沒有安裝到本地系統上,所以只需要輸入命令“yum install compat-libstdc++”即可完成該庫的安裝。如果要刪除系統中的某軟件,只需要輸入以下命令: yum remove nmap 該命令將會刪除該軟件包以及所有與之相關聯的軟件包。 在Yum升級或者安裝軟件時,它並不會自動清除磁盤緩沖區,所以要手動來完成這個過程。所幸的是這個過程非常簡單,只需要輸入以下命令即可: yum clean all 該命令會刪除所有緩沖區中的軟件包以及所有不再需要的RPM header。如果要查看某一軟件在本系統上的安裝情況,可以使用以下命令: yum info xchat 將會出現如下提示: Gathering header information file(s) from server(s) Server: Fedora Core 1 - i386 - Base Server: Fedora Core 1 - i386 - Released Updates Finding updated packages Downloading needed headers Looking in Available Packages: Looking in Installed Packages: Name : xchat Arch : i386 Version: 2.0.7 Release: 1.FC1.0 Size : 2.77 MB Group : 應用程序/互聯網 Repo : Locally Installed Summary: GTK+ IRC (聊天) 客戶。 Description: X-Chat 是一個 X 窗口系統和 GTK+ 的 IRC 客戶。 X-Chat 使用簡便並包括一個好看的界面。 小結 從上面的討論可以看出,Yum是一個非常方便實用的升級工具,它可以很輕松地讓用戶的系統時刻處於最新的狀態。事實上,Yum可以實現的功能還遠不止本文討論的內容。我們還可以用它來升級內核(升級至新版本的內核,而不是打補丁)。 本文以Fedora Core 1為例,如果機器上安裝的是以前的Red Hat版本,也可以使用Yum來進行軟件的更新和安裝管理。方法是從以下位置下載相應的版本安裝,即可如本文所述的方法一樣對系統進行更新(甚至可以直接將老的Red Hat系統升級至Fedora): http://www.Linux.duke.edu/projects/yum /download/2.0/yum-2.0.6-1.noarch.rpm Red Hat Linux 8.0: http://www.linux.duke.edu/projects/yum /download/1.0/yum-1.0.3-1_80.noarch.rpm Red Hat Linux 7.3: http://www.linux.duke.edu/projects/yum /download/1.0/yum-1.0.3-1_73.noarch.rpm 幾個亞洲的軟件倉庫服務器鏡像站點: http://download.stmc.edu.hk/fedora/linux/core/ FTP://download.stmc.edu.hk/fedora/linux/core/ ftp://ftp.sfc.wide.ad.jp/pub/Linux/Fedora/ rsync://ftp.sfc.wide.ad.jp/fedora/ http://ftp.kddilabs.jp/Linux/packages/fedora/core/ ftp://ftp.kddilabs.jp/Linux/packages/fedora/core/ rsync://ftp.kddilabs.jp/fedora/ ftp://ftp.riken.go.jp/pub/Linux/fedora/core/ ftp://ftp.kreonet.re.kr/pub/Linux/fedora/core/ rsync://ftp.kreonet.re.kr/fedora/core/ ftp://mirror.hostway.co.kr/pub/fedora/