Installing EPEL (Extra Packages for Enterprise Linux) on CentOS Stream provides access to over 20,000 community-maintained packages not included in the base repositories. By the end of this guide, you will enable the CodeReady Builder (CRB) repository, install EPEL (and EPEL Next on Stream 9), and verify the repositories work correctly. This five-minute process gives you immediate access to popular tools like htop for process monitoring, fail2ban for security hardening, Python development libraries, and server utilities that complement CentOS Stream’s enterprise package set without replacing core system packages.
The Fedora Project maintains EPEL as a volunteer effort targeting CentOS Stream 9 and 10, Red Hat Enterprise Linux, and RHEL-compatible distributions. EPEL Next (available only for CentOS Stream 9) delivers package versions that maintainers build against CentOS Stream directly, while the standard EPEL repository prioritizes stability by building against RHEL.
This guide covers CentOS Stream 9 and CentOS Stream 10. Commands work identically on both versions unless noted otherwise. CentOS Stream 8 reached end-of-life in May 2024 and is no longer covered.
Update CentOS Stream Before Installation
Before installing EPEL and EPEL Next, update your system fully to avoid conflicts and ensure compatibility.
Use the following command to update your system:
sudo dnf upgrade --refresh
Dependencies resolved. Nothing to do. Complete!
EPEL vs EPEL Next: Choose the Right Repository
CentOS Stream 9 users can choose between two EPEL variants, while CentOS Stream 10 users have access only to the standard EPEL repository. Understanding the difference helps you select the appropriate repository for your needs.
| Repository | Availability | Built Against | Best For |
|---|---|---|---|
| EPEL | CentOS Stream 9 and 10 | Red Hat Enterprise Linux | Production servers requiring RHEL-compatible packages |
| EPEL Next | CentOS Stream 9 only | CentOS Stream directly | Systems tracking CentOS Stream’s development cycle |
CentOS Stream 10 does not have EPEL Next. The Fedora Project has not announced plans for EPEL Next on EL10. CentOS Stream 10 users should install only the standard EPEL repository. Maintainers build EPEL Next packages directly against CentOS Stream repositories, while they build standard EPEL packages against RHEL, which can result in compatibility differences.
For most users, the standard EPEL repository provides everything needed. Install EPEL Next only if you run CentOS Stream 9 and need packages built specifically against Stream’s repositories.
Install EPEL Repository on CentOS Stream
Step 1: Enable the CRB Repository
The CRB (CodeReady Builder) repository contains development packages and libraries that many EPEL packages depend on. Therefore, enable it before installing EPEL.
First, install the DNF plugins package that provides the config-manager command. On minimal installations, this package may not be present:
sudo dnf install -y dnf-plugins-core
Next, enable the CRB repository:
sudo dnf config-manager --set-enabled crb
This command produces no output when successful. Verify that you enabled the repository:
dnf repolist | grep crb
Expected output for CentOS Stream 10:
crb CentOS Stream 10 - CRB
Expected output for CentOS Stream 9:
crb CentOS Stream 9 - CRB
Step 2: Install EPEL Repository
Install the EPEL repository package using the official permalink. For CentOS Stream 10:
sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-10.noarch.rpm
Last metadata expiration check: ... Dependencies resolved. ... Installing: epel-release noarch 10-*.el10 @commandline ... Installed: epel-release-10-*.el10.noarch Complete!
For CentOS Stream 9, install both EPEL and EPEL Next using brace expansion:
The
{,-next}brace expansion downloads bothepel-releaseandepel-next-releasepackages in one command. If you only want the standard EPEL repository, use this simpler command instead: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
Last metadata expiration check: ... Dependencies resolved. ... Installing: epel-release noarch 9-*.el9 @commandline epel-next-release noarch 9-*.el9 @commandline ... Installed: epel-next-release-9-*.el9.noarch epel-release-9-*.el9.noarch Complete!
Verify EPEL Installation
Confirm that DNF can access the EPEL repositories:
dnf repolist | grep epel
Expected output for CentOS Stream 10:
epel Extra Packages for Enterprise Linux 10 - x86_64
Expected output for CentOS Stream 9 (with both EPEL and EPEL Next):
epel Extra Packages for Enterprise Linux 9 - x86_64 epel-next Extra Packages for Enterprise Linux 9 - Next - x86_64
View repository details for EPEL:
dnf repoinfo epel
Repo-id : epel Repo-name : Extra Packages for Enterprise Linux 10 - x86_64 Repo-status : enabled Repo-revision: 1765677528 Repo-baseurl : https://download.fedoraproject.org/pub/epel/10/Everything/x86_64/ Repo-filename: /etc/yum.repos.d/epel.repo
The output confirms you enabled EPEL successfully and now have access to thousands of additional packages.
Search and Install EPEL Packages
With EPEL enabled, you can search, install, and manage thousands of additional packages. DNF enables the EPEL repositories by default after installation.
Search for a package across all enabled repositories:
dnf search htop
======================== Name Exactly Matched: htop ======================== htop.x86_64 : Interactive process viewer
Install a package from EPEL:
sudo dnf install htop
Last metadata expiration check: ... Dependencies resolved. ... Installing: htop x86_64 3.x.x-*.el* epel ... Complete!
List a few matching packages from EPEL (example):
dnf list --available --repo epel 'htop*' | head -n 20
Check which repository provides an installed package:
dnf info htop
Installed Packages Name : htop Version : 3.x.x Release : *.el* Architecture : x86_64 Size : 327 k Source : htop-3.x.x-*.el*.src.rpm Repository : @System From repo : epel Summary : Interactive process viewer URL : https://htop.dev/ License : GPL-2.0-or-later Description : htop is an interactive text-mode process viewer for Linux.
The From repo: epel line confirms the package came from EPEL.
Remove EPEL from CentOS Stream
To disable EPEL repositories and remove their configuration files, uninstall the release packages. Remove the standard EPEL repository:
sudo dnf remove epel-release
Dependencies resolved. Removing: epel-release noarch 10-7.el10 @System Transaction Summary ================================== Remove 1 Package Complete!
If you installed EPEL Next on CentOS Stream 9, remove it separately:
sudo dnf remove epel-next-release
Verify that you removed the repositories:
dnf repolist | grep epel
(no output - EPEL repositories successfully removed)
Removing these packages does not uninstall software you installed from EPEL. Those packages remain on your system. To remove EPEL packages as well, identify them first:
dnf list installed | grep @epel
Then remove individual packages as needed with sudo dnf remove package-name. After removing packages, clean up orphaned dependencies:
sudo dnf autoremove
Troubleshoot Common EPEL Issues
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
When installing packages from EPEL for the first time, DNF prompts you to import the EPEL GPG key. The prompt may look like this:
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 matches 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 the key fails to import, update the epel-release package:
sudo dnf upgrade epel-release
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
Check your network connection and refresh the repository metadata:
sudo dnf clean all
sudo dnf makecache
Metadata cache created.
If the issue persists, temporarily switch to the baseurl by editing /etc/yum.repos.d/epel.repo and uncommenting the baseurl line while commenting out metalink.
Package Conflicts with Base Repositories
The Fedora Project designed EPEL to complement CentOS Stream repositories without replacing core packages. Most “conflict”-style errors happen when a transaction cannot satisfy dependencies because required base repositories (or CRB) are disabled.
Error: Problem: conflicting requests - nothing provides nginx(abi) = 1.26.1 needed by nginx-mod-brotli-1.0.0~rc-1.el10.x86_64 from epel - nothing provides libbrotlienc.so.1()(64bit) needed by nginx-mod-brotli-1.0.0~rc-1.el10.x86_64 from epel
Start by confirming the required repositories are enabled:
dnf repolist --enabled | grep -E '(baseos|appstream|crb|epel)'
Then check what the failing package actually requires and where its dependencies come from. For example, EPEL nginx modules require a matching nginx(abi) provided by AppStream:
dnf repoquery --requires --repo=epel nginx-mod-brotli
libbrotlienc.so.1()(64bit) libc.so.6(GLIBC_2.4)(64bit) nginx(abi) = 1.26.1 rtld(GNU_HASH)
Verify that AppStream can provide the required nginx build:
dnf repoquery --repo=appstream nginx | head
nginx-2:1.26.1-7.el10.x86_64
If you disabled BaseOS/AppStream/CRB for a transaction, re-enable them and retry. If you installed a conflicting third-party build (for example, from an external Nginx repository), you may need to align versions or remove the conflicting package first.
Archived EPEL Versions
The Fedora Project archived older EPEL releases (4, 5, 6, 7, 8) and no longer provides updates for them. Find archived repositories at https://dl.fedoraproject.org/pub/archive/epel/ if you need packages for legacy systems. However, archived packages no longer receive security updates, so upgrading to a supported CentOS Stream version is strongly recommended for production environments.
Conclusion
You enabled EPEL by installing the DNF plugins, activating the CRB repository, and installing the release package. With thousands of additional packages now accessible, explore system monitoring tools (htop, ncdu), development libraries, or server utilities through dnf search. For production systems, audit available updates using dnf repository-packages epel list updates before applying them, and check package origins with dnf info to confirm EPEL sources. Next, consider installing Apache on CentOS Stream, setting up PHP on CentOS Stream, or installing XFCE desktop on CentOS Stream 9 to leverage EPEL’s extended package ecosystem. For additional reference, see the official EPEL documentation.