Table of Contents >> Show >> Hide
- Before You Install Anything: Understand How RHEL Delivers Software
- Method 1: Install from Official Repositories with DNF (Recommended)
- Method 2: Enable the Right Repositories (So DNF Can Actually Find Things)
- Method 3: Install a Local RPM File (Best Practice: Use DNF, Not Bare RPM)
- Method 4: Install Software with GNOME Software (Graphical, Desktop-Friendly)
- Method 5: Use Flatpak for Desktop Apps (Sandboxed, Great for Workstations)
- Method 6: Offline or Air-Gapped Installs with a Local Repository
- Method 7: Install from Source (Only When You Have a Good Reason)
- Method 8: “Install” Apps Without Installing Them: Containers with Podman
- Troubleshooting: When Installs Go Sideways
- Security and Cleanliness Best Practices
- Real-World Experiences: 10 Lessons From the Trenches (500+ Words)
- 1) “No match for argument” usually means “wrong repo,” not “Linux is missing the internet”
- 2) Installing with RPM feels fast… until it isn’t
- 3) The “yum vs dnf” debate is mostly a historical re-enactment
- 4) Your biggest enemy is the accidental repo
- 5) Local repos are a superpower in restricted networks
- 6) DNF history is your “receipt” when someone asks what changed
- 7) The GUI is not the enemy (on workstations)
- 8) “Just compile it” is not a plan
- 9) Containers reduce drama
- 10) The best install is the one you can repeat
- Wrap-Up
Installing software on Red Hat Enterprise Linux (RHEL) can feel either delightfully boring (the best kind of boring)
or like you accidentally opened a portal to “dependency hell.” The good news: RHEL is built for predictable, repeatable
software installs. Once you understand where software comes from and which tool to use, you can install
just about anything with confidencewhether you’re managing a single workstation or a fleet of servers that must never,
ever surprise you at 2 a.m.
This guide covers the complete, real-world toolbox for installing software on RHELDNF/YUM, RPM files, enabling the right
repositories, GUI installs, Flatpak apps, offline installs, source builds, and even “installing” apps via containers.
Along the way, you’ll get practical commands, examples, and the little gotchas that usually only show up after you’ve
already broken something on a Friday.
Before You Install Anything: Understand How RHEL Delivers Software
RHEL software typically comes from signed RPM repositories managed through Red Hat. Those repositories are
commonly organized into channels like BaseOS and AppStream. You don’t usually hunt random
installers on the internet (that’s more of a Windows hobby). Instead, you use a package manager that can:
- Find the right package and version for your RHEL release
- Install it with all required dependencies
- Track installed files so updates and removals are clean
- Verify package signatures (aka “this wasn’t tampered with”) when properly configured
On modern RHEL (8 and 9), the main package manager is DNF. You’ll still see people type yum
out of muscle memoryand that’s usually fine because on newer systems it’s effectively the same workflow.
Method 1: Install from Official Repositories with DNF (Recommended)
If you want the most stable, support-friendly path: install from enabled repos using DNF. This is the “RHEL-approved”
method and it’s what you should default to for servers and production environments.
Quick-start DNF commands you’ll use constantly
Example: installing a web server. If you want NGINX, you can search and install it like this:
That third command isn’t “installing,” but it’s the next step many people forget. Installing puts files on disk; enabling
and starting the service makes it actually run.
Find the package that provides a command or file
Ever type a command and get “command not found,” then immediately stare into the distance like you’re in a sad indie film?
DNF can tell you which package provides the missing file.
Groups, environment installs, and “give me the whole toolbox”
RHEL can install related sets of packages as groups. This is handy when you want a full development environment or a common
stack without manually listing 25 packages.
DNF history: your undo button (sort of)
One of the most underrated features is DNF’s transaction history. It won’t magically reverse every bad idea, but it often
saves you when you installed the wrong package set or did a questionable update during lunch.
Method 2: Enable the Right Repositories (So DNF Can Actually Find Things)
If DNF can’t find the package you want, the issue is usually one of these:
- Your system isn’t registered (common on fresh installs or BYOL cloud images)
- The repo that contains the package isn’t enabled
- You’re behind a proxy/firewall and metadata downloads are failing
Check enabled repositories
Register the system with Red Hat Subscription Management (when applicable)
Many RHEL environments require registration so the system can access Red Hat repositories and updates. The most common
workflow uses subscription-manager.
In organizations, you may use an activation key and an organization ID instead of username/password. Your internal admin
docs (or platform team) should provide the correct approach for your environment.
Enable repositories
Once registration is correct, enabling a repo is often the missing piece. Depending on your setup, you may enable repos
using DNF’s config-manager or subscription-manager.
Tip: if you’re not sure which repo you need, search for the package and look at results after enabling likely candidates,
or ask DNF what’s available once you’ve added the correct channels.
Method 3: Install a Local RPM File (Best Practice: Use DNF, Not Bare RPM)
Sometimes you’ll download a vendor RPM (monitoring agents, database clients, internal tools) and need to install it.
You can use rpm directly, but the better move is usually:
install the RPM with DNF so dependencies are resolved automatically.
DNF will treat that RPM like a normal package install, pulling required dependencies from enabled repositories if needed.
When you must use rpm (and what it does differently)
The big difference: rpm installs what you give it and doesn’t automatically fetch dependencies from repos.
That’s how you end up in the classic “it installed, but it doesn’t run” situation.
Verify package signatures (you should care)
In enterprise Linux, package signature verification is a big deal. It helps ensure a package hasn’t been altered and that
it comes from a trusted signing key. You can check an RPM file before installing it.
If you see warnings about missing keys, you may need to import the vendor’s GPG public key (and you should validate that
key through a trusted channel, not “some forum comment from 2014”).
Method 4: Install Software with GNOME Software (Graphical, Desktop-Friendly)
If you’re using RHEL Workstation with GNOME, you can install many applications through the GUI using GNOME Software.
It’s useful when you want a store-like experience, especially for graphical apps, and it can manage updates too.
- Open Software (GNOME Software)
- Search for the application
- Click Install and authenticate when prompted
This approach is great for workstations. For servers, most admins stick to DNF for speed, logs, and automation.
Method 5: Use Flatpak for Desktop Apps (Sandboxed, Great for Workstations)
Flatpak is a popular way to install desktop applications in a sandboxed format. On some RHEL workstation setups, Flatpak
may already be present, and you can add a remote (like Flathub) to access more appssubject to your organization’s policy.
Flatpak shines when you want newer desktop apps without mixing third-party RPM repos into a carefully managed system.
On the flip side, many enterprises restrict third-party remotes for compliance reasonsso follow your environment rules.
Method 6: Offline or Air-Gapped Installs with a Local Repository
Some RHEL systems aren’t allowed to talk to the internet. Others live behind strict firewalls. In those cases you can
install software by pointing DNF to a local repository, often using the RHEL installation media (DVD/ISO)
or an internal mirror.
Option A: Use the RHEL ISO as a repo (common in labs and offline builds)
Then create a repo file such as /etc/yum.repos.d/rhel-local.repo:
After that, refresh metadata and install normally:
Option B: Build an internal repo (best for real enterprise offline networks)
Larger environments often host an internal HTTP(S) repository with curated packages. That’s a bigger topic, but the
high-level flow is: collect RPMs, generate repo metadata (commonly with createrepo tooling), and point clients
to that internal URL via a .repo file.
Method 7: Install from Source (Only When You Have a Good Reason)
Yes, you can still do the classic ./configure && make && sudo make install. And yes, sometimes you need to
(research tools, niche utilities, specific versions). But on RHEL, source installs should be a deliberate decision because:
- They bypass the package database (harder to audit and cleanly remove)
- Updates are manual (no automatic security errata)
- Dependencies can get messy fast
If you must compile, keep things tidy:
- Install build tools as needed (often via a “Development Tools” group)
- Prefer installing into
/usr/localto avoid colliding with vendor-managed files - Document exactly what you did (future-you will be grateful)
Method 8: “Install” Apps Without Installing Them: Containers with Podman
Sometimes the cleanest way to run an app on RHEL is not to install it directly at allespecially for newer versions of
tools that would otherwise require third-party repos. RHEL strongly supports container tooling such as Podman.
Containers won’t replace system packages for everything, but they’re excellent for isolating apps and keeping the base OS
stableparticularly on servers where stability beats novelty every day of the week (especially Fridays).
Troubleshooting: When Installs Go Sideways
Problem: “No match for argument” (DNF can’t find the package)
- Verify repos are enabled:
dnf repolist - If using RHEL repos, verify registration:
subscription-manager status - Try searching:
dnf search <name>
Problem: Metadata download errors or timeouts
- Clear cache:
sudo dnf clean all - Rebuild cache:
sudo dnf makecache - Check proxy/firewall/DNS (especially in corporate networks)
Problem: GPG signature/key errors
- Don’t reflexively disable checking; first confirm you’re using the correct repo and signing keys
- Import keys only from trusted sources (your org, the vendor, or official documentation)
Problem: Dependency conflicts
- Look at what DNF is trying to do; don’t just hammer “yes”
- Consider whether you enabled a third-party repo that conflicts with RHEL-provided packages
- Use
dnf historyto see what changed recently
Security and Cleanliness Best Practices
- Prefer official repositories for core system software whenever possible.
- Keep signature checking enabled and treat unknown signing keys as a stop sign, not a speed bump.
- Limit third-party repos on production servers; use containers or Flatpak for isolated use cases when appropriate.
- Use sudo instead of logging in as root for daily work.
- Remove what you don’t use: fewer packages means a smaller attack surface and fewer update surprises.
Real-World Experiences: 10 Lessons From the Trenches (500+ Words)
I’ve watched more than one perfectly capable admin “break Linux” while trying to install something simple like a text editor.
Not because they’re bad at their jobbecause software installs are where assumptions go to die. Here are ten field-tested
lessons that will save you time, embarrassment, and possibly a weekend.
1) “No match for argument” usually means “wrong repo,” not “Linux is missing the internet”
The first time you see DNF fail to find a package, it’s tempting to assume the package name is wrong. Sometimes it is.
But on RHEL, it’s often that the correct repository isn’t enabled. The fix isn’t creativeit’s boring: check your repos,
confirm registration, and enable the right channel. Boring is good. Boring is stable.
2) Installing with RPM feels fast… until it isn’t
Using rpm -ivh can feel like skipping the line at the coffee shop. You get your package installed immediately
and then you discover it needs four libraries you don’t have. Suddenly you’re downloading RPMs like it’s 2006 and your
browser has a “toolbar” problem. When possible, install local RPM files with DNF instead so dependencies are handled in
one transaction.
3) The “yum vs dnf” debate is mostly a historical re-enactment
Teams will argue about whether to use yum or dnf like they’re choosing between cats and dogs.
In modern RHEL, it’s largely the same workflow in practice. What matters more is consistent automation, consistent repos,
and consistent patchingnot which three-letter command makes you feel nostalgic.
4) Your biggest enemy is the accidental repo
The fastest way to create weird conflicts is adding third-party repositories without a plan. One day it’s “I just needed a
newer version of a tool.” Next thing you know, core libraries get replaced, updates become unpredictable, and you’ve created
a snowflake server that only you can understand. If you truly need third-party software, consider containers (server use) or
Flatpak (desktop use) to isolate it.
5) Local repos are a superpower in restricted networks
In air-gapped or tightly controlled environments, local repositories turn “we can’t install anything” into “we can install
everything we approved.” Mounting an ISO and building a local repo file looks old-school, but it’s reliable. The first time
you patch a locked-down environment without begging for temporary firewall rules, you’ll feel like you just discovered
cheat codes.
6) DNF history is your “receipt” when someone asks what changed
When troubleshooting, “nothing changed” is almost never true. DNF history gives you a list of transactions that lets you
answer with receipts instead of vibes. It’s especially useful after an update causes a service to misbehave and everyone
starts pointing fingers at “the network.”
7) The GUI is not the enemy (on workstations)
Some admins act like installing from GNOME Software is morally wrong. On a workstation, it’s fineespecially for users who
just want tools to work. The command line remains king for servers and automation, but the GUI is a perfectly legitimate
front door for desktop apps.
8) “Just compile it” is not a plan
Source builds have their place, but they should come with documentation and discipline. If you compile something and toss it
into system paths without tracking it, you’ve made updates harder, audits harder, and future troubleshooting much weirder.
If you’re going to do it, do it intentionally and keep it clean.
9) Containers reduce drama
Need a newer app version without destabilizing the OS? Containers are often the clean answer. You keep RHEL stable and run
the app in its own environment. It’s not a silver bullet, but it’s a great way to avoid mixing incompatible dependencies
into the host system.
10) The best install is the one you can repeat
Whether you’re using shell scripts, Ansible, or internal build pipelines, repeatability is the real goal. A one-off manual
install is a temporary victory. A documented, repeatable install is a permanent oneand it’s the difference between “works
on my machine” and “works in production without drama.”
Wrap-Up
Installing software on Red Hat Linux doesn’t have to be complicated. Start with DNF and official repositories, enable the
correct channels, verify signatures, and keep your environment tidy. Use GUI tools and Flatpak when you’re on a workstation,
build local repos for offline networks, and consider containers when you need isolation or newer apps without risking system
stability. Do those things consistently, and you’ll spend less time fighting installsand more time actually using the
software you installed.
