Managing Software in Red Hat Enterprise Linux
Foreword
As an administrator, knowing how to effectively manage software in Linux is crucial. This skill involves installing, updating, and removing packages.
Why is it essential? Firstly, it grants access to a vast range of open-source software, enhancing functionality to meet your specific requirements. Regularly updating packages safeguards against vulnerabilities and can boost system performance.
Managing software also optimizes resources, removes unnecessary components, and enables efficient troubleshooting.
In this article, we are going to take a look at how manage software in Red Hat Enterprise Linux using practical examples.
System registration
In Red Hat Enterprise Linux, system registration is the process of associating a specific system with a Red Hat account and subscription. It is important because it enables the system to receive software updates, security patches that are provided through the Red Hat Content Delivery Network.
By registering a system with a Red Hat account, we can ensure that the system stays up-to-date and compliant with Red Hat’s software policies and that we have access to technical support.
Therefore, before we can perform the registration we need to have a valid Red Hat account. I have explained the process for creating one in Installing Red Hat Enterprise Linux.
There are several methods for registering a system, depending on the environment and deployment scenario. Some of the most common methods include:
- Subscription Manager Gnome application
- Subscription Manager CLI application
- RHEL Web Console
- Ansible
Subscription Manager Gnome application provides an easy to use UI for registering the system.
Subscription Manager CLI application provides a robust framework for registering the system and managing entitlements.
subscription-manager
addons config --help orgs register repos syspurpose
attach environments identity plugins release role unregister
auto-attach facts import redeem remove service-level usage
clean -h list refresh repo-override status version
RHEL Web Console also know as the Cockpit project provides a modern way of managing server through an easy to use web console.
Ansible is an open-source automation tool that simplifies IT orchestration by allowing administrators to manage and configure systems with a declarative language and a simple, agentless architecture. It has a modular architecture and provides different modules designed to interact with various parts of the system.
In the context of subscription management a sample playbook for registering a system could look like following:
---
- name: Customize managed host after initial setup
hosts: localhost
become: yes
tasks:
- name: Ensure previous subscriptions are removed
ansible.builtin.shell: |
subscription-manager remove --all
subscription-manager unregister
subscription-manager clean
changed_when: false
tags: ['rhsm']
- name: Register The System into Red Hat Subscription Management
community.general.redhat_subscription:
state: present
activationkey: "{{ rhsm_ak }}"
org_id: "{{ rhsm_org }}"
tags: ['rhsm']
Repositories
Software repositories in Linux are central locations where software packages are stored and managed for distribution, allowing users to easily search, download, and install software packages. They are an important part of the Linux ecosystem, ensuring up-to-date and secure software packages.
Creating Repositories
Objectives
Greetings, after your success installing the very first Red Hat Enterprise Linux in proof of concept environment, you have been tasked to prepare a locally hosted software repository for machines that will leverage automated installation using kickstart and much smaller boot ISO media.
Even though this is not a production environment, your coworker, who is responsible for infrastructure security would be very happy if you keep the host firewall running and use TLS for securing data in transit. At least until he rolls out the PKI infrastructure for this company. Finally, ensure that all configuration changes are persist after a machine reboot.
Good Luck.
Prerequisites
The following prerequisites are required before you can continue with the solution:
- Access to registered Red Hat Enterprise Linux system
- Access to RHEL installation DVD ISO file
- Access to privileged local user account
📝Note: Not sure if you meet these prerequisites? Consult the Installing Red Hat Enterprise Linux guide.
Solution
We start by mounting the installation DVD into the existing rhel01 virtual machine from Windows Hyper-V host.
# From Hyper-V host, connect the ISO from DVD Drive
Set-VMDvdDrive -VMName rhel01 `
-ControllerNumber 1 `
-ControllerLocation 0 `
-Path D:\iso\rhel-9.2-x86_64-dvd.iso
From the rhel01 virtual machine console, we gain super user privileges by using sudo in interactive mode sudo -i
. We verify that /dev/cdrom
device is aware of the ISO and we mount it to /media
mountpoint.
# Verify ISO Label
blkid /dev/cdrom
/dev/cdrom: UUID="2023-04-13-16-58-02-00" LABEL="RHEL-9-2-0-BaseOS-x86_64" TYPE="iso9660" PTUUID="d3d1f9a5" PTTYPE="dos"
# Mount DVD
mount /dev/cdrom /media
First, to configure a locally hosted package repository, we need to install and configure an Apache web server.
To secure data in transit, we need to generate a self-signed certificate and private key and update the SSL configuration file.
# Install Required Software Packages
dnf install -y httpd mod_ssl
# Generate a self-signed certificate
openssl req -x509 \
-nodes \
-days 365 \
-newkey rsa:2048 \
-keyout /etc/pki/tls/private/server.key \
-out /etc/pki/tls/certs/server.crt
# Backup and Update the Apache's SSL configuration to use certificate
cp /etc/httpd/conf.d/ssl.conf /etc/httpd/conf.d/ssl.conf.bak
sed -i 's/^Listen 443.*/Listen 443 https/g' /etc/httpd/conf.d/ssl.conf
sed -i 's/^#ServerName.*/ServerName rhel01.mshome.net/g' /etc/httpd/conf.d/ssl.conf
sed -i 's/^SSLEngine.*/SSLEngine on/g' /etc/httpd/conf.d/ssl.conf
sed -i 's/^SSLCertificateFile.*/SSLCertificateFile \/etc\/pki\/tls\/certs\/server.crt/g' /etc/httpd/conf.d/ssl.conf
sed -i 's/^SSLCertificateKeyFile.*/SSLCertificateKeyFile \/etc\/pki\/tls\/private\/server.key/g' /etc/httpd/conf.d/ssl.conf
Next, we need to update the firewall configuration to include the web ports.
# Update firewall configuration
firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
firewall-cmd --reload
Next, we need to enable and start the Apache web service.
# Start and enable the Apache web service
systemctl enable --now httpd
Next, we test if the web service is working. From the Hyper-V host perform a web request to the rhel01 virtual machine.
# Test the httpd service
curl -k https://rhel01.mshome.net
Next, we need to create directories inside the web root directory and recursively copy content from mounted DVD media.
# Prepare hosting directory
mkdir -pv /var/www/html/rhel9.2/x86_64/dvd/{BaseOS,AppStream}
# Copy repositories from DVD to hosting directory
cp -r /media/BaseOS/* /var/www/html/rhel9.2/x86_64/dvd/BaseOS/
cp -r /media/AppStream/* /var/www/html/rhel9.2/x86_64/dvd/AppStream/
Finally, unmount the ISO from the virtual machine and disconnect the DVD from the host machine.
# From rhel01 virtual machine, unmount DVD
unmount /media
# From Hyper-V host, diconnect the ISO from DVD Drive
Set-VMDvdDrive -VMName rhel01 `
-ControllerNumber 1 `
-ControllerLocation 0 `
-Path $null
💡Tip: Another valid approach is to download Binary ISO inside the machine that will act as a repository server and mount it directly in the /var/www/html/html/rhel9.2/x86_64/dvd/
directory.
Congratulations, you have completed all listed objectives. On top of that, you have updated the firewall configuration and enabled support transport layer security.
In the next section, we look at how to consume this privately hosted repository by managing configuration from the client’s point of view.
Consuming Repositories
Objectives
Greetings, with good words spreading fast across the campus and a colleague from the application frontend team heard about your success with setting up the first RHEL POC machine hosting a private repository. He is also very curious and wants to learn more about this “backend” stuff which is handled by your team. Therefore, he went and used your work instructions and installed his first RHEL lab machine too. To please his minimalist mindset as well as maximize his learning experience, he went with Minimal install when selecting software packages during installation.
After the installation, he quickly realized that his virtual machine is unable to access the Red Hat Content Delivery Network. He suspects that it could be due to department firewall restrictions. Therefore he kindly asked you if he could leverage your private repository. He also asked you to explain how to work with RPM packages and DNF.
Solution
To define a custom repository on a client machine, we need to create a new repo file in /etc/yum.repos.d/
drop-in directory. We can use cat
with redirection which is also referred to as the HEREDOC method for writing multi-line text content.
cat <<EOF > /etc/yum.repos.d/rhel_dvd.repo
[rhel-9-for-x86_64-baseos-dvd]
name=Red Hat Enterprise Linux 9.2 BaseOS (DVD)
baseurl=https://rhel01.mshome.net/rhel9.2/x86_64/dvd/BaseOS
sslverify=0
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
[rhel-9-for-x86_64-appstream-dvd]
name=Red Hat Enterprise Linux 9.2 AppStream (DVD)
baseurl=https://rhel01.mshome.net/rhel9.2/x86_64/dvd/AppStream
sslverify=0
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
EOF
Since we are using a self-signed certificate we need to disable the SSL verification. We can leave the GPG check enabled because we are providing packages that are signed by a trusted key.
To verify that the newly defined repositories are available we can use the dnf repoinfo
command.
dnf repoinfo rhel-9-for-x86_64-baseos-dvd
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered with an entitlement server. You can use subscription-manager to register.
Red Hat Enterprise Linux 9.2 BaseOS (DVD) 60 kB/s | 2.7 kB 00:00
Red Hat Enterprise Linux 9.2 AppStream (DVD) 108 kB/s | 3.2 kB 00:00
Repo-id : rhel-9-for-x86_64-baseos-dvd
Repo-name : Red Hat Enterprise Linux 9.2 BaseOS (DVD)
Repo-status : enabled
Repo-revision : 1681421128
Repo-updated : Thu 13 Apr 2023 05:25:29 PM EDT
Repo-pkgs : 1,155
Repo-available-pkgs: 1,155
Repo-size : 1.2 G
Repo-baseurl : https://rhel01.mshome.net/rhel9.2/x86_64/dvd/BaseOS
Repo-expire : 172,800 second(s) (last: Fri 12 May 2023 02:13:00 PM EDT)
Repo-filename : /etc/yum.repos.d/rhel_dvd.repo
Total packages: 1,155
As you can see from the above output, there are two software repositories defined.
The BaseOS repository is a primary software repository in Red Hat Enterprise Linux (RHEL). It consists of components and packages that serve as the foundation of the operating system. These packages encompass essential system utilities, libraries, command-line tools, and other fundamental software necessary for the proper operation of RHEL.
The AppStream repository consists of additional packages (applications, runtime environments, tools) which are distributed as application streams.
Now that we have the foundation laid down, let us explore various ways how we can interact with RPM software packages and its database.
The database-related files are stored in the /var/lib/rpm
directory. If you are curious about the database structure, make a copy and explore it using the sqlite3
tool. You can easily list all defined tables using the query below.
dnf install -y sqlite
cp /var/lib/rpm/rpmdb.sqlite{,.bak}
# List the first three defined tables
sqlite3 /var/lib/rpm/rpmdb.sqlite.bak \
"SELECT name FROM sqlite_master WHERE type='table' LIMIT 3;"
Packages
sqlite_sequence
Name
# List the last three installed packages
sqlite3 /var/lib/rpm/rpmdb.sqlite.bak \
"SELECT key FROM Name ORDER BY hnum DESC LIMIT 3;"
tree
sqlite
gpg-pubkey
As you imagine, this is not the gentleman’s way to interact with the local database. For that, you can employ the rpm
command. Below are a couple of helpful queries.
# Query DB for a package that provides a file
rpm -qf /etc/passwd
setup-2.13.7-9.el9.noarch
# Query DB for a package that provides a directory
rpm -qf /dev/
filesystem-3.16-2.el9.x86_64
# Query DB for installed packages, show last 3
rpm -qa | tail -3
gpg-pubkey-5a6340b3-6229229e
sqlite-3.34.1-6.el9_1.x86_64
tree-1.8.0-10.el9.x86_64
To investigate an RPM package lifecycle, we need to download one first. This can be achieved by using curl
or dnf
.
# Download the package using wget
curl -k -o tree-1.8.0-10.el9.x86_64.rpm \
https://rhel01.mshome.net/rhel9.2/x86_64/dvd/BaseOS/Packages/tree-1.8.0-10.el9.x86_64.rpm
# Download the package using dnf
dnf download tree
# Install the tree package
rpm -iv tree-1.8.0-10.el9.x86_64.rpm
Verifying packages...
Preparing packages...
tree-1.8.0-10.el9.x86_64
# Query the tree package
rpm -q tree
# Erase the tree package
rpm -e tree
Even though we can manage packages with rpm
it is not the recommended method. The reason is that rpm by itself can’t resolve software dependencies. This is demonstrated in the example below.
curl -k -o bash-completion-2.11-4.el9.noarch.rpm \
https://rhel01.mshome.net/rhel9.2/x86_64/dvd/BaseOS/Packages/bash-completion-2.11-4.el9.noarch.rpm
rpm -iv bash-completion-2.11-4.el9.noarch.rpm
error: Failed dependencies:
/usr/bin/pkg-config is needed by bash-completion-1:2.11-4.el9.noarch
For this reason, we should leverage dnf
to manage the software lifecycle, as it can resolve these dependencies automatically. Before we explore at this particular capability, let us dive deep into package structure first. For convenience, we download httpd
using dnf
.
dnf download httpd | tail -1
httpd-2.4.53-11.el9_2.4.x86_64.rpm 873 kB/s | 54 kB 00:00
From the filename, we can determine that the package name is httpd
, the version is 2.4.53
release 11
for el9_2.4
, which stands for Enterprise Linux 9, and for x86_64
architecture. Using the file
command, we can confirm that this file is indeed an rpm package.
file httpd-2.4.53-11.el9_2.4.x86_64.rpm
httpd-2.4.53-11.el9_2.4.x86_64.rpm: RPM v3.0 bin i386/x86_64 httpd-2.4.53-11.el9_2.4
Under the hood this package is really an cpio archive containing metadata, scripts and application files. We use the rpm2cpio
command to extract the content.
rpm2cpio httpd-2.4.53-11.el9_2.4.x86_64.rpm | cpio -duim
A new etc
and usr
directories have been created in current one. This gives you an idea which files will be deployed when this package is installed.
tree -F usr | head
usr
├── lib/
│ └── systemd/
│ └── system/
│ ├── htcacheclean.service
│ ├── httpd.service
│ ├── httpd@.service
│ └── httpd.socket
├── lib64/
│ └── httpd/
Another way for listing package content is to use RPM with the following query.
# Query Package - list all files
rpm -qpl httpd-2.4.53-11.el9_2.4.x86_64.rpm | head -10
/etc/httpd/conf.modules.d/00-brotli.conf
/etc/httpd/conf.modules.d/00-systemd.conf
/usr/lib/.build-id
/usr/lib/.build-id/33
/usr/lib/.build-id/33/affbb88a288cb3e1990731763abd7f78a696c7
/usr/lib/.build-id/9d
/usr/lib/.build-id/9d/567552d70f45df3e1ede0d13a6a6a17c1d6096
/usr/lib/systemd/system/htcacheclean.service
/usr/lib/systemd/system/httpd.service
/usr/lib/systemd/system/httpd.socket
We can further filter which file types are we interested in.
# Query Package - list configuration files
rpm -qpc httpd-2.4.53-11.el9_2.4.x86_64.rpm
/etc/httpd/conf.modules.d/00-brotli.conf
/etc/httpd/conf.modules.d/00-systemd.conf
# Query Package - list documentation files
rpm -qpd httpd-2.4.53-11.el9_2.4.x86_64.rpm
/usr/share/man/man5/httpd.conf.5.gz
/usr/share/man/man8/apachectl.8.gz
/usr/share/man/man8/fcgistarter.8.gz
/usr/share/man/man8/htcacheclean.8.gz
/usr/share/man/man8/htcacheclean.service.8.gz
/usr/share/man/man8/httpd.8.gz
/usr/share/man/man8/httpd.service.8.gz
/usr/share/man/man8/httpd.socket.8.gz
/usr/share/man/man8/httpd@.service.8.gz
/usr/share/man/man8/rotatelogs.8.gz
/usr/share/man/man8/suexec.8.gz
# Query Package - list scripts
rpm -qp --scripts httpd-2.4.53-11.el9_2.4.x86_64.rpm | head -7
postinstall scriptlet (using /bin/sh):
if [ $1 -eq 1 ] && [ -x "/usr/lib/systemd/systemd-update-helper" ]; then
# Initial installation
/usr/lib/systemd/systemd-update-helper install-system-units httpd.service htcacheclean.service httpd.socket || :
fi
We can also display the summary information.
# Query Package - get information
rpm -qpi httpd-2.4.53-11.el9_2.4.x86_64.rpm
Name : httpd
Version : 2.4.53
Release : 11.el9_2.4
Architecture: x86_64
Install Date: (not installed)
Group : Unspecified
Size : 60252
License : ASL 2.0
Signature : RSA/SHA256, Fri 31 Mar 2023 12:04:35 PM EDT, Key ID 199e2f91fd431d51
Source RPM : httpd-2.4.53-11.el9_2.4.src.rpm
Build Date : Wed 29 Mar 2023 04:11:52 PM EDT
Build Host : x86-64-07.build.eng.rdu2.redhat.com
Packager : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>
Vendor : Red Hat, Inc.
URL : https://httpd.apache.org/
Summary : Apache HTTP Server
Description :
The Apache HTTP Server is a powerful, efficient, and extensible
web server.
DNF (Dandified YUM) is a package manager and successor for the popular YUM (Yellowdog Updater, Modified). It can interact with the RPM database, packages as well as repositories. Compared to RPM it can resolve any software dependencies automatically.
The command line utility offers many useful options, we will review some of the most common ones.
Let us start with common file and software lookup queries.
📝Note: The system used for demonstrations has not been registered with entitlement server. Therefore I may filter out the first 5 lines of output with tail -n +7
.
# Query repositories for a package that provides a file - does not need to be present on local filesystem
dnf provides /usr/share/httpd
httpd-filesystem-2.4.53-11.el9_2.4.noarch : The basic directory layout for the Apache HTTP Server
Repo : rhel-9-for-x86_64-appstream-dvd
Matched from:
Filename : /usr/share/httpd
# Query repositories for list of package matching pattern in name
dnf list 'httpd*'
Available Packages
httpd.x86_64 2.4.53-11.el9_2.4 rhel-9-for-x86_64-appstream-dvd
httpd-core.x86_64 2.4.53-11.el9_2.4 rhel-9-for-x86_64-appstream-dvd
httpd-devel.x86_64 2.4.53-11.el9_2.4 rhel-9-for-x86_64-appstream-dvd
httpd-filesystem.noarch 2.4.53-11.el9_2.4 rhel-9-for-x86_64-appstream-dvd
httpd-manual.noarch 2.4.53-11.el9_2.4 rhel-9-for-x86_64-appstream-dvd
httpd-tools.x86_64 2.4.53-11.el9_2.4 rhel-9-for-x86_64-appstream-dvd
# Query repositories for list of packages matching pattern in name or information
dnf search 'web server'
libcurl.x86_64 : A library for getting files from web servers
libcurl.i686 : A library for getting files from web servers
nginx.x86_64 : A high performance web server and reverse proxy server
pcp-pmda-weblog.x86_64 : Performance Co-Pilot (PCP) metrics from web server logs
python3-tornado.x86_64 : Scalable, non-blocking web server and tools
# Query repositories for a list of packages matching pattern in name, information, and description
dnf search all 'web server'
Next, we retrieve more information about a particular package.
# Query repositories for information about httpd package
dnf info httpd
Available Packages
Name : httpd
Version : 2.4.53
Release : 11.el9_2.4
Architecture : x86_64
Size : 54 k
Source : httpd-2.4.53-11.el9_2.4.src.rpm
Repository : rhel-9-for-x86_64-appstream-dvd
Summary : Apache HTTP Server
URL : https://httpd.apache.org/
License : ASL 2.0
Description : The Apache HTTP Server is a powerful, efficient, and extensible
: web server.
Next, we list all files provided by a package with repoquery
argument with --list
option.
dnf repoquery --list httpd | tail -5
Last metadata expiration check: 0:59:42 ago on Mon 22 May 2023 03:23:36 AM EDT.
/usr/share/man/man8/httpd.service.8.gz
/usr/share/man/man8/httpd.socket.8.gz
/usr/share/man/man8/httpd@.service.8.gz
/usr/share/man/man8/rotatelogs.8.gz
/usr/share/man/man8/suexec.8.gz
Next, we look at managing the package lifecycle with dnf
.
# Non-interactive installation of httpd (only showing last few lines of output)
dnf install -y httpd
Installed:
apr-1.7.0-11.el9.x86_64 apr-util-1.6.1-20.el9.x86_64
apr-util-bdb-1.6.1-20.el9.x86_64 apr-util-openssl-1.6.1-20.el9.x86_64
httpd-2.4.53-11.el9_2.4.x86_64 httpd-core-2.4.53-11.el9_2.4.x86_64
httpd-filesystem-2.4.53-11.el9_2.4.noarch httpd-tools-2.4.53-11.el9_2.4.x86_64
mailcap-2.1.49-5.el9.noarch mod_http2-1.15.19-4.el9_2.4.x86_64
mod_lua-2.4.53-11.el9_2.4.x86_64 redhat-logos-httpd-90.4-1.el9.noarch
Complete!
# Interactive reinstallation of httpd
dnf reinstall httpd
# Interactive removal of httpd
dnf remove httpd
Another very common operation is to update all installed packages.
# Non-interactive update of all installed packages
dnf update -y
Finally, let us review dnf logs and history.
# Retrieve last three lines of transaction log
tail -3 /var/log/dnf.rpm.log
2023-05-19T04:20:28-0400 SUBDEBUG Erase: apr-util-bdb-1.6.1-20.el9.x86_64
2023-05-19T04:20:28-0400 SUBDEBUG Erase: apr-1.7.0-11.el9.x86_64
2023-05-19T04:20:28-0400 SUBDEBUG Erase: apr-util-openssl-1.6.1-20.el9.x86_64
# Retrieve history in table format
dnf history
ID | Command line | Date and time | Action(s) | Altered
--------------------------------------------------------------------------------------------------------------------
8 | remove httpd | 2023-05-19 04:20 | Removed | 12
7 | install -y httpd | 2023-05-19 04:18 | Install | 12 <
# Interactive rollback of transaction 8 (Removal of httpd)
dnf history undo 8
Packages and Environment Groups
Before we explore metapackages let us summarize what we learned about packages. As you could see from the previous demonstration, a package is a collection of files and metadata, such as the package name, version, release number, dependencies, and other package-related information, compressed into a single file with the .rpm extension.
Metapackages are a type of package that does not contain any software but rather serve as a way to group related packages together. Metapackages are useful for managing complex software environments or software stacks, where it is important to ensure that all the required packages are installed and kept up to date. Installing a metapackage will install all of the packages that are associated with it, simplifying the process of managing software dependencies.
To list packages that are part of a metapackage we can use the repoquery
argument with --requires
option.
dnf repoquery --requires container-tools
Updating Subscription Management repositories.
Last metadata expiration check: 2:35:57 ago on Fri 12 May 2023 06:59:55 AM EDT.
(container-selinux >= 2:2.162.1 if selinux-policy)
aardvark-dns
buildah
buildah >= 1.21.4
cockpit-podman
conmon
containernetworking-plugins
containers-common
crun >= 0.19
fuse-overlayfs
netavark
oci-runtime
podman
podman >= 3.2.3
podman-docker
podman-manpages
podman-remote
python3-podman
skopeo
skopeo >= 1:1.3.1
slirp4netns
toolbox
udica
Environmental groups are collections of packages and package groups tailored for specific use cases, such as workstations or servers, and make it easy to install required packages and dependencies.
As with individual packages, dnf
can be used to retrieve information about groups. We can list them by using the following grouplist
argument.
dnf grouplist
Updating Subscription Management repositories.
Last metadata expiration check: 2:29:09 ago on Fri 12 May 2023 06:59:55 AM EDT.
Available Environment Groups:
Server
Minimal Install
Workstation
Custom Operating System
Virtualization Host
Installed Environment Groups:
Server with GUI
Installed Groups:
Container Management
Headless Management
Available Groups:
Legacy UNIX Compatibility
System Tools
Security Tools
Console Internet Tools
Network Servers
RPM Development Tools
Development Tools
Smart Card Support
Graphical Administration Tools
Scientific Support
.NET Development
To list packages that are part of a group we can use the info
argument.
dnf group info "security tools"
Updating Subscription Management repositories.
Last metadata expiration check: 2:31:10 ago on Fri 12 May 2023 06:59:55 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
tpm2-tools
tss2
udica
References
Want to learn more about a particular program or feature used in the solution? Consult the following man pages:
rpm(8), rpm2cpio(8), cpio(1), rpmkeys(8)
Closing thoughts
In conclusion, managing software in Linux is a critical aspect of maintaining a robust and efficient system. By exploring the various package management tools, repositories, and best practices, you can effectively install, update, and remove software with ease. I hope this article has provided valuable insights and practical tips for your Linux software management journey. Thank you for reading, and I encourage you to share your thoughts, experiences, and any additional tips in the comments section below. Let’s continue the conversation and learn from each other’s expertise in managing software on Linux.