8.2 Install and Update Software
Dandified yum, better known as DNF, is a software package manager for RPM-based Linux distributions that installs, updates, and removes packages. It was first introduced in Fedora 18 in a testable state (i.e., tech preview), but it’s been Fedora’s default package manager since Fedora 22.
Since it is the next-generation version of the traditional yum package manager, it has more advanced and robust features than you’ll find in yum. Some of the features that distinguish DNF from yum are:
Dependency calculation based on modern dependency-solving technology
Optimized memory-intensive operations
The ability to run in Python 2 and Python 3
Complete documentation available for Python APIs
DNF uses hawkey libraries, which resolve RPM dependencies for running queries on client machines. These are built on top of libsolv, a package-dependency solver that uses a satisfiability algorithm. You can find more details on the algorithm in libsolv’s GitHub repository.
Activating DNF Autocomplete
To activate DNF autocompletion in RHEL and Centos8 we need a sepperate package:
dnf install dnf-automatic.noarch -y
This will install a package that will allow you to TAB autocomplete the dnf command.
Searching for a Package
Attempt to run the command gnuplot. You should find that it is not installed:
[root@rhcsa ~]# gnuplot
-bash: gnuplot: command not found
Search for plotting packages
[root@rhcsa ~]# dnf search plot
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirror.ams1.nl.leaseweb.net
* extras: mirrors.supportex.net
* updates: mirrors.supportex.net
================================================================= N/S matched: plot ==================================================================
emacs-gnuplot.noarch : Emacs bindings for the gnuplot main application
emacs-gnuplot-el.noarch : Emacs bindings for the gnuplot main application
gnuplot.x86_64 : A program for plotting mathematical expressions and data
gnuplot-common.x86_64 : The common gnuplot parts
gnuplot-doc.noarch : Documentation fo bindings for the gnuplot main application
gnuplot-latex.noarch : Configuration for LaTeX typesetting using gnuplot
gnuplot-minimal.x86_64 : Minimal version of program for plotting mathematical expressions and data
python-matplotlib.x86_64 : Python 2D plotting library
python-matplotlib-doc.x86_64 : Documentation files for python-matplotlib
python-matplotlib-qt4.x86_64 : Qt4 backend for python-matplotlib
python-matplotlib-tk.x86_64 : Tk backend for python-matplotlib
texlive-pst-plot.noarch : Plot data using PSTricks
texlive-pst-plot-doc.noarch : Documentation for pst-plot
oscilloscope.noarch : Generic graphical signal plotting tool
Getting Information about packages
If you want more information about a package, you can run the dnf info command: this provides you with a lot of details about packages.
[root@rhcsa ~]# dnf info gnuplot
Last metadata expiration check: 0:28:59 ago on Sun 19 Jul 2020 08:38:53 AM EDT.
Available Packages
Name : gnuplot
Version : 5.2.4
Release : 1.el8
Arch : x86_64
Size : 893 k
Source : gnuplot-5.2.4-1.el8.src.rpm
Repo : AppStream
Summary : A program for plotting mathematical expressions and data
URL : http://www.gnuplot.info/
License : gnuplot and MIT
Description : Gnuplot is a command-line driven, interactive function plotting
: program especially suited for scientific data representation. Gnuplot
: can be used to plot functions and data points in both two and three
: dimensions and in many different formats.
:
: Install gnuplot if you need a graphics package for scientific data
: representation.
:
: This package provides a Qt based terminal version of gnuplot.
Install a Package
Now that we know a little more about the package, we want to install the package.
We install the gnuplot package with the dnf install command. You can add the option -y to the command to provide the system with confirmation on installation (otherwise it will ask you for it).
[root@rhcsa ~]# dnf install -y gnuplot
It should tell you when the package installation is complete:
Installed:
gnuplot-5.2.4-1.el8.x86_64 gnuplot-common-5.2.4-1.el8.x86_64 qt5-qtbase-5.12.5-4.el8.x86_64
qt5-qtbase-common-5.12.5-4.el8.noarch qt5-qtbase-gui-5.12.5-4.el8.x86_64 qt5-qtsvg-5.12.5-1.el8.x86_64
xcb-util-image-0.4.0-9.el8.x86_64 xcb-util-keysyms-0.4.0-7.el8.x86_64 xcb-util-renderutil-0.3.9-10.el8.x86_64
xcb-util-wm-0.4.1-12.el8.x86_64 pcre2-utf16-10.32-1.el8.x86_64
Complete!
This tells you that the installation was a success and what packages are installed. As you can see, to install gnuplot, it also had to install several dependencies. The dnf command finds these dependencies automatically and installs them together with the requested package.
Removing a Package
Now let’s pretend we want to remove the package.
Attempt to remove the gnuplot package (do not add -y), but answer the request with no. How many packages would be removed?
[root@rhcsa ~]# dnf remove gnuplot
[root@rhcsa ~]# dnf remove gnuplot
Dependencies resolved.
=======================================================================================================================
Package Arch Version Repository Size
=======================================================================================================================
Removing:
gnuplot x86_64 5.2.4-1.el8 @AppStream 2.1 M
Removing unused dependencies:
gnuplot-common x86_64 5.2.4-1.el8 @AppStream 1.7 M
pcre2-utf16 x86_64 10.32-1.el8 @BaseOS 596 k
qt5-qtbase x86_64 5.12.5-4.el8 @AppStream 10 M
qt5-qtbase-common noarch 5.12.5-4.el8 @AppStream 75
qt5-qtbase-gui x86_64 5.12.5-4.el8 @AppStream 20 M
qt5-qtsvg x86_64 5.12.5-1.el8 @AppStream 665 k
xcb-util-image x86_64 0.4.0-9.el8 @AppStream 22 k
xcb-util-keysyms x86_64 0.4.0-7.el8 @AppStream 13 k
xcb-util-renderutil x86_64 0.3.9-10.el8 @AppStream 21 k
xcb-util-wm x86_64 0.4.1-12.el8 @AppStream 78 k
Transaction Summary
=======================================================================================================================
Remove 11 Packages
Freed space: 35 M
Is this ok [y/N]:
So you can see that Linux is tracking what dependencies are used by other packages; it knows these dependencies are unused if we remove gnuplot, so it will clean the unused dependencies as well.
Attempt to remove the gnuplot -common package, but say no. How many packages would be removed?
[root@rhcsa ~]# dnf remove gnuplot-common
[root@rhcsa ~]# dnf remove gnuplot-common
Dependencies resolved.
=======================================================================================================================
Package Arch Version Repository Size
=======================================================================================================================
Removing:
gnuplot-common x86_64 5.2.4-1.el8 @AppStream 1.7 M
Removing dependent packages:
gnuplot x86_64 5.2.4-1.el8 @AppStream 2.1 M
Removing unused dependencies:
pcre2-utf16 x86_64 10.32-1.el8 @BaseOS 596 k
qt5-qtbase x86_64 5.12.5-4.el8 @AppStream 10 M
qt5-qtbase-common noarch 5.12.5-4.el8 @AppStream 75
qt5-qtbase-gui x86_64 5.12.5-4.el8 @AppStream 20 M
qt5-qtsvg x86_64 5.12.5-1.el8 @AppStream 665 k
xcb-util-image x86_64 0.4.0-9.el8 @AppStream 22 k
xcb-util-keysyms x86_64 0.4.0-7.el8 @AppStream 13 k
xcb-util-renderutil x86_64 0.3.9-10.el8 @AppStream 21 k
xcb-util-wm x86_64 0.4.1-12.el8 @AppStream 78 k
Transaction Summary
=======================================================================================================================
Remove 11 Packages
Freed space: 35 M
Is this ok [y/N]:
Now it would also remove the packages that need the dependent items.
Group Packages
There are also grouped packages, for example, if you want to make a Network sever. We can easily install a DNF group like Network Server; this would install all packages and setup our server in such a way that we could start making a networking server. This automates the server delivery process quite a bit.
List all available component groups
[root@rhcsa ~]# dnf grouplist
Result:
[root@rhcsa ~]# dnf group list
Last metadata expiration check: 0:36:05 ago on Sun 19 Jul 2020 08:38:53 AM EDT.
Available Environment Groups:
Server
Minimal Install
Workstation
Virtualization Host
Custom Operating System
Installed Environment Groups:
Server with GUI
Installed Groups:
Container Management
Headless Management
Available Groups:
.NET Core Development
RPM Development Tools
Development Tools
Graphical Administration Tools
Legacy UNIX Compatibility
Network Servers
Scientific Support
Security Tools
Smart Card Support
System Tools
Find out more information about the Security Tools component group, including a list of included packages.
[root@rhcsa ~]# dnf group info "Security Tools"
[root@rhcsa ~]# dnf group info "Security Tools"
Last metadata expiration check: 0:40:13 ago on Sun 19 Jul 2020 08:38:53 AM EDT.
Group: Security Tools
Description: Security tools for integrity and trust verification.
Default Packages:
scap-security-guide
Optional Packages:
aide
hmaccalc
openscap
openscap-engine-sce
openscap-utils
scap-security-guide-doc
scap-workbench
tpm-quote-tools
tpm-tools
tpm2-tools
trousers
udica
Install the Security Tools component group.
dnf group install -y "Security Tools"
This should install the entire Security Tools group.
Installation History and Undo changes
Sometimes you want to investigate previous installations and/or removals of software on the server; you can do this with the dnf history command:
[root@rhcsa ~]# dnf history
[root@rhcsa ~]# dnf history
ID | Command line | Date and time | Action(s) | Altered
-------------------------------------------------------------------------------
10 | group install -y Securit | 2020-07-19 09:20 | Install | 4
9 | install gnuplot | 2020-07-19 09:10 | Install | 11
8 | update kernel | 2020-07-19 08:16 | I, U | 18
7 | | 2020-07-07 12:53 | Install | 9
6 | | 2020-07-07 12:53 | I, U | 61 EE
5 | | 2020-07-07 12:52 | Upgrade | 1
4 | | 2020-07-07 12:52 | Upgrade | 2
3 | install qemu-guest-agent | 2020-07-03 11:10 | Upgrade | 1
2 | install cloud-init | 2020-07-03 10:32 | Install | 11
1 | | 2020-07-03 10:14 | Install | 1320 EE
As you can see, for me, item 10 is the group install. Let’s get more information about it.
Check what number your own install history is.
Confirm that the last transaction is the group installation.
[root@rhcsa ~]# dnf history info 10
[root@rhcsa ~]# dnf history info 10
Transaction ID : 10
Begin time : Sun 19 Jul 2020 09:20:36 AM EDT
Begin rpmdb : 1366:995a6cc266bc073b8da434ca73d820e582940442
End time : Sun 19 Jul 2020 09:20:43 AM EDT (7 seconds)
End rpmdb : 1369:f7bb98480bc8a53c09887587d5690b0249ac884f
User : fons drost <fons>
Return-Code : Success
Releasever : 8
Command Line : group install -y Security Tools
Packages Altered:
Install openscap-1.3.2-6.el8.x86_64 @AppStream
Install openscap-scanner-1.3.2-6.el8.x86_64 @AppStream
Install scap-security-guide-0.1.48-7.el8.noarch @AppStream
Install @security-tools
Let’s use the undo options to remove the intallation of gnuplot
[root@rhcsa ~]# dnf history undo 9
Removed:
gnuplot-5.2.4-1.el8.x86_64 gnuplot-common-5.2.4-1.el8.x86_64 pcre2-utf16-10.32-1.el8.x86_64
qt5-qtbase-5.12.5-4.el8.x86_64 qt5-qtbase-common-5.12.5-4.el8.noarch qt5-qtbase-gui-5.12.5-4.el8.x86_64
qt5-qtsvg-5.12.5-1.el8.x86_64 xcb-util-image-0.4.0-9.el8.x86_64 xcb-util-keysyms-0.4.0-7.el8.x86_64
xcb-util-renderutil-0.3.9-10.el8.x86_64 xcb-util-wm-0.4.1-12.el8.x86_64
Complete!