使用 Red Hat 包管理器
系统管理员面临的平凡但必要的职责之一是软件管理。应用程序和补丁来来往往。经过数月或数年添加、升级和删除软件应用程序之后,通常很难说清系统上到底有什么:软件包的版本及其依赖的应用程序。通常,旧文件最终会留在那里,因为没有人再确定它们的所有者。更糟糕的是,您可能会安装一个新的软件包,却发现它覆盖了当前已安装软件包中的关键文件。
Red Hat 包管理器 (RPM) 旨在消除这些问题。借助 RPM,软件以离散的“软件包”进行管理——软件包是构成软件的文件集合,以及用于添加、删除和升级这些文件的说明。RPM 还通过在覆盖现有文件之前备份它们,确保您永远不会丢失配置文件。RPM 还跟踪系统上当前安装的应用程序版本。RPM 虽然以 Red Hat 命名,但 RPM 系统也是 Caldera OpenLinux、SuSE 以及所有基于 Red Hat 的发行版(如 Mandrake)的一部分。
从广义上讲,软件包是一个容器。它包含完成特定任务所需的文件,例如软件应用程序中的二进制文件、配置文件和文档文件。它还包括关于这些文件应如何以及在何处安装以及如何完成安装的说明。软件包还包括关于如何卸载自身的说明。
RPM 软件包通常通过文件名来标识,文件名通常由软件包名称、版本、发行版以及构建软件包的架构组成。例如,软件包 penguin-3.26.i386.rpm 表示这是(虚构的)Penguin Utilities 软件包,版本 3,发行版 26。i386 表示它是为 Intel 架构编译的。请注意,虽然这是 RPM 软件包的常规命名方法,但实际的软件包名称、版本和架构信息是从 RPM 的文件内容中读取的,而不是从文件名中读取的。您可以将文件重命名为 blag.rpm,但它仍然会安装为 penguin-3.26.i386.rpm。
RPM 的核心是 RPM 数据库。它跟踪软件包中每个文件的位置、版本等等。RPM 还维护每个文件的 MD5 校验和。校验和用于确定文件是否已被修改,如果您需要验证一个或多个软件包的完整性,这将非常方便。RPM 数据库使添加、删除和升级软件包变得容易,因为 RPM 知道要处理哪些文件以及将它们放在哪里。RPM 还处理软件包之间的冲突。例如,如果已安装的软件包 X 具有名为 /etc/someconfig 的配置文件,并且您尝试安装想要安装同一文件的新软件包 Y,则 RPM 将通过在新文件写入之前备份您之前的配置文件来管理此冲突。
RPM 系统的主力是程序 rpm。rpm 是负责维护 RPM 数据库的“驱动程序”。在 rpm 的 10 种操作模式中,我将介绍四种最常见的模式:查询、安装、升级和删除。
RPM 的优势之一是,理想情况下,它可以说明系统上的每个系统文件或应用程序文件。使用 RPM 的查询模式,您可以确定系统上安装了哪些软件包,或者哪些文件属于特定软件包。如果您想查找属于特定软件包的文件,这将有很大帮助。查询模式还可用于在安装 RPM 文件之前识别该文件中的文件。这使您可以在实际写入文件之前查看将要安装在系统上的文件。
-q 开关用于查询软件包。单独使用 -q 将为您提供指定软件包的版本。如果您想查看系统上安装了哪个版本的 tin 新闻阅读器,您将发出以下命令
# rpm -q tin tin-1.22-12
如果您想查看哪个已安装的软件包拥有某个文件,请使用 -f 修饰符。在这里,我们要查看哪个软件包拥有 /etc/passwd。
# rpm -q -f /etc/passwd setup-1.9.2-1同样,如果您想生成属于某个软件包的文件列表,请使用 -l 修饰符
# rpm -q -l tin /usr/bin/rtin /usr/bin/tin /usr/doc/tin-1.22 /usr/doc/tin-1.22/CHANGES /usr/doc/tin-1.22/FTP /usr/doc/tin-1.22/HACKERS /usr/doc/tin-1.22/INSTALL /usr/doc/tin-1.22/INSTALL.NNTP /usr/doc/tin-1.22/MANIFEST /usr/doc/tin-1.22/README /usr/doc/tin-1.22/TODO /usr/man/man1/tin.1-q 最常见的修饰符之一是 -a,查询系统上的所有软件包。此系统安装了 350 个软件包,但这是截断的输出
# rpm -q -a setup-1.9.2-1 filesystem-1.3.2-3 basesystem-4.9-3 ldconfig-1.9.5-8 ... code_crusader-1.1.0-1 lyx-0.11.53-1 xforms-0.86-1 wine-981211-1列表 1
要获得有关软件包的更多信息,请使用 -i(信息)修饰符
# rpm -q -i passwd
输出如列表 1 所示。以下是一些最重要的条目的含义
名称:软件包的名称
版本:软件包的版本
发行版:此软件包使用相同版本的软件发布的次数
安装日期:此软件包安装在系统上的时间
组:您的 RPM 数据库分为多个组,这些组描述了软件的功能。每次安装软件包时,都会对其进行相应的分组。
大小:软件包中所有文件的总大小(以字节为单位)
许可证:原始软件的许可证
# rpm -q -p glibc.rpm glibc-2.0.7-29
顾名思义,安装模式用于将 RPM 软件包安装到您的系统上。安装软件包是通过 -i 选项完成的
# rpm -i penguin-3.26.i386.rpm
在安装软件包之前,RPM 会执行多项检查。首先,它确保您尝试安装的软件包尚未安装。RPM 不允许您在自身之上安装软件包。它还会检查您是否未安装软件包的旧版本。接下来,RPM 会执行依赖项检查。某些软件包依赖于首先安装其他软件包。在本示例中,您刚刚下载了最新 RPM 版本的 Penguin 实用程序,现在想要安装它。
# rpm -i penguin-3.26.i386.rpm failed dependencies: iceberg >= 7.1 is needed by penguin-3.26.i386.rpm此错误表明 penguin 软件包安装失败,因为它需要版本等于或大于 7.1 的 iceberg 软件包。您必须找到并安装 iceberg 软件包,以及 iceberg 所需的任何软件包。
最后,RPM 检查以查看安装此软件包是否会覆盖任何配置文件。RPM 尝试就如何处理冲突做出明智的决定。如果 RPM 将现有配置文件替换为来自新软件包的配置文件,则会在屏幕上打印警告。
# rpm -I penguin-3.26.i386.rpm warning: /etc/someconfig saved as /etc/someconfig.rpmsave
由您来查看这两个文件并确定需要进行哪些修改(如果有)。
-u 开关用于升级现有软件包。例如,如果已安装 Penguin Utilities 版本 3.25,则发出命令
# rpm -u penguin-3.26.i386.rpm
会将软件包的旧版本替换为新版本。实际上,RPM 升级模式的怪癖之一是旧软件包不必首先存在:在这种情况下,-u 的工作方式与 -i 完全相同。
rpm -e 命令从您的系统中删除软件包。与安装模式一样,RPM 在允许您删除软件包之前会进行一些内务处理。首先,它会进行依赖项检查,以确保没有其他软件包依赖于您要删除的软件包。如果您修改了任何配置文件,RPM 会复制该文件,在其末尾附加 .rpmsave,然后删除原始文件。最后,在从您的系统和 RPM 数据库中删除所有文件后,它会从数据库中删除软件包名称。
请非常小心地选择要从系统中删除的软件包。与大多数 Linux 实用程序一样,RPM 假设全知全能,并且会默默地让您自食其果。删除 passwd 或 kernel 软件包将是灾难性的。
Kirk Rafferty 担任 UNIX 系统管理员已有 12 年,并且在过去五年中一直使用和维护 Linux 系统。他的爱好包括彩弹射击、游戏和酿造科罗拉多州最好的自制啤酒。可以通过 kirk@rafferty.org 联系他进行评论。