分享

使用 yum 工具更新系统

 soulhiking 2010-09-30
  - 理解为什么使用 yum
  - 了解 CentOS 的镜像站点目录结构
  - 理解 CentOS 的仓库及镜像站点的关系
  - 学会配置各种更新源
  - 学会使用 yum 命令工具
  - 学会为 yum 配置代理
  - 学会使用 yum-fastestmirror 加快更新
  - 理解系统自动更新的配置方法



===== yum 简介 =====

==== 为什么使用 yum ====

Linux系统维护中令管理员很头疼的就是软件包之间的依赖性了,往往是你要安装A软件,但是编译的时候告诉你X软件安装之前

需要B软件,而当你安装Y软件的时候,又告诉你需要Z库了,好不容易安装好Z库,发现版本还有问题等。由于历史原因,RPM软

件包管理系统对软件之间的依存关系没有内部定义,造成安装RPM软件时经常出现令人无法理解的软件依赖问题。其实开源社区

早就对这个问题尝试进行解决了,不同的发行版推出了各自的工具,比如Yellow Dog的YUM(Yellow dog Updater, Modified)

,Debian的APT(Advanced Packaging Tool)等。开发这些工具的目的都是为了要解决安装RPM时的依赖性问题,而不是额外再建

立一套安装模式。这些软件也被开源软件爱好者们逐渐移植到别的发行版上。目前,APT和YUM都可以运行在Red Hat系统上。目

前 yum 是Red Hat/Fedora系统上默认安装的更新系统。



==== 什么是 yum ====

yum(http://linux./projects/yum/), 是 Yellow dog Updater, Modified 的简称,起初是由yellow dog 发行版的

开发者 Terra Soft 研发,用 python 写成,那时叫做 yup (yellow dog updater),后经杜克大学的 Linux@Duke 开发团队进

行改进,遂有此名。yum 的宗旨是自动化地升级,安装/移除rpm包,收集rpm包的相关信息,检查依赖性并自动提示用户解决。

yum 的关键之处是要有可靠的 repository,顾名思义,这是软件的仓库,它可以是 http 或 ftp 站点,也可以是本地软件池,

但必须包含 rpm 的 header,header 包括了rpm 包的各种信息,包括描述,功能,提供的文件,依赖性等.正是收集了这些

header并加以分析,才能自动化地完成余下的任务。

yum 具有如下特点:
  * 自动解决包的倚赖性问题能更方便的添加/删除/更新RPM包
  * 便于管理大量系统的更新问题
  * 可以同时配置多个资源库(Repository)
  * 简洁的配置文件(/etc/yum.conf)
  * 保持与RPM数据库的一致性
  * 有一个比较详细的log,可以查看何时升级安装了什么软件包等
  * 使用方便


yum是CentOS/Fedora系统自带的,因此它能使用CentOS官方的软件源,完成各种官方发布的各种升级。对于第三方软件源的支持

,yum也不差,大多数支持 apt 的 repository,也能支持 yum,比如说 freshrpms、fedora.us、livna、dag 等。

===== CentOS 的镜像和仓库 =====

==== CentOS 的镜像站点 ====

完整的 CentOS 软件库非常大。CentOS 的软件包位于 http://www./modules/tinycontent/index.php?id=13|CentOS

的镜像站点] 的目录树中,可通过 FTP 或 HTTP 访问它们。

  * 在 http://mirror-status./可以看到各镜像的状态。
  * 在 http://www./modules/tinycontent/index.php?id=22可以看到如何进行镜像的知识。


