RPM 4.11.0 Release Notes

  1. Download information
  2. Summary of changes from RPM 4.10.x
    1. General bugfixes and enhancements
    2. Package building
    3. API changes
      1. New interfaces
      2. Other interface changes
    4. Internal improvements and cleanups
    5. Build process
  3. Compatibility 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

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.