Switch Anaconda installer to DNF5
Summary
Switch Anaconda installer to use DNF 5 instead of DNF 4 for RPM package installation.
Owner
- Name: Martin Kolman
- Email: mkolman@redhat.com
- Name: Pavla Kratochvílová
- Email: pkratoch@redhat.com
Current status
- Targeted release: Fedora Linux 43
- Last updated: 2025-07-03
- Announced
- Discussion thread
- FESCo issue: #3427
- Tracker bug: #2376120
- Release notes tracker: #234
Detailed Description
When installing Fedora from RPM packages (which is the default for most current Fedora netinst and DVD images) Anaconda still uses DNF 4, while Fedora already switched to DNF 5 for general package management and image builds around Fedora 41. It's time to switch also Anaconda to DNF 5 to keep the installation behavior consistent with the rest of Fedora and to avoid depending on the DNF 4 codebase that is effectively in maintenance mode now.
Feedback
While we expect the change to be effectively invisible for users, if you have any questions or concerns or feedback, please reach out to the Anaconda team on our Fedora Matrix channel: https://matrix.to/#/#anaconda:fedora.im
Benefit to Fedora
By switching Anaconda to DNF 5 we will be able to better support and debug package based applications due to DNF 5 being in active development & Anaconda will not block the future deprecation or removal of DNF 4.
Scope
- Proposal owners: Switch the Anaconda codebase to use DNF 5 instead of DNF 4.
- Other developers: We don’t expect changes affecting other Fedora developers.
- Release engineering: #Releng issue number
- Policies and guidelines: N/A (not needed for this Change)
- Trademark approval: N/A (not needed for this Change)
- Alignment with the Fedora Strategy:
Upgrade/compatibility impact
There is no upgrade/compatibility impact.
Early Testing (Optional)
Do you require 'QA Blueprint' support? Y/N
How To Test
We will of course only merge and release this change after the CI covering Anaconda passes, with quite a few tests covering the package installation related aspects:
- many kickstart-tests
- quite a few OpenQA tests maintained by FedoraQA
If you want to help with testing or check if your use case is still working as expected, do a manual or kickstart based installation from a boot.iso and check if all goes well.
If possible try to use some of the more advanced features available via the %packages section in kickstart to really stress test the new code.
There will also be a “DNF 5 Anaconda” test day scheduled, where you can help us make sure various scenarios are still working as expected, with team members being available on our Fedora Matrix channel to answer questions and provide support.
We have prepared an example kickstart file you can use and customize for testing packaging and thus DNF 5 in Anaconda:
# what we are testing there:
# - that we can exclude groups which are a part of an environment
# - that we can exclude groups we have specified in ourselves
# (this could be important for multiple ksincluded %packages sections)
# - that the --optional flag for package groups is working
# - that the --nodefaults flag for package groups is working
# Default Fedora Rawhide repositories
url --url http://dl.fedoraproject.org/pub/fedora/linux/development/rawhide/Everything/x86_64/os/
# shutdown at the end
shutdown
# network
network --bootproto=dhcp
# storage & bootloader
bootloader --timeout=1
zerombr
clearpart --all
autopart
# l10n
keyboard us
lang en
timezone America/New_York
# user confguration
rootpw testcase
%packages
# (1) Test that you can remove a group that's part of an environment.
@^xfce-desktop-environment
-@dial-up
# (2) Test that you can add and then remove a group.
@3d-printing
-@3d-printing
# (3) Test that --optional works.
@container-management --optional
# (4) Test that --nodefaults works.
@rpm-development-tools --nodefaults
%end
%post
# We don't have a way of determining if a group/env is installed or not.
# These sentinel packages will have to do.
# Testing #1 - lrzsz is only part of dial-up, and should not be installed.
rpm -q lrzsz
if [[ $? == 0 ]]; then
echo '*** dial-up group should not have been installed' >> /root/RESULT
fi
# Testing #2 - meshlab is only part of 3d-printing, and should not
# be installed.
rpm -q meshlab
if [[ $? == 0 ]]; then
echo '*** 3d-printing group should not have been installed' >> /root/RESULT
fi
# Testing #3 - buildah, podman, origin-clients are optional part of container-management,
# so should be installed when the --optional flag is passed for the group spec
rpm -q buildah
if [[ $? != 0 ]]; then
echo '*** buildah was not installed for @container-management --optional' >> /root/RESULT
fi
rpm -q podman
if [[ $? != 0 ]]; then
echo '*** podman was not installed for @container-management --optional' >> /root/RESULT
fi
# Testing #4 - rpm-build is mandatory so it should be installed. rpmdevtools is
# default so it should not. rpmlint is optional so it should not.
rpm -q rpm-build
if [[ $? != 0 ]]; then
echo '*** Mandatory package from rpm-development-tools was not installed' >> /root/RESULT
else
rpm -q rpmdevtools
if [[ $? == 0 ]]; then
echo '*** Default package from rpm-development-tools should not have been installed' >> /root/RESULT
else
rpm -q rpmlint
if [[ $? == 0 ]]; then
echo '*** Optional package from rpm-development-tools should not have been installed' >> /root/RESULT
fi
fi
fi
# Report success if no errors have been reported to /root/RESULT
if [ ! -f /root/RESULT ]
then
# no result file (no errors) -> success
echo SUCCESS > /root/RESULT
else
# some errors happened
exit 1
fi
%end
There is even some simple validation built in, that should result in “SUCCESS” being written into the /root/RESULT on the installed system if all goes well - or an error message if something failed. You can login as “root” with the password of “testcase” to check the file.
To easily run a kickstart installation, consider using the mkksiso tool with the –ks flag. Then booting the modified boot.iso should be sufficient, without the need to manually edit the boot options to load the kickstart.
User Experience
There shouldn't be any user observable change for package based installation.
Dependencies
None.
Contingency Plan
- Contingency mechanism: If we encounter blocking issues that can’t be fixed in time, Anaconda will keep using DNF 4 in Fedora 43.
- Contingency deadline: 100% Code Completion deadline for Fedora 43 on Tue 2025-08-26
- Blocks release? No
Documentation
N/A (not a System Wide Change)
