RPM 4.11.0 Release Notes
Download information
- ’'’The original 4.11.0 release contained such a dangerous regression that it has been pulled out of distribution permanently. Use RPM 4.11.0.1 instead.’’’
Summary of changes from RPM 4.10.x
General bugfixes and enhancements
- Fix missing error on –import attempt on a non-key file (RhBug:869667)
- Fix missing error code on unparseable signature in packages, regression introduced in rpm 4.10.0
- Fix –setperms regression introduced in rpm 4.10.0 (RhBug:881835)
- Fix several cases of redundant backups on %config files/symlinks (RhBug:597689, RhBug:662706, …)
- Fix several cases of missing backup when %config file/symlink is replaced by a file of different type or a directory (RhBug:445202)
- Fix redundant %config backups when on-disk file/symlink content is the same as in replacing (ie new) package, even when digest algorithm changes (RhBug:597689 and others)
- Fix several cases of missing backups on %config symlinks
- Fix backup of shared %config files causing overwriting the backed up content with new package contents (ie destroying the backed up data)
- Fix locale dependent behavior in rpm2cpio.sh (RhBug:878363)
- Fix disk-space accounting wrt intermediate space requirement during transaction (ticket #175, RhBug:872314)
-
Fix disk-space accounting wrt inodes
- New –undefine cli switch for undefining macros (related to RhBug:876308)
- New –licensefiles cli switch for querying license files
-
Add $RPM_CONFIGDIR/macros.d/ directory to default macro path (RhBug:846679)
- Only create the first instance of a file shared between multiple packages: faster installs, improved timestamp verification behavior, and avoids pathologies when disk-space is low
- Detect and report attempts to replace directories with a non-directory as file conflicts (related: RhBug:447156)
- Detect and report attempts to replace directory symlink with a directory as file conflicts
-
Detect and report some cases of conflicting files accessed through different symlinks
- Updated translations and documentation (RhBug:839126, RhBug:742362…)
Package building
- New –noclean and –nocheck cli-switches to skip %clean and %check stages of build
- New %autosetup (and %autopatch) macros for fully automating unpackaging of sources and application of patches, either with plain ‘patch’ or a number of DVCS systems (git, hg, bzr, quilt…) (ticket #54)
-
New built-in %dirname macro
- Fix rpmspec –parse to not require sources and patches to be present
- Dont silence patch by default (RhBug:678000, RhBug:773503)
- Permit non-existent %ghost directories to be packaged (RhBug:839656)
- Report the actual reason on archive creation failure again
- Avoid unnecessary error on rpmbuild –addsign when no packages were created
- Track payload file size limit for src.rpm’s too (RhBug:833427)
- Warn on apparent content-type mismatches in packages (eg 32bit binaries included in a package for 64bit architecture)
-
Debug information sub-packages renamed to -debuginfo to match common distro practises
- Fix bogus “unclosed %if” error when %include is used in spec conditionals
- Fix %license as a %files list virtual attribute
- New “special” %license with non-absolute path (similar to %doc) to allow easily separating licenses from normal documentation (ticket #116)
- Make double-quoting work for special %doc and %license for consistency with rest of %files section (ticket #858)
- Accept “owner” as an alias to “user” %verify attribute (RhBug:838657)
- Warn about invalid %changelog dates (eg wrong day name) (RhBug:843525)
- PrePreq tag no longer accepts extra qualifiers (such as “post”)
- Requires tag no longer accepts “prereq” as an extra qualifier
- Detect missing argument to %include
- Report file name and spec line number on %include errors
- Report starting line for unclosed %if constructs
- Report the actual unknown option instead of ? in parametrized macros
- Line continuations can now be arbitrarily long
- New ELF dependency generator option –no-fake-soname to prevent emitting soname provide when DSO does not set one
API changes
New interfaces
- New rpmstrPool object + associated functions for efficient string storage &
lookup:
- Pool lifetime: rpmstrPoolCreate(), rpmstrPoolFree() and rpmstrPoolLink()
- String insertion: rpmstrPoolId(), rpmstrPoolIdn()
- Accessors: rpmstrPoolStr(), rpmstrPoolStrlen(), rpmstrPoolStreq(), rpmstrPoolNumStr()
- Disable/enable insertion: rpmstrPoolFreeze(), rpmstrPoolUnfreeze()
- New rpmIsGlob() function to fix glob_pattern_p() portability issues
- New rpmtdToPool() function for optimized header string array to string pool insertion
- New rpmGetArchColor() function for retrieving the canonical “color” of an architecture
Other interface changes
- Database iterators on the RPMDBI_LABEL pseudo-index are now realiable wrt match count and architecture matching
Internal improvements and cleanups
- Fix legacy retrofits getting performed on new packages with no files
- Fix incomplete data killing rpmdsMerge() with assert()
- Fix partial reads and errors in package IO (RhBug:802839, RhBug:580974)
- Fix a thinko in file triplet validation that allowed some invalid cases to pass
- Fix dependency lookups modifying transaction element dependency set iterators
- Fix librpmio exporting a clashing glob() implementation (RhBug:819680)
- Fix NSS-usage clash by using private context when possible (RhBug:871485)
- Fix NSS crypto using deprecated functions and symbols
-
Fix Fread() and Fwrite() behavior on EINTR (RhBug:580974)
- Optimize adding packages to transaction
- Optimize transaction dependency checking
- Optimize dependency set manipulation and comparison
- Optimize to fingerprinting and file disposition calculations
- Optimize to rpm cli erasure (-e) target package lookups
- Optimize internal dependency generator data structures
-
Optimize overall memory consumption and performance by utilizing string pool and id-based operations where most beneficial and possible
- File state machine divided and conquered for relative sanity
- Preliminary work towards abstract package payload API
- Unify ad-hoc string caches to utilize string pools instead
- Avoid revalidation attempts on known bad headers from rpmdb
- Issue warnings on unexpectedly failed file/directory removal
- Clean up fingerprinting code and data structures
- Clean up spec parsing, especially wrt %files list
Build process
- Fix spurious compile warnings on architectures where -fstack-protector is not supported
- Fix compile warnings on gcc >= 4.7
- Fix compile warnings ẃith NSS >= 3.14
- Use secure_getenv() instead of private __secure_getenv() when available
- Fix sepolicy plugin getting built when SELinux support is disabled
- Fix support for platforms where fdatasync() is not available
- Dozens of new cases added to the selftest-suite, including systematic testing for %config behavior and file replacement
- Added support for Lua 5.2
- Added support for using beecrypt as an alternative crypto implementation (–with-beecrypt)
- For NSS crypto implementation, NSS version >= 3.12 is now required
Compatibility notes
- This release is API- and ABI-compatible with rpm 4.10.x (soname does not change)
- However, two previously public enum values have been removed from rpmfi.h header
which can cause compile failures for eg language bindings if they try to further
export these symbols:
- RPMFILE_EXCLUDE which has only ever been useful to librpmbuild
- RPMFILE_UNPATCHED which is a long-since obsolete and unused placeholder value
- No new package-level incompatibilities introduced
- Spec file incompatibilities:
- Many previously silently accepted spec files will now emit warnings on bogus %changelog dates: day name not matching date is very common in specs as this has not been previously validated.
- Some previously accepted spec files can now fail to parse due to stricter validation
- Spec files utilizing the new %license behavior are not compatible with older rpm versions
- Older rpm versions do not understand double-quoting of special %doc entries. Globs can be used as a backwards-compatible workaround for escaping special characters in file names.