在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
如