User Tools

Site Tools


RPM Package

rpm5 to rpm porting status

rpm5 to rpm package update

All of the below is fully automated within the package using Obsoletes/Provides/Requires or postinst/posttrans scriptlets.

RPM database format change


The current rpm database implementation is based on Berkeley DB 5.x, a version which is unmaintained upstream for several years now. Berkeley DB 6.x is license incompatible so moving to that is not an option. In addition, the existing rpmdb implementation is notoriously unreliable as it's not transactional and has no other means to detect inconsistencies either. Changing to a more sustainable database implementation is long overdue. We propose to change the default rpmdb format to the new sqlite based implementation.
  • The rpm database format changes from Berkeley DB to SQLite, conversion is automatic after rpm package set update. Backup of the old database is saved as /var/lib/rpm.rpmbackup-VERSION-RELEASE, using version and release of the package that is installed (not the old one). Ex. if the old package was rpm-5.4.15-58 and the new one is rpm-, the backup of the database will be in /var/lib/rpm.rpmbackup-
  • Users who have a particular need to stay on Berkeley DB backend can still do so by overriding the configuration manually (eg. echo '%_db_backend bdb' >> /etc/rpm/macros) before updating rpm package.
  • It is also possible to convert back bu overriding _db_backend and running ''rpm --rebuilddb''.
Staying with or converting back to Berkeley DB backend is discouraged as rpm upstream plans to reduce Berkeley DB support to read-only.

Repackage support

Repackage is not supported by rpm, so do not rely on it.

Python bindings

While rpm5 provided only Python 2 bindings, rpm provides only Python 3 bindings.

SNMP support rpm does not support hrmib integration.

Porting packages from rpm5 to rpm

  • Suggests are now Recommends,
  • Obsoletes/Provides must follow the package naming rules, they cannot contain characters like () or /, what means packages cannot depend on path/files or same virtual dependency names (ex. perl::Foo is not accepted).
  • Minor spec syntax changes
    • Spaces around operators in dependencies are required (ex. BuildRequires: foo-devel >= 1.0)
    • Bare words are no longer supported, please use “…” (ex. %if “%{_lib}” != “lib”)
    • Symlinks are always packaged with 777 mode and using %attr() for symlink is reported as warning
    • Requires(triggerpostun) is not supported, replace with Requires(postun).

Spec development

  • rpm generates rpmlib(ShortCircuited) dependencies when package is build using --short-circuit option. To disable that add %disable_short_circuited_deps 1 to ~/.rpmmacros
  • Patch is now run with –fuzz=0 option, add %_default_patch_fuzz 2 to ~/.rpmmacros to keep previous behavior.
  • Package file checksum digests are now SHA256 based, if you need to keep previous behaviour, define %_source_filedigest_algorithm 1 and %_binary_filedigest_algorithm 1 into ~/.rpmmacros
packages/rpm.txt · Last modified: 2021-05-02 21:28 by baggins