Dandified YUM (DNF) Package Manager in Linux

A package manager keeps track of the software that is installed on your computer, and allows you to easily install new software, upgrade to newer versions, or remove software. As the name suggests, package managers manage packages: sets of files that are grouped together and that you can install and remove as a set.

As a rule, a package can contain an entire application itself, but not only this, but all the settings that the system requires for its operation.

An example is that the instant messaging client gaim is contained in a package of the same name. However, it is common for a program to consist of several related packages. For example, the image editor gimp consists not only of the package gimp, but also of the package gimp-data.

As you may have noticed, sometimes packages are related to each other. This makes it often not convenient to manage each of them individually. Hence, the need to use package managers.

These are utilities present in each distribution that automate the process of installing, removing and updating these packages. They also list other packages available in the repository and display information about their dependencies. The latter is a vital point of their existence.

Many times a package requires another package to be installed. But it is not always one or two, it can be as many as the main package requires. Imagine installing these packages one by one or not knowing which are the dependencies of the package. It would be chaos because one of the main features of package managers is their ability to resolve these dependencies.

In summary, the task of a package manager is to present an interface that assists the user in the task of managing the set of packages that are installed on your system.

Main features of package managers

Although each package manager can include its features to differentiate itself from the rest, the common features are:

  • Automatic management of dependencies (when installing or uninstalling packages).
  • Search for updates of all the packages we have locally, according to the latest version available in the official repositories.
  • Checking checksums and digital signatures.

Main package managers in Linux

Some main package managers that you can find throughout the Linux universe are:

  • DPKG: the base package manager for Debian-based distributions.
  • Apt: a user-friendly interface and added features for the DPKG system, found in Debian-based distributions such as Ubuntu or Linux Mint.
  • RPM: the base package manager found in Red Hat-based distributions such as Red Hat Enterprise Linux, and CentOS.
  • Yum: a front-end for the RPM system, found in Red Hat-based distributions.
  • Dnf: Another, more feature-rich front-end for the RPM system.
  • zypper: found on SUSE and OpenSUSE.
  • Pacman: the package manager for Arch Linux-based distributions.

It doesn’t matter which Linux distribution you use because the process from the technical perspective is the same in each of them, but not the way in which each of the package managers does it.

What is DNF?

According to DNF’s GitHub profile

Dandified YUM (DNF) is the next upcoming major version of YUM. It does package management using RPM, libsolv and hawkey libraries. For metadata handling and package downloads, it uses librepo. To process and effectively handle the comps data it uses libcomps.

In short, it is a YUM-based package manager that is used on RHEL and family distributions such as Fedora, Alma Linux, Rocky Linux, Oracle Linux and CentOS.

DNF makes it easy to maintain packages by automatically checking for dependencies and determines the actions required to install packages. This method eliminates the need to manually install or update the package, and its dependencies, using the rpm command. DNF is now the default software package management tool in Fedora.

Compared to other package managers, DNF has better memory utilization, improved dependency management and the ability to run Python 2 and Python 3. It is therefore considered one of the fastest and most complete package managers in all of Linux.

DNF officially debuted with Fedora 18, but quickly spread to other members of the RHEL-based distributions. And now it is the package manager for Fedora, RHEL, CentOS, and others.

Now, how to use it? Well, I’ll explain it to you.

Basic use of DNF on Linux

DNF solves all the problems associated with yum, such as low performance, high memory usage, slow dependency resolution. But it retains much of its syntax, so the transition is effortless to make.

The first thing to do is to open a terminal to use DNF. Remember that DNF is present by default in RHEL, Oracle Linux, Fedora, Alma Linux, Rocky Linux and CentOS.

When you open the terminal, you can consult the DNF help by running

dnf help

There you will get a fairly comprehensive output screen explaining how to use it.

You can also use help to get information and help on a particular subcommand like install.

dnf help install

The slightly more refined output will tell you all the necessary information about install which as you may notice we will use to install packages.

Another command you can use is version to get the version of DNF you have

dnf --version

Sample Output

4.13.0
  Installed: dnf-0:4.13.0-1.fc36.noarch at Mon 29 Aug 2022 07:48:09 AM GMT
  Built    : Fedora Project at Mon 30 May 2022 09:55:23 AM GMT

  Installed: rpm-0:4.17.1-3.fc36.x86_64 at Mon 29 Aug 2022 07:47:49 AM GMT
  Built    : Fedora Project at Tue 02 Aug 2022 12:31:56 PM GMT

