RPM 4.20.0 Release Notes (DRAFT)

Last update: 2024-04-10

Download

  • Source: rpm-4.19.90.tar.bz2
  • SHA256SUM: 93b442e5632d67eff0cd957649e9436b864f61dbe5a0c7c99954fcf14937302c

Enhancements

UI & Performance

  • New --list and --delete commands to rpmkeys(8)
  • New --json query format, as a more readable alternative to --xml
  • A new low-level package dump utility, installed as /usr/lib/rpm/rpmdump
  • The rpm2archive(8) utility now supports cpio file format, replacing the implementation of rpm2cpio(8) which is now installed as a symlink to the former
  • The ${XDG_CONFIG_HOME}/rpm directory is now the preferred location when loading per-user macro configuration (#2153)
  • A new plugin rpm-plugin-unshare(8) that allows for using various Linux-specific namespace-related technologies inside transactions, such as to harden and limit scriptlet access to resources (#2632, #2665)
  • brp-strip no longer attempts to process Ruby, Python or Javascript files, making it more efficient and faster, especially where I/O is expensive (such as in container builds)
  • The plugin API is now public (#1536)

SPEC & Package Building

  • Support for declarative buildsystems (#1087)
  • A per-package build directory that’s fully RPM-controlled is now used and exposed as the new %builddir macro at build time (#2078)
  • Support for SPEC-local file attributes and generators (#782)
  • Build scriptlets (such as %build, %install or %check) can now be augmented arbitrary number of times by appending or prepending to them with the new -a and -p options
  • A new -C option in %autosetup which ensures that the sources will be extracted in the root of the build directory (#2664)
  • File trigger scripts now receive package count arguments, much like regular triggers (#2755)
  • Comments (starting with a #) after SPEC conditionals are now legal syntax. These were previously allowed due to a SPEC parser bug but would still trigger a build warning. (#829)
  • Indentation is now allowed for SPEC tags (#2927)
  • Group membership lines are now supported in sysusers.d(5) files
  • Distributions can now override build conditionals (%bcond) system-wide with the new %{bcond_override_default NAME VALUE} macro
  • Build time is now exposed to build scriptlets via the new $RPM_BUILD_TIME environment variable
  • A new multi-file protocol allowing for much faster dependency generation

Bug & Regression Fixes

  • Regression: Packages with unsupported usage of the %config flag (e.g. with directories), such as those made with the gradle plugin, no longer fail to install (#2890)
  • Regression: Ensure binary and source headers are identified as such in rpmspec queries (#2819)
  • Regression: Never use current user info or file ownership during build (#2604)
  • Regression: Fix dependency generators sometimes dying with SIGPIPE (#2949)
  • Ignore non-scriptlet weak dependencies in ordering (#1346)
  • Ensure rpmbuild’s cleanup doesn’t fail due to permissions (#2519)
  • Let eBPF ELF files be packaged in noarch packages (#2875)
  • Really allow qualifiers like pre/post/meta for weak dependencies (#624)
  • Set git commit dates in %autosetup -S git based on $SOURCE_DATE_EPOCH (#9)
  • Issue a warning when passing arguments to non-parametric macros (#2932)
  • Make %dirname and %basename behave like dirname(3) and basename(3) (#2928)
  • Run build scriptlets with closed stdin to enforce unattended builds

Internal Cleanup

  • The internal OpenPGP parser has been removed. RPM can now also be built completely without OpenPGP support (i.e. without Sequoia) to allow for easier bootstrapping, see the INSTALL file for details. (#2414)
  • The Python bindings have been ported to the stable Python ABI (#2345)
  • The OpenSSL code has been moved to newer API (#2723)
  • The Perl dependency generators have been split out of the main repository (#2873)

Compatibility Notes

  • The %patchN macro syntax (where N is a patch number) is now obsolete and will produce a build error. Use %patch N (or %patch -P N) instead.
  • Non-comment text (i.e. not starting with a #) after SPEC conditionals is now a build error.
  • Python 3.7 and OpenSSL 3.0 (when enabled) are now the minimum build requirements.