Megjelent a RPM, azaz az RPM Package Manager (korábban Red Hat Package Manager) 6.0.0-s kiadása. Major kiadás, tehát nagy lépékű változásokkal érkezett:
Download
- Source: rpm-6.0.0.tar.bz2
- SHA256SUM: 14abb1b944476788d90005d8d61d5d30fce80d9f0de11eb657b14e5c9ef27441
Changes since 4.20.1
Overview
- Support for both RPM v4 and v6 packages (see Compatibility Notes)
- Support for multiple OpenPGP signatures per package (#3385)
- Support for OpenPGP v6 and PQC keys and signatures (#3363)
- Support for updating previously imported keys (#2577)
- Support for installing RPM v3 packages has been removed (#1107)
- RPM defaults to enforcing signature checking (#1573)
- RPM uses the full key ID or fingerprint to identify OpenPGP keys everywhere (#2403)
- Man page and other documentation overhaul (#3612, #3669, #3751)
- Pristine and verifiable release tarballs (#3565) (#2702)
General Use
- Several enhancements to rpmkeys(8):
rpmkeys --import
can now be used to update keys (#2577). This also updates the key handle from a short ambiguous key id to full fingerprint.
rpmkeys --import
now also works from a pipe
rpmkeys --export
added for exporting keys
rpmkeys --checksig
, --list
, --delete
use and expect full fingerprint of the keys (#3360)
rpmkeys
works identically with all keystore backends
rpmkeys --rebuild
can be used to rebuild the keystore contents and move between different keystore backends (#3347)
rpmkeys
key lookup is now case-insensitive
- Several enhancements to rpmsign(1):
rpmsign
can use either GnuPG or Sequoia-sq for signing (controlled by %_openpgp_sign
macro (gpg
or sq
))
rpmsign --addsign
no longer replaces existing signatures. Arbitrary number of signatures can be added on v6 packages by default and on v4 packages, with --rpmv6
rpmsign --resign
replaces all existing signatures with a new one
- New query tag extensions (e.g. with
--qf <format>
):
rpmformat
for determining package format version (3/4/6)
openpgp
for managing all supported OpenPGP signature types
- New query formatter
:hashalgo
for displaying hash algorithm names
- New
--filemime
query alias for querying per-file MIME info
- Consistent terminology and case usage in signature and key messages
- OpenPGP signatures are called OpenPGP in output
- RPM v3 header+payload signatures are called “legacy” in output
- New feature to calculate a set of configurable digests on verification and safe them in the rpmdb. This can help identifying the originating package file. (RHEL-35619)
- Fix scriptlet errors not reflected in transaction result code (#2581)
- Fix
%triggerprein
and %triggerun
not failing the associated install/erase operation (#3815)
- Fix
--hash
, --percent
and --test
not working with --restore
(#3917)
- Fix a segfault and memory leaks in rpmgraph(1) (#3925)
- Fix rpm2archive(1) using the same suffix for tar and cpio (#3922)
- Man page overhaul (WIP):
- Update all manual pages to a new consistent style with examples (#3669)
- Add man pages for all major components and file formats (#3612)
- Move end-user commands to section 1
- Many previously undocumented things covered, many errors fixed
- Versioned documentation on https://rpm.org/docs/
- Man pages
- Reference manual
- API docs
Packaging
- rpmbuild(1) now supports generating two different package formats, controlled by
%_rpmformat
macro value 6
/4
:
- rpmbuild(1) can now automatically sign packages if
%_openpgp_autosign_id
macro is defined (#2678)
- New command rpm-setup-autosign(1) added for easy auto-signing configuration (#3522)
- New
%{span:...}
macro to make defining multi-line macros nicer
- New
%{xdg:...}
macro for evaluating XDG base directories
- Add support for E2K architecture
- Fix sources and patches stored in reverse order in the header (#3014)
- Fix Lua
rpm.glob()
not honoring the c
argument (#3794)
- Fix architecture checking accidentally moved after build (#3569)
- Fix buildsys specific
%prep
section not accepted (#3635)
- Fix
check-rpaths
brp script when both RPATH and RUNPATH exist (#3667)
- Fix a memory leak in
rpmspec --shell
- Fix 4.20 regression on
rpmbuild -rs
failing on non-existent directory (#3682)
- Fix an extra newline printed on
rpm --eval
- Fix a segfault on invalid dependency generator output in
multi
mode (#3821)
- Fix
brp-strip-comment-note
failure due to a race condition
brp-elfperms
buildroot policy script was removed (#3195)
- Drop support for obsolete
--nodirtokens
rpmbuild(1) switch (#3927)
API Changes
- New functions related to rpmKeyring:
rpmKeyringInitIterator()
, rpmKeyringIteratorNext()
, rpmKeyringIteratorFree()
for iterating over keyring contents
rpmKeyringVerifySig2()
rpmKeyringLookupKey()
for finding a key in a keyring
rpmKeyringModify()
- New functions related to rpmPubkey:
rpmPubkeyFingperint()
, rpmPubkeyFingerprintAsHex()
, rpmPubkeyKeyIDAsHex()
and rpmPubkeyArmorWrap()
accessors
rpmPubkeyMerge()
for merging two pubkeys describing the same key
- New functions for managing transaction permanent keystore:
rpmtxnImportPubkey()
for importing keys
rpmtxnDeletePubkey()
for deleting pubkey’s from transaction keystore
rpmtxnRebuildKeystore()
for rebuilding transaction keystore
- New flags to control
rpmSign()
operation added: RPMSIGN_FLAG_RESIGN
, RPMSIGN_FLAG_RPMV4
, RPMSIGN_FLAG_RPMV6
- New functions for controlling per-package verification level:
rpmteVfyLevel()
and rpmteSetVfyLevel()
te.VfyLevel()
and te.SetVfyLevel()
in the Python bindings
- New identifiers related to multiple signature support added:
RPMTAG_OPENPGP
rpm tag
RPMSIGTAG_OPENPGP
signature header tag (alias to RPMTAG_OPENPGP
)
RPMVSF_NOOPENPGP
verification flag
- New rpm tags:
RPMTAG_PAYLOADSIZE
, RPMTAG_PAYLOADSIZEALT
, RPMTAG_RPMFORMAT
, RPMTAG_FILEMIMEINDEX
, RPMTAG_MIMEDICT
, RPMTAG_FILEMIMES
, RPMTAG_SOURCENEVR
, RPMTAG_PAYLOADSHA512
, RPMTAG_PAYLOADSHA512ALT
, RPMTAG_PAYLOADSHA3_256
, RPMTAG_PAYLOADSHA3_256ALT
, RPMTAG_SHA3_256HEADER
- Renamed rpm tags:
RPMTAG_PAYLOADDIGEST
to RPMTAG_PAYLOADSHA256
RPMTAG_PAYLOADDIGESTALT
to RPMTAG_PAYLOADSHA256ALT
RPMTAG_PAYLOADDIGESTALGO
to RPMTAG_PAYLOADSHA256ALGO
(obsolete)
- New identifiers related to SHA-3 added:
RPM_HASH_SHA3_256
, RPM_HASH_SHA3_512
- New symbols related to MIME types in v6 packages:
rpmfilesFMime()
, rpmfiFMime()
for retrieving per-file MIME info
RPMFI_NOFILEMIME
flag to control behavior
- New OpenPGP identifiers related to RFC-9580 added
- New
pgpDigParamsSalt()
function retrieving OpenPGP v6 signature pre-salt (#3846)
- New
rpmDigestBundleUpdateID()
function for updating individual ID’s in a digest bundle (#3845)
rpmtsAddInstallElement()
returns 3
on unsupported package format
fdSize()
returns an error on non-regular files
Internal Improvements
- RPM is now built as C++20 code (except for plugins and Python bindings)
- More background available in the initial announcement
- All relevant sources have been renamed to
.cc
or .hh
extension
- Many dynamic data structures moved to STL and other similar refactorings
- Numerous improvements to the test-suite
- Add an actual keystore abstraction
- New
openpgp.cert.d
based keystore (experimental) (#3341)
- New
make site
build target for easy local rendering of documentation
- Make reference counting atomic throughout the codebase
- Make the test-suite image
toolbox(1)
ready
- Support underscores in RPMTAG names
- Fix 4.20 regression signature size reservation not being used (#3768)
- Fix alternatives mechanism unintentionally kicking in for signatures (#3872)
- Fix keystore reads lacking transaction lock
- Fix a race condition in
rpmioMkpath()
(#3508)
- Fix recursion depth for macro error message (#3197)
- Fix empty password field in passwd/group causing entry to be ignored (#3594)
- Fix built-in macros not usable before loading macro files (#3638)
- Fix
fdSize()
failure handling in rpmSign()
- Fix pseudo-tags without an associated type showing up in –querytags
- Fix rpm install prefix not honored in the legacy
find-provides
and find-requires
dependency generator scripts
- Fix Python reference leaks related to archive handling
- Fix non-deterministic storage of dependency information in packages (#1056)
- Fix
sysusers
script escaping chroot for u!
entires
- Fix RPM 4.19 regression on failed update return code (#3718)
- Issue a warning on
macrofiles
entry in an rpmrc
(#3901)
- Recreate the transaction lock file after
--rebuilddb
(#3886)
- Drop
gpg(keyid)
provides from gpg-pubkey headers (#3360)
- Eliminate various internal symbols accidentally leaking to the ABI
- Eliminate uses of non-portable
signal(2)
API (#3688)
- Optimize
rpmlog()
locking
- Python bindings:
- Support Python module isolation (RhBug:2327289)
- Fix some resource leaks, run tests with ASAN
Building RPM
- A C++20 compiler is now required in addition to a C99 compiler, but C++20 modules support is not required.
- rpm-sequoia >= 1.9.0 is now required for building with Sequoia (default)
- Python >= 3.10 is now required for building the Python bindings
- scdoc man page generator is now required for building RPM
- Pre-built API documentation is no longer shipped in the release tarballs. Building it is optional, but Doxygen is required for doing so. Pre-built API documentation for all releases can be found in https://ftp.rpm.org/api/
Compatibility Notes
- New RPM v6 package format
- All file sizes and related limits are 64bit
- Crypto modernization
- Obsolete crypto (MD5 and SHA1) dropped
- SHA3-256 header digest added (#3797)
- SHA512 and SHA3-256 payload digests added (#3642, #3894)
- Per-file MIME info
- Widely compatible with RPM >= 4.14
- The “external” dependency generator mode no longer supported with v6 packages (#2373)
rpmlib()
dependencies for pre-4.6 features removed to reduce clutter (#3854)
- Can be queried with RPM >= 4.6
- Can be unpacked with RPM >= 4.12
- Can be verified and installed with RPM >= 4.14 (with caveats/limitations)
- RPM v4 packages:
- Built packages are identical to those generated by RPM 4.x versions
- Remain fully supported
- In the default configuration, packages built with RPM < 4.14.0 cannot be verified due to their use of weak, obsolete MD5 and SHA1 digests. For strongly signed packages, this can be worked around by changing
%_pkgverify_level
to signature
so the weak digests are simply ignored. If verifying the weak digests is necessary, the RPM 4.x behavior can be restored by setting %_pkgverify_flags
to 0
.
- Support for installing RPM v3 packages has been removed. (#1107) They can still be queried and also unpacked with rpm2cpio(1).
- RPM defaults to building v6 packages, this can be changed with the
%_rpmformat
macro.
- Lua
posix.fork()
family of calls, deprecated in 4.20, is disabled in packages built with RPM >= 6.0. They continue to function in packages built by RPM <= 4.20 however.
Other
- Package signing key configuration differs from the past. To support other implementations besides GnuPG, the signer ID is now set via
%_openpgp_sign_id
macro, which defaults to %{?_gpg_name}
for backwards compatibility.
- The low-level package signing macros are now parametric, any custom
%__gpg_sign_cmd
overrides will simply not work as such. Users are encouraged to look into dropping such overrides rather than just updating, most such overrides haven’t been necessary in a long time.
%_passwd_path
and %_group_path
are now treated as colon separated paths to allow using multiple files as the source of NSS information (e.g. with nss-altfiles)
--pkgid
and --hdrid
query CLI-switches have been dropped (#2633)