With these first commands, you can get an idea about how to use it.

Package management using DNF (I)

Note: For package management, DNF requires root permissions. That is, you will probably have to use sudo.

Now comes the most important part, and it is related to package management with DNF.

The first thing we usually do is to look for packages inside the official repositories that are enabled on the system. To achieve this, just follow this syntax.

dnf search [package]

In [package] you can type a search criteria that allows you to identify possible packages.

dnf search vim

You will get an output similar to this

Last metadata expiration check: 0:00:34 ago on Thu 27 Oct 2022 12:03:45 AM UTC.
====================================================================== Name & Summary Matched: vim ======================================================================
awesome-vim-colorschemes.noarch : Collection of color schemes for Neo/vim, merged for quick use
beakerlib-vim-syntax.noarch : Files for syntax highlighting BeakerLib tests in VIM editor
boxes-vim.noarch : Vim plugin for boxes
espeak-ng-vim.noarch : Vim syntax highlighting for espeak-ng data files
fluxbox-vim-syntax.noarch : Fluxbox syntax scripts for vim
gap-vim.noarch : Edit GAP files with VIM
geany-plugins-vimode.x86_64 : Vim-mode plugin for Geany
neovim.x86_64 : Vim-fork focused on extensibility and agility
neovim-ale.noarch : Asynchronous NeoVim Lint Engine
neovim-qt.x86_64 : Qt GUI for Neovim
notmuch-vim.x86_64 : A Vim plugin for notmuch

If you already know the exact name of a package, you can also get information about it with the following command:

dnf info [package-name]

For example:

dnf info wget

Since vim is the name of the package, then the on-screen output will tell you valuable information about this package.

Last metadata expiration check: 0:00:36 ago on Thu 27 Oct 2022 12:06:38 AM UTC.
Installed Packages
Name         : wget
Version      : 1.21.3
Release      : 1.fc36
Architecture : x86_64
Size         : 3.2 M
Source       : wget-1.21.3-1.fc36.src.rpm
Repository   : @System
From repo    : fedora
Summary      : A utility for retrieving files using the HTTP or FTP protocols
URL          : http://www.gnu.org/software/wget/
License      : GPLv3+
Description  : GNU Wget is a file retrieval utility which can use either the HTTP or
             : FTP protocols. Wget features include the ability to work in the
             : background while you are logged out, recursive retrieval of
             : directories, file name wildcard matching, remote file timestamp
             : storage and comparison, use of Rest with FTP servers and Range with
             : HTTP servers to retrieve files over slow or unstable connections,
             : support for Proxy servers, and configurability.

Similarly, you can specify several packages at the same time.

dnf info vim nano wget

You will get a sorted output screen with information about each package.

Then with the information already specified, you can install a package by executing the following command

dnf install [package]

Automatically, dnf will calculate the dependencies, and you will be presented with a summary of the changes to be made. To confirm the installation, just press the y key, and it will start.

Similarly, you can specify several packages at once

dnf install vim nano wget

It will automatically resolve the dependencies and start the process.

Another command that is widely used by dnf is to remove packages. The syntax is quite similar to install but is changed to remove.

dnf remove [package]

For example,

dnf remove nano

Similarly, you can specify many packages at the same time.

dnf remove nano wget tar

Package management using DNF (II)

To update a package, then the update command is used. If you specify one or several packages, then you will update them.

dnf update nano

The above command will update nano if there is a newer package in the official repositories.

You can also specify two packages simultaneously

dnf update nano wget tar

But if you want to upgrade all the installed packages, then run

dnf upgrade

On servers and workstations, it is sometimes convenient to upgrade only the most essential parts of the system to have the security patches. This can be accomplished with the command.

sudo dnf upgrade --security

Another interesting option is to check the updates that the system requires. In this case, you can run.

dnf check-update

DNF will then check with the official system repositories and present you with a summary of available system-wide updates.

It is common in enterprise environments for many sysadmin to download packages for installation on another computer. This can be done with the download command.

dnf download [package-name]

For example:

dnf download nano wget

In this way, the packages will be downloaded but

Package group management

One of the main features of RHEL-based distributions is that their official repositories group their packages into groups to make them easier to manage and use.

First, you need to know which package groups are in the system. To achieve this, run.

dnf group list

Sample output:

