RPM 4.19.0 Release Notes
- Source: rpm-4.19.0.tar.bz2
- SHA256SUM: b30916dc148cbeab077797e9fc365702931e3a9a7eacf70add84153b549b3f77
Summary of changes from RPM 4.18.x
General bugfixes and enhancements
Command line
- Allow piping from
rpm2archive(8)
(#2208)
- Add
rpmsort(8)
utility for sorting RPM versions
- Add
--nopreuntrans
and --nopostuntrans
scriptlet disablers (#2119)
- Add
--nosysusers
to disable automatic user/group creation at install time (#1032)
- Conditionally display VCS tag in
--info
query
- Show the tag number for unknown tags in
--xml
output
- Check inside
--root
when querying for files (#2576)
- Add aliases for weak dependency queries to
rpmspec(8)
Database
- Remove obscure check for package build time from
--rebuilddb
(#2527)
- Don’t muck with per-process global sqlite configuration from the db backend
Package building
Spec
- Add support for
.specpart
files for dynamic spec generation
- Add
--generate-subpackages
to find_lang.sh
(utilizes .specpart
)
- Add
sysusers.d(5)
integration for automated user and group handling (#1032)
- Bundle custom
sysusers.sh
script implementing systemd-sysusers(8)
interface
- Generate user/group requires from
%files
(#1032)
- Improve shell-like globbing and escaping in
%files
(#1749)
- Expand
%doc
and %license
globs only once (#1294)
- Add support for
%preuntrans
and %postuntrans
scriptlets (#2119)
- Turn
%patch
lines without arguments and options into an error
- Fix misleading error message on some invalid filetrigger conditions (#2584)
Macros
- Add
%specpartsdir
to macros.in
(#2532)
- Add optional
total
/proc
/thread
arguments to %{getncpus}
macro (#804)
- Add shorthand
macros
for some convenient Lua string operations:
%{gsub:...}
, %{len:...}
,
%{lower:...}
, %{rep:...}
, %{reverse:...}
, %{sub:...}
and
%{upper:...}
- Add
%{rpmversion}
builtin macro for getting the running rpm version (#2523)
- Calculate number of threads to use during build, not spec parse
Buildroot policies
- Fix a race condition in
brp-strip
(RhBug:1959049)
- Hardening fixes in
check-buildroot
Generators
- Generate user/group provides from packaged
/etc/passwd
, /etc/group
and sysusers.d(5)
files (#1032)
- Populate user and group data in cpio payload again (ancient regression)
Architecture handling
- Add x86-64 architecture levels (v2-v4) as architectures
- Fix how x86 models are derived in
rpmrc
(#2535)
- Use
__builtin_cpu_supports
in x86-64 CPU feature level detection (#2463)
- Allow setting platform macro settings externally (#2578)
- Behave more consistently when target arch
%optflags
are not defined (RhBug:2231727)
Signatures and keys
Plugins
- Fix per-file plugin hook regression introduced in 4.18 (#2543)
- Suppress inhibition lock warning message when DBus service is not available
Python bindings
- Add some Python binding examples (#2075)
Lua interface
- Export
rpmGlobPath()
as rpm.glob()
- Fix error handling of
rpm.execute()
and rpm.redirect2null()
(#2528)
API changes
Added APIs
rpmGlobPath()
, like rpmGlob()
but also takes flags
rpmEscape()
and rpmUnescape()
for prepending and removing backslashes to
and from special chars in a string, respectively
- Add
pgpVerifySignature2()
and pgpPrtParams2()
, like their original
variants but also return descriptive error messages (on failure) or lints (on
success)
Changed APIs
rpmGlob()
now only accepts one pattern in the input string, not a space
separated list
Removed APIs
- Directory index related empty stubs
rpmfiSetDX()
, rpmfiNextD()
and
rpmfiInitD()
- File iterator related deprecated function
rpmteFI()
and Python’s te.FI()
- Epoch promote empty stubs
rpmdsNoPromote()
, rpmdsSetNoPromote()
, global
variable _rpmds_nopromote
and Python’s ds.SetNoPromote()
- Keyring related deprecated functions
rpmKeyringLookup()
and
rpmPubkeyDig()
- PGP related deprecated struct
pgpDig
and functions pgpPrtPkts()
,
pgpNewDig()
, pgpCleanDig()
, pgpFreeDig()
, pgpDigGetParams()
,
pgpVerifySig()
, pgpHexStr()
and Python’s ts.pgpPrtPkts()
- Header related deprecated functions
headerUnload()
, headerLoad()
and
headerCopyLoad()
- File classifier related deprecated function
rpmfcNew()
- Signal related type
rpmsqAction_t
, defines RPMSQ_DFL
, RPMSQ_IGN
,
RPMSQ_ERR
and functions rpmsqIsCaught()
, rpmsqActivate()
,
rpmsqSetAction()
, rpmsqPoll()
, rpmsqSetInterruptSafety()
and Python’s
signalCaught()
, checkSignals()
, setInterruptSafety()
- File util function
rpmIsGlob()
Internal improvements and cleanups
- Make build parallelism memory and address-space aware (#804)
- Make user/group info reliable operation across chroot (#882, #1789)
- Make rpmscript machinery chroot-aware
- Fix ignoring exit code of child scripts in case of
EINTR
- Axe our internal and buggy
glob()
and fnmatch()
copies
- Drop now redundant bundled copies of
stpcpy()
and stpncpy()
- Rely on POSIX.1-2008
realpath()
semantics
- Simplify and clean up
rpmio
thread enablement code
- Header internals type cleanup
rpmds
related cleanups and sanity fixes
- Eliminate signedness mismatch from
RPMTAG_NOT_FOUND
- Fix a segfault on a non-stringable argument to macro call from Lua
- Remove some unused logging defines
- Rewrite
--last
to just use sed(1)
for formatting
Build process
- New CMake build system, replaces Autotools
- Replace
fakechroot(1)
with proper container technology in test-suite (#1580)
- Default to Sequoia crypto as per roadmap
- Fix missing includes on macOS
- Drop support for buggy and problematic alternative Python build method (#130, #2230)
- Drop support for openssl < 1.1
- Drop some other redundant and ancient configure-time checks
- Split off translations to a separate project
- Default to C.UTF-8 locale, allow fallback to C (#2587)
- Export our libraries as a cmake
find_package()
config (#2471)
Documentation
Compatibility notes
- Any non-root ownership in the
%files
section (through %attr()
or
%defattr()
) now generates an automatic dependency on the named user and/or
group. This dependency can be satisfied by another package shipping a
sysusers.d(5)
file or the /etc/passwd
and /etc/group
files themselves.
Existing packages shipping any of these files will have to be rebuilt with
RPM 4.19 in order for them to carry the respective user and/or group
provides. This may require distro-level coordination to ensure proper
installation of all the affected packages. For more information, please
consult the
manual.
%patch
without arguments (previously an alias to %patch 0
) is now a build error (use %patch N
instead)