How to Install EPEL on CentOS Stream 10 and 9

Install EPEL on CentOS Stream 10 and 9 to access many additional packages. Enable CRB, verify repositories, and manage EPEL packages via DNF.

Last updatedAuthorJoshua JamesRead time5 minGuide typeCentOS Stream

EPEL expands a CentOS Stream system when the base repositories do not carry a tool you need, such as htop, lynis, fail2ban, Python libraries, or server utilities. To install EPEL on CentOS Stream, enable CRB first, install the Fedora EPEL release package for your Stream version, then verify that DNF can read the new repositories.

The standard EPEL repository supports CentOS Stream 10 and 9. CentOS Stream 9 can also use EPEL Next, which provides packages built directly against CentOS Stream 9 when a maintainer needs a Stream-specific build. CentOS Stream 10 currently uses standard EPEL only.

These steps support CentOS Stream 10 and CentOS Stream 9. Older CentOS Stream releases are no longer maintained, so use archived EPEL notes only for legacy recovery, not for active systems.

Update CentOS Stream Before Installation

Refresh package metadata and apply pending updates before adding repository configuration:

sudo dnf upgrade --refresh
Dependencies resolved.
Nothing to do.
Complete!

The remaining package-management commands use sudo. Enter your account password when sudo prompts.

EPEL vs EPEL Next: Choose the Right Repository

Use standard EPEL on both supported releases. Add EPEL Next only on Stream 9 when package documentation or maintainer guidance specifically calls for it.

RepositoryAvailabilityBuilt AgainstBest Fit
EPELCentOS Stream 10 and 9RHEL-compatible Enterprise Linux packagesDefault choice for most systems
EPEL NextCentOS Stream 9 onlyCentOS Stream 9Stream 9 packages that need Stream-built dependencies

The current epel-next-release package is published for EPEL 9 only. Do not install EPEL Next on CentOS Stream 10.

Start with standard EPEL unless you already know a Stream 9 package requires EPEL Next. Avoid adding EPEL Next on systems that only need the standard repository.

Install EPEL on CentOS Stream

Enable the CRB Repository

CRB (CodeReady Builder) contains development libraries and build-time dependencies that many EPEL packages expect. Enable CRB before installing the EPEL release package.

Install the DNF plugin package if your system does not already provide config-manager:

sudo dnf install -y dnf-plugins-core

Enable CRB:

sudo dnf config-manager --set-enabled crb

Confirm that DNF sees CRB as an enabled repository:

dnf repolist --enabled | grep '^crb'

CentOS Stream 10 output:

crb                           CentOS Stream 10 - CRB

CentOS Stream 9 output:

crb                           CentOS Stream 9 - CRB

Install the EPEL Release Package

The Fedora EPEL permalink installs the current release package and its repository key file. Use the command that matches your CentOS Stream major version, then review and confirm the DNF transaction.

CentOS Stream 10:

sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-10.noarch.rpm

CentOS Stream 9 with standard EPEL and EPEL Next:

The {,-next} brace expansion downloads both epel-release and epel-next-release packages in one command. If you only want standard EPEL on Stream 9, use sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm.

sudo dnf install https://dl.fedoraproject.org/pub/epel/epel{,-next}-release-latest-9.noarch.rpm

During installation, the release package may recommend enabling CRB with /usr/bin/crb enable. You already enabled CRB with dnf config-manager, so no extra action is needed unless the CRB verification command showed no output.

The shorter sudo dnf install epel-release form depends on the copy carried by extras-common and its repository signing state. The Fedora permalink commands use the upstream EPEL release package directly and keep the workflow consistent across CentOS Stream 10 and 9.

Older examples may show yum for EPEL setup. CentOS Stream 10 and 9 use DNF4 for this workflow, so keep the dnf commands unless you are maintaining an older Enterprise Linux system outside this article’s scope.

Verify EPEL Installation

Check the EPEL repository IDs after installation. The filter keeps optional EPEL sub-repositories from obscuring the main result:

dnf repolist --enabled | grep -E '^epel([[:space:]]|-next[[:space:]])'

CentOS Stream 10 output:

epel                   Extra Packages for Enterprise Linux 10 - x86_64

CentOS Stream 9 output with EPEL Next installed:

epel                Extra Packages for Enterprise Linux 9 - x86_64
epel-next           Extra Packages for Enterprise Linux 9 - Next - x86_64

Inspect stable repository fields for standard EPEL:

dnf repoinfo epel | grep -E '^(Repo-id|Repo-name|Repo-status|Repo-filename)'
Repo-id            : epel
Repo-name          : Extra Packages for Enterprise Linux 10 - x86_64
Repo-status        : enabled
Repo-filename      : /etc/yum.repos.d/epel.repo

If no EPEL repository appears, rerun the install command for your CentOS Stream version and recheck the CRB step before troubleshooting mirrors or package conflicts.

On CentOS Stream 10, detailed repository output may show a minor-version path such as 10.3 in the mirror URL. Keep using the epel repository ID; the release package manages the current EPEL 10 minor repository path.

Search and Install Packages from EPEL

After EPEL is enabled, DNF can search and install packages from it like any other enabled repository. Examples available from EPEL on both supported CentOS Stream releases include htop, lynis, and fail2ban.

Check package availability:

dnf list --available htop lynis fail2ban

Relevant Stream 10 lines include:

Available Packages
fail2ban.noarch                       1.1.0-6.el10_0                        epel
htop.x86_64                           3.3.0-5.el10_0                        epel
lynis.noarch                          3.1.6-1.el10_2                        epel

Search for package descriptions when you do not know the exact package name:

dnf search htop
======================== Name Exactly Matched: htop ========================
htop.x86_64 : Interactive process viewer