Last metadata expiration check: 0:01:12 ago on Thu 27 Oct 2022 12:06:38 AM UTC.
Available Environment Groups:
   Fedora Custom Operating System
   Minimal Install
   Fedora Server Edition
   Fedora Workstation
   Fedora Cloud Server
.
.
Available Groups:
   3D Printing
   Administration Tools
   Audio Production
   Authoring and Publishing
   C Development Tools and Libraries
   Cloud Infrastructure
   Cloud Management Tools
   Compiz

This way, you will be able to know all the available package groups.

You will also be able to display information about one of these groups:

dnf group info "Server"

This way, you will be able to know which packages constitute that group. You can replace Server with the name of another group.

And to install a package group, you can run

dnf group install [package-group-name]

For example:

dnf group install "Server"

So, after the dependency calculation, the installation process will start.

The reverse process, i.e., removing a package-group, can be done by running

dnf group remove [package-group-name]

For example:

dnf group remove "Server"

Repository management with DNF on Linux

As you know, the distribution of packages on Linux is done through repositories where the packages are hosted.

To find out which packages are enabled on the system, you have to run the following command

dnf repolist

Sample Output:

repo id                                                                    repo name
fedora                                                                     Fedora 36 - x86_64
fedora-cisco-openh264                                                      Fedora 36 openh264 (From Cisco) - x86_64
fedora-modular                                                             Fedora Modular 36 - x86_64
updates                                                                    Fedora 36 - x86_64 - Updates
updates-modular                                                            Fedora Modular 36 - x86_64 - Updates

This way you can quickly find out which repositories are enabled on the system.

Now, if you want to list all the repositories on the system including the disabled ones, run

dnf repolist all

If you would like to add a repository, you have to run

dnf config-manager --add-repo [repository-url]

By default, many added repositories are not hailed by the system for security reasons. So, after adding them, you may have to enable it.

dnf config-manager --set-enabled [repository]

The reverse process would be something like this:

dnf config-manager --set-disabled [repository]

Advanced package management using DNF

Installing, uninstalling and upgrading packages along with their dependencies are basic operations that any package manager should do, but it is always possible to interact in a more advanced way with it to get wonderful results.

An important feature of DNF is that it allows you to search for a package by a file that contains it. The provides command is a great way to do this.

dnf provides [file-name]

For example,

dnf provides named

This will show all packages containing that file name. Usually, there should only be a few or even one result.

There are certain applications that are distributed on the Internet as RPM packages. So, you download this package and what proceeds is a local installation of the package. To achieve this, you can run.

dnf install [package-name].rpm

Remember that the package has to be in the same directory as the prompt.

Typically, this is the way to install applications like Code, Edge or Google Chrome.

If there is a problem with a package, you can reinstall it by just running

dnf reinstall [package-name]

If you want to synchronize the system with the official repositories, you can run

dnf distro-sync

This command will be able to upgrade or downgrade packages according to the information obtained from the repositories.

Using DNF to clean up packages and save disk space

Although the DNF cache is generated automatically over time, you can always create it manually. This is important for many configurations and for tracking packages installed on the hard disk.

To achieve this, you can run the following command

sudo time dnf makecache

Now, it is also possible to remove this and the other cache from the system. The purpose of this is to remove packages that have already been installed and are taking up disk space.

To do this, run

sudo dnf clean all

Another way to save disk space is to remove orphaned packages from the system. These packages are dependencies of other packages that have already been removed. Therefore, they are no longer useful.

It is effortless to do this with the following command

sudo dnf autoremove

Manage the usage history of DNF

DNF is so complete that it allows with the history subcommand to query the times it has been used to handle packages.

To achieve this, just run

dnf history

By default, the last 20 transactions made with dnf will be shown.

If you want more details about a particular transaction, then you can add info and the transaction ID to query. For example:

dnf history info 19

This way, there is a record of what dnf has done on the system.

There is also the possibility to revert the changes made by this transaction. This is ideal if you detect inappropriate behavior as a result of an update or a package uninstallation.

To achieve this, you just need to know the ID of the DNF transaction and revert it like this

dnf history undo [id]

Or redo it otherwise.

dnf history redo [id]

Conclusion

Package managers make Linux a usable system. Of all the ones out there, DNF is emerging as one of the best for its speed, efficiency, and number of different options to manage the system smoothly.

I hope this complete guide will help you understand DNF. I hope you liked it and share it with your friends.

Share This:

Leave a Comment

Your email address will not be published. Required fields are marked *