Red Hat Package Manager(RPM)
本节讨论初级管理(LPIC-1)考试 101 的主题 1.102.6 的内容。这个主题的权值是 8。
在前一节中,我们提供了简短的 包管理概述。在本节中,我们主要关注 Red Hat 开发的 Red Hat Package Manager,即 RPM。RPM 和 APT 有许多相似之处。它们都能够安装和删除包。它们都维护已安装的包的数据库。它们都有基本的命令行功能,还有提供更友好的用户界面的其他工具。它们都能够从互联网获得包。一般来说,采用 RPM 包的程序比采用 APT 包的程序少,尽管 rpm 命令的功能很丰富。另一个差异是 RPM 不能像 dpkg 那样维护系统上可用包的信息。
Red Hat 在 1995 年引入了 RPM。这种包管理系统现在用于按照 Linux Standard Base(LSB)进行打包。rpm 命令选项分为三组,分别用于:
- 查询和检验包。
- 安装、升级和删除包。
- 执行其他功能。
在本教程中,我们主要关注前两组选项。可以在 rpm 的手册页中找到关于其他功能的信息。
还应该注意,rpm 是使用 RPM 的主命令的命令名,而 .rpm 是 RPM 文件的扩展名。所以“一个 rpm”或“某某 rpm”一般表示 RPM 文件,而“rpm”常常表示命令。
安装和删除 RPM 包
我们在 “构建和安装程序” 一节中看到,在 Fedora Core 4 系统上安装 Dr Geo 时遇到了问题。在清单 17 中可以看出缺少 guile-config 命令。
rpm 入门
rpm 命令可以从本地文件系统或者通过 http 或 ftp 从互联网安装包。清单 35 使用 rpm -ivh 命令和 guile-devel 包的网络源安装这个包。
x48Linux联盟
清单 35. 使用 rpm 安装 guile-devel
[root@attic4 ~]# rpm -ivh http://download.fedora.redhat.com/pub/fedora\ > /linux/core/4/i386/os/Fedora/RPMS/guile-devel-1.6.7-2.i386.rpm Retrieving http://download.fedora.redhat.com/pub/fedora/linux/core/4/i386/os/Fedora/ RPMS/guile-devel-1.6.7-2.i386.rpm Preparing... ########################################### [100%] 1:guile-devel ########################################### [100%] |
注意,-v 选项提供详细输出,-h 选项显示井号(#)来表示进度。如果想在从网络进行安装之前检查这个包,那么可能希望先下载,再安装。我们稍后再讨论对包进行检查,现在使用 wget 命令获得包,并从本地文件系统安装它,这一次 不 使用 -vh 选项。输出见清单 36。
x48Linux联盟
清单 36. 从文件安装 guile-devel
[root@attic4 ~]# wget http://download.fedora.redhat.com/pub/fedora/\ > linux/core/4/i386/os/Fedora/RPMS/guile-devel-1.6.7-2.i386.rpm --22:29:58-- http://download.fedora.redhat.com/pub/fedora/linux/core/4/i386/os/Fedora/ RPMS/guile-devel-1.6.7-2.i386.rpm => `guile-devel-1.6.7-2.i386.rpm' Resolving download.fedora.redhat.com... 209.132.176.221 Connecting to download.fedora.redhat.com[209.132.176.221]:80... connected. HTTP request sent, awaiting response... 200 OK Length: 481,631 [application/x-rpm] 100%[====================================>] 481,631 147.12K/s ETA 00:00 22:30:02 (140.22 KB/s) - `guile-devel-1.6.7-2.i386.rpm' saved [481,631/481,631] [root@attic4 ~]# ls guil* guile-devel-1.6.7-2.i386.rpm [root@attic4 ~]# rpm -i guile-devel-1.6.7-2.i386.rpm |
没有井号,也没有消息。
重新安装 rpm 包
如果您亲自执行上面的命令,那么在第二次安装时会看到一个错误(如果已经安装了 guile-devel,那么在第一次就会看见),它报告 guile-devel 已经安装了。要解决这个问题,应该使用 -e 选项,在重新安装 rpm 包之前删除(清除)它,如清单 37 所示。如果意外删除了程序的某些文件,需要重新安装 rpm 包,那么也要先这么做。
x48Linux联盟
清单 37. 删除 guile-devel
[root@attic4 ~]# rpm -e guile-devel |
强制安装 rpm 包
有时候删除一个 rpm 包是不可行的,尤其是当系统上有其他程序依赖这个程序时。例如,如果试图删除 guile 包而不是 guile-devel 包,那么可能看到清单 38 这样的输出,这说明许多已安装的包依赖 guile 包,所以删除是不可行的。
x48Linux联盟
清单 38. 试图删除 guile
[root@attic4 ~]# rpm -q -R guile-devel /bin/sh /usr/bin/guile guile = 5:1.6.7 rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 [root@attic4 ~]# rpm -e guile error: Failed dependencies: libguile-ltdl.so.1 is needed by (installed) g-wrap-1.3.4-8.i386 libguile-ltdl.so.1 is needed by (installed) gnucash-1.8.11-3.i386 libguile.so.12 is needed by (installed) g-wrap-1.3.4-8.i386 libguile.so.12 is needed by (installed) gnucash-1.8.11-3.i386 libqthreads.so.12 is needed by (installed) g-wrap-1.3.4-8.i386 libqthreads.so.12 is needed by (installed) gnucash-1.8.11-3.i386 guile is needed by (installed) g-wrap-1.3.4-8.i386 guile = 5:1.6.7 is needed by (installed) guile-devel-1.6.7-2.i386 /usr/bin/guile is needed by (installed) guile-devel-1.6.7-2.i386 |
无论如何,在这种情况下删除有依赖性的所有包是不可行的。解决方案是使用 --force 选项进行强制安装。清单 39 中演示了从为清单 36 下载的文件强制重新安装 guile-devel。
Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论