Software Management (RPM, DNF) 2020 retrospective

Originally published at: Software Management (RPM, DNF) 2020 retrospective – Fedora Community Blog

On behalf of the RPM and DNF teams, I would like to highlight changes that
have appeared in our packages in 2020. Thanks everyone for your bug
reports and patches!

RPM

  • Support for complex expressions and conditionals with short-circuit logic etc in macros via %[…] and %{expr:…}
    • $ rpm --eval '%[0 < 1 ? "true" : "false"]'
  • Rpm versions as native objects in expressions, eg v”3.1-1″
    • $ rpm --eval '%[v"1.10" > v"1.2"]'
  • $ rpm --rebuilddb
    • New sqlite3 backend
      • More robust than the Berkley DB backend
      • SQLite3 has also a more permissive license than the latest BDB
    • NDB backend promoted to stable
    • Support for migration (reading) from BDB databases without linking to BDB

rpmbuild

  • Parametric macro dependency generators offer a lightning fast way to generate dependencies where applicable
  • Meta dependencies, e.g. Requires(meta) allow specifying dependencies without introducing ordering constraints
  • Dependency generation based on MIME types

DNF

  • Introduced the needs-restarting.d drop-in directory
  • Fixed reposync modularity issues, able to sync modular repos correctly
  • dnf groups-manager
    • yum-groups-manager is back
    • Upstream only, to be released in Fedora soon (PR #412)
  • dnf module switch-to
    • Switches the module stream and also performs distro-sync on the new stream content
  • New commands for storing a transaction and replaying it on another system
    • dnf history store/replay
  • dnf system-upgrade
    • The code was refactored to use the store/replay feature in the background
    • Landing in Fedora now
    • Comps groups are upgraded during the system upgrades
  • New commands to upgrade your system on reboot
    • dnf offline-upgrade
    • dnf offline-distrosync

microdnf

  • New commands for managing modules
    • microdnf module <enable|reset|disable>
  • microdnf --config
    • Microdnf reads values from dnf.conf
    • It is possible to specify a path to the config
  • microdnf --refresh
    • Forces repodata refresh
    • Microdnf also honors the metadata_expire configuration option

libdnf

  • Many changes to make the DNF features available in microdnf and PackageKit (and Gnome Software)

DNF 5

  • The goal is to remove redundant code and make sure all tools built on top libdnf work the same (DNF currently uses a different code path than microdnf and PackageKit)
  • We’re behind the plan because we spent the time fixing DNF 4 stack instead (modularity, new features, crashes, etc.)
  • There’s a COPR repo with unstable nightlies:
    • dnf copr enable rpmsoftwaremanagement/dnf5-unstable
    • dnf install microdnf5
    • dnf install python3-libdnf5 perl5-libdnf ruby-libdnf
    • WARNING: Here be dragons! The software is not ready for general use yet.
  • The next steps are:
    • Finish the core functionality
    • Stabilize the API
    • Make the package available in Fedora in parallel with the DNF 4 stack
4 Likes

Just for clarification, is that short for something like “New DataBase” (i.e. sqlite3), or is there yet a third backend in the mix?

Edit: Aaaand, it probably doesn’t do much good replying with questions to “system”, I now realize.

1 Like

It is this: Changes/NewRpmDBFormat - Fedora Project Wiki

It’s fine: the comments get propagated back to the blog post.

1 Like