The Red Hat Package Manager (RPM),是一个开放的软件包管理系统。它工作于Red Hat Linux 以及其它Linux 和UNIX 系统,可被任何人使用。. 红帽子软件公司鼓励其它厂商来了解RPM 并在自己的产品中使用它。RPM 的发布基于GPL 协议。
对于最终用户来说,RPM所提供的众多功能使维护系统要比以往容易的多。安装,卸载和升级RPM软件包均是只需一条命令即可完成,所有烦琐的细节问题无须您费心。RPM维护一个所有已安装的软件包和文件的数据库,可以让您进行功能 强大的软件包查询和验证工作。在软件包升级过程中, RPM 会对配置文件进行特别处理, 因此您绝对不会丢失以往的定制信息 -- 这对于直接使用.tar.gz 文件是不可能的。
对于程序员, RPM 可以让您连同软件的源代码打包成源代码和二进制软件包供最终用户使用.这个过程十分简单,整个过程由一个主文件和可能的补丁程序组成。RPM在软件的新版本发布时,这种"原始"源代码,补丁程序和软件生成指令的清晰描述简化了软件包的维护工作。
8.1 RPM 设计目标 在准备了解如何使用RPM之前,理解RPM的设计目标是有所裨益的。
软件包的可升级性 使用RPM您可以单独升级系统中的某些部件而无须整个重新安装。当您获得了一套基于RPM 新版操作系统时(如红帽子 Linux), 您无须重新安装机器(而基于其它软件打包机制的常常需要这么做). RPM 允许智能的,全自动的就地升级系统。包中的配置文件在升级过程中会予以保留, 因此您不会丢失定制信息。
功能强大的软件包信息查询 RPM 拥有功能强大的查询选项. 您可以搜索数据库来查询软件包或文件。您可以简便的查出某个文件属于哪个软件包或出自哪儿。RPM软件包中的文件以压缩格式存放,拥有一个定制的二近制头文件,其中包含有关包和内容的有用信息,可以让您对单个软件包的查询简便又快速。
系统验证 另一项强大的功能是进行软件包的验证。如果您担心误删了某个软件包中的某个文件,您就可以对它进行验证。任何非正常现象将会被通知. 此时,如果需要的话,您可以重新安装该软件包。在重新安装过程中,所有被修改过的配置文件将被保留。
保持软件包的原始特征 一项严格的设计目标是要保持软件包的原始特征, 就象该软件的原始发布者发布软件时那样。通过使用RPM,您可以拥有最初的软件和要使用的任何补丁程序还有详细的软件构建信息。从几方面来说这是非常之大的优点。.例如,当某个软件的新版本发行时,您无须从头编译所有文件。您可以看一看补丁程序都需要做些什么。在这种方式下,所有编译条件以及为生成软件所做的修改都将是可见的。
该目标对软件开发人员来说更为重要, 但也会为最终用户提供更高质量的软件。我们要感谢 BOGUS distribution 的软件人员提出的这个概念。
8.2 使用RPM RPM 有五种基本的操作方式(不包括创建软件包): 安装, 卸载, 升级, 查询,和验证。本节简要的描述了这五种操作。使用命令 rpm --help, 或查阅第8.4 节以获得更为全面的信息。
8.2.1 安装 RPM 软件包通常具有类似foo-1.0-1.i386.rpm 的文件名。其中包括软件包的名称(foo), 版本号(1.0), 发行号(1), 和硬件平台(i386). 安装一个软件包只需简单的键入以下命令:
$ rpm -ivh foo-1.0-1.i386.rpm
foo ####################################
正如您所看到的, RPM 将会打印出软件包的名字(并不一定与文件名相同), 而后打印一连串的#号以表示安装进度。
软件包的安装被设计的尽量简单易行, 但是可能会发生几个错误::
8.2.1.1 软件包已被安装 如果您的软件包已被安装, 将会出现以下信息:
$ rpm -ivh foo-1.0-1.i386.rpm
foo package foo-1.0-1 is already installed
error: foo-1.0-1.i386.rpm cannot be installed
如果您仍旧要安装该软件包, 您可以在命令行上使用--replacepkgs 选项,这将忽略该错误信息。
8.2.1.2 文件冲突
如果您要安装的软件包中有一个文件已在安装其它软件包时安装,会出现以下错误信息:
# rpm -ivh foo-1.0-1.i386.rpm
foo /usr/bin/foo conflicts with file from bar-1.0-1
error: foo-1.0-1.i386.rpm cannot be installed
要想让RPM 忽略该错误信息, 请使用--replacefiles 命令行选项。.
8.2.1.3 未解决依赖关系 RPM软件包可能依赖于其它软件包,也就是说要求在安装了特定的软件包之后才能安装该软件包。如果在您安装某个软件包时存在这种未解决的依赖关系。会产生以下信息:
$ rpm -ivh bar-1.0-1.i386.rpm
failed dependencies:
foo is needed by bar-1.0-1
您必须安装完所依赖的软件包,才能解决这个问题。如果您想强制安装(这是个坏主意,因为安装后的软件包未必能正常运行), 请使用--nodeps 命令行选项。
8.2.2 卸载 卸载软件包就象安装软件包时一样简单:
$ rpm -e foo
注意这里使用软件包的名字name ``foo'', 而不是软件包文件的名字file ``foo-1.0-1.i386.rpm''.
如果其它软件包依赖于您要卸载的软件包,卸载时则会产生错误信息。如:
$ rpm -e foo
removing these packages would break dependencies:
foo is needed by bar-1.0-1
要想RPM忽略该错误信息继续卸载的话(这可不是一个好主意 ,因为依赖于该软件包的程序可能无法运行), 请使用--nodeps 命令行选项.
8.2.3 升级 升级软件包和安装软件包十分类似:.
$ rpm -Uvh foo-2.0-1.i386.rpm
foo ####################################
RPM将自动卸载已安装的老板本的foo 软件包,您不会看到有关信息。事实上您可能总是使用 -U 来安装软件包, 因为即便以往未安装过该软件包,也能正常运行。
因为RPM 执行智能化的软件包升级,自动处理配置文件,您将会看到如下信息:
saving /etc/foo.conf as /etc/foo.conf.rpmsave 这表示您对配置文件的修改不一定能向上兼容于该软件包中的配置文件。因此,RPM 会备份老文件,安装新文件。您应当尽快解决这两个配置文件的不同之处,以使系统能持续正常运行。
因为升级其实就是软件包的卸载与安装的综合,您可能会遇见那些操作中所可能发生的错误。有一处不同,那就是当您使用旧版本的软件包来升级新版本的软件时,会产生以下错误信息:
$ rpm -Uvh foo-1.0-1.i386.rpm
foo package foo-2.0-1 (which is newer) is already installed
error: foo-1.0-1.i386.rpm cannot be installed
要使RPM 坚持这样“升级”,就使用 --oldpackage 命令行参数。
8.2.4 查询 使用命令rpm -q来查询已安装软件包的数据库。简单的使用命令 rpm -q foo 会打印出foo软件包 的包名 ,版本号,和发行号:
$ rpm -q foo
foo-2.0-1
除了指定软件包名以外,您还可以连同-q使用以下选项来指明要查询哪些软件包的信息。这些选项被称之为 “软件包指定选项“:
-a 查询所有已安装的软件包.
-f
将查询包含有文件. 的软件包
-p 查询软件包文件名为. 的软件包
有几种方式来指定查询软件包时所显示的信息。以下选项用于选择您感兴趣的信息进行显示。它们被称作信息选择选项:
-i 显示软件包信息,如描述, 发行号, 尺寸, 构建日期, 安装日期, 平台, 以及其它一些各类信息。
-l 显示软件包中的文件列表。
-s 显示软件包中所有文件的状态。.
-d 显示被标注为文档的文件列表(man 手册, info 手册, README's, etc).
-c 显示被标注为配置文件的文件列表。这些是您要在安装完毕以后加以定制的文件(sendmail.cf, passwd, inittab, etc).
对于那些要显示文件列表的文件, 您可以增加-v 命令行选项以获得如同 ls -l 格式的输出。
8.2.5 验证
验证软件包是通过比较compares从软件包中安装的文件和软件包中的原始文件信息来进行的。除了其它一些东西,验证主要是比较文件的尺寸, MD5 校验码, 文件权限, 类型, 属主和用户组等。
rpm-V命令用来验证一个软件包。您可以使用任何包选择选项来查询您要验证的软件包 命令rpm -V foo 将用来验证foo软件包。又如:
验证包含特定文件的软件包:
rpm -Vf /bin/vi
验证所有已安装的软件包:
rpm -Va
根据一个RPM来验证某个软件包:
rpm -Vp foo-1.0-1.i386.rpm
如果您担心你的RPM数据库已被破坏,就可以使用这种方式。.
如果一切均校验正常将不会产生任何输出。如果有不一致的地方,就会显示出来。输出格式是8位长字符串, ``c'' 用以指配置文件, 接着是文件名. 8位字符的每一个用以表示文件与RPM数据库中一种属性的比较结果 。``.'' (点) 表示测试通过。.以下字符表示某种测试的失败:
5
MD5 校验码
S
文件尺寸
L
符号连接
T
文件修改日期
D
设备
U
用户
G
用户组
M
模式e (包括权限和文件类型)
如果有信息输出, 您应当认真加以考虑,是删除,重新安装,还是修正出现的问题。
8.3 令人惊异的RPM
RPM是一个用于系统维护和诊断,解决问题的十分有用的工具。了解各种选项用法的最好方式是通过例子来学习。
比如您误删了一些文件, 但您不能肯定到底都删除那些文件。如果您想验证一下整个系统看看都丢失了那些文件的话,您可以键入:
rpm -Va
若是一些文件丢失了或已被损坏, 您就可以重新安装或先卸载再安装该软件包。
如果您碰到了一个自己不认识的文件,要想查处它属于哪个软件包,您可以输入以下命令
rpm -qf /usr/X11R6/bin/xjewel
而输出的结果会是:
xjewel-1.6-1
如果发生综合以上两个例子的情况,如文件/usr/bin/paste.出了问题。您想验证一下拥有该文件的软件包,可由不知道软件包的名字,您这时可以简单的键入:
rpm -Vf /usr/bin/paste
这样相应的软件包就会被验证。.
如果您想了解一个您正在使用的程序的详细信息, 您可以键入如下命令来获得拥有该程序的软件包中的文档信息:
rpm -qdf /usr/bin/ispell
输出结果为:
/usr/man/man4/ispell.4
/usr/man/man4/english.4
/usr/man/man1/unsq.1
/usr/man/man1/tryaffix.1
/usr/man/man1/sq.1
/usr/man/man1/munchlist.1
/usr/man/man1/ispell.1
/usr/man/man1/findaffix.1
/usr/man/man1/buildhash.1
/usr/info/ispell.info.gz
/usr/doc/ispell-3.1.18-1/README
您发现了一个新的koules RPM,但您不知道它是什么东西.,您可以键入如下命令:
rpm -qip koules-1.2-2.i386.rpm
输出结果大概为:
Name : koules Distribution: Red Hat Linux Colgate
Version : 1.2 Vendor: Red Hat Software
Release : 2 Build Date: Mon Sep 02 11:59:12 1996
Install date: (none) Build Host: porky.redhat.com
Group : Games Source RPM: koules-1.2-2.src.rpm
Size : 614939
Summary : SVGAlib action game; multiplayer, network
Description :
This arcade-style game is novel in conception and
excellent in execution. No shooting, no blood, no guts,
no gore. The play is simple, but you still must develop
skill to play. This version uses SVGAlib to run on a
graphics console.
现在您想了解koules RPM 所安装的文件. 您可以键入:
rpm -qlp koules-1.2-2.i386.rpm
输出结果为:
/usr/man/man6/koules.6
/usr/lib/games/kouleslib/start.raw
/usr/lib/games/kouleslib/end.raw
/usr/lib/games/kouleslib/destroy2.raw
/usr/lib/games/kouleslib/destroy1.raw
/usr/lib/games/kouleslib/creator2.raw
/usr/lib/games/kouleslib/creator1.raw
/usr/lib/games/kouleslib/colize.raw
/usr/lib/games/kouleslib
/usr/games/koules
以上只是几个例子. 随着您进一步的使用系统,您会发现rpm的更多用途。
8.4 其它一些RPM 资源
要想了解有关RPM的更多信息,请参阅rpm的man 手册, rpm的屏幕帮助信息(rpm --help), 和以下站点上的RPM 文档资料:
http://www.rpm.org/
还有一本名为Maximum RPM 的参考书, 它可以从Red Hat Software 和当地书店买到。该书包含了最终用户和软件包编制者所需的丰富信息。该书的联机版本可以在以下站点找到 http://www.rpm.org/. 还有一个名为rpm-list@redhat.com.的邮件讨论组用于讨论与RPM相关的问题。该讨论组还被收集于http://www.redhat.com/support/mailing-lists/. 要想订阅该讨论组,可以起草一封邮件,标题栏内注明subscribe,发送到以下地址: rpm-list-request@redhat.com 。
(责任编辑:笑虎)