Features/RPM4.6

= Update RPM to 4.6 =

Summary
Update RPM to 4.6 in Fedora 10.

Owner

 * Name: PanuMatilainen

Current status

 * Targeted release:  Fedora 10
 * Last updated: 2008-10-17
 * No known (major) regressions left as of RPM 4.6.0-rc1
 * Percentage of completion: 100%

Detailed Description
rpm.org is closing in on a new major RPM release, first one in several years, to replace the aging and messy rpm 4.4.x codebase. The RPM development team would like to update Fedora RPM to a pre-release version as early as possible to leverage the wide testing that Fedora rawhide and alpha/beta releases get. A stable upstream version of the new RPM is expected be released in time for Fedora 10.

Benefit to Fedora
Many long-standing feature requests for RPM have been implemented. The full description can be found in http://wiki.rpm.org/Releases/4.5.90 (currently not complete but being updated), to highlight a few:
 * Ability to express "arch dependencies" between packages (#235755)
 * Sane default buildroot
 * Large file support (#199742, #433795, #448488)
 * Support for LZMA payloads resulting in big space and bandwidth savings (#441110)
 * Support for stronger file checksums such as SHA256 (#169609)
 * Automatic cleanup of stale rpmdb locks (countless bugs about rpm/yum "hanging")
 * Many many bugs fixed.

And most importantly by far: an actively developed, cleaner and more maintainable codebase.

Scope
A handful of packages need to be ported to the new API, patches for the most important ones already exist.

No package rebuilds required, but to enable use of certain features such as arch-dependencies, a mass-rebuild of all packages will be needed.

Test Plan

 * Fedora build infrastructure
 * Building packages individually with rpmbuild (dist-cvs and otherwise). Tested on a large package set, no known major issues.
 * Building packages in mock: a large number of packages of varying complexity (kernel, gcc, glibc, glib2, anaconda...) have been successfully built in mock with the new rpm.
 * Building packages in koji not tested yet


 * Fedora distro composition and installation tools
 * Custom fedora-9-x86_64 DVD image built successfully with revisor, with new RPM on the compose-host.
 * Custom fedora-9-x86_64 DVD image built successfully with revisor, with new RPM on both compose-host and installation set.
 * Installation of basic Fedora 9 x86_64 package set with anaconda using the new RPM in the install image. Tested to complete successfully.
 * Upgrading between distros with anaconda not yet tested.


 * RPM command line tools
 * Extensively used for daily operation of Fedora 9 (building, installing, updating, erasing and verifying) on several hosts during last several months. No known major issues as of this writing.
 * For more complete testing, a wider tester audience is necessary to bring out any odd corner-cases.


 * Yum and PackageKit
 * Extensively used for daily operation of Fedora 9 of development version of RPM (installing, updating, erasing) packages on several hosts during last several months. No known major issues as of this writing.
 * For more complete testing, a wider tester audience is necessary to bring out any odd corner-cases.


 * Other librpm API clients
 * Varying amount of porting necessary to the few packages that directly use librpm API, patches already exist for the most important ones (gdb, net-snmp, rpmlint)

User Experience

 * The new RPM changes very little in the average "user experience":
 * Certain types of queries are an order of magnitude faster
 * Some annoying bugs have been fixed
 * A few questionable and previously unsupported features have been removed
 * For packagers there are a few notable changes in the build environment setup and slightly stricter spec syntax in some places.

Dependencies

 * No new packages need to be introduced.
 * As the new RPM uses system libraries instead of bundled copies, some new dependencies for packages already in Fedora will be introduced:
 * Berkeley DB (db4 / compat-db)
 * Lua 5.1 (lua)
 * libmagic (file-libs)
 * NSS/NSPR (this is new for upstream, already in Fedora)
 * To enable support for LZMA package payloads, a new version of lzma-libraries will be needed, but this is out of scope for initial introduction, more of F11 material.

Contingency Plan

 * New RPM will be built against Berkeley DB 4.5.20 which is fully on-disk compatible with the format used by RPM 4.4.x. This means no special conversion between database format is needed should going back to RPM 4.4.x be necessary, downgrading is just a matter of "rpm -Uvh --oldpackage ..."
 * Packages built by the new RPM are fully compatible with RPM 4.4.x, as long as some of the new features are not used:
 * Packages over 2GB in size. This is not an issue for the current Fedora package set.
 * Non-MD5 file checksums. MD5 is the default and changing it would be a distro, not package level decision as it has large consequences.
 * LZMA payloads - old RPM cannot handle these. Changing the default payload compression would be a distro, not package level decision as it has large consequences.
 * New spec macros %{patches} and %{sources}. Using these does not affect runtime compatibility of packages, but old RPM cannot be used to build packages using these in spec.
 * The RPM development team recommends that use of the new incompatible features is banned in Fedora packages for a "probation period", ie until it becomes clear that there is no need to go back to RPM 4.4.x. One possibility to enforce this would be excluding the new RPM from builders, so that packages would still be built with RPM 4.4.x. Packages built with the new RPM will contain more provides than packages built with RPM 4.4.x but these are just regular provides and not harmful or incompatible for RPM 4.4.x.
 * Considering the amount of internal changes in the new rpm, some new bugs are to be expected. These are to be fixed with utmost priority if/when found.

Documentation
Documentation is somewhat scarce as of this writing, release note draft document can be found in http://wiki.rpm.org/Releases/4.5.90 and librpm API documentation in http://rpm.org/api/4.5.90/

Release Notes
Need for release notes depends on the enabled feature set and default configuration shipped with rpm itself / redhat-rpm-config. Little changes in the end-user experience, for packagers notes about changes in default build environment is in order.