RPM 包管理完全指南

RPM 包管理完全指南

目录

[RPM 简介](#RPM 简介)(含 [为什么要 RPM?](#为什么要 RPM?))

[RPM 架构与工作原理](#RPM 架构与工作原理)

[RPM 基础命令](#RPM 基础命令)

[RPM SPEC 文件详解](#RPM SPEC 文件详解)

[构建 RPM 包](#构建 RPM 包)

[RPM 高级特性](#RPM 高级特性)

[RPM 软件源与仓库元数据](#RPM 软件源与仓库元数据)

文件触发器

[RPM 版本演进](#RPM 版本演进)

RPM 简介

什么是 RPM?

RPM (RPM Package Manager) 是一个强大的包管理系统,最初由 Red Hat 开发,现已成为 Linux 发行版(如 Red Hat Enterprise Linux、Fedora、CentOS、openSUSE 等)的标准包管理格式。

RPM 具有以下核心能力:

构建:将源代码打包成易于分发的软件包

安装/更新/卸载:管理已打包软件的生命周期

查询:获取软件包的详细信息

验证:检查软件包和安装的完整性

为什么要 RPM?

相比「直接下载源码编译」或「拷贝压缩包解压」,使用 RPM 能带来可依赖、可追溯、可复现的软件交付与运维体验。

1. 相比源码/压缩包的不足

方式

常见问题

源码编译

依赖要自己装、版本易冲突;装在哪、装了什么没有统一记录;卸载靠手动删;多台机器重复编译、环境不一致

tar.gz 解压

没有依赖声明,缺库运行时才报错;升级/回滚困难;无法用系统工具统一查询「装了哪些软件、哪些文件属于谁」

RPM 通过元数据(依赖、文件列表、版本、脚本)和包数据库,把「装了什么、依赖谁、文件在哪」固化在系统里,便于自动化与排查。

2. 使用 RPM 能带来什么

依赖管理:包声明 Requires/Provides,DNF/Yum 自动解决依赖并一次装齐,避免「缺库再补」的反复试错。

可查询、可验证 :rpm -qa、rpm -ql、rpm -qf 可查已装包、包内文件、文件归属;rpm -V 可检查文件是否被篡改或缺失。

可重复的安装与升级 :同一份 .rpm 在多台机器上安装结果一致;升级、降级、回滚有明确版本边界(NVR),便于标准化运维。

可审计与合规:谁装的、装了什么版本、是否签名,有记录可查;企业策略可基于仓库与签名做统一管控。

自动化与规模化:配合仓库(repodata)和 DNF/Yum,可批量安装、批量更新、按组管理,适合服务器集群与 CI/CD 交付。

3. 典型使用场景

场景

为什么用 RPM

企业内网/离线环境

自建仓库统一分发,版本与依赖可控,不依赖外网随机下载

多台服务器一致环境

同一批 RPM 保证二进制与路径一致,减少「在我机器上能跑」类问题

合规与安全

只允许安装经过审批、签名的包;漏洞修复通过新版本 RPM 下发,可追溯

应用/中间件交付

将自研或第三方软件打成 RPM,与系统包一样用 dnf install 部署,便于与系统升级一起管理

操作系统与发行版

RHEL、Fedora、openSUSE 等以 RPM 为底座,掌握 RPM 即掌握这些系统的软件生命周期

总结:RPM 把「软件是什么、依赖谁、装到哪、怎么装/卸」标准化成包+元数据+数据库,让安装、升级、回滚和审计都可在同一套机制下完成,这是选用 RPM 而不是「随便一个压缩包」的核心原因。

RPM 的历史发展

1997 RPM 2.0 发布 Red Hat 采用为默认包管理器 1999 RPM 3.0 发布 引入更强的依赖管理 2002 RPM 4.0 发布 引入新的包格式和特性 2011 RPM 4.10 发布 增强安全性和性能 2020 RPM 4.20 发布 声明式构建系统支持 2025 RPM 6.0 发布 支持 v6 包格式、OpenPGP v6 签名 RPM 发展历史

RPM vs 其他包管理器

特性

RPM

DEB

APK

使用发行版

RHEL, Fedora, openSUSE

Debian, Ubuntu

Alpine

包格式

.rpm

.deb

.apk

依赖解析

需额外工具 (yum/dnf)

内置 (apt)

内置

构建工具

rpmbuild

debuild

abuild

RPM 官方能力总结(来源:rpm.org)

根据 rpm.org 官方说明,RPM 作为包管理系统的核心能力包括:

验证(Verify):验证打包软件及安装结果的完整性

查询(Query):获取已安装或未安装包的详细信息

安装 / 更新 / 卸载(Install, Update, Uninstall):管理打包软件的生命周期

构建(Build):从源码构建易于分发的软件包

RPM 支持将软件发布到仓库、验证软件完整性、使用 rpmbuild 等工具创建包,并与 DNF/Yum/PackageKit 等标准工具配合使用。

核心概念术语表

术语

英文

说明

NVR

Name-Version-Release

包的核心标识:名称、上游版本号、打包发布号,如 nginx-1.24.0-1.el8

Epoch

Epoch

版本比较时的「纪元」整数,数值越大版本越新;未写时默认为 0,用于解决版本号格式变更导致的排序问题

Payload

Payload

RPM 包中的实际内容,通常为 cpio 归档,包含要安装的文件

Header

Header

包的元数据区,包含依赖、安装路径、文件列表、脚本等,供查询与安装决策使用

SRPM

Source RPM

源码包(.src.rpm),包含源码、SPEC 文件、补丁及构建说明,用于生成二进制 RPM

Provides

Provides

包提供的「能力」或虚拟名,可被其他包的 Requires 匹配,如 Provides: /bin/sh、Provides: lda

Requires

Requires

强依赖:声明需要某包或某能力已安装,不满足则无法安装

Obsoletes

Obsoletes

废弃关系:安装带有 Obsoletes 的包时,RPM 会视其为更新并移除被废弃的包(与 updater 协同)

Conflicts

Conflicts

冲突:与某包不能同时安装;双向检查

弱依赖

Weak dependencies

由依赖求解器使用、不强制安装的依赖,包括 Recommends、Suggests、Supplements、Enhances

repodata

Repository metadata

仓库元数据,由 createrepo 等工具生成,供 DNF/Yum 解析依赖与检索包

Scriptlet

Scriptlet

在安装/卸载/事务的特定阶段执行的脚本片段,如 %pre、%post、%filetriggerin

RPM 架构与工作原理

RPM 包结构

RPM 包本质上是一个 cpio 归档文件,包含元数据头部和实际文件内容:

RPM 包文件

RPM 头部

元数据

签名区

PGP/GPG

负载

cpio 归档

包名称/版本/发布号

依赖关系

文件列表

脚本指令

实际文件

配置文件

文档文件

RPM 包类型

RPM 包类型

源码 RPM

SRPM

二进制 RPM

.src.rpm 文件

包含: 源代码

包含: SPEC 文件

包含: 补丁文件

架构相关

.x86_64.rpm

架构无关

.noarch.rpm

编译后的二进制文件

RPM 工作空间目录结构

构建 RPM 包需要特定的目录结构:

目录

用途

BUILD/

编译软件时使用的工作目录

RPMS/

生成的二进制 RPM 包存放位置

SOURCES/

存放原始源代码压缩包和补丁

SPECS/

存放 SPEC 控制文件

SRPMS/

生成的源码 RPM 包存放位置

RPM 基础命令

安装和升级操作

安装新包

升级包

降级包

RPM 安装/升级

操作类型

rpm -ivh

rpm -Uvh

rpm -Uvh --oldpackage

显示进度条

显示详细信息

命令

描述

示例

rpm -ivh package.rpm

安装包

rpm -ivh nginx-1.0.rpm

rpm -Uvh package.rpm

升级包

rpm -Uvh nginx-1.1.rpm

rpm -e package

删除/擦除包

rpm -e nginx

rpm -ivh --test package.rpm

测试安装,不实际执行

rpm -ivh --test nginx.rpm

查询操作

已安装包

包详情

包文件列表

文件所属包

包依赖

rpm -q 查询命令

查询目标

rpm -qa

rpm -qi

rpm -ql

rpm -qf

rpm -qR

列出所有已安装包

显示包的详细信息

列出包包含的所有文件

查找文件属于哪个包

显示包的依赖关系

命令

描述

示例

rpm -qa

列出所有已安装的包

`rpm -qa

rpm -qi package

显示包的详细信息

rpm -qi nginx

rpm -ql package

列出包包含的所有文件

rpm -ql nginx

rpm -qf /path/to/file

查找文件属于哪个包

rpm -qf /usr/bin/nginx

rpm -qc package

列出包的配置文件

rpm -qc nginx

rpm -qd package

列出包的文档文件

rpm -qd nginx

rpm -qR package

显示包的依赖关系

rpm -qR nginx

rpm -qa --last

按安装时间列出包

`rpm -qa --last

验证操作

命令

描述

示例

rpm -V package

验证已安装的包

rpm -V nginx

rpm -Va

验证所有已安装的包

rpm -Va

rpm -Vp package.rpm

验证未安装的包

rpm -Vp nginx.rpm

验证输出字符含义:

. = 测试通过

5 = MD5 校验不同

S = 文件大小不同

L = 符号链接改变

T = 文件时间戳不同

D = 设备文件改变

U = 用户所有者改变

G = 组所有者改变

M = 权限改变

? = 不可读文件

签名和导入操作

命令

描述

示例

rpm --import KEYFILE

导入 GPG 密钥

rpm --import RPM-GPG-KEY-redhat

rpm -K package.rpm

检查包签名

rpm -K nginx.rpm

rpm -Kv package.rpm

详细检查包签名

rpm -Kv nginx.rpm

RPM SPEC 文件详解

SPEC 文件概述

SPEC 文件是 RPM 包的"配方",描述了如何从源代码构建二进制包。

SPEC 文件结构

Preamble

序言部分

Body

主体部分

Name, Version, Release

Summary, License, URL

Source0, Patch0

BuildRequires, Requires

%description

%prep

%build

%install

%files

%changelog

Preamble(序言)部分

序言包含包的基本元数据:

标签

描述

示例

Name

包的基础名称

Name: nginx

Version

上游版本号

Version: 1.24.0

Release

打包发布号

Release: 1%{?dist}

Summary

简短描述

Summary: High performance web server

License

许可证

License: GPLv2+

URL

项目主页

URL: https://nginx.org

Source0

源码地址

Source0: https://nginx.org/download/nginx-%{version}.tar.gz

Patch0

补丁文件

Patch0: nginx-fix.patch

BuildRequires

构建依赖

BuildRequires: gcc, make

Requires

运行依赖

Requires: openssl-libs

BuildArch

构建架构

BuildArch: noarch

NVR(Name-Version-Release):RPM 包的核心标识符

nginx-1.24.0-1.el8.x86_64.rpm

nginx

Name

1.24.0

Version

1.el8

Release

x86_64

Architecture

Epoch(纪元)与版本比较

完整依赖版本语法为 [epoch:]version[-release]:

Epoch :可选整数,默认为 0;在版本比较中权重最高,用于在版本号格式发生断裂时仍能正确排序(例如从 2.1.7a 改为日期格式时)。

Version :必填,不能包含 -,一般由上游维护。

Release :可选,不能包含 -;每次重新打包(如改 SPEC、编译器、依赖)都应递增,用于区分同一版本的不同构建。

示例:Requires: perl >= 9:5.00502-3 表示需要 epoch=9、version=5.00502、release=3 及以上的 perl。RPM 使用 rpmvercmp() 进行分段比较(按数字/字母段),不要依赖其内部细节,建议使用简单的主.次.补丁数字格式。

Body(主体)部分

%description - 详细描述

spec

复制代码

%description

Nginx is a web server and a reverse proxy server for HTTP, HTTPS,

SMTP, POP3 and IMAP protocols, with a strong focus on high concurrency,

performance and low memory usage.

%prep - 准备阶段

%prep 阶段

清理旧构建

解压源码

应用补丁

rm -rf $RPM_BUILD_DIR/*

%setup -q

%patch0 -p1

spec

复制代码

%prep

%autosetup -p1 # 自动解压并应用补丁

# 或者手动方式

# %setup -q

# %patch0 -p1

%build - 构建阶段

spec

复制代码

%build

%configure

make %{?_smp_mflags}

%install - 安装阶段

%install 阶段

创建目录

安装文件到 buildroot

设置权限

mkdir -p

make install

或 install 命令

chmod

spec

复制代码

%install

rm -rf %{buildroot}

%make_install

# 或手动安装

mkdir -p %{buildroot}%{_bindir}

install -m 0755 myapp %{buildroot}%{_bindir}/myapp

%files - 文件列表

%files 部分

特殊指令

文件路径

%doc

文档

%license

许可证

%config

配置文件

%attr

属性设置

绝对路径或宏

spec

复制代码

%files

%license LICENSE

%doc README.md CHANGELOG.md

%config(noreplace) %{_sysconfdir}/nginx/nginx.conf

%{_bindir}/nginx

%{_mandir}/man8/nginx.8*

%changelog - 变更日志

spec

复制代码

%changelog

* Wed Jan 15 2025 John Doe - 1.24.0-1

- Update to upstream version 1.24.0

- Add new feature

* Mon Dec 01 2024 John Doe - 1.22.0-2

- Fix security issue CVE-2024-12345

RPM 常用宏

展开值

用途

%{name}

包名称

引用包名

%{version}

版本号

引用版本

%{release}

发布号

引用发布号

%{_bindir}

/usr/bin

二进制文件目录

%{_sbindir}

/usr/sbin

系统二进制目录

%{_libdir}

/usr/lib64

库文件目录

%{_sysconfdir}

/etc

配置文件目录

%{_datadir}

/usr/share

数据文件目录

%{_mandir}

/usr/share/man

手册目录

%{buildroot}

构建根目录

安装目标

%{?dist}

发行版标签

.el8, .fc40 等

宏定义与条件展开(来源:rpm.org Macros)

定义 :

%define NAME BODY:局部宏,仅在当前 SPEC 上下文中展开;BODY 在每次展开时重新求值。

%global NAME BODY:全局宏,BODY 在定义时求值一次,之后展开结果一致。

展开形式 :

%NAME 或 %{NAME}:展开宏 NAME。

%{?NAME}:若 NAME 已定义则展开,否则为空(常用于可选 dist、可选参数)。

%{!?NAME: BODY}:若 NAME 未定义则展开 BODY。

参数宏 :%NAME [OPTIONS] [ARGUMENTS] 形式可带参数,如 %setup -q、%patch0 -p1。

%prep 中常用:%setup(解压源码)、%autosetup(解压并应用补丁)、%patch(应用补丁)。

构建 RPM 包

构建流程概览

构建 SRPM

构建二进制 RPM

同时构建

开始

准备构建环境

设置 rpmbuild 目录

放置源码和补丁

创建 SPEC 文件

构建类型

rpmbuild -bs

rpmbuild -bb

rpmbuild -ba

SRPM 输出

二进制 RPM 输出

SRPM + 二进制 RPM 输出

质量检查 rpmlint

完成

设置构建环境

bash

复制代码

# 安装必要的工具

sudo dnf install rpmdevtools rpmbuild

# 创建构建目录结构

rpmdev-setuptree

# 查看目录结构

tree ~/rpmbuild/

构建 Source RPM

bash

复制代码

# 从 SPEC 文件构建 SRPM

rpmbuild -bs package.spec

# 输出到 ~/rpmbuild/SRPMS/

构建二进制 RPM

bash

复制代码

# 从 SRPM 重建

rpmbuild --rebuild package.src.rpm

# 从 SPEC 文件构建

rpmbuild -bb package.spec

# 同时构建 SRPM 和二进制 RPM

rpmbuild -ba package.spec

# 只执行到指定阶段

rpmbuild -bp package.spec # 只到 %prep

rpmbuild -bc package.spec # 只到 %build (执行 %prep, %build)

质量检查 - rpmlint

rpmlint 检查

检查对象

SPEC 文件

SRPM

二进制 RPM

语法检查

规范合规

签名验证

完整性检查

文件清单

依赖解析

文件系统层次标准

报告: 错误/警告

bash

复制代码

# 检查 SPEC 文件

rpmlint package.spec

# 检查 SRPM

rpmlint package.src.rpm

# 检查二进制 RPM

rpmlint package-1.0-1.x86_64.rpm

# 详细输出

rpmlint -i package.rpm

RPM 高级特性

Scriptlets(脚本片段)

Scriptlets 是在包安装/卸载过程中执行的脚本:

Scriptlet RPM 用户/系统 Scriptlet RPM 用户/系统 安装过程 卸载过程 rpm -ivh package.rpm %pre (安装前脚本) 返回 解压文件 %post (安装后脚本) 返回 安装完成 rpm -e package %preun (卸载前脚本) 返回 删除文件 %postun (卸载后脚本) 返回 卸载完成

Scriptlet

执行时机

%pre

安装前

%post

安装后

%preun

卸载前

%postun

卸载后

%pretrans

事务开始前

%posttrans

事务结束后

spec

复制代码

%post

/bin/systemctl daemon-reload

/bin/systemctl enable nginx.service >/dev/null 2>&1 || :

%preun

if [ $1 -eq 0 ]; then

/bin/systemctl --no-reload disable nginx.service >/dev/null 2>&1 || :

/bin/systemctl stop nginx.service >/dev/null 2>&1 || :

fi

%postun

/bin/systemctl daemon-reload >/dev/null 2>&1 || :

if [ $1 -ge 1 ]; then

/bin/systemctl try-restart nginx.service >/dev/null 2>&1 || :

fi

Triggers(触发器)

触发器允许在特定事件发生时执行脚本:

spec

复制代码

# 当安装 perl 包时触发

%triggerin -- perl

# 执行某些操作

# 当卸载 perl 包时触发

%triggerun -- perl

# 执行某些操作

# 当升级 perl 包时触发

%triggerpostun -- perl

# 执行某些操作

文件属性特殊指令

文件属性指令

%config

%doc

%license

%attr

%verify

%ghost

配置文件

升级时保留修改

文档文件

许可证文件

设置权限/所有者

验证时跳过

幽灵文件

由运行时创建

spec

复制代码

%files

%config(noreplace) %{_sysconfdir}/myapp.conf

%config %{_sysconfdir}/myapp.conf.dist

%doc README.md

%license LICENSE

%attr(0755, root, root) %{_bindir}/myapp

%ghost %{_localstatedir}/lib/myapp/database

%verify(not size mtime md5) /var/log/myapp/*

依赖处理

依赖类型

Requires

Provides

Obsoletes

Conflicts

声明依赖

声明提供的功能

声明废弃的包

声明冲突的包

spec

复制代码

# 基本依赖

Requires: bash >= 4.2

# 条件依赖

Requires: python3 >= 3.6

Requires: python3-libs = %{python3_version}

# 构建依赖

BuildRequires: gcc, make

# 提供的功能

Provides: myapp = %{version}-%{release}

# 废弃其他包

Obsoletes: oldapp < 2.0

# 冲突声明

Conflicts: otherapp < 1.0

弱依赖(Weak Dependencies)

RPM 本身不强制 满足弱依赖,它们由 DNF/Yum 等依赖求解器使用:求解器会尽量满足,若导致无法求解则忽略且不报错。适用于「推荐」「建议」类依赖。

类型

方向

含义

Recommends

正向

弱依赖:建议同时安装某包/某能力,不满足不报错

Suggests

正向

极弱依赖:仅作提示,求解器默认可忽略

Supplements

反向

当「被补充」的包被选中时,本包可被一并选中

Enhances

反向

与 Supplements 类似,极弱

正向即「本包建议/提示需要某包」;反向即「当某包被安装时,可顺带选上本包」。例如:A 声明 Recommends: B 与 B 声明 Supplements: A 在「安装 A 时顺带选 B」上效果等价(由求解器处理)。

spec

复制代码

Recommends: python3-pip

Suggests: myapp-docs

Supplements: (foo and (lang-support-cz or lang-support-all))

布尔依赖(RPM 4.13+)

所有依赖类型(Requires、Recommends、Suggests、Supplements、Enhances、Conflicts)均可使用布尔表达式,用括号包裹:

运算符

含义

示例

or

满足其一即可

Requires: (pkgA or pkgB)

and

全部满足

Conflicts: (pkgA and pkgB)

if

若第二项满足则需第一项

Requires: (pkgA if pkgB)

if else

若第二项满足需第一项,否则需第三项

Requires: (mariaDB if db else sqlite)

unless

若第二项未满足则第一项需满足

Conflicts: (driverA unless driverB)

with

同一包同时满足多项

Requires: (pkgA-foo with pkgA-bar)

without

满足第一项但不满足第二项

Requires: (pkgA-foo without pkgA-bar)

注意:Provides 不能使用布尔表达式 ;if 不能与 or 混用,unless 不能与 and 混用。

spec

复制代码

Requires: (pkgA or (pkgB and pkgC))

Requires: (myPkg-backend-mariaDB if mariaDB else sqlite)

脚本依赖(Scriptlet Dependencies)

仅在安装/卸载的某一阶段需要的依赖,可写成 Requires(阶段):,例如:

spec

复制代码

Requires(pre): /usr/sbin/useradd

表示在 %pre 执行前必须已安装提供 /usr/sbin/useradd 的包。这样既保证顺序(在存在依赖环时有用),也允许在安装完成后移除该包(若没有其他依赖)。注意:PreReq 与 Requires(pre) 语义不同,不能简单替换。

自动依赖

共享库 :构建时 RPM 会对包内可执行文件运行 ldd,自动为所需共享库添加 Requires;对包内库文件根据 soname 自动添加 Provides。

解释器/模块 :Perl、Python 等有各自的依赖生成器,会为脚本和模块生成如 perl(MIME-Base64)、python3.11dist(requests) 等 Requires/Provides。

可通过 Dependency Generators 自定义或禁用自动依赖。

构建时依赖

仅在打包时需要、不进入二进制包依赖的标签:

标签

说明

BuildRequires

构建依赖,会写入 SRPM 的 Requires,不写入二进制 RPM

BuildConflicts

构建时不能安装的包

BuildPreReq

构建时需优先满足的依赖(顺序敏感)

RPM 软件源与仓库元数据

概念

RPM 仓库 是放有若干 .rpm 文件及元数据的目录或 HTTP/FTP 服务。客户端(DNF/Yum)通过元数据解析依赖、检索包,而不必下载所有包再解析。

repodata 与 createrepo

概念

说明

repodata

仓库元数据目录,通常包含 repomd.xml、primary.xml.gz、filelists.xml.gz、other.xml.gz 等

repomd.xml

元数据索引:列出各 XML 文件及其校验和、时间戳,便于增量更新与签名

primary.xml.gz

主元数据:包名、版本、依赖、Provides、文件列表、描述等

createrepo

根据目录中的 RPM 包生成 repodata(repomd 格式)的工具,供 Yum/DNF 使用

bash

复制代码

# 安装 createrepo(或 createrepo_c)

sudo dnf install createrepo_c

# 对包含 .rpm 的目录生成元数据

createrepo /path/to/rpms

# 仅更新有变化的包,加快后续生成

createrepo --update /path/to/rpms

常用选项:-s/--checksum 指定校验和类型(默认 sha256)、-g/--groupfile 指定 comps 组、--cachedir 缓存以加速重复运行。

文件触发器(File Triggers)

文件触发器是按路径前缀匹配的脚本:当安装/卸载的文件与声明的路径前缀匹配时,在事务的特定阶段执行。用于在「某类文件被安装或删除」时做统一处理(如更新索引、注册服务)。

类型(来源:rpm.org 手册)

类型

执行时机

作用范围

%filetriggerin

安装后,若本包有文件匹配前缀

每包一次

%filetriggerun

卸载前,若本包有文件匹配前缀

每包一次

%filetriggerpostun

卸载后,若本包有文件匹配前缀

每包一次

%transfiletriggerin

事务中所有匹配的包安装完成后

每事务一次

%transfiletriggerun

事务中将要卸载的匹配包处理前

每事务一次

%transfiletriggerpostun

事务中匹配包卸载完成后

每事务一次

语法示例:

spec

复制代码

%filetriggerin -P 1000000 -- /etc/ld.so.conf.d

/bin/ldconfig

%filetriggerpostun -P 1000000 -- /etc/ld.so.conf.d

/bin/ldconfig

-P 为优先级(数值越大越先执行);匹配到的文件路径会传入脚本的标准输入。注意:存在已知问题,某些场景下 %transfiletriggerpostun 可能不执行,可参考 rpm.org File triggers。

RPM 版本演进

RPM 6.0.0 新特性 (2025)

版本历史

版本

发布日期

主要特性

RPM 6.0.1

2025-12

修复 6.0.0 回归问题

RPM 6.0.0

2025-09

v6 包格式、OpenPGP v6、强制签名检查

RPM 4.20.1

2025-02

Bug 修复版本

RPM 4.20.0

2024-10

声明式构建系统、动态 spec 改进

RPM 4.19.0

2023-06

Rich 依赖、增强的插件 API

RPM 4.18.0

2022-05

Python 3 支持、增强的文件触发器

RPM 4.17.0

2021-06

新的包布局、增强的安全性

RPM 4.16.0

2020-06

Lua 5.3、增强的宏语言

RPM 4.20 声明式构建与动态 SPEC(简述)

声明式构建(Declarative build system) :在 SPEC 中通过声明式方式描述构建步骤,减少手写 %build/%install 脚本,便于复用与维护。详见 rpm.org Build system。

动态 SPEC(Dynamic spec) :支持在构建时根据条件生成或修改 SPEC 内容,适合多子包、多架构等场景。详见 rpm.org Dynamic specs。

参考资料

官方与规范

RPM 官方网站 --- 发布说明、下载、时间线

RPM 官方手册(rpm-software-management.github.io) --- Spec、宏、依赖、触发器、构建系统等

Dependencies

More on Dependencies

Boolean Dependencies

Macros

File triggers

Build system

RPM Packaging Guide --- 打包实践

Maximum RPM Documentation --- 经典参考

Red Hat 打包与分发文档 --- RHEL 8

createrepo / repodata --- 仓库元数据

其他

Linux rpm command cheat sheet - nixCraft

相关推荐

移动纯流量卡线上注销,合约期移动流量卡取消
女孩学什么舞蹈最能练气质变自信
365bet有手机版吗

女孩学什么舞蹈最能练气质变自信

12-23 👁️ 4742
《英雄聯盟》快捷鍵大全及各種遊戲命令一覽
365bet有手机版吗

《英雄聯盟》快捷鍵大全及各種遊戲命令一覽

09-22 👁️ 2364
真正的柴窑是怎样的,柴窑烧出来的瓷器有什么特点(优雅莹润)
生吃三文鱼有什么好处和坏处
365bet有手机版吗

生吃三文鱼有什么好处和坏处

09-21 👁️ 5011
如何用气泵给车加机油
365bet有手机版吗

如何用气泵给车加机油

06-12 👁️ 697