RPM基础01—简述

概述

本章,您将了解 RPM 包管理器。

RPM 简介

RPM 是 RedHat Package Manager 的简称,最初由 Red hat 公司发展而来,它是一个强大的命令行驱动的软件包管理系统,能够安装、卸载、验证、查询和更新计算机软件包(以一种数据库记录的方式)。每个软件包都包含一个文件存档以及有关该软件包的信息,例如其版本、描述等。RPM 还有相应的库 API,允许高级开发人员通过 C 或 Python 等编程语言管理软件包的事务。

RPM 是自由软件(free software),遵循 GNU GPL 开源许可证协议,目前已经发展为许多 GNU/Linux 发行版的核心组件,包括常见 Red Hat Enterprise Linux、Fedora Project、SUSE Linux Enterprise、openSUSE、CentOS、Tizen、Mageia、CBL-Mariner、RockyLinux 等。

截止本文发布前,RPM 的最新稳定版本为 4.20.1,详情参阅 这里

RPM 文件结构版本

主要有三个:

  • RPM v3 – 在 RPM 2.1 至 3.x 早期版本中使用,使用的是较为传统的文件结构,主要包括 Lead(引导区)、Signature(签名区)、Header(头部信息区)和 Payload(负载区)四个逻辑部分。

    1. lead:标识 RPM 包,固定为 96 字节长度,并以特定的 “magic number”(魔数)开头
    2. Signature:包含数字签名,用于验证包的完整性
    3. Header – 存储了包的元数据,如包名、版本、文件列表等
    4. Payload – 压缩的文件归档,默认使用 gzip 压缩 cpio 归档
  • RPM v4 – 在 RPM 4.x 版本中使用,其在 RPM v3 的基础上进行了拓展和优化,同样包含 Lead、Signature、Header 和 Payload 四个部分,虽然基本结构相似,但在元数据结构、依赖管理和兼容性方面有了显著提升。与 RPM v3 的区别如下:

    1. SignatureHeader 引入了不可变区域(immutable header region),增强了数据结构的稳定性和安全性
    2. 引入了更加多的依赖标签,如 BuildRequires、Recommends/Suggests 等,提高了依赖管理的灵活性
    3. RPM v3 中,签名与元数据分离存储,但在 RPM v4 中,签名被集成到文件头部,提高了校验效率和安全性
    4. 新增 SHA1 和 SHA256 等更加强大的哈希算法
    5. 支持 RSA 和 DSA(包括EcDSA)等多种签名算法
    6. 引入 64 位整数支持(rpm >= 4.6),可处理大于 4GB 的软件包(rpm >= 4.6),可处理大于 4GB 的单个文件(rpm >= 4.12)
    7. 保持对 RPM v3 的兼容
  • RPM v6 – 在 RPM 6.x 版本中使用,未来会使用的文件结构,现处于 BETA 阶段。同样包含 Lead、Signature、Header 和 Payload 四个部分。与 RPM v4 的区别如下:

    1. 进一步升级加密标准,移除了过时的加密算法
    2. 简化了对大于 4GB 文件的处理方式
    3. 支持 OpenPGP 签名
    4. 签名标签不在与其他标签冲突
    5. 进一步增强 Header 部分的功能与灵活性
    6. 所有大小均使用 64 位整数存储,进一步提高了扩展性
    7. 字符串始终采用 UTF-8 编码,提高国际化和本地化支持

术语

  • 构建(Build) – 指将源代码转换为可运行或可部署软件产物的全过程,强调从源码到最终产物的完整生命周期,这通常包括:‌

    • 编译(源代码转为二进制代码)‌
    • 链接(合并目标文件和库)‌
    • 测试(验证可行性)‌
    • 打包(整合资源和依赖生成软件包)‌以及最终的‌部署准备
  • 打包(Package/Packaging‌) – 构建过程中的特定步骤,指将编译链接好的可执行文件/库、依赖库、配置文件、资源文件(如图片、文档)等‌整合(或组织)成一个便于分发(或部署)的单一文件包或容器镜像的过程‌。
  • 软件包(Package,特定语境扩展为 Software Package) – 构建过程的直接产物之一,打包步骤的直接结果。

‌简单区分:‌

  • ‌构建 = 做饭的全过程(买菜、洗菜、切菜、炒菜、装盘)
  • ‌打包 = 装盘(将做好的菜放入盘中以便端上桌)
  • ‌软件包 = 装好盘的菜

相关软件

RPM 常见前端

  • YUM‌ – 基于 Python 2.x 的 RPM 前端工具
  • libzypp/zypper‌ – 基于 C/C++ 的 RPM 前端工具,使用 SAT 求解器进行依赖解析,被 openSUSE、SLES 和 Ark Linux使用。
  • DNF‌ – 基于 Python 3.x 的 RPM 前端工具
  • Urpmi‌ – 基于 Perl 的 RPM 前端工具,被 Mageia 和 Mandriva 使用
  • APT-RPM‌ – Debian APT 包管理工具的 RPM 版本,基于 C++

RPM 常见打包工具

  • rpmlint‌ – 用于检查 RPM 软件包中常见错误的工具
  • rpmdevtools‌ – 帮助 RPM 打包的工具
  • cpan2rpm‌ – 从 Perl CPAN 模块生成 RPM 包的工具
  • cpanspec‌ – 另一个用于从 Perl CPAN 模块创建 RPM 包的工具
  • rpmrebuild‌ – 用于重新构建 RPM 包的工具,主要用于修改或更新现有 RPM 包的内容
  • Specfile Editor‌ – Eclipse 的 spec 文件编辑器插件

RPM 常见的构建工具

  • Open Build Service‌ – 通用的构建和分发系统
  • Copr‌ – 轻量级的构建和分发系统
  • Iurt‌ – 软件包构建系统
  • Koji‌ – 软件包构建和跟踪系统
  • Mock‌ – 简单的 chroot 构建环境管理器,用于构建 RPM
  • Mach‌ – 更通用的 chroot 环境管理器,也可用于构建 RPM
  • Mezzanine – 一组简化软件包和软件包集合管理的工具
Avatar photo

关于 陸風睿

GNU/Linux 从业者、开源爱好者、技术钻研者,撰写文档既是兴趣也是工作内容之一。Q - "281957576";WeChat - "jiulongxiaotianci",Github - https://github.com/jimcat8
用一杯咖啡支持我们,我们的每一篇[文档]都经过实际操作和精心打磨,而不是简单地从网上复制粘贴。期间投入了大量心血,只为能够真正帮助到您。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