RPM 软件包管理器是一套开放的软件包封装机制,除了 Fedora,在其它 Linux 和 Unix 操作系统上同样能够使用 RPM。红帽公司 (Red Hat, Inc.) 及 Fedora 项目组也建议其它软件厂商使用 RPM 来封装它们的产品。
RPM 软件包管理器是一套开放的软件包封装机制,除了 Fedora,在其它 Linux 和 Unix 操作系统上同样能够使用 RPM。红帽公司 (Red Hat, Inc.) 及 Fedora 项目组也建议其它软件厂商使用 RPM 来封装它们的产品。
RPM 基于 GPL (GNU 通用公共许协议) 发布的软件产品。
RPM 软件包管理器只能管理以 RPM 形式封装的软件包,并且 RPM 本身也是一个预先安装好的 rpm 形式的软件包。
对于终端用户而言,RPM 使得系统升级变得十分容易,同时只需要十分简单的命令就能完成 RPM 软件包的安装、卸载和升级。
RPM 为已安装的软件包,以及软件包所包含的文件建立了一份数据库,因此,你能够在系统上使用调用非常强大的请求和验证功能。
如果你更喜欢图形界面而不是命令行,你可以使用 PackageKit,详细信息请参考《PackageKit》
使用 RPM 升级/更新 软件包时,它会小心的处理你的配置文件,从而在软件升级之后依然保持你的自定义配置。而传统的 .tar.gz 软件包,并不能自动完成这项任务,而可能导致你的配置文件被覆盖。
对于开发人员而言,RPM 能够让你将软件源代码封装成源代码软件包和二进制软件包,然后供终端用户使用。这个过程十分简单,并且,RPM 会将单个文件与这个文件的补丁文件分离。通过这种分离结构,开发人员能够简单地创建和维护软件包的新版本。
理解 RPM 的设计意图,有利于帮助你了解如何使用 RPM,以及 RPM 的某些功能是如何实现的,在这个基本上,方便你更好的使用它对系统中的 RPM 软件包进行管理和维护。
理解 RPM 的设计意图,有利于帮助你了解如何使用 RPM,以及 RPM 的某些功能是如何实现的,在这个基本上,方便你更好的使用它对系统中的 RPM 软件包进行管理和维护。
可升级性:
使用 RPM,你能够单独的升级系统上某个单独的组件,而无需重新安装整个软件包或者整个系统。当你取得一个基于 RPM 软件格式的新操作系统 (如 Fedora ) 的发行版时,你无需在机器上重新安装一个 Fedora 操作系统,RPM 能够聪明地、全自动化地为你升级系统。并且,所有软件包配置文件中的自定义设置都将被保留。
RPM 软件包既可用于安装,也可用于升级软件包,如果你要升级某个软件包,只需获得最新的 rpm 软件包就行了。
强大的查询功能:
RPM 被设计成拥有强大的查询功能,你能够通过搜索整个数据库查询软件包或者是软件包中的文件。你能够查询出某个文件属于哪个软件包,或者软件包是从哪里取得的。
RPM 软件包中的所有文件被包含在一个压缩档案中,另外还有一个自定义的二进制头文件,其中包含了软件包的相关信息以及包含的内容。这样一来,查询单个软件包的信息,就变得更快速、更容易了。
系统验证
RPM 的另一个强大的特性就是软件包验证功能。如果你担心自己不小心删除了某个软件包中的重要文件,你能够通过验证软件包得知。如果被通知软件包异常,则可以通过重新安装软件包来解决,并且会保持你的现有的配置文件不被更改。
原软件源 (Pristine sources)
RPM 的另一个重大设计目标是允许使用原软件源 (Pristine Software Source)。RPM 将原软件源与软件的补丁分开。这种机制有几个原因,例如,当某个程序的新版本发布了,你不必重头开始编译整个程序,只需要查看补丁,看看可能需要执行哪些操作对程序进行更新,当然普通用户不太需要关注这一部分特性。
保持原软件源看起来只有软件开发人员很重要,但从结果上来看,它也使得终端用户能够得到更高质量的可用软件包。
RPM 一共有五个基本操作模式:安装、卸载、升级、查询和验证 。当然封装也算 RPM 的一大功能,但大众用户很少会用到。从本节开始,将逐个介绍 RPM 的五个基本操作模式。
RPM 一共有五个基本操作模式:安装、卸载、升级、查询和验证 。当然封装也算 RPM 的一大功能,但大众用户很少会用到。从本节开始,将逐个介绍 RPM 的五个基本操作模式。
获取 RPM 软件包
在使用任何 RPM 软件包之前,你必须先要知道从哪里能够取得它们。除了能从 Fedora 官方的软件包仓库取得由 Fedora 项目组创建的 RPM 软件包,也还能够通过互联网能够找到许多 RPM 软件包仓库,以及一些 RPM 软件包下载站点。
以下是常用来寻找 RPM 软件包的位置:
输入以下命令即可执行软件包的安装了,其中 -i 选择告诉 rpm 执行安装操作,v 和 h 选项不是必须的,它们的功能是用于显示一些输出信息和安装进程。
RPM 软件包的文件名称通常像 tree-1.5.2.2-4.fc12.x68_64.rpm。这个文件名中包含了软件包名称 (tree),版本号 (1.5.2.2),发行版 (4),操作系统主版本 (fc12) 以及 CPU 平台 (x86_64)。假设 tree-1.5.2.2-4.fc12.x86_64.rpm 软件包位于当前目录,在命令行中切换到 root 用户,输入以下命令即可执行软件包的安装了
其中 -i 选择告诉 rpm 执行安装(install)操作,v 和 h 选项不是必须的,它们的功能是用于显示一些输出信息和安装进程。
另外,你也能够使用 -U 选项来升级 (或安装) 软件包
就如你所看到的, 在执行软件包的安装/升级时,RPM 输出软件包的名称,并在后面打印一连串 # 号表示安装/升级进度。
当安装或升级软件包时,RPM 会自动检查软件包的签名。RPM 通过签名判断软件包是否经由被认可的机构。如果验证签名失败,则会看到以下信息:
如果你没有安装合适的密钥(key)用于验证软件包的签名,信息中则会包含 NOKEY 字样:
有关验证软件包签名的更多信息,请参考《验证软件包签名》
使用 RPM 命令安装软件包的常见问题包括:软件包已经被安装、文件冲突,以及未被解析的软件包依赖性。
如果某个名称和版本号都相同的软件包已经被安装在系统中,在使用 rpm 命令进行安装时则会输出以下信息,提示你软件已经被安装 (already installed)
使用 --replacepkgs 选项让 RPM 忽略上述错误信息,执行软件包的覆盖安装。
当你安装的某个软件包中包含的文件已经通过其它软件包安装到系统中,则会出现以下提示信息
使用 --replacefiles 选择能够忽略这个错误
RPM 软件包有时候需要依赖于其它的软件包,意思就是说在这个软件包安装之前,必须先安装一些其它的软件包才能保证它的正常运行。如果安装的软件包的依赖性没有被解决,则会显示类似于以下的输出信息
以上输出说明 foo-1.0-1.fc12.x86_64 这个软件包依赖于 bar.so.3 这个文件,并且建议你通过安装 bar-3.1.1.fc12.x86_64 软件包来解决这个依赖性问题。这时你只需要找到这个依赖性软件包,并将其安装即可。
但有时 RPM 不会作出以上提示,这时可以使用 --whatprovides 选项加上依赖的文件名进行查找
由输出结果可知,通过安装 bar-3.1.1.fc12.i586 软件包就能解决这个问题了 :D
使用 RPM 卸载软件包十分简单,只需要通过命令行中输入 rpm -e <package_name> 即可,对于未解决依赖性的软件包,可以使用 --provides 选项可以查询文件所需的软件包
使用 RPM 卸载软件包十分简单,只需要通过命令行中输入 rpm -e <package_name> 即可
如果你要卸载的软件包被其它软件包所依赖,系统则会提示"依赖性错误"
在《使用 RPM 安装软件包的常见问题》中提到,对于未解决依赖性的软件包,可以使用 --provides 选项可以查询文件所需的软件包
升级软件包与安装软件包的命令十分相似,只是升级使用 -U 选项,而安装是使用 -i 选项。当系统中没有安装先前版本的软件包时,-U 选项则会执行安装的操作。
升级软件包与安装软件包的命令十分相似,只是升级使用 -U 选项,而安装是使用 -i 选项。
假设名为 tree-1.5.3.0-1.fc12.x86_64.rpm 的软件名位于当前目录,并且我们已经在系统中安装了名为 tree-1.5.2.2-4.fc12.x86_64.rpm 的软件包,我们则可以通过以下命令对软件包进行升级
作为升级软件包进程的一部分,RPM 会自动卸载之前老版本的 tree 软件包。当系统中没有安装先前版本的软件包时,-U 选项则会执行安装的操作。因此使用 -U 选项,即能够安装,也能够升级软件包。
RPM 会聪明地处理配置文件以名升级过程中出现配置丢失,所以你可能会在升级软件包时看到以下信息
出现这个消息,则说明新版本软件包中的配置文件不向前兼容(forward-compatible),所以 RPM 为你备份并添加一份最新的配置文件。 你需要了解两份配置文件的不同,并解决其中的问题,从而保证你能够将旧配置文件中的设置过渡到新的软件中。
或者,RPM 不会变更旧的配置文件,而是将新的配置文件保存为 foo.conf.rpmnew。不论是哪种情况,依然建议你查看两份配置的不同,并解决配置方面的问题。比对两个文件,可以使用 diff 程序。
如果你想将软件包更新为版本号更低的软件包,则会得到以下输出
使用 --oldpackage 选项,能够强制地将软件包更新为旧版本的软件包
更新 (Freshening) 选项 与升级 (Upgrading) 选项十分相似,唯一的不同是 -F 选项只会更新系统中已安装的软件包,对于没有安装的软件包,不会像 -U 选项那样,直接对其进行安装。
更新 (Freshening) 选项 与升级 (Upgrading) 选项十分相似,唯一的不同是 -F 选项只会更新系统中已安装的软件包,对于没有安装的软件包,不会像 -U 选项那样,直接对其进行安装。
RPM 的 -F 选项会对比已安装的软件包的版本和要提供的软件包的版本,如果提供的软件包的版本更新,RPM 则执行升级操作。但当系统中没有安装某软件包的老版本时, -F 选项不会安装软件包 (-U 选项会执行安装操作)。
以下是一个使用 -F 选项的场合。比如你得到一张新的软件包光盘,你想对系统中的软件包做一次大面积地更新,却又不想安装那些光盘中有,而系统中没有安装的软件包。使用 -F 选项,就能做到只对安装的软件包进行更新。
RPM 数据库中存储了安装在系统中所有软件包的信息,数据库的位置是 /var/lib/rpm/ 使用这个数据库,你能够查询到系统中安装了哪些软件包、软件包的版本号是多少、软件包中的文件自安装之后进行了多少更改,以及其它方面查询。
RPM 数据库中存储了安装在系统中所有软件包的信息,数据库的位置是 /var/lib/rpm/ 使用这个数据库,你能够查询到系统中安装了哪些软件包、软件包的版本号是多少、软件包中的文件自安装之后进行了多少更改,以及其它方面查询。
查询这个数据库,需要使用 -q 选项。例如使用 rpm -q <package_name> 命令查询软件包是否已经安装,对于已安装的软件包,则会返回 rpm 包的全名
在查询时,你还可以通过使用以下选项与 -q 选项配合,加强 RPM 的查询功能 ( rpm 的查询功能十分强大而且有效,更多信息可以参考 man rpm)
请求软件包信息 以下选项用于指定以何种形式显示你所搜索的信息,这些选项被称为“软件包查询选项 (Package Query Options)”
为以上给出文件列表的选项加上 -v 选项,能够显示长文件信息,格式与 ls -l 相似。
验证软件包,通常是指比较安装的文件的信息与原软件包中的信息进行比对。其中包含每个文件的大小、MD5 校验值、权限、类型、用户及用户组的验证。
验证软件包,通常是指比较安装的文件的信息与原软件包中的信息进行比对。其中包含每个文件的大小、MD5 校验值、权限、类型、用户及用户组的验证。
使用 -V 选项对软件包进行验证,例如使用 rpm -V tree 命令,就会将 tree 软件包中的所有文件与它们最开始的安装时的情况进行对比验证。
验证指定的文件可以使用以下命令
结合 -a 参数,可以对系统中所有安装的软件包进行验证(所需要时间较长)
验证已安装的 RPM 软件包
如果验证结果通过,系统则不会给出任何输出。如果验证时发现有差异,则会显示相关文件的验证信息。输出的前8位为验证状态,验证通过的那一位以点 (.) 表示,验证不通过则以相应字符表示,以下为每个字符所表示的含义
当验证的软件包出现问题,并给出以上输出时,请你用你认为最好的方式去处理它,包括移除软件包、重装软件包或者用其它各种方法对问题进行修复
如果你希望检查一个软件包是否损坏或者被窜改,你可以通过 RPM 命令检查软件包的 MD5 校验值。并且在成功导入 GnuPG 密钥之后,还能使用 RPM 命令对 RPM 软件包进行签名验证
如果希望检查一个软件包是否损坏或者被窜改,可以通过以下命令检查软件包的 MD5 校验值 (注意将 <rpm_file> 更改为你希望检查的软件包的路径或名称)
类似于上下输出结果则表示得到的是正确的(未损坏的、未被篡改的)软件包
如果希望看到详细的输出信息,可以使用 -Kvv 选项代替 -K 选项。
另外,怎样辨别软件包的真正开发者是不是可信的呢 ? 如果软件包使用了开发人员的 GnuPG 密钥进行签名,你就能知道谁是真正的软件开发者了。没有 GPG 签名的软件包不一定不可信,但我们更愿意相信有签名的软件包。
通过使用 GnuPG (Gnu Private Guard) 签名的软件包,能够帮助我们确定软件包的可信赖性。
GnuPG 是一个保证传输安全的工具,它是 PGP 加密技术的免费替代程序。使用 GnuPG,你能够确认你从另处所收到的文档、数据的可信赖性和有效性。GnuPG 还支持 PGP 5.x 版本文件的验证。
GnuPG 在系统安装就被默认安装上了,从而保证你能够马上使用它验证下载来的 RPM 软件包。在进行验证之前,还需要导入正确的密钥。
Fedora 的 GnuPG 密钥位于 /etc/pki/rpm-gpg/ 目录。以 Fedora 项目组为例,要验证来自 Fedora 项目组的软件包,需要先导入与你处理器平台相应的密钥。
输入以下命令,则可以查看所以已经安装的密钥
输出结果中的内容,即是已经安装在系统中的密钥
使用 rpm -qi <key> 则可以查看指定密钥的详细信息
成功导入 GnuPG 密钥之后,使用以下命令即可对 RPM 软件包进行签名验证
如果不出问题,将会显示类似于 “rsa sha1 (md5) pgp md5 OK” 的信息,这说明软件包的签名已经通过验证,软件包完整并能够安全安装。
RPM 不仅是管理系统软件包的强力工具,还是论断和修复难题得力助手。通过查看和学习各个选项的实际示例,能让你更好的理解这一点。
RPM 不仅是管理系统软件包的强力工具,还是论断和修复难题得力助手。通过查看和学习各个选项的实际示例,能让你更好的理解这一点。
也许你不小心删除了某个文件,但是又不确定删除的是什么。通过验证整个系统的软件包,RPM 能够帮你找出哪些文件丢失,或者出现了其它问题。
如果文件丢失,或者不通过验证,你可以考虑重新安装软件包来解决这个问题。
有时你看到某个不认识的文件,可以使用以下命令找出它属于哪一个软件包
如果你想查看某个程序的更多信息,可以使用以下命令列出与该程序相关的文档资料
你有一个新的软件包,却不知道它是干什么用的。可以使用以下命令查看软件包的详细信息
如果你想知道 crontabs 软件包向系统中安装了哪些文件,可以使用以下命令查看
以上只是一些简单的示例,相信你在实际使用 RPM 之后,会发现它更多有用的地方。