Install a package from EPEL:

sudo dnf install htop

Use the same pattern for other EPEL packages. For example, install Lynis for local security audits:

sudo dnf install lynis

Check which repository supplied an installed package:

dnf info htop | grep -E '^(Name|Version|Repository|From repo|Summary)'
Name         : htop
Version      : 3.3.0
Repository   : @System
From repo    : epel
Summary      : Interactive process viewer

The From repo: epel line confirms the package came from EPEL.

Remove EPEL from CentOS Stream

Remove the release packages when you no longer want DNF to use EPEL. Remove standard EPEL:

sudo dnf remove epel-release

If EPEL Next remains installed on CentOS Stream 9, remove it separately:

sudo dnf remove epel-next-release

Confirm no EPEL repository IDs remain enabled:

dnf repolist --enabled | grep '^epel'

No output means the repository definitions are gone.

Removing release packages does not uninstall software previously installed from EPEL. Identify EPEL-sourced packages before removing them:

dnf list installed | grep '@epel'

Remove individual packages as needed. For example, remove htop if you no longer need it:

sudo dnf remove htop

After removing packages, review unused dependencies before accepting the transaction:

sudo dnf autoremove

Troubleshoot Common EPEL Issues

config-manager Command Missing

Minimal CentOS Stream installations may not include the DNF plugin command used to enable CRB. Install the plugin package, then rerun the CRB enable command:

sudo dnf install -y dnf-plugins-core

CRB Repository Already Enabled

If the dnf config-manager --set-enabled crb command reports that CRB is already active, continue to the EPEL installation step. Some CentOS Stream installations enable CRB by default.

GPG Key Import Errors

DNF may ask to import the EPEL key when it installs the release package or the first package from EPEL. Compare the prompt to Fedora’s published key list before accepting it:

Importing GPG key 0xE37ED158:
 Userid     : "Fedora (epel10) <epel@fedoraproject.org>"
 Fingerprint: 7D8D 15CB FC4E 6268 8591 FB26 33D9 8517 E37E D158
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-10
Is this ok [y/N]:

Verify the fingerprint against the official Fedora key list, then type y to continue. For quick reference, these are the EPEL key fingerprints:

EPEL 9 : FF8A D134 4597 106E CE81 3B91 8A38 72BF 3228 467C
EPEL 10: 7D8D 15CB FC4E 6268 8591 FB26 33D9 8517 E37E D158

If DNF reports that the public key is not installed, confirm that epel-release is present and that the key file exists:

rpm -q epel-release
ls /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-*

If the key file is missing, reinstall the release package with the Fedora permalink for your CentOS Stream version.

Mirror Connection Timeouts

If dnf fails to reach EPEL mirrors, you will see timeout errors:

Error: Failed to download metadata for repo 'epel':
Cannot download repomd.xml: Cannot download repodata/repomd.xml: All mirrors were tried

Refresh only repository metadata first:

sudo dnf clean metadata
sudo dnf makecache --refresh
Metadata cache created.

If every mirror still fails, wait and retry before changing repository files. Temporary mirror outages usually clear faster than a manually pinned base URL ages.

Package Conflicts with Base Repositories

EPEL complements CentOS Stream repositories without replacing core packages. Dependency errors usually mean BaseOS, AppStream, CRB, or EPEL is disabled, or another third-party repository installed an incompatible package.

If DNF reports conflicting requests or nothing provides during an EPEL transaction, start with the enabled repository list:

dnf repolist --enabled | grep -E '^(baseos|appstream|crb|epel)'

Then inspect what the failing package requires:

dnf repoquery --requires --repo=epel package-name

If you disabled BaseOS, AppStream, or CRB for a transaction, re-enable them and retry. If a package exists on Stream 9 but not Stream 10, check Fedora Packages or the package maintainer before assuming EPEL Next is available on Stream 10.

If you installed a conflicting third-party build, align versions or remove the conflicting package before retrying the EPEL transaction.

Archived EPEL Versions

The Fedora Project archives older EPEL releases after they leave maintenance, and those repositories no longer receive updates. The EPEL archive can help with legacy recovery, but production systems should move to a supported CentOS Stream or Enterprise Linux release.

Conclusion

EPEL is ready once CRB is enabled, the release package is installed, and dnf repolist shows epel, plus epel-next only on CentOS Stream 9 when you chose that package. Use dnf search, dnf list --available, and dnf info to check package availability and origin before installing server or security tools. For related CentOS Stream workflows, continue with Apache HTTPD, PHP, or XFCE on CentOS Stream 9. Fedora’s official EPEL documentation remains the upstream reference for release package changes.

Share this guide

Help another Linux user troubleshoot faster

Share this guide with someone troubleshooting Linux systems or saving it for later.

Follow LinuxCapable

Want more LinuxCapable guides in Google?

Add LinuxCapable as a preferred source so Google can show more of our fresh Linux tutorials in Top Stories and From your sources when relevant.

Add LinuxCapable as a preferred source on Google
Search LinuxCapable

Need another guide?

Search LinuxCapable for package installs, commands, troubleshooting, and follow-up guides related to what you just read.

Found this guide useful?

Support LinuxCapable to keep tutorials free and up to date.

Buy me a coffeeBuy me a coffee
Before commenting, please review our Comments Policy.
Formatting tips for your comment

You can use basic HTML to format your comment. Useful tags currently allowed in published comments:

You type Result
<code>command</code> command
<strong>bold</strong> bold
<em>italic</em> italic
<blockquote>quote</blockquote> quote block

Got a Question or Feedback?

We read and reply to every comment - let us know how we can help or improve this guide.

Verify before posting: