Skip to content
Search AlmaLinux

    Browse this documentation

    AlmaLinux 9: adding EPEL, CRB and Remi

    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.

    1. EPEL: dnf install epel-release, which enables epel and epel-cisco-openh264;
    2. CRB: off by default; enable per command with --enablerepo=crb;
    3. Remi: depends on EPEL; install remi-release, which enables remi-safe and remi-modular.

    Doing it out of order stalls in dependency resolution or leaves a half-configured source.

    Terminal window
    sudo dnf install -y epel-release
    dnf repolist --enabled
    repo id repo name
    appstream AlmaLinux 9 - AppStream
    baseos AlmaLinux 9 - BaseOS
    epel Extra Packages for Enterprise Linux 9 - aarch64
    epel-cisco-openh264 Extra Packages for Enterprise Linux 9 openh264 (From Cisco) - aarch64
    extras AlmaLinux 9 - Extras

    Packages from EPEL become available:

    Terminal window
    dnf list available htop
    htop.aarch64 3.3.0-1.el9 epel
    Terminal window
    sudo dnf install -y glibc-static
    sudo dnf install -y --enablerepo=crb glibc-static
    rpm -q glibc-static
    No match for argument: glibc-static
    ...
    Complete!
    glibc-static-2.34-283.el9_8.aarch64

    The first attempt fails because CRB is off; --enablerepo=crb applies to that command only and does not change permanent configuration.

    Terminal window
    sudo dnf install -y https://rpms.remirepo.net/enterprise/remi-release-9.rpm
    dnf repolist --enabled | grep -i remi
    remi-modular Remi's Modular repository for Enterprise Linux 9 - aarch64
    remi-safe Safe Remi's RPM repository for Enterprise Linux 9 - aarch64

    remi-modular manages PHP versions through module streams; run dnf module list php first instead of installing php and colliding with the system module.

    Package / scenarioSourceNote
    htop, tmux, jq and similarepelRarely conflicts
    glibc-static, *-develcrbEnable with --enablerepo=crb
    Newer php, redisremi-modularPick the stream with dnf module list
    Core system librariesDo not switchThird-party builds may replace system packages

    Rule of thumb: never switch a core system package’s source; add sources for tooling and language runtimes.

    • Permanently enabling a third-party source: it joins dnf update and may replace system packages;
    • Installing Remi without EPEL: remi-release depends 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”
    Terminal window
    sudo dnf install -y glibc-static # expected to fail
    sudo dnf install -y --enablerepo=crb glibc-static
    rpm -q glibc-static
    dnf repolist --enabled | grep -c crb # expected 0

    Checks:

    1. The first command reports No match for argument
    2. The second succeeds and rpm -q prints a version
    3. 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.