镜像站点的第一级目录是发行版本号,如 3、4、5 等。
下列目录存在于任何 CentOS 镜像站点的版本号为5的目录下:

  * **addons/**: 本目录包含 CentOS 的 addons 仓库
  * **centosplus/**: 本目录包含 CentOS 的 centosplus 仓库
  * **extras/**: 本目录包含 CentOS 的 extras 仓库
  * **fasttrack/**: 本目录包含 CentOS 的 fasttrack 仓库
  * **isos-dvd/**: 本目录包含发行版的 DVD iso 下载文件
  * **isos/**: 本目录包含发行版的 CD isos 下载文件
  * **os/**: 本目录包含发行版(distributions)的仓库
  * **updates/**: 本目录包含 CentOS 的 updates 仓库

==== CentOS 的仓库 ====

仓库(repository)是一个预备好的目录,或是一个网站,包含了软件包和索引文件。 yum 可以在仓库中自动地定位并获取正

确的 RPM 软件包。这样,您就不必手动搜索和安装新应用程序和升级补丁了。只用一个命令,您就可以更新系统中所有软件,

也可以根据指定搜索目标来查找安装新软件。

镜像服务器为每个版本的 CentOS 分别提供了一些仓库。CentOS 5 中的软件管理工具 yum 已经预先配置为使用下列四个仓库:

  * **base**: 构成 CentOS 发行版(distributions)的软件包,和光盘上内容相同
  * **updates**: base 仓库中软件包的更新版本
  * **addons**: 已编译的但不在发行版(distributions)中的软件包
  * **extras**:  一大批附加的软件包

还可以使用下面的仓库,但在 CentOS 5  默认情况下未被启用
  * **centosplus/**: 用于增强一些现有软件包的功能

==== CentOS 仓库的目录结构 ====

下面以 CentOS 5 的 **updates** 仓库为例说明其在镜像站点上的目录结构(其他仓库结构类似):
<code>
updates/
|-- SRPMS                            # 源代码目录
|   |-- *.src.rpm                    # 源代码包文件
|   `-- repodata/                    # 源代码的索引文件
|-- i386                             # Intel 32位平台目录
|   |-- RPMS                         # Intel 32位平台的RPMS目录
|   |   |-- *.i386.rpm               # 在Intel 32位平台上编译的包文件
|   |   `-- *.centos.noarch.rpm      # 与平台无关的已编译的包文件
|   `-- repodata/                    # Intel 32位平台的索引文件
`-- x86_64                           # 64位平台目录
    |-- RPMS                         # 64位平台的RPMS目录
    |   |-- *.x86_64.rpm             # 在64位平台上编译的包文件
    |   `-- *.centos.noarch.rpm      # 与平台无关的已编译的包文件
    `-- repodata/                    # 64位平台的索引文件
</code>

===== 配置 yum 客户的更新源 =====

yum 使用 **reposdir** (/etc/yum.repos.d) 目录下的一系列 .repo 文件列出可获得软件包仓库的镜像站点地址。默认情况下

有如下两个文件:
  * CentOS-Base.repo :用于设置远程仓库
  * CentOS-Media.repo :用于设置本地仓库

在 .repo 文件中,配置语法是分段的,每一段配置一个软件仓库,配置语法如下:

<code>
[repositoryid]
name=Some name for this repository
baseurl=url://server1/path/to/repository/
        url://server2/path/to/repository/
        url://server3/path/to/repository/
mirrorlist=url://path/to/mirrorlist/repository/
enabled=0/1
gpgcheck=0/1
gpgkey=A URL pointing to the ASCII-armoured GPG key file for the repository
</code>

其中:
  * repositoryid : 用于指定一个仓库
  * name : 用于指定易读的仓库名称
  * baseurl : 用于指定本仓库的 URL,可以是如下的几种类型:
    * http --- 用于指定远程 HTTP 协议的源
    * ftp  --- 用于指定远程 FTP 协议的源
    * file  --- 用于本地镜像或 NFS 挂装文件系统
  * mirrorlist : 用于指定仓库的镜像站点
  * enabled : 用于指定是否使用本仓库,默认值为1,即可用
  * gpgcheck : 用于指定是否检查软件包的 GPG 签名
  * gpgkey : 用于指定 GPG 签名文件的 URL

在 name baseurl 中经常使用如下的变量:
  * $releasever  --- 当前系统的版本号
  * $basearch ---  当前系统的平台架构


  * 文件中以“#”开头的行是注释行
  * 若指定 mirrorlist,系统将从 CentOS 的镜像站点中选择离您最近的仓库
  * 并非所有的国内镜像都在 CentOS 的镜像站点列表中,所以我们可以直接使用 baseurl 直接指定离您最近的仓库
  * baseurl 可以指定多个 URL,系统会依次检查您列出的仓库,以便在某个服务器宕机时可以使用另外的服务器
  * 为了加快更新,在确保更新服务器及线路良好的情况下,在 baseurl 中只指定一个 URL 既可



==== 设置网络更新源 ====

下面是一个 CentOS-Base.repo 文件的实例,在此文件中没有设置 mirrorlist ,使用 baseurl 只指定了一个 URL。

<code>
[base]
name=CentOS-$releasever - Base
baseurl=http://centos./$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://mirror./centos/RPM-GPG-KEY-CentOS-5

[updates]
name=CentOS-$releasever - Updates
baseurl=http://centos./$releasever/updates/$basearch/
gpgcheck=1
gpgkey=http://mirror./centos/RPM-GPG-KEY-CentOS-5

[addons]
name=CentOS-$releasever - Addons
baseurl=http://centos./$releasever/addons/$basearch/
gpgcheck=1
gpgkey=http://mirror./centos/RPM-GPG-KEY-CentOS-5

[extras]
name=CentOS-$releasever - Extras
baseurl=http://centos./$releasever/extras/$basearch/
gpgcheck=1
gpgkey=http://mirror./centos/RPM-GPG-KEY-CentOS-5

[centosplus]
name=CentOS-$releasever - Plus
baseurl=http://centos./$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirror./centos/RPM-GPG-KEY-CentOS-5
</code>


==== 设置本地更新源 ====

为了使用安装光盘作为更新源,可以修改 CentOS-Media.repo 文件,下面是一个配置实例。

<code>
[c5-media]
name=CentOS-$releasever - Media
baseurl=file:///media/CentOS/
        file:///media/cdrom/
        file:///media/cdrecorder/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-beta
</code>


  * 为了使用 c5-media 仓库,需将 CentOS-Base.repo 文件中的 base 仓库使用 ''enabled=0'' 设置成不可用。
  * 若本地磁盘空间有足够空间,您也可以将安装光盘复制到本地磁盘的一个目录中





==== 设置非官方更新源 ====

下面以安装 rpmforge 软件包为例添加非官方更新源。

  - 到 http://dag./rpm/packages/rpmforge-release/查找适用于 RHEL5/CentOS5 的软件包
  - 下载适用于 RHEL5/CentOS5 的软件包
<code>
# wget http://dag./rpm/packag ... 6-1.el5.rf.i386.rpm
# rpm -ivh rpmforge-release-0.3.6-1.el5.rf.i386.rpm
# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-rpmforge-*
</code>

安装了 rpmforge-release 软件包之后可以看到 /etc/yum.repos.d/rpmforge.repo 文件。以后使用 yum 就可以使用这个更新

源了。


您也可以使用如下的手工方法添加 DAG 的仓库。

建立 dag.repo,定义非官方库:

# vi /etc/yum.repos.d/dag.repo

<code>
[dag]
name=Dag RPM Repository for Red Hat Enterprise Linux
baseurl=http://apt./redhat/el$releasever/en/$basearch/dag
gpgcheck=1
enabled=1
gpgkey=http://dag./packages/RPM-GPG-KEY.dag.txt
</code>
</note>


===== 使用 yum 命令工具 =====


==== yum 命令工具简介 ====

[[http:///yum|yum]] 完整语法参见其命令手册,下面只列出较常见的用法。

^  命令  ^  功能  ^
| yum check-update | 检查可更新的所有软件包 |
| yum update | 下载更新系统已安装的所有软件包 |
| yum upgrade | 大规模的版本升级,与yum update不同的是,连旧的淘汰的包也升级 |
| yum install <packages> | 安装新软件包 |
| yum update <packages> | 更新指定的软件包 |
| yum remove <packages> | 卸载指定的软件包 |
| yum groupinstall <groupnames> | 安装指定软件组中的软件包 |
| yum groupupdate <groupnames> | 更新指定软件组中的软件包 |
| yum groupremove <groupnames> | 卸载指定软件组中的软件包 |
| yum grouplist  | 查看系统中已经安装的和可用的软件组 |
| yum list | 列出资源库中所有可以安装或更新以及已经安装的rpm包 |
| yum list <regex> | 列出资源库中与正则表达式匹配的可以安装或更新以及已经安装的rpm包 |
| yum list available | 列出资源库中所有可以安装的rpm包 |
| yum list available <regex> | 列出资源库中与正则表达式匹配的所有可以安装的rpm包 |
| yum list updates | 列出资源库中所有可以更新的rpm包 |
| yum list updates <regex> | 列出资源库中与正则表达式匹配的所有可以更新的rpm包 |
| yum list installed | 列出资源库中所有已经安装的rpm包 |
| yum list installed <regex> | 列出资源库中与正则表达式匹配的所有已经安装的rpm包 |
| yum list extras | 列出已经安装的但是不包含在资源库中的rpm包 |
| yum list extras <regex> | 列出与正则表达式匹配的已经安装的但是不包含在资源库中的rpm包  |
| yum list recent | 列出最近被添加到资源库中的软件包 |
| yum search <regex> | 检测所有可用的软件的名称、描述、概述和已列出的维护者,查找与正则表达式匹配的值 |
| yum provides <regex> | 检测软件包中包含的文件以及软件提供的功能,查找与正则表达式匹配的值  |
| yum clean headers | 清除缓存中的rpm头文件 |
| yum clean packages | 清除缓存中rpm包文件 |
| yum clean all | 清除缓存中的rpm头文件和包文件 |
| yum deplist <packages> | 显示软件包的依赖信息 |

  * 当第一次使用yum或yum资源库有更新时,yum会自动下载所有所需的headers放置于 /var/cache/yum 目录下,所需时间可能

较长。
  * 还可以使用 yum info 命令列出包信息,yum info 可用的参数与 yum list 的相同。
  * yum 命令还可以使用 -y 参数用于用 yes 回答命令运行时所提出的问题。


==== yum 命令工具使用举例 ====

1、升级系统

# yum update

2、安装指定的软件包

# yum install w3m lync

3、升级指定的软件包

# yum update w3m lync

4、卸载指定的软件包

# yum remore w3m lync

5、查看系统中已经安装的和可用的软件组

# yum grouplist

6、安装指定软件组中的软件包

# yum groupinstall "Virtualization"

7、更新指定软件组中的软件包

# yum groupupdate "Virtualization"

8、卸载指定软件组中的软件包

# yum groupremore "Virtualization"

9、清除缓存中的rpm头文件和包文件

# yum clean all

10、搜索相关的软件包

# yum search python

11、显示指定软件包的信息

# yum info python

12、查询指定软件包的依赖信息

# yum  deplist  python

13、列出所有以 yum 开头的软件包

# yum  list  yum\*

14、列出已经安装的但是不包含在资源库中的rpm包

# yum list extras


如果您安装了并非来自仓库的软件,当它有新版时,yum update 无法自动更新它。为保证您总是用着最新的软件,可以订阅一

份电子邮件或 RSS 服务,这样当有新版时可以得到通知。


===== 加速 yum 的下载 =====


==== 使用全局代理 ====

要设置所有 yum 操作都使用代理服务器,可以在 /etc/yum.conf 中设置代理服务器的信息。例如:

<code>
# 代理服务器:端口号
proxy=http://mycache.:3128
# 设置用于yum 连接的帐户细节
proxy_username=yum-user
proxy_password=password
</code>

==== 为单个用户配置代理服务器 ====

要为一个特定的用户启用代理访问,只要将实例框中的文本行加入这个用户的 shell 配置中。对于默认的 bash shell,配置是

在 ~/.bash_profile 中。例如:

<code>
# 当前用户使用的匿名代理服务器
http_proxy="http://mycache.:3128"
export http_proxy
</code>


<code>
# 当前用户使用的代理服务器
http_proxy="http://yum-user:password@mycache.:3128"
export http_proxy
</code>

==== 使用 yum 的扩展插件 yum-fastestmirror ====

当仓库配置文件(*.repo)使用 mirrorlist 或在 baseurl 中指定多个URL 时,yum-fastestmirror 可以自动选择最快的镜像

站点。要想使用 yum-fastestmirror 加快下载速度,使用如下命令安装即可。


# yum -y install yum-fastestmirror


yum-fastestmirror 的配置文件是 /etc/yum/pluginconf.d/fastestmirror.conf,一般无需修改。

===== 系统自动更新 =====


====  yum-updatesd ====

CentOS 系统默认安装了 yum-updatesd 软件包。

$ rpm -ql yum-updatesd
/etc/dbus-1/system.d/yum-updatesd.conf
/etc/rc.d/init.d/yum-updatesd
/etc/yum/yum-updatesd.conf
/usr/sbin/yum-updatesd
/usr/share/man/man5/yum-updatesd.conf.5.gz
/usr/share/man/man8/yum-updatesd.8.gz


由此可见,系统在启动过程中运行了 yum-updatesd 守护进程。这个守护进程读取 /etc/yum/yum-updatesd.conf 配置文件。

<code>
[main]
# 设置检查更新的时间间隔 (单位为秒)
run_interval = 3600
# 为了避免过于频繁的访问更新服务器设置检查更新的最小时间间隔 (单位为秒)
updaterefresh = 600

# 设置如何发送更新通知(有效值: dbus, email, syslog)
emit_via = dbus
# should we listen via dbus to give out update information/check for
# new updates
dbus_listener = yes

# 配置是否自动安装更新
do_update = no
# 配置是否自动下载更新
do_download = no
# 配置是否自动下载有依赖关系的更新
do_download_deps = no
</code>


====  yum-cron ====

还可以使用 yum-cron 自动安排 cron 任务。要使用 yum-cron 需要使用如下命令安装:


# yum -y install yum-cron


使用如下命令可知 yum-cron 包安装的文件:


$ rpm -ql yum-cron
/etc/cron.daily/yum.cron            # 每日更新脚本
/etc/cron.weekly/yum.cron         # 每周更新脚本
/etc/rc.d/init.d/yum                   # 启动脚本
/etc/yum/yum-daily.yum
/usr/share/doc/yum-cron-0.1
/usr/share/doc/yum-cron-0.1/COPYING
/usr/share/doc/yum-cron-0.1/README


要激活自动更新,输入如下命令:

# chkconfig --level 345 yum on
# service yum start

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多