RPM 6.0 恰逢 Fedora 43 的推出,具有 v4 兼容性、删除了 v3 安装并提供了更严格的控制。

  • 具有 64 位、多重签名和现代哈希的 v6 格式
  • 增强工具:rpmkeys、rpmsign 和改进的查询
  • v4 兼容性、v3 安装删除和更严格的控制
  • 扩展的 API、C++20、版本化文档和更强大的测试

RPM 6.0

跳转到 RPM 6.0 标志着生态系统中最广泛的包管理器的前后 红帽企业Linux、SUSE 及其衍生产品。此版本凝聚了多年来在安全性、软件包格式和工具方面的现代化工作,并且体现在项目的方方面面。如果您负责管理系统或软件包软件,那么这项变更对您来说至关重要,因为它会影响您构建、签名、验证和安装软件包的方式。

该版本于 2025 年 9 月 22 日发布,并遵循最终确认的候选版本。此外 公告,在文档和默认行为更改方面做出了重大努力。RPM 6.0 引入对新 v6 格式的支持并加强加密验证,同时保持对 v4 包的支持并消除 v3 的安装。

什么是 RPM 6.0 以及它为何重要

通过 RPM 6.0,该项目整合了更安全的签名实践,弃用了过时的算法,并为适合现代尺寸和元数据的包格式铺平了道路。 v4 格式已问世 25 年,代码库也即将迎来 30 周年纪念日。,因此有必要进行这次重大修订,以使其达到当前标准和当代存储库的大小。

官方公告重点介绍了 OpenPGP 多重签名管理、对 OpenPGP v6 密钥和签名(包括后量子密码学)的支持以及采用获取原始和可验证的发布 tarball 的策略等里程碑。 主要目标是在不破坏兼容性的情况下提高安全性标准。 在包装工和管理人员的日常生活中。

下载和足迹

该发行版包括主要源文件 rpm-6.0.0.tar.bz2,并附有用于完整性检查的 SHA256 校验和。 SHA256: 14abb1b944476788d90005d8d61d5d30fce80d9f0de11eb657b14e5c9ef27441.

与 4.20.1 相比的变化概述

  • 支持 v4 和 v6 软件包,并附有详细的兼容性说明。
  • 每个数据包有多个 OpenPGP 签名,并支持 OpenPGP v6 和 PQC 密钥。
  • 更新先前导入的密钥并在整个周期内使用完整的指纹或 ID。
  • v3 包安装程序即将退役;可以使用 rpm2cpio 查看和提取它们,但不能安装。
  • 默认严格执行签名验证,提高生态系统的安全性。
  • 对手册页和文档进行了重大修订,并在官方网站上发布了版本化的内容。
  • 原始且可验证的发布 tarball,加强可重复性和审计。

通用的变更和改进

rpmkeys 实用程序在密钥管理中发挥了很大的作用: 现在允许使用 rpmkeys –import 更新密钥 (包括将模糊的短标识符更新为完整指纹)、从管道导入、使用 rpmkeys –export 导出,并在不同的钥匙串后端之间实现一致操作。此外,使用 rpmkeys –rebuild,钥匙串内容可以在后端之间重建和迁移,并且密钥查找现在不区分大小写。

rpmsign 也发生跳转: 可以使用 GnuPG 或 Sequoia-sq 进行签名 由 %_openpgp_sign 宏控制。rpmsign –addsign 子命令不再替换现有签名;默认情况下,它会向 v6 软件包添加任意数量的签名,如果使用 –rpmv6,还会向 v4 软件包添加签名。另一方面,RPMsign –resign 会用新的签名替换所有之前的签名。

对于查询,添加了标签扩展,例如 rpmformat(查明它是 v3、v4 还是 v6)和 openpgp(管理所有 OpenPGP 签名)。 添加了 :hashalgo 格式化程序 显示哈希算法名称,别名 –filemime 似乎用于按文件查询 MIME。消息中的术语已标准化:OpenPGP 保持一致,v3 标头和有效负载签名被标记为旧版。

RPM 6.0 中的新计算功能和错误修复

新功能在验证过程中计算一组可配置的摘要并将其保存到 RPM 数据库,以帮助识别源包文件。 解决了多个操作问题Scriptlet 错误现在会影响交易结果代码;某些失败的触发器会影响相关操作;并且已修复 –hash、–percent 和 –test 与 –restore 结合使用的问题。

rpmgraph(rpm2archive 用于 tar 和 cpio 的后缀)中的段错误和泄漏等错误已得到修复,并且对手册页进行了重大重写: 统一的样式,包含示例、新的组件和格式页面,将用户命令移至第 1 节,并涵盖了之前未记录的内容。官方网站上的版本化文档包含手册页、参考手册和 API。

包装和包装结构

rpmbuild 现在可以生成由 %_rpmformat 宏控制的两种不同格式(值 6 或 4)。 此外,在构建中启用了自签名 如果定义了 %_openpgp_autosign_id,则添加 rpm-setup-autosign 工具以方便该配置。

在宏中,添加了 %{span:…} 以方便多行定义,并添加了 %{xdg:…} 来评估 XDG 基本路径。 增加了对 E2K 架构的支持 以及一系列修复:标题中的源顺序和补丁、尊重 c 参数的 Lua glob、正确点的架构验证、接受构建系统特定的 %prep 部分,以及当 RPATH 和 RUNPATH 共存时在 check-rpaths 中的修复。

修复了 rpmspec –shell 中的内存泄漏、rpmbuild -rs 中不存在目录的 4.20 回归以及 rpm –eval 中的额外换行符。 段错误也已修复。 在多模式下,依赖项构建器的输出无效时,brp-selfperms 策略已被移除。最后,rpmbuild 中已弃用的 –nodirtokens 开关也已被移除。

API 变更

在钥匙串区域,添加了迭代和管理钥匙的功能: rpmKeyringInitIterator、rpmKeyringIteratorNext、rpmKeyringIteratorFree、rpmKeyringVerifySig2、rpmKeyringLookupKey 和 rpmKeyringModify对于 rpmPubkey,添加了 rpmPubkeyFingperint、rpmPubkeyFingerprintAsHex、rpmPubkeyKeyIDAsHex 和 rpmPubkeyArmorWrap 等访问器,以及 rpmPubkeyMerge 来合并同一密钥的描述符。

对于永久交易钥匙串,包括rpmtxnImportPubkey、rpmtxnDeletePubkey和rpmtxnRebuildKeystore。 rpmSign 操作由新标志控制:RPMSIGN_FLAG_RESIGN、RPMSIGN_FLAG_RPMV4 和 RPMSIGN_FLAG_RPMV6。rpmteVfyLevel 和 rpmteSetVfyLevel 及其等效项 te.VfyLevel 和 te.SetVfyLevel 也已添加到 Python 绑定中。

对于多重签名,会出现 RPMTAG_OPENPGP、RPMSIGTAG_OPENPGP(上述的别名)等标识符以及验证标志 RPMVSF_NOOPENPGP。 添加了新标签:RPMTAG_PAYLOADSIZE、RPMTAG_PAYLOADSIZEALT、RPMTAG_RPMFORMAT、RPMTAG_FILEMIMEINDEX、RPMTAG_MIMEDICT、RPMTAG_FILEMIMES、RPMTAG_SOURCENEVR、RPMTAG_PAYLOADSHA512、RPMTAG_PAYLOADSHA512ALT、RPMTAG_PAYLOADSHA3_256、RPMTAG_PAYLOADSHA3_256ALT、RPMTAG_SHA3_256HEADER。

有重命名的标签:RPMTAG_PAYLOADDIGEST 被移动到 RPMTAG_PAYLOADSHA256,RPMTAG_PAYLOADDIGESTALT 被移动到 RPMTAG_PAYLOADSHA256ALT,并且 RPMTAG_PAYLOADDIGESTALGO 在 RPMTAG_PAYLOADSHA256ALGO 下被标记为已弃用。 添加了 SHA-3 标识符:RPM_HASH_SHA3_256 和 RPM_HASH_SHA3_512,以及 v6 包中每个文件的 MIME 相关符号,例如 rpmfilesFMime 和 rpmfiFMime,以及 RPMFI_NOFILEMIME 标志。

在 OpenPGP 域中,添加了符合 RFC 9580 的标识符和 pgpDigParamsSalt 函数来检索 v6 签名的预盐。 对于摘要包,会出现 rpmDigestBundleUpdateID。 (更新单个标识符)。其他新功能:rpmtsAddInstallElement 对不支持的格式返回 3,fdSize 对非常规文件报告错误。

Mejoras 国际公司

RPM 代码已移至 C++20(Python 插件和绑定除外)。 字体重命名为 .cc 和 .hh,动态结构已迁移至 STL,并通过原子操作增强了引用计数。此外,测试套件也得到了扩展,测试创建也得到了简化。

介绍了一个真正的钥匙串抽象和一个基于 openpgp.cert.d 的实验后端。 添加了构建站点目标 用于渲染本地文档,测试图像也适配工具箱。RPMTAG 名称中允许使用下划线,并修复了一些回归问题,例如签名的保留大小以及替代机制对签名的干扰。

修复了没有事务锁定的钥匙串读取、rpmioMkpath 中的竞争条件、宏错误消息中的递归深度以及空密码或组字段导致条目被忽略的情况。 加载文件之前内部宏再次可用,rpmSign 中的 fdSize 错误得到正确处理,–querytags 中的伪标签得到清理,并且在旧版 find-provides 和 find-requires 脚本中尊重安装前缀。

其他内部改进

另外还修复了 Python 中与文件相关的引用泄漏,稳定了依赖项存储以避免不确定性,修复了 sysusers 脚本中使用 u! 条目进行的 chroot 转义,并修复了失败更新返回代码中的 4.19 回归。 关于 rpmrc 中的宏文件的警告,在–rebuilddb之后重新创建事务锁,提供gpg(keyid)从gpg-pubkey中删除,并且意外泄露给ABI的符号被清理。

信号的不可移植用途已被删除,rpmlog 锁定已得到优化,并且 Python 绑定支持多个子解释器的模块隔离并通过 ASAN 测试修复资源泄漏。 它们是提高稳健性、可移植性和可维护性的改进。 在所有方面。

编译RPM的要求

现在除了 C99 之外还需要 C++20 编译器;不需要 C++20 模块支持。 要使用 Sequoia 进行构建,需要 rpm-sequoia 1.9.0 或更高版本 (并且是默认选项)、用于绑定的 Python 3.10 或更高版本以及用于手册页的 scdoc 生成器。

预编译的 API 文档不再包含在发布 tarball 中;使用 Doxygen 构建它是可选的。 每个版本都有预建的 API 在项目的 FTP 中。

RPM 6.0 兼容性和格式主题演讲

v6 数据包格式带来 64 位文件大小和相关限制,通过删除标头中的 MD5 和 SHA1、SHA3-256 哈希以及有效负载中的 SHA512 和 SHA3-256 摘要来实现加密现代化。 每个文件添加 MIME 信息,并且从 4.14 开始广泛支持 RPM(略有不同)。v6 版本不再支持外部依赖项生成器模式,并且 4.6 之前的旧版 rpmlib 依赖项已被删除,以消除干扰。

可以使用 4.6 版的 RPM 检出 v6 软件包,使用 4.12 版解压,并使用 4.14 或更高版本进行验证和安装,但须遵守已知的限制。 v4 软件包仍然受到全面支持 6.0 生成的软件包与 4.x 分支的软件包相同;然而,在默认配置下,使用低于 4.14 版本的 RPM 构建的软件包由于使用了弱摘要验证,因此不会进行验证。您可以将 %_pkgverify_level 设置为 signature 以忽略这些摘要验证,或者如果需要弱摘要验证,则将 %_pkgverify_flags 设置为 0 以恢复 4.x 的行为。

虽然可以使用 rpm2cpio 查看和提取 v3 安装,但该安装已被删除。 默认情况下,RPM 构建 v6 包;可以通过将 %_rpmformat 设置为 4 来恢复。在使用 RPM 6.0 或更高版本构建的软件包中,posix.fork Lua 系列被禁用,而在使用 4.20 或更早版本构建的软件包中它继续工作。

其他注意事项:签名密钥配置现在用 %_openpgp_sign_id 定义(与 %_gpg_name 向后兼容),低级签名宏变为参数化,并且自定义 %__gpg_sign_cmd 覆盖不再开箱即用。 %_passwd_path 和 %_group_path 可以用冒号分隔的列表。 使用多个 NSS 源,并且删除 –pkgid 和 –hdrid 查询开关。

RPM 6.0 和 Fedora 43:范围、优势和测试

升级到 RPM 6.0 Fedora 43 它旨在加强安全性并为 v6 格式做好准备,但尚未采用新格式作为默认格式。 Fedora 43 将继续默认生成 v4。,并且严格执行签名验证将在未来的版本中作为系统变更来解决。

Fedora 的主要优势包括:OpenPGP 密钥现在始终通过指纹或完整 ID 进行识别,可以使用 rpmkeys –import 进行更新,支持每个包的多个签名,在构建期间支持本地自签名,以及使用 Sequoia-sq 作为 GnuPG 的替代品。 它还使得在生态系统中测试 v6 格式变得更加容易 而不强制其在全球范围内采用。

不在范围内:Fedora 到 v6 格式的全面迁移或更改默认验证模式。 变革者有责任超越 RPM 并协助解决不兼容性问题,而其余开发人员必须测试、报告问题并在必要时调整第三方工具。

升级和兼容性影响:由于新的密钥地址格式和与签名相关的输出变化,第三方脚本和工具可能需要进行调整。 用于早期测试 建议验证:更新导入的密钥、使用 rpmkeys 进行钥匙串管理以及 v6 格式与外部软件的兼容性(使用 %_rpmformat 构建为 6)。

Fedora 上的 RPM 6.0 用户体验

用户体验:签名和密钥输出统一为大小写,密钥通过指纹或完整ID显示,摒弃了以往容易发生冲突的短ID。 rpmkeys 被确立为官方工具 来操作钥匙串;手动接触 gpg-pubkey 伪包等旧方法已被弃用,应迁移到 rpmkeys 或新的 API。

依赖项:SOName 保持不变,因此无需重建依赖项;它不依赖于其他 Fedora 变更。RPM 是基于 C++ 构建的,因此它添加了对 libstdc++ 的运行时依赖。 使用 Sequoia 签名需要 sequoia-sq 1.0 或更高版本 作为可选依赖项并且仅影响包签名。

应急计划:如有必要,恢复到 RPM 4.20,并在测试版冻结的最后期限内,不阻止发布。 尽管 v6 格式尚未成为默认格式,但交付仍在继续 在分布。

RPM 6.0 发行说明和背景公告

之前的候选版本包含错误修复和手册页更新,并被提升为最终版本。 RPM团队签署的公告 它强调了自 2007 年左右 rpm.org 重启以来,已经为实现这一里程碑做出了许多努力,其中包括 64 位文件大小、可插入依赖项生成器、事务插件、丰富的依赖项、文件触发器、调试信息改进、新的数据库后端、Lua 集成和宏表达式、动态构建要求、规范生成、用户和组支持以及声明式构建系统等里程碑。

来自多个发行版和组织的 300 多人贡献了代码。 项目及其社区的历史解释了稳定性和范围 RPM 6.0 继承并扩展了它。

RPM 6.0 的前景是未来十年增强的包管理器: 更好的加密技术、大容量格式、更强大的工具和最新的文档。,为管理员、打包人员和生态系统提供清晰的兼容性路径,以便他们能够毫无问题地采用新功能。

阿尔玛Linux 9.2
相关文章:
AlmaLinux 9.2 已经发布,这些是它的新闻