在本文中,学习如何在 Linux 系统上使用 RPM 和 YUM 包管理工具管理包。学习: 1. 使用 RPM 和 YUM 安装、卸载、升级和删除包
2. 获取版本、状态、依赖关系、完整性和签名等 RPM 包相关信息 3. 判断一个包提供哪些文件,查明某个文件来自哪个包
先决条件
为了最有效地利用本系列中的文章,您应该具有基本的 Linux 知识,并需要准备一个 Linux 系统用于练习本文介绍的命令。有时候不同版本的程序输出格式不同,因此您所得到的结果未必总是与这里所示的清单和图相同,特别是许多输出高度依赖于系统上已经安装的包。您自己的输出可能很不一样,但是应该能够看出重要的共同点。
包管理简介
过去,许多 Linux 程序以源代码的形式发行,用户把源代码构建为所需的程序或程序集;源代码还附带必需的手册页、配置文件等等。现在,大多数 Linux 发行商使用称为包的预构建的程序或程序集,包便于在发行版上安装。在本文中,学习帮助安装、更新和删除包的包管理工具。本文主要关注 Red Hat 开发的 Red Hat Package Manager (RPM),以及 Duke University 物理系最初为管理 Red Hat Linux 系统开发的Yellowdog Updater Modified (YUM)。
从用户的角度来说,基本的包管理功能由命令提供。Linux 开发人员一直致力于让 Linux 更容易使用,他们开发了其他工具(包括 GUI 工具)来补充基本工具,这对最终用户隐藏了基本工具的一部分复杂性。在本文和学习 Linux,101:Debian包管理中,我们主要讨论基本工具,但是也会提到一些其他工具,让您能够继续研究它们。
RPM、YUM 和 APT(适用于Debian系统)有许多相似之处。它们都可以安装和删除包。关于安装的包的信息保存在数据库中。它们都有基本的命令行功能,同时通过其他工具提供对用户更友好的界面。它们都可以从 Internet 获取包。
在安装 Linux 系统时,通常会安装许多包。这个集合可能是根据系统的用途定制的,比如服务器、桌面或开发工作站。有时候,可能需要安装新的包以添加新功能,更新现有的包,甚至删除不再需要或已经被新的包取代的包。我们来看看如何完成这些任务以及如何解决一些相关的难题,比如寻找包含某一命令的包。
RPM
Red Hat 于 1995 年引入了 RPM。RPM 现在是 Linux Standard Base (LSB) 中采用的包管理系统。rpm 命令选项分为三组: 1. 用于查询和检查包
2. 用于安装、升级和删除包 3. 用于执行其他功能
在本文中,我们主要关注前两组命令选项。在 RPM 的手册页中可以找到其他功能的相关信息。
还应该注意 rpm 是操作 RPM 的主要命令,而 .rpm 是 RPM 文件使用的扩展名。所以 “一个 rpm” 或 “某某 rpm” 一般是指 RPM 文件,而 rpm 通常指命令。
YUM
YUM 在 RPM 系统中增加了自动更新和包管理,包括依赖关系管理。与Debian Advanced Packaging Tool (APT) 一样,除了了解系统上安装的包之外,YUM 还使用存储库。存储库是包的集合,通常可以通过网络连接访问它们。
安装 RPM 包
假设您想学 Lisp,一位同事让您使用gcl命令。您试着输入gcl --help、which gcl或 type gcl。但是,如果系统无法找到gcl,您可能会看到与清单 1 相似的输出。
清单 1. 没有找到gcl命令
[ian@echidna ~]$ gcl --help bash: gcl: command not found
[ian@echidna ~]$ which gcl
/usr/bin/which: no gcl in (/usr/lib64/qt-3.3/bin:/usr/kerberos/sbin:/usr/kerber os/bin:/usr/lib64/ccache:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/
sbin:/home/ian/bin)
[ian@echidna ~]$ type gcl bash: type: gcl: not found
您可能会问同事要安装哪个包,也可能猜想gcl命令应该在gcl包中。这种猜测常常是对的,但是也不总是。我们稍后会看到如何寻找正确的包。在这里,需要gcl包。假设您已
经下载或以其他方式获得了这个包的拷贝,可以使用带 -i(代表安装)选项的 rpm 命令安装它,见清单 2。
清单 2. 用 rpm 安装gcl —— 第一次尝试
[root@echidna ~]# rpm -i gcl-2.6.8-0.6.20090701cvs.fc12.x86_64.rpm error: Failed dependencies:
gcl-selinux is needed by gcl-2.6.8-0.6.20090701cvs.fc12.x86_64
rpm 命令知道这个包有一个依赖包,但是它并不帮助您解决依赖问题。您需要自己获取依赖包,然后再次尝试,看看是否还有其他依赖包 — 重复这个过程,直到满足所有依赖关系为止。好消息是,可以向 rpm 命令提供要安装的包的列表,如果满足所有依赖关系,它会以正确的次序安装所有包。因此,您至少不必以正确的次序手工安装每个包。
如果您使用过Debian的 APT,可能希望有像 apt-get 命令一样的功能,apt-get 命令会寻找需要的东西(包括依赖包)并安装它们。对于基于 RPM 的系统,YUM (Yellowdog Updater Modified) 提供这种功能。清单 3 说明如何使用带 install 选项的 yum 命令安装gcl和必需的gcl-selinux包。
清单 3. 使用 yum 安装gcl
[root@echidna ~]# yum install gcl
Loaded plugins: presto, refresh-packagekit Setting up Install Process Resolving Dependencies
--> Running transaction check
---> Package gcl.x86_64 0:2.6.8-0.7.20100201cvs.fc12 set to be updated --> Processing Dependency: gcl-selinux for package: gcl-2.6.8-0.7.20100201cvs.fc12.x86_64 --> Running transaction check
---> Package gcl-selinux.x86_64 0:2.6.8-0.7.20100201cvs.fc12 set to be updated --> Finished Dependency Resolution
Dependencies Resolved
=====================================================================================
Package Arch Version Repository Size ===================================================================================== Installing:
gcl x86_64 2.6.8-0.7.20100201cvs.fc12 updates 6.3 M Installing for dependencies:
gcl-selinux x86_64 2.6.8-0.7.20100201cvs.fc12 updates 17 k
Transaction Summary
=====================================================================================
Install 2 Package(s) Upgrade 0 Package(s)
Total download size: 6.4 M Installed size: 40 M Is this ok [y/N]: y Downloading Packages:
Setting up and reading Presto delta metadata
updates/prestodelta | 964 kB 00:01 Processing delta metadata

