DNF System Upgrade
dnf-plugin-system-upgrade
is a plugin for the DNF package manager and is used to upgrade your system to the current release of Fedora. For Fedora Silverblue and Fedora CoreOS, which use rpm-ostree, you may refer to rpm-ostree documentation for details.
All in one Command
sudo dnf upgrade -y --refresh && sudo dnf install dnf-plugin-system-upgrade -y && sudo dnf system-upgrade download --releasever=36 -y && sudo dnf system-upgrade reboot -y
This is the recommended command-line upgrade method. It works as follows:
Packages are downloaded while the system is running normally
The system reboots into a special environment (implemented as a systemd target) to install them
Upon completion, the system reboots into the new Fedora release
Performing system upgrade
Back up your data before performing a system-wide upgrade as every system upgrade is potentially risky. As a precaution, download the Fedora Workstation Live image in the event something goes wrong.
To update your Fedora release from the command-line do:
sudo dnf upgrade --refresh
and reboot your computer.
Important: Do not skip this step. System updates are required to receive signing keys of higher-versioned releases, and they often fix problems related to the upgrade process.
Install the dnf-plugin-system-upgrade package if it is not currently installed:
sudo dnf install dnf-plugin-system-upgrade
Download the updated packages:
sudo dnf system-upgrade download --releasever=36
Change the
--releasever=
number if you want to upgrade to a different release. Most people will want to upgrade to the latest stable release, which is36
, but in some cases, such as when you’re currently running an older release than35
, you may want to upgrade just to Fedora35
. System upgrade is only officially supported and tested over 2 releases at most (e.g. from34
to36
). If you need to upgrade over more releases, it is recommended to do it in several smaller steps (read more).You can also use
37
to upgrade to a Branched release, orrawhide
to upgrade to Rawhide. Note that neither of these two are stable releases. For details about the upgrade process and common issues related to those two releases, please look at appropriate sections on aforelinked pages.If some of your packages have unsatisfied dependencies, the upgrade will refuse to continue until you run it again with an extra
--allowerasing
option. This often happens with packages installed from third-party repositories for which an updated repositories hasn’t been yet published. Study the output very carefully and examine which packages are going to be removed. None of them should be essential for system functionality, but some of them might be important for your productivity.When the new GPG key is imported, you are asked to verify the key’s fingerprint. Refer to https://getfedora.org/security to do so.
In case of unsatisfied dependencies, you can sometimes see more details if you add
--best
option to the command line.If you want to remove/install some packages manually before running
dnf system-upgrade download
again, it is advisable to perform those operations with--setopt=keepcache=1
dnf command line option. Otherwise the whole package cache will be removed after your operation, and you will need to download all the packages once again.
Trigger the upgrade process. This will reboot your machine (immediately!, without a countdown or confirmation, so close other programs and save your work) into the upgrade process running in a console terminal:
sudo dnf system-upgrade reboot
Once the upgrade process completes, your system will reboot a second time into the updated release version of Fedora.
Optional post-upgrade tasks
These are some of the tasks you can do after a successful upgrade.
This section is mainly intended for power users. If you are a general user who doesn’t use the terminal daily, you may skip this section.
Update system configuration files
Most configuration files are stored in the /etc
folder. If you have changed the package’s configuration files, RPM creates new files with either .rpmnew
(the new default config file), or .rpmsave
(your old config file backed up). You can search for these files, or use the rpmconf
tool that simplifies this process. To install rpmconf, enter:
sudo dnf install rpmconf
Once the install is complete enter:
sudo rpmconf -a
Some third party software drop edited configuration files in /etc/yum.repos.d/
and reverting these files to their original versions may disable updates for the software. Please remember to review configuration files in this directory carefully.
For more information you can refer to the man pages (man rpmconf
).
If you use rpmconf
to upgrade the system configuration files supplied with the upgraded packages then some configuration files may change. After the upgrade you should verify /etc/ssh/sshd_config
, /etc/nsswitch.conf
, /etc/ntp.conf
and others are expected. For example, if OpenSSH is upgraded then sshd_config
reverts to the default package configuration. The default package configuration does not enable public key authentication, and allows password authentication.
Clean-up retired package
Every release Fedora retires a few packages. There are various reasons: the package become obsoleted, dead upstream or maintainer stepped down. Fedora no longer distribute these packages, but they are still present at your systems. You will never receive upgrades. Not even security ones. It is highly recommend to remove these packages.
sudo dnf install remove-retired-packages remove-retired-packages
Clean-up old packages
You can see a list of packages with broken dependencies by typing:
sudo dnf repoquery --unsatisfied
The list should be empty, but if this is not the case consider removing them as they are not likely to work.
You can see duplicate packages (packages with multiple versions installed) with:
sudo dnf repoquery --duplicates
Run sudo dnf update
first, as this list is only valid if you have a fully updated system. Otherwise, you will see a list of installed packages that are no longer in the repositories because an update is available. This list may also contain packages installed from third-party repositories who may not have updated their repositories.
For packages from the official repositories, the latest version should be installed. However, some packages that are still on your system may no longer be in the repositories. To see a list of these packages do:
sudo dnf list extras
If you see a package you do not need, or use, you can remove it with:
sudo dnf remove $(sudo dnf repoquery --extras --exclude=kernel,kernel-\*)
You can safely remove packages no longer in use with:
sudo dnf autoremove
DNF decides that a package is no longer needed if you haven’t explicitly asked to install it and nothing else requires it. However, that doesn’t mean that the package is not useful or that you don’t use it. Only remove what you are sure you don’t need.
Clean-Up Old Kernels
After you boot into the latest kernel and test the system you can remove previous kernels. Old kernels remain even after dnf autoremove
to avoid unintentional removals.
One of the easier ways to remove old kernels is with a script that retains the latest kernel. The script below works whenever Fedora updates a kernel, and does not depend upon a system upgrade.
#!/usr/bin/env bash old_kernels=($(dnf repoquery --installonly --latest-limit=-1 -q)) if [ "${#old_kernels[@]}" -eq 0 ]; then echo "No old kernels found" exit 0 fi if ! dnf remove "${old_kernels[@]}"; then echo "Failed to remove old kernels" exit 1 fi echo "Removed old kernels" exit 0
Clean-up old symlinks
There may be some dangling symlinks in the filesystem after an upgrade. You can clean the dangling links by installing the symlinks utility and deleteing the old links.
sudo dnf install symlinks
Once the utility is installed you can audit for broken symlinks like shown below. -r
means recursive.
sudo symlinks -r /usr | grep dangling
After you verify the list of broken symlinks you can delete them like shown below. -d
means delete.
sudo symlinks -r -d /usr
Resolving post-upgrade issues
Only follow these steps if you encounter problems with your upgraded system.
Rebuilding the RPM database
If you see warnings when working with RPM/DNF tools, your database might be corrupt. It is possible to rebuild it to see if resolves your issues. Always back up /var/lib/rpm/
first. To rebuild the database, run:
sudo rpm --rebuilddb
Using distro-sync to resolve dependency issues
The system upgrade tool uses dnf distro-sync
by default. If your system is partly upgraded or you see some package dependency issues, try running another distro-sync manually to see if this fixes the problem. This will attempt to make your installed packages the same version in your currently enabled repositories, even if it must downgrade some packages:
sudo dnf distro-sync
You can also use the --allowerasing
option will remove packages with dependencies that can not be satisfied. Always review which packages will be removed before confirming this:
sudo dnf distro-sync --allowerasing
Relabel files with the latest SELinux policy
If you encounter any warnings regarding policies with SELinux, some files may have incorrect SELinux permissions. This may happen if SELinux was disabled in the past. To relabel SELinux on the system, run the following command and then reboot:
sudo fixfiles -B onboot
The boot process will likely take a long time, as it checks and fixes SELinux permission labels on all files in your system.