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.

Source Article
Libsolv Gitlab

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!