跳转到内容

Ict-创新/LPI/102.5

来自维基教科书,开放世界中的开放书籍

102.5 RPM 和 YUM 包管理

[编辑 | 编辑源代码]

考生应该能够使用基于 RPM 的工具进行包管理。


关键知识领域

  • 使用 RPM 和 YUM 安装、重新安装、升级和删除包。
  • 获取有关 RPM 包的信息,例如版本、状态、依赖项、完整性和签名。
  • 确定一个包提供哪些文件,以及找到哪个包包含特定文件。

一些 Linux 发行版使用“Red Hat Package Manager”简称 rpm 来管理其所有发行版软件。RPM 维护一个详细的数据库,其中包含系统中安装的所有软件。


RPM 包命名

虽然没有严格的约定,但大多数 rpm 包名按以下格式形成:

name-version-release.architecture.rpm

架构名称可以指示所包含二进制文件适用于哪个计算机架构(例如 i386、ppc、ia64、noarch),或者它可以指示该包包含源代码(src)。


主模式和次模式

一些简短的选项名称相似,但它们在命令行上的位置不同,执行的操作也不同。第一个选项与其他选项的区别在于它们的位置。

rpm的第一个选项处于主模式。例如在 rpm -iv A.rpm 中,选项 'i' 是一个主选项,将导致安装包A

类似地,不在第一个位置的选项处于次模式。例如在 rpm -qpi A.rpm 中,选项 'i' 是一个次模式,将从包A中获取信息,例如作者和许可证类型。

以下是rpm的主模式选项。

简写 长格式 描述
-i –install 安装包
-U –update 更新或安装包
-F --freshen 仅更新已安装的包
-V --verify 文件大小、MD5、权限、类型...
-q --query 查询已安装/未安装的包和文件
-e --erase 卸载包

以下是rpm的次模式选项。

简写
描述
a
应用于所有已安装的包
c
q一起列出configuration 文件
d
q一起列出documentation 文件
f
q一起查询哪个包安装了给定文件
h
在处理时添加哈希值
i
q一起列出关于包的information
l
q一起列出包中的所有文件和目录
p
q一起指定对包文件执行查询
v
详细


查询模式

三种查询类型:未安装的包、已安装的包和文件
查询类型
选项
包文件
-qp
已安装的包
-q
文件
-qf

额外的选项将允许您获取有关所有已安装文件的信息–l、文档–d配置文件–c等...

例如,我们考虑包routed-0.17.i386.rpm。我们可以查询该包并在安装之前使用l选项列出其内容,如下所示

# rpm –qpl routed-0.17.i386.rpm

安装此包后,我们可以使用以下命令查询已安装的包

# rpm –ql routed-0.17 或者

# rpm –ql routed

最后,如果我们想找出哪个包安装了文件/usr/sbin/routed,可以使用以下命令查询 rpm 数据库

# rpm –qf /usr/sbin/routed

特殊选项

--nodeps无论依赖项如何,都安装包

--force 强制升级

--test不实际安装或升级,仅打印到标准输出

--requires PACKAGE与q一起列出包所需的 capabilities

--whatrequires CAPABILITY与q一起列出需要该 capabilities 的包


包签名

您可以检查每个作为项目的一部分分发的包的签名。例如,要加载所有参与 Fedora 项目的开发人员的密钥,请执行以下操作(只执行一次)

# rpm –-import /usr/share/rhn/RPM-GPG-KEY-fedora

您现在可以从镜像项目 RPM 的 FTP 站点下载任何包。例如,我们从 ftp.mirror.ac.uk 的 Fedora 子目录中下载了zlib-1.2.1.1-2.1.i386.rpm。接下来,我们检查文件的真实性

# rpm --checksig /home/adrian/zlib-1.2.1.1-2.1.i386.rpm

# /home/adrian/zlib-1.2.1.1-2.1.i386.rpm: (sha1) dsa sha1 md5 gpg OK

包完整性

下一个命令检查包bash的完整性

# rpm –V bash

这将返回空值。接下来,我们以 root 用户身份执行以下操作

# chown bin /bin/bash

# chmod 775 /bin/bash

如果我们再次检查bash的完整性,这次我们将得到

# rpm –V bash

.M...U.. /bin/bash

包管理器已将bash包中所有文件的当前状态与存储在数据库中的这些文件的已知原始状态进行比较。对/bin/bash的更改已被识别。

通过在'V'(--verify)之后添加'a'(--all)选项,可以验证系统中安装的所有包的完整性

–verify 选项对每个文件执行许多测试;当测试通过时,使用以下字符(列在下面)来标识错误

返回的字符
错误描述
.
测试成功
?
测试无法执行
S
文件大小已更改
M
权限模式或文件类型已更改
5
文件的 MD5 校验和已更改
D
设备主/次号不匹配
L
损坏的符号链接
U
文件的用户所有者已更改
G
文件的组所有者已更改
T
mtime(修改时间)已更改

Yum 包管理器

[编辑 | 编辑源代码]

Yum 是许多基于 rpm 的发行版的默认包管理器,它允许您安装、更新和删除 rpm 包,而无需自己担心解决依赖关系。Yum 使用外部存储库来提供有关可用包及其依赖关系的元数据(以索引文件的形式),以及存储将自动下载以满足安装请求的 rpm 包。存储库可以是网站或目录,这些网站或目录以 yum 预期的方式格式化。

yum 最常见的命令是

install – 安装包,自动解决和安装依赖关系。以下命令将安装 tsclient 包及其依赖项。

# yum install tsclient

此命令将安装“mysql 数据库组”中的所有软件包,其中将包括 mysql 服务器以及管理和管理工具。

# yum groupinstall “mysql database”


update – 更新可用包列表,并将系统上所有已安装的包更新到最新的可用版本。

# yum update


search – 搜索可用 rpm 包列表。以下命令将按名称搜索包。

# yum list tsclient

如果您不知道包的名称(这通常是这种情况),则可以按关键字搜索包。search 命令还接受搜索条件中的通配符。

# yum search PalmPilot


erase/remove – 从系统中删除包。Erase 是一个更安全的选项,因为 remove 可能会删除其他包所需的依赖项。下面我们删除 tsclient 包

# yum remove tsclient

我们也可以删除组中的所有包。

# yum groupremove “mysql database”

Yum 在 /etc/yum.conf 文件中配置,存储库通过 /etc/yum.repos.d/ 目录进行管理。要添加额外的存储库,请在系统上的 /etc/yum.repos.d/ 目录中放置一个定义文件。包提供商在其网站上提供了其存储库的定义文件。您也可以按照正确的文件格式手动创建存储库文件。要禁用存储库,可以在存储库定义文件中添加行 enable=0。如果您希望永久删除存储库,请删除定义文件并清除 yum 缓存目录 /var/cache/yum/。每次运行“yum update”时都会更新缓存目录

yumdownloader 是一个从 Yum 仓库下载 RPM 包的程序。它用于下载 RPM 包而不将其安装到系统上。这对于从更快连接下载软件包,然后将其复制到连接较慢的机器上进行安装非常有用。与 yum downloader 经常使用的参数是

  • destdir DIR - 指定下载的目标目录。默认设置为当前目录。
  • resolve - 下载 RPM 时,解析依赖项并下载所需的软件包。



使用的文件、术语和工具:* rpm

  • rpm2cpio
  • /etc/yum.conf
  • /etc/yum.repos.d/
  • yum
  • yumdownloader


上一章 | 下一章

华夏公益教科书