AlmaLinux 9: adding EPEL, CRB and Remi
Test scope
Section titled “Test scope”Executed in an almalinux:9 container (AlmaLinux 9.8): dnf install epel-release, dnf repolist --enabled, dnf list available htop, dnf install glibc-static (fails) and with --enablerepo=crb (succeeds), then installing remi-release-9.rpm and listing repos. Log: plans/content-expansion/evidence/logs/alma-third-party-repos.log.
Selecting a specific PHP stream and SIG repositories (e.g. sig-cloud) were not tested here.
Order: EPEL → CRB → Remi
Section titled “Order: EPEL → CRB → Remi”- EPEL:
dnf install epel-release, which enablesepelandepel-cisco-openh264; - CRB: off by default; enable per command with
--enablerepo=crb; - Remi: depends on EPEL; install
remi-release, which enablesremi-safeandremi-modular.
Doing it out of order stalls in dependency resolution or leaves a half-configured source.
EPEL: where most tooling comes from
Section titled “EPEL: where most tooling comes from”sudo dnf install -y epel-releasednf repolist --enabledrepo id repo nameappstream AlmaLinux 9 - AppStreambaseos AlmaLinux 9 - BaseOSepel Extra Packages for Enterprise Linux 9 - aarch64epel-cisco-openh264 Extra Packages for Enterprise Linux 9 openh264 (From Cisco) - aarch64extras AlmaLinux 9 - ExtrasPackages from EPEL become available:
dnf list available htophtop.aarch64 3.3.0-1.el9 epelCRB: build dependencies, on demand
Section titled “CRB: build dependencies, on demand”sudo dnf install -y glibc-staticsudo dnf install -y --enablerepo=crb glibc-staticrpm -q glibc-staticNo match for argument: glibc-static...Complete!glibc-static-2.34-283.el9_8.aarch64The first attempt fails because CRB is off; --enablerepo=crb applies to that command only and does not change permanent configuration.
Remi: PHP, via module streams
Section titled “Remi: PHP, via module streams”sudo dnf install -y https://rpms.remirepo.net/enterprise/remi-release-9.rpmdnf repolist --enabled | grep -i remiremi-modular Remi's Modular repository for Enterprise Linux 9 - aarch64remi-safe Safe Remi's RPM repository for Enterprise Linux 9 - aarch64remi-modular manages PHP versions through module streams; run dnf module list php first instead of installing php and colliding with the system module.
What each source is good for
Section titled “What each source is good for”| Package / scenario | Source | Note |
|---|---|---|
htop, tmux, jq and similar | epel | Rarely conflicts |
glibc-static, *-devel | crb | Enable with --enablerepo=crb |
Newer php, redis | remi-modular | Pick the stream with dnf module list |
| Core system libraries | Do not switch | Third-party builds may replace system packages |
Rule of thumb: never switch a core system package’s source; add sources for tooling and language runtimes.
Common traps
Section titled “Common traps”- Permanently enabling a third-party source: it joins
dnf updateand may replace system packages; - Installing Remi without EPEL:
remi-releasedepends on it and the order leaves a half-configured setup; - GPG confirmation inside scripts: the first install of a source asks to confirm the key; import it ahead of time or pass the right flag deliberately.
Practice: enable CRB temporarily for a build
Section titled “Practice: enable CRB temporarily for a build”sudo dnf install -y glibc-static # expected to failsudo dnf install -y --enablerepo=crb glibc-staticrpm -q glibc-staticdnf repolist --enabled | grep -c crb # expected 0Checks:
- The first command reports
No match for argument - The second succeeds and
rpm -qprints a version - The third prints
0, proving CRB was not enabled permanently
常见问题
Can EPEL replace system packages?
EPEL is designed not to conflict with baseos/appstream, and normally does not replace system packages. When it offers the same name, dnf still picks by version, so run `dnf info <pkg>` to see the source before installing.
Should CRB stay enabled?
No. CRB carries build dependencies used when compiling or installing *-devel packages; enable it per command with --enablerepo=crb so it does not take part in every update.
PHP version did not change after installing Remi?
Remi controls PHP versions through module streams. Installing the release package only adds the repo; list streams with `dnf module list php` and enable one, or install a versioned package.
Next steps
Section titled “Next steps”- Multi-source conflicts: Audit package sources
- Repositories and SIGs: AlmaLinux repositories
- Offline installs: Offline package installs