RPM 4.17.0-alpha Release Notes (DRAFT)

Download information

Summary of changes from RPM 4.16.x

General bugfixes and enhancements

  • Add beginnings of RPM reference manual
  • Many improved and new translations
  • Documentation converted to Markdown

Command line

  • Fix cli-defined parametric macro arguments getting munged
  • Fix missing error code on –eval if stdout write fails (#1444)
  • Fix local file name when passing URL to rpm2archive (#1091)
  • Fix error handling when rpm2archive write fails (#1091)
  • Add query formats for displaying tag numbers (:tagnum) and names (:tagname)

Transactions

  • Fix unpack failure leaving garbage on disk and system in inconsistent state (#967, RhBug:…)
  • Fix permissions on partial hardlink set install
  • Fix scriptlets executed with blocked signals (RhBug:1913765)

Database

BDB
  • Remove Berkeley DB database backend (%db_backend bdb)
NDB
  • Fix API-requested file permissions not honored
  • Add support for Darwin OS

Package building

Spec

  • Fix %patch asking interactive questions in some cases (#978)
  • Add support for multi-threaded zstd compression
  • Add thread number autodetection (with T or T0) to xz and zstd compression
  • Add GNOME documentation to default docdir path

Macros

  • Fix macro names missing in macro tracebacks (#545)
  • Fix deadlock on rpm -vv --eval '%trace' (#1428)
  • Fix %apply_patch internal helper macro naming (#1357)
  • Fix unparseable macro expansion (%{} expands to %{})
  • Add support for failing the build on duplicate files (#1158)
  • Add %{exist:...} builtin macro for testing file existence
  • Unify built-in and user-define macro syntax and calling conventions
    • %foo arg, %{foo arg} and %{foo:arg} are generally now equivalent (minor exceptions/bugs exist).
    • Built-in macros now honor the same conditional and negation syntax (notably %{verbose} now returns 0/1 value instead of special expansion)

Buildroot policies

  • Fix ELF files not getting stripped when debuginfo is disabled (RhBug:988812, RhBug:1634084)
  • Add checks for DT_RUNPATH when looking for RPATH issues
  • Add policy for removing executable bits from shared libraries
  • Remove unused brp-strip-shared buildroot policy script

Generators

  • Fix ELF libraries having to be executable for dependency generation
  • Add support for OrderWithRequires dependency generation
  • Python generators (and other Python packaging helpers) have been split to a separately maintained repository at https://github.com/rpm-software-management/python-rpm-packaging

Debuginfo

  • Fix build-id extraction (-i -n) emitting bogus errors
  • Fix inconsistent error behavior in find-debuginfo
  • Add support for DWARF-5 debug information

Signatures and keys

  • Fix harmless double error on lazy database open via keyring
  • Fix ambiguous keyring behavior between in-db and on-disk rings, this is now macro configurable (%_keyring)
  • Add support for EdDSA signatures
  • Add support for fs-verity signatures

Plugins

Python bindings

  • Fix error handling in rpm.pubkey constructor
  • Add cbStyle property to rpm.ts class for manipulating callback style

Lua interface

  • Add native access to rpm via a global macros table in the environment
    • macros.foo and macros['foo'] are equivalent
    • assigning to a value defines, assigning to nil undefines macros
    • undefined macros in the table return nil
    • parametric macros can be natively called via the table, either with a single string argument (expanded) macros.with('foo') or a table, in which case multiple (not expanded) arguments can be passed natively: macros.example({'one', 'two', 'three'})
  • Add rpm.isdefined() binding for testing whether macro is defined and/or parametric.
  • Add bindings for rpm IO streams (file-like objects from rpm.open(...))
  • Add bindings for rpm version objects (rpm.ver(...))
  • Add native access to scriptlet and macro options and arguments (via local opt and arg tables) (#1092)
  • Remove global arg table from the environment

Removed features

  • Remove Berkeley DB database backend (%db_backend bdb)
  • Remove beecrypt and NSS crypto backends
  • Remove redundant %_filter_GLIBC_PRIVATE filtering mechanism

API changes

Added APIs

  • Add argvAddN() API for adding partial strings to argv arrays
  • Add rpmExpandThisMacro() macro expansion function
  • Add rpmtsSetNotifyStyle() and rpmtsGetNotifyStyle() APIs to manipulate transaction callback style
  • Add rpmtsSetChangeCallback() for setting an optional transaction change callback function
  • Add rpmteSetUserdata() and rpmteUserdata() for associating and retrieving application private user data to transaction elements

Changed APIs

  • Fix rpmtsInitDB() argument confusion

Removed APIs

  • N/A

Internal improvements and cleanups

  • Fix various minor resource leaks
  • Fix some “undesired language” in the codebase
  • Fix out of bounds read when parsing XZ and zstd thread number (Tn)
  • Fix potential segfault in rpmInitMacros()
  • Fix uses of various deprecated interfaces in and outside rpm
  • Fix a use-after-free in macro expansion
  • Add further hardening on header read/import path
  • Add missing diagnostics to various fsm operations
  • Remove internal Lua variable API wrapper
  • Refactor fsm code for further improvements
  • Refactor macro code for further improvements (eg Lua integration)

Build process

  • Fix test cases failing on systems with tape drives (RhBug:1902844)
  • Fix OpenMP test on cross-compilation
  • Fix bunch of warnings from Doxygen
  • Fix missing include on musl build
  • Add support for building on aarch64 OSX
  • Add hard requirement on Lua (>= 5.2)
  • Add requirement for popt >= 1.16 (#939)
  • Change default database to sqlite (but not required)
  • Remove BDB dependencies

Compatibility notes

  • Some built-in macros previously had special undocumented behaviors in conditional and/or negated forms. Anything relying on such behaviors will be broken by this release as all macros adhere to the same syntax now.