Red Hat Linux 系统上的所有软件都被分成可被安装、升级、或删除的 RPM 软件包。这个部分描述了如何使用图形化和命令行工具来管理 Red Hat Linux 系统上的 RPM 软件包。 32. 使用 RPM 来管理软件包RPM 软件包管理器(RPM)是开放打包系统,任何人都可以使用。它在 Red Hat Linux,以及其它 Linux 和 UNIX 系统上运行。Red Hat, Inc. 鼓励其它销售商在他们自己的产品上使用 RPM 技术。RPM 按照 GPL 条款被发行。 对于终端用户来说,RPM 简化了系统更新。安装、删除安装、升级 RPM 软件包可以使用简短的命令就可完成。RPM 维护一个已安装软件包和它们的文件的数据库,因此,你可以在系统上使用功能强大的查询和校验。如果你更喜欢图形化界面,你可以使用 软件包管理工具 来执行许多 RPM 命令。详情请参阅 第33章 。 在升级中,RPM 处理配置文件时非常谨慎,因此你决不会丢失你定制的配置 — 这是你用普通的 .tar.gz 文件所无法达到的。 对于开发者来说,RPM允许你把软件编码和程序打包,然后提供给终端用户。这个进程非常简单,它能从你创建的单个文件或补丁中驱动。这种对你的“纯净”源码、补丁和建构指令的清晰描述减轻了发行软件新版本所带来的维护负担。
32.1. RPM 的设计目标为了理解如何使用 RPM,我们应该先来了解 RPM 的设计目标: 可升级性使用 RPM,你可以不必全盘重装就可以在系统上升级个别组件。当你得到一个基于 RPM 的操作系统的新发行版本(如 Red Hat Linux),你不必重新安装你的系统(基于其它打包系统的操作系统需要重装)。RPM 允许智能化、自动化地就地升级你的系统。软件包中的配置文件在升级中被保留,因此你不会丢失定制的设置。你不需要特殊的升级文件来升级某软件包,因为在系统上安装和升级软件包使用同样的 RPM 文件。 强大的查询功能RPM 被设计来提供强大的查询功能。你可以在整个数据库中搜索软件包或某些特定文件。你还可以轻易地了解到哪个文件属于哪个软件包,软件包来自哪里。RPM 软件包的文件包括在被压缩的归档中,其中有定制的二进制档头,该档头内包含关于软件包及其内容的信息,允许你快速简捷地查询个体软件包。 系统校验另一项强大的功能是软件包校验。如果你担心你可能删除了某软件包上的一个重要文件,只需校验该软件包即可。任何异常情况都会向你通知。到时,你可以在必要时重装该软件包。你修改过的配置文件在重装中会被保留。 纯净源码一个重要的设计目标是允许使用与软件的原创者所发行源码一致的“纯净”软件源码。使用 RPM,你会有纯净源码、使用过的补丁、以及完整的建构指令。这是一个重要的优越性。首先,如果程序的新版本被推出,你不必从头开始编译。你可以看一看补丁来判定你 可能 需要做什么。使用这种技术,所有内编译的默认值,以及为正确建构软件而进行的任何改变都一目了然。 保持源码纯净的目的似乎只对开发者来说是重要的,但是它也会给终端用户带来高质量的软件。我们想在此感谢 BOGUS 的发行人员,感谢他们最先开创了纯净源码这一概念。 32.2. 使用 RPMRPM 有五种基本操作模式(不包括软件包建构):安装、删除安装、升级、查询和校验。本章节包括对每一模式的总览。想了解完整的选项和细节,请使用 rpm --help 命令,或阅读 第 32.5 节 中关于 RPM 的信息。 32.2.1. 寻找 RPM 软件包在使用 RPM 之前,你必须知道要到哪里去寻找它们。在互联网上搜索会返回许多 RPM 仓库,但是如果你要找的是由 Red Hat 建构的 RPM 软件包,你可以在下面几个地方找到它们:
32.2.2.安装典型的 RPM 软件包名称类似于 foo-1.0-1.i386.rpm 。该文件名包括软件包名称( foo )、版本( 1.0 )、发行版本( 1 )、以及体系( i386 )。安装软件包简单之极,登录为根用户,然后在 shell 提示下键入下面的命令:
如果安装成功,你会看到如下所示的输出:
如上面所示,RPM 显示软件包的名称,然后在软件包被安装时在屏幕上打印井号来显示安装进度。 从 RPM 版本 4.1 开始,在安装或升级软件包时会检查软件包的签名。如果签名校验失败,你就会看到如下所示的错误消息:
如果它是新的、只针对文件头的签名,你会看到如下所示的错误消息:
如果你没有安装合适的钥匙来校验签名,消息中就会包含 NOKEY ,如:
关于校验软件包签名的详细信息,请参阅第 32.3 节。
虽然安装软件包旨在简单易行,但是你有时也会看到错误。 32.2.2.1.软件包已安装如果某软件包的同一版本已经安装,你就会看到:
如果你在软件包已安装的情况下仍打算安装同一版本的软件包,你可以使用 --replacepkgs 选项,它告诉 RPM 来忽略这个错误:
如果从 RPM 安装的文件被删除了,或者你想安装 RPM 中的最初配置文件,该选项就会很有用。 32.2.2.2.文件冲突如果你试图安装的软件包中包含已被另一个软件包或同一软件包的早期版本安装了的文件,你会看到:
要使 RPM 忽略这个错误,使用 --replacefiles 选项:
32.2.2.3.未解决的依赖关系RPM 软件包可能“依赖”于其它软件包,这意味着它们需要安装其它软件包才能正确运行。如果你试图安装具有未解决依赖关系的软件包,你会看到:
如果你安装的是 Red Hat,它通常会向你建议解决依赖关系所需的软件包。在 Red Hat Linux 光盘或 Red Hat FTP 站点(或镜像)上找到这个软件包,使用以下命令来添加:
如果这两个软件包都安装成功,你会看到:
如果它不向你建议解决依赖关系所需的软件包,你可以试用 --redhatprovides 选项来判定哪个软件包包含所需的文件。你需要安装 rpmdb-redhat 软件包才能使用这个选项。
如果包含 bar.so.2 的软件包在来自 rpmdb-redhat 软件包的安装了的数据库中,该软件包的名称就会被显示:
如果你想强制安装(不是好办法,因为软件包可能不能够正确运行),使用 --nodeps 选项。 32.2.3.删除安装删除软件包和安装软件包一样简单。在 shell 提示下键入下面的命令:
你在删除安装某软件包时也会遇到依赖关系错误,当另一个已安装的软件包依赖于你试图删除的软件包时,依赖关系错误就会发生。例如:
要使 RPM 忽略这个错误,并强制删除该软件包(不是个好办法,因为依赖于它的软件包可能无法正常运行),使用 --nodeps 选项。 32.2.4.升级升级软件包和安装类似。在 shell 提示下键入以下命令:
你在上面的例子里看不到的是,RPM 自动删除 foo 软件包的任何老版本。事实上,你可能想一直使用 -U 来安装软件包,因为即便没有安装软件包的任何先前版本,它也可以用来安装该软件包。 因为 RPM 对软件包和配置文件执行智能升级,你可能会看到和下面相似的消息:
这条消息意味着你对配置文件所作的改变可能不会和软件包中的新配置文件“前向兼容”,因此,RPM 保存了你的原始文件,并安装了一个新文件。你应该调查一下这两个配置文件的区别,然后尽快地解决这些区别来确保系统继续正确运行。 升级实际上是删除和安装的组合,因此,在 RPM 升级中,你除了遇到删除和安装中会遇到的错误外,还会看到另一个错误。如果 RPM 认为你试图升级到软件包的 老 版本,你会看到:
要使 RPM 强制“升级”,使用 --oldpackage 选项:
32.2.5.刷新刷新软件包和升级软件包相似。在 shell 提示下键入以下命令:
RPM 的刷新选项比较在命令行上指定的软件包的版本和你的系统上已安装的版本。当 RPM 的刷新选项处理的版本比你已安装的版本更新,它就会被升级到更新的版本。然而,如果某软件包先前没有安装,RPM 的刷新选项将不会安装该软件包。这和 RPM 的升级选项不同,因为不管该软件包的老版本是否已被安装,升级选项 都会 安装该软件包。 RPM 的刷新选项可以用于单个软件包或一组软件包。如果你刚刚下载了大量不同的软件包,你只想升级那些已安装在你的系统上的软件包,刷新即可达到目的。如果使用刷新,你不必在使用 RPM 前从下载的软件包组中删除不必要的软件包。 在这种情况下,你单使用下面的命令就可以了:
RPM 将只会自动升级那些已经在系统上安装的软件包。 32.2.6.查询使用 rpm -q 命令来查询安装的软件包的数据库。 rpm -q foo 命令会显示安装的软件包 foo 的名称、版本、和发行号码:
与其指定软件包名称,你可以和 -q 一起使用下列选项来指定你要查询的软件包。它们叫做 软件包指定选项 。
指定被查询的软件包要显示哪些信息的方法多种多样。以下选项用来选择你要搜索的信息类型。它们叫做 信息选择选项 。
对于用来显示文件列表的选项,你可以在命令后添加 -v 来用你熟悉的 ls -l 格式来显示文件列表。 32.2.7.校验校验软件包比较从某软件包安装的文件和原始软件包中的同一文件的信息。它校验每个文件的大小、MD5 值、权限、类型、所有者、以及组群。 rpm -V 命令校验软件包。你可以查询任何 软件包选择选项 列举的条目来指定要校验的软件包。校验的最简单用法是 rpm -V foo ,它校验所有在 foo 软件包内的文件是否和最初安装时一样。例如:
如果一切都被校验正确,就不会有输出。如果出现矛盾,它们就会被显示。输出的格式为包括八个字符的字符串( c 代表配置文件),然后是文件名称。这八个字符的每个字符都代表一种文件属性的比较结果,所比较的是文件的属性和 RPM 数据库中记录的属性。单用一个 . (点)意味着测试通过。下列字符代表某类测试失败:
如果你看到任何输出,最好开动脑筋来判断是应该删除还是重新安装该软件包,或用另一种方法来解决这个问题。 32.3.检查软件包的签名如果你想校验某软件包是否被损坏或篡改过,只需检查 md5sum。在 shell 提示下键入下面的命令(把 coolapp 换成 RPM 软件包的文件名):
你会看到消息“ <rpm-file> : md5 OK ”。这条消息意味着文件在下载中没有被损坏。要看到更详细的消息,把命令中的 -K 换成 -Kvv 。 另一方面,创建软件包的开发者是不是值得信任?如果该软件包使用开发者的 GnuPG 钥匙(key) 被 签名(signed) ,你就会知道这位开发者的身份确实如他们所言。 RPM 软件包可以使用 Gnu 隐私卫士 (或称 GnuPG )来签名,从而帮助你肯定下载软件包的可信任性。 GnuPG 是安全通讯工具;它是 PGP(一种电子隐私程序)加密技术的完全和免费的替换品。使用 GnuPG,你可以验证文档的有效性,在其它通讯者之间加密或解密数据。GnuPG 还具有解密和校验 PGP 5. x 文件的能力。 在 Red Hat Linux 的安装过程中,GnuPG 被默认安装。这样,你便可以立即开始使用 GnuPG 来校验你从 Red Hat 收到的软件包。首先,你需要导入 Red Hat 的公钥。 32.3.1.导入钥匙要校验 Red Hat 软件包,你必须导入 Red Hat GPG 公钥。要导入公钥,在 shell 提示下执行以下命令:
要显示用来校验 RPM 而安装的钥匙列表,执行以下命令:
对于 Red Hat 公钥而言,其输出应包括:
要显示关于某一指定钥匙的细节,使用 rpm -qi ,其后跟随前一命令的输出:
32.3.2.校验软件包的签名导入了建构者的 GnuPG 公钥后,要检查 RPM 文件的 GnuPG 签名,使用以下命令(把 <rpm-file> 换成 RPM 软件包的名称):
如果一切顺利,你会看到这条消息: md5 gpg OK 。这意味着软件包的签名已被校验,该软件包没有被损坏。
32.4.用 RPM 在朋友面前大显身手RPM 对于管理系统、诊断和修正问题都极有用途。要理解它的选项的最佳途径是通过示范。
以上不过是几个例子。随着你的使用经验的增加,你会发现更多 RPM 的用途。 |








