DNF in Action - Package Management Everyday Tips
DNF β package manager in Red Hat Enterprise Linux, Centos, Fedora.
It's a very powerful and fast tool, and solid user experience can be very helpful for your everyday tasks, massive deployments or even certifications like RHCSA, RHCE, LPIC. RHEL is very popular in the enterprise world and de facto belongs to the industry standards.
DNF
works with *.rpm
-packages (Red Hat Package Manager). Yum
, dnf's predecessor, is currently defined as legacy software.
For the beginning, just type in terminal
$ dnf
You can see a long list of basic commands.
Performance tips
# vi /etc/dnf/dnf.conf
# use a near mirror to your location
fastestmirror=True
# increase packages download speed with parallelization (thanks, Reddit!)
max_parallel_downloads=15
Try to search a package
# dnf se blender
Last metadata expiration check: 0:00:27 ago on Thu Apr 14 10:29:11 2022.
============================ Name Exactly Matched: blender =======================
blender.x86_64 : 3D modeling, animation, rendering and post-production
============================= Name & Summary Matched: blender ======================
YafaRay-blender.x86_64 : Blender integration scripts for YafaRay
blender-luxcorerender.x86_64 : Blender export plugin to luxcorerender
blender-rpm-macros.noarch : RPM macros to build third-party blender addons packages
It works! Here we're using se
as the shortcut to search
.
Now let's run a global search in all packages description
# dnf search all "C library"
============================== Matched: C library ==============================
libkcompactdisc.i686 : A KDE compact disc library
libkcompactdisc.x86_64 : A KDE compact disc library
lives-devel.i686 : headers for lives OSC library
lives-devel.x86_64 : headers for lives OSC library
...
Install or reinstall the package
# dnf install package1 package2
# dnf reinstall package1 package2
How to delete the package
# dnf erase package1 package2
Get more information about packages
# dnf info package1 package2
Often you know the name of a library and need to find out which package provides it. The next command will help:
# dnf provides "*/audioadapter.so"
jack-audio-connection-kit-1.9.10-2.x86_64 : The Jack Audio Connection Kit
Repo : @System
To get the audioadapter.so
library, we need to install jack-audio-connection-kit
package. The flags --enablerepo
and --disablerepo
are helpful in case when one repository needs to be excluded.
# dnf --disablerepo=rpmfusion* provides "*/audioadapter.so"
List of package groups
# dnf grouplist
Pantheon Desktop
Python Classroom
Now we can easily install Python education environment:
dnf groupinstall "Python Classroom"
Download the packages without installation:
# dnf download package1 package2
Transactions
There are all basic commands. If you don't understand any of these commands, run again dnf
or dnf command help
in your terminal.
Let's talk about more difficult things. For example, we have a package with ~100 dependencies. Deleting the whole dependency list will be a serious pain, but dnf package transactions can help.
# dnf history
ID | Login user | Date a | Action | Altere
-------------------------------------------------------------------------------
79 | Paul <paul> | 2022-05-31 00:55 | Install | 9
78 | Paul <paul> | 2022-05-30 13:25 | Install | 1
77 | Paul <paul> | 2022-05-30 13:24 | Install | 1
We can search for one package in all transaction since OS installation moment and install/uninstall this package in one command:
# dnf history list ffmpeg
ID | Command line | Date a | Action | Altere
-------------------------------------------------------------------------------
71 | -4 update --refresh | 2022-05-09 22:08 | E, I, U | 382 EE
15 | --nogpgcheck --enablerepo | 2022-03-06 21:34 | Install | 21 EE
# dnf history undo 15
And we can install again all these 21 packages:
# dnf history undo 15
Find a repository where's package belongs to:
# dnf repolist
repo id repo name status
*fedora Fedora 36 - x86_64 44,762
rpmfusion-free RPM Fusion for Fedora 36 - Free 493
...
# dnf repository-packages rpmfusion-free list
Installed Packages
gstreamer1-libav.x86_64 1.4.3-1 @System
lame-libs.x86_64 3.99.5-5 @System
...
Remove or reinstall all packages from selected repository:
# dnf repository-packages rpmfusion-free remove
# dnf repository-packages rpmfusion-free remove-old
# dnf repository-packages rpmfusion-free reinstall
DNF
also works with Copr (like Lauchpad PPA) repositories:
# dnf copr list test
========================== List of test coprs ===========================
test/Test-project.235 : test description
# dnf copr enable test/Test-project.235
# dnf copr disable test/Test-project.235
Repoquery
DNF Repoquery searches previously selected packages and shows information about them. For example, we need all systemd packages:
# dnf repoquery 'systemd*'
systemd-compat-libs-0:239-13.x86_64
systemd-0:239-13.x86_64
systemd-libs-0:239-13.x86_64
systemd-devel-0:239-13.x86_64
systemd-devel-0:239-13.i686
systemd-python-0:239-13.x86_64
systemd-compat-libs-0:239-13.i686
Display the systemd package requirements:
# dnf repoquery --requires systemd --resolve
libidn-0:1.29-3.i686
libblkid-0:2.26.2-1.x86_64
libcurl-0:7.40.0-3.x86_64
libgcrypt-0:1.6.3-4.x86_64
libgcc-0:5.1.1-1.x86_64
...
Name, architecture and repository of all systemd packages:
# dnf repoquery --queryformat '%{name}.%{arch} : %{reponame}' systemd
systemd.x86_64 : updates-testing
systemd.i686 : updates-testing
systemd.i686 : fedora
systemd.x86_64 : fedora
systemd.i686 : updates
systemd.x86_64 : updates
Display all available packages providing systemd, but only for x86_64 architecture:
# dnf repoquery --whatprovides systemd --arch x86_64
systemd-0:239-13.x86_64
systemd-0:239-13.x86_64
systemd-0:239-15.x86_64
Show duplicated packages:
# dnf repoquery --duplicated
How to download and install a local package
# dnf download shotwell
# dnf install /tmp/shotwell-0.30.14-1.x86_64.rpm
Version lock
The versionlock
plugin designed to freezing package version.
# dnf install 'dnf-command(versionlock)'
# dnf versionlock add locked_package
Package excluding
Very similar to versionlock
, allows to completely forget about package.
# dnf upgrade --exclude=packagename
Broken package
If the package is broken like a missed file or dependency, low-level rpm
tool can be used:
# rpm -e broken_package-version --noscripts
Useful options
-4
- resolve to IPv4 addresses only.
-6
- resolve to IPv6 addresses only.
--allowerasing
- allows erasing of installed packages to resolve dependencies. This option could be used as an alternative to yum swap command where packages to remove are not explicitly defined.
-C, --cacheonly
- run entirely from the operation system cache, donβt update the cache and use it even in case it is expired.
--debugsolver
- dump data aiding in dependency solver debugging into local debugdata file.
--disablerepo=<id>
- disable specific repositories by an id or a glob.
--installroot=<path>
- set the installation root directory.
--releasever=<release>
- configure DNF to use only defined
-y
or --assumeyes
- answer 'yes' to all interactive questions.
That's all, feel free to contact us if you have any questions.