Often Linux users need to install additional software (applications) to use in their day-to-day Linux activities. Linux bundles these applications and files needed to run them as packages. Various Linux distributions have different package management systems which more of work on the same concepts according to my experience.

This article will cover basic package management skills in major Linux distributions Debian and Redhat systems. With that, I would say package management is a useful skill set for regular Linux users as we often need to install this or that.

This article will cover a high-level overview of package management in mentioned distributions and probable examples where vital.

Package Managers

Package management consists of low-level and high-level package management tools as explained below:

Low-Level Package Management Tools

Low-level package management tools handle the backend package management tasks such as; building, installing, upgrading, and removing package files.

Packages installed using low-level utilities are usually already bundled/packaged as;

.deb for Debian systems

.rpm for red hat systems.

As much as low-level tools handle installation, one major downside of this is they do not install corresponding dependancies needed for an application if any.

Low-level tools are as follows:

rpm for Red Hat systems.

The basic rpm command syntax is:

rpm [action] options [PACKAGE..]

dpkg for Debian systems and its derivatives

The basic dpkg command syntax is:

dpkg [option…] action [PACKAGE…]

High-Level Package Management tools

High-level package management tools handle the frontend package management. They resolve package dependencies during installation and can perform package metadata searching. High-Level Package Management tools also perform installation or removal of packages usually by invoking the low-level tools.

Red hat systems often use different high-level package tools which ideally work on the same concept and commands can be used interchangeably in some systems.

High-level tools are as follows:

yum (Yellowdog Updater) or dnf (Dandified yum) for Red Hat systems. yum is used on older RHEL systems while newer systems have adopted the use of dnf. dnf was developed to solve performance and memory usage of the yum package manager. It is also important to point out that systems using dnf also have the ability to use yum which is usually linked to the dnf tool.

The basic yum command syntax is:

yum [options] [command] [PACKAGE…]

apt (Advanced Packaging Tool) for Debian systems and its derivatives. It also compromises of aptitude which will not be covered as much in this article.

Repository

Repositories are defined application storage locations (remote servers) configured on Linux systems where high-level package tools retrieve and install applications from.

For bundled packages, they can be downloaded and installed using either low-level or high-level package tools. To use high-level tools, packages are installed from repositories. As such it’s always important to have correct repositories and in some cases most updated repositories. More than one repository can be configured on a system. Often configured repositories do not have applications being sought to be installed hence a user might be required to configure repositories for the installation.

Repositories can be configured manually by editing the repository configuration files or using specific high-level commands. When adding repositories manually the public key also needs to be imported manually to the system which can be done on the files or using commands.

. Using Files

Debian

apt repositories are configured on /etc/apt/sources.list. Additional repositories can be configured on /etc/apt/sources.d saved with a .list extension.

The format used on Debian sources list is:

deb http://site.example.com/debian distribution component1 component2 component3
deb-src http://site.example.com/debian distribution component1 component2 component3

An example of adding an example repo repository:

RHEL

yum repository files are held at etc/yum.repos.d/ saved with a .repo extension. The file format of repository files varies and RHEL have detailed documentation on how to set up a repository with the basic format being:

[repository]
name=repository_name
baseurl=repository_url

Often additional repositories are added using this way. The files have a format to be followed when setting them up depending on the Linux distro. Major vendors provide this configuration for users for easier installation of softwares. Below is an example of setting up a repository for installing a specific version of MySQL, i.e MySQL 5.7:

# Enable to use MySQL 5.7
[mysql57-community]
name=MySQL 5.7 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/6/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2022
      file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

2. Using Commands

Commands can be used to add or remove repositories.

Use cases for commands usage to configure repositories;

a. List repositories

RHEL

List enabled repositories

yum repolist

dnf repolist

To show disabled repositories, list all repositories;

yum repolist all

dnf repolist all

Debian

For debian to list enabled repositories, use the grep hack below;

grep ^[^#] /etc/apt/sources.list /etc/apt/sources.list.d/*

The command basically strips out commented repositories and lists enabled repositories.

b. Add Repository

RHEL

To add repositories:

yum config-manager –add-repo [repository_url]

dnf config-manager –add-repo [repository_url]

To enabable repository;

yumconfig-manager –set-enabled repository-url

To disable repository;

yum-config-manager –disable [repository_url]

dnf-config-manager –disable [repository_url]

Occasionally repository can be installed using yum or dnf command. The example below installs the famous EPEL repository on CentOS 8:

yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm

In some cases, after installing a repository, packages can be enabled or disabled from it. The example below installs remi repository and enables PHP 7.2 :

yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm -y
yum-config-manager –enable remi-php7.2

Debian:

To add a [non standard] repository in Debian requires the package named software-properties-common which is not installed by default in most cases and can be installed by running the command;

apt install software-properties-common -y

Once installed, to add a repository;

apt-add-repository [repository_name]

[repository_name] can either be a regular repository entry using the format of apt sources.list file or a PPA repository.

An example;

a) To add wine application repository

 apt-add-repository “deb http://dl.winehq.org/wine-builds/ubuntu/ $(lsb_release -cs) main”

b) Adding the famous PPA repository (Personal Package Archives) which follow the command syntax add-apt-repository ppa:<ppa_name>. To add libreoofice ppa as an example;

add-apt-repository ppa:libreoffice/ppa

Alert! PPAs are always provided by the communities which could pose a security risk, always be careful with these

For more info on how to add repository using add-apt-repository command, use the command option –help

To remove a repository use -r option of apt-add-repository command;

apt-add-repository -r [repository_name]

Adding repository keys:

Often after adding repositories you need to import their public keys which can be done using apt-key command:

a) Add keys manually from keyservers

 apt-key adv –keyserver keyserver.ubuntu.com:80 –recv-keys XXXXXXXX

where

  • adv – pass advanced options to gpg
  • –keyserver – to specify keyserver url
  • –recv-keys – specify key (XXXXXXXX)

Example:

apt-key adv –keyserver hkp://keyserver.ubuntu.com:80 –recv 9DA31620334BD75D9DCB49F368818C72E52529D4

b) Downloading the keys using wget or curl and importing the keys with apt-key command:

curl -L https://key-url/repo-key.asc | apt-key add –

wget -qO – https://key-url/repo-key.asc | apt-key add –

After adding repositories, to install applications from newly added repositories, the package index must be updated:

apt update

Installation

Installation can be done from bundled packages or pulling packages with their dependencies from enabled repositories.

To list all installed Packages

Rhel: rpm -qa

Debian: dpkg -l

Query information about a specific package (check if a package is installed)

Rhel: rpm -q [package_name]

Debian:

dpkg -L [package_name]

dpkg -s [package_name]

dpkg -l  [package_name]

Lazy way:

Rhel: rpm -qa | grep -i [package_name]

Debian/Ubuntu: dpkg -l | grep -i [package_name]

Useful if you do not know exact package name

Installing and Upgrading Packages

Bundled packages can be installed either using low-level or high-level package management tools

a) Installing a package from precompiled files i.e (*.deb or *.rpm)

RHEL

Before installation of rpm bundled packages is a good practice to verify the PGP signature of the package. This is done using the –checksig option of rpm command.

rpm –checksig package.rpm

rpm install command syntax is as follows;

rpm -i|–install install-options [package…]

A simplified command for installing package.rpm;

rpm -ivh package.rpm

package.rpm can also be the url of the package i.e.

rpm -ivh https://example.com/package.rpm

where;

-i – install a package

-v – verbose output

-h – prints the hash progress mark bar as the package archive is being unpacked.

Oftenly rpm packages are bundled with required dependencies or the user has to pre-install them. Using high-level package management utilities to install rpm bundled packages attempts to resolve the dependencies:

yum install /path/to/package.rpm
dnf install /path/to/package.rpm

To upgrade an RPM package, use -U (–upgrade) option instead of -i. If the package is not installed it will be installed:

rpm -Uvh package.rpm

-F (–freshen)option upgrade packages, but only ones for which an earlier version is installed unlike the -U option which installs the package if not available:

rpm -Uvh package.rpm

More install and upgrade options of rpm command can be found on rpm man pages or runman rpm on the terminal. An example to ignore dependancy checks when installing or upgrading a package, use the option –nodeps

Debian

To install bundled .deb packages, use the i or –install option;

dpkg -i package.deb

To examine the contents of a dpkg file use the -c or –contents option;

dpkg -c package.deb

After installing a package one might need to re-configure the settings. This can be achieved by the dpkg-reconfigure command;

dpkg-reconfigure package_name

Using apt to install a bundled .deb package:

apt install /path/to/package,deb -y

More dpkg actions and options can be found on dpkg man pages, run man dpkg on the terminal.

b) Installing Packages from Repositories

After setting up repositories as covered before, packages can be installed from the repositories using high-level package management utilities, i.e yum, dnf, apt

RHEL

To search the repositories for a package:

yum search package_name_search_string

dnf search package_name_search_string

To search all fields, including descriptions use search all option

To install the package:

yum install package_name -y

dnf install package_name -y

To install a list of packages:

yum install package1 package2 package3 packageX -y

dnf install package1 package2 package3 packageX -y

To check information about the package:

yum info package_name

dnf info package_name

yum command also provides a funcionality of attributing a file to the package which owns the file using the provides option:

dnf provides /file/path

yum provides /file/path/

Example:

yum provides /etc/my.cnf

To reinstall a package:

yum reinstall package_name

dnf reinstall package_name

To update installed packages:

yum update

dnf update

Update option updates every installed package and keeps obsolete packages if any. Upgrade option tends to remove these obsolete packages in addition to updating installed packages

yum upgrade

dnf upgrade

yum update is the safer option to avoid the risk of removal of any packages that the system might still be using.

To update a specific package:

yum update package_name -y

dnf update package_name -y

upgrade option can be used _interchangeably with update option above.

dnf and yum provide the ability to install/update a group of packages using the groupinstall/groupupdate actions of yum,dnf respectively:

To list installed and available groups from repositories:

yum grouplist

Installing/updating group packages:

yum groupinstall ‘packages_group_name’ -y

yum groupupdate ‘packages_group_name’ -y

dnf groupinstall ‘packages_group_name’ -y

dnf groupupdate ‘packages_group_name’ -y

Exmple:

yum groupinstall  ‘Development Tools’

To install a package from a specific repository use –enablerepo option specifying the repository;

yum –enablerepo=repository_name install package_name

dnf –enablerepo=repository_name install package_name

Example:

yum –enablerepo=epel install php

To get more information on dnf and yum command options check their man pages; man yum, man dnf

Debian:

To list all available packages;

apt list

To install a package, one might need first to search for the package availability which can be done using search option of apt command:

apt search package_name_search_string

apt-cache command is a good alternative to searches for packages:

apt-cache search package_name_search_string

apt-cache pkgnames package_name_search_string

search – searches for package names and their short descriptions

pkgnames – search for specific package names with no descreption.

A quick hack to check the availability of a package is to list all available packages and grep for the package in question, apt list | grep package_name

To install a package;

apt install package_name

To auto sccept all prompts during installation use the -y option with install command, apt install package_name -y

To install several packages just list them:

 apt install package1 package2 package3 packageX -y

The install command also upgrades installed packages if run and a new version of the package is available. To prevent already installed packages from upgrading use the –no-upgrade option

apt install package_name –no-upgrade

To show package information:

 apt-cache show package_name

To upgrade all installed packages with available upgrades from configured repositories:

apt upgrade -y

While upgrade option of apt does the installation of newly available softwares, it does not remove or install any packages that satisfy some dependencies. dist-upgrade is an enhanced version apt upgrade command whereby it installs and removes packages to satisfy dependencies during an upgrade.

apt dist upgrade -y

To upgrade a specific installed package:

 apt install package_name –only-upgrade

For more information on apt install and other commands with the options, check their apt man pages; man apt.

c) Install Specific Version of Packages

In some use cases, one might need to install a specific version of a package from repositories. The usual behavior of repositories is it installs the latest version available on the repositories.

First list the available versions of the package:

Debian:

apt list -a [package_name]

RHEL:

yum list –showduplicates | grep [package_name]

dnf list –showduplicates | grep [package_name]

yum –showduplicates list [package_name]

dnf  –showduplicates list [package_name]

Proceed to install desired version in the fomart:

Debian:

apt install package_name=<version_info>

RHEL:

yum install package_name-<version_info>

dnf  install package_name-<version_info>

Examples of installing a specific version of a package:

Install a specific version of apache webeserver i.e httpd on RHEL and apache2 on Debian derivative (Ubuntu).

yum install httpd-2.4.6-95

apt install apache2=2.4.41-4ubuntu3.10

Removing Packages

To only uninstall a package leaving configaration files and dependencies use the command(s):

Debian:

apt remove [package_name] OR dpkg -r [package_name]

RHEL:

yum remove [package_name] -y

dnf remove [package_name] -y

yum groupremove ‘packages_group_name’ -y

dnf groupremove ‘packages_group_name’ -y

To remove a package, configuration files and erase all unused dependencies use the following command(s) :

Debian:

apt remove –purge [package_name] OR dpkg -p [package_name]
apt autoremove
apt clean

The explanation for apt uninstallation options used above:

remove -> Only deletes the software, retains the configuration files.

purge/–purge -> Removes the program and config files

autoremove -> Removes orphaned or unnecessary(unused) dependencies

clean ->To delete old/outdated packages cache.

RHEL:

yum autoremove [package_name]

Log Files

RHEL:

yum logs can be located at /var/log/yum.log or /var/log/message

Debian:

Install, upgrade and removal of package logs are located at /var/log/dpkg.log regardless of whether they were installed using dpkg or apt.

For apt specific logs, they can be found at /var/log/apt i.e. history.log and term.log

To view rotated logs, use zcat or zgrep…

Handling Broken Installations

Often installation/upgrade can be interrupted one way or the other. This leads to broken installations which require fixing before updating the system or doing additional installations. Often the package managers will print out an error and possible fix for the broken installation.

Debian:

To fix broken packages:

apt –fix-missing update

Force the installation of the broken packages using the -f option of apt command. apt automatically searches for the broken package installations and reinstalls them afresh from repositories.

apt -f install

dpkg can also be used to solve broken packages by reconfiguring all unpacked packages which have not yet been configured using the command:

dpkg –configure -a

RHEL:

yum and dnf have great capabilities when it comes to dealing with broken package installation. A quick hack to dealing with broken package installations is reinstalling the package:

dnf –refresh reinstall package_name

Conclusion

This article has covered an introduction to common concepts of package managers for installation, upgradation, and removal of applications on the 2 major Linux distributions. If ever in doubt always reference the man pages, and google is always a friend.

References

https://wiki.debian.org/SourcesList

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/deployment_guide/sec-setting_repository_options

https://launchpad.net/ubuntu/+ppas

https://linux.die.net/man/8/rpm#:~:text=Install and Upgrade Options

https://man7.org/linux/man-pages/man1/dpkg.1.html#:~:text=dpkg is a tool to,and zero or more options.

https://man7.org/linux/man-pages/man8/yum.8.html

Scroll to top