XZ (LZMA) Payloads in RPM
We intend to switch RPM to use XZ (the new LZMA format) as default payload compression for F12.
- Targeted release: Fedora 28
- Last updated: 2009-07-17
- Percentage of completion: 30% (xz package built)
RPM currently uses gzip payloads by default, with an option for bzip2. bzip2 adds greater compression, but with a large memory and cpu time penalty. XZ allows better compression without these penalties.
Benefit to Fedora
- Smaller packages
- Smaller downloads
- More space on ISOs
- Smaller content for mirrors
- The xz package must be reviewed and added to active distributions - DONE (for rawhide)
- Rebuild RPM in F-12 to link against it - DONE
- Rebuild RPM in F-11 to link against it (for upgrades)
- Rebuild RPM for Koji to link against it
- Fix deltarpm so it can understand xz payloads - not needed
- Cherry-pick support from rpm-4.7.0 to rpm-4.6.1 - DONE
- rebuild RPM 4.6.1 in F-10 to link against it (for upgrades)
- rebuild RPM 4.6.1 for Koji to link against it (for the build system)
- Change the default payload in redhat-rpm-config
- Rebuild the distribution
Step 7 is not required to support new payloads, but it is what provides the most benefit to Fedora users.
How To Test
Query built rpms, make sure they are using the new payload format. This can be done by checking for the rpmlib(PayloadIsXz) dependency in the package itself.
Check the dependencies of RPM itself, make sure it's linked against the XZ library, and that it provides the 'rpmlib(PayloadIsXz) dependency.
Check successful extraction of RPM payload by installing or extracting contents of XZ compressed RPMs via rpm2cpio utility.
Check that deltarpms can still be successfully created, and that the resulting RPM can be reassembled.
Users should see smaller packages and downloads. It should not be user-visible otherwise.
XZ package needs to be added to Fedora, and RPM built against it.
The XZ library is in beta, but the file format has been finalized (it is why we are using XZ instead of the not-finalized LZMA).
The contingency plan is to continue using gzipped payloads. If a mass rebuild has been done, another one would need done to rebuild with gzip payloads.
In order to turn on XZ payload compresion one could define following macros in /usr/lib/rpm/macros globally or in ~/.rpmmacros file locally:
This enables XZ payload compression level 7 (suggested default by upstream) for binary RPMs and SRPMS. These macros aren't defined by default and if undefined gzip compression is used.
Note that currently you can use this configuration only with rpm-4.7.0 or higher which is present in Fedora 11 or rawhide.
Also note that deltarpms between builds with different payload compression formats, while functional, usually save little bandwidth.
RPM in Fedora 12 has switched to using XZ compression (http://tukaani.org/xz/) in its packages to allow for better compression and smaller downloads for users. Users of older Fedora releases who wish to use RPMs built in Fedora 12 will need at least rpm-4.6.x from Fedora 10 or later.