The RPM package management system is used to install Linux applications on computers running the Red Hat Enterprise Linux, Fedora, and CentOS Stream operating systems. With RPM, users can install an application from a terminal window by executing nothing more than a single command:
dnf install <package_name>
Or:
yum install <package_name>
Most users never need to go beyond using the dnf
or yum
install commands, which we reviewed in an earlier article, Move from apt to dnf package management. These commands hide the complexity of what's going on underneath the covers during the installation process. But when things go wrong with an installation, it's useful to understand how RPM goes about locating and installing applications, at least for debugging purposes.
You'll learn about those details in this article. You'll see how RPM works with the .repo
files in the directory /etc/yum.repos.d
to locate a package on the internet and then install it on a local computer.
Installing a package from the command line
Installing an RPM package is straightforward. For example, if you want to install the jq
utility that parses and displays JSON, you execute the following command in a terminal window:
dhf install jq
The command will do the work of locating the package out on the internet and installing the jq
utility on the local machine. Using dnf
(or yum
) makes installing RPM packages effortless. But behind that simplicity there's a lot of work going on. The package needs to be located on the internet, downloaded, and then installed. Understanding how this all happens is useful knowledge to have.
What's the difference between dnf and yum?
dnf
and yum
are both command-line utilities used to operate the RPM package management system. yum
(an acronym for Yellowdog Updater, Modified) was the first utility released. dnf
(an acronym for Dandified yum
) is a follow-up technology based on yum
.
Today, dnf
is the default package management utility for RHEL, Fedora, and CentOS Stream and has been since Fedora 22, CentOS 8, and RHEL 8. yum
has been deprecated as the default package manager in the Red Hat family of distributions, so while yum
commands will work, it's best to start retraining yourself now to using dnf
.
How RPM discovers and installs a package
dnf
(or yum
) finds a package to install by doing a lookup on what is called a repository manifest file. A manifest file might exist locally in the dnf
cache of the local machine, which is where dnf
will look first to find a reference to the package location. If the package reference can't be found there, dnf install
looks in the .repo
files in the directory /etc/yum.repos.d
to get the URL of the repository associated with the .repo
file under examination.
dnf install
has the intelligence to parse and analyze the information in the .repo
file to locate the actual manifest file that describes the .rpm
packages stored in the given remote repository.
If there is no reference to the .rpm
file for the package of interest in a particular .repo
file, dnf install
moves on to the next .repo
file in the /etc/yum.repos.d
directory. Once the .rpm
file is located, dnf install
install does the work of installing the package on the local machine (Figure 1).
If dnf install
can't locate the package reference according to any of the .repo
files hosted on the local machine, the utility will respond with an error.
You can get a list of repositories available on a local machine by executing the follwing command:
$ sudo dnf repolist
The dnf repolist
command inspects the .repo
files in the /etc/yum.repos.d
directory in order to extract and display the values for repo id
and repo name
. The listing below shows an example of using dnf repolist
to list the repositories known to the local machine.
$ sudo dnf repolist
repo id repo name
fedora Fedora 35 - x86_64
fedora-modular Fedora Modular 35 - x86_64
updates Fedora 35 - x86_64 - Updates
updates-modular Fedora Modular 35 - x86_64 - Updates
.repo
files play an important role in listing repositories known to the local machine. Also, information in a .repo
file will eventually lead to discovering the .repo
package that will be installed on the given computer. As you can see, .repo
files are a critical part of the RPM infrastructure.
Putting it all together
The RPM command dnf install <package_name>
makes installing an application on a machine running RHEL, Fedora, or CentOS Stream easy. Before RPM came along, installing applications was a complex, error-prone undertaking. Those days have long since passed. The ease of use that dnf install
facilitates is due to the comprehensive nature of RPM architecture. dnf install
hides a lot going on underneath the covers. Part of this complexity is about how the command parses and analyzes .repo
files.
This article touched upon how RPM uses a .repo
file at high level. The next installment in this series goes into exacting detail about the specified structure of a .repo
file and how that structure relates to the overall RPM management process.