Репозитории EPEL и Remi для AlmaLinux и Rocky Linux 9 и 10

Репозиторий rpmforge (RepoForge) мёртв уже много лет: сайт apt.sw.be не отвечает, пакеты собирались под CentOS 5 и 6 и давно не обновляются. На AlmaLinux и Rocky Linux 9 и 10 его роль выполняют три источника. EPEL даёт тысячи дополнительных пакетов: htop, fail2ban, certbot, nginx-модули, утилиты администратора. Remi даёт свежий PHP. ELRepo даёт драйверы оборудования и альтернативные ядра.

Самое частое решение — подключить EPEL вместе с CRB. На AlmaLinux и Rocky Linux это две команды: включить CRB и поставить пакет epel-release из штатного репозитория extras. Без CRB часть пакетов EPEL не установится из-за зависимостей. Remi ставят поверх EPEL, когда версии PHP из AppStream не хватает.

Ниже — команды для EL9 и EL10, настройка приоритетов, проверка результата и правила безопасности. Всё проверяйте на своей системе: EPEL и Remi обновляются часто, а EPEL 10 устроен иначе, чем EPEL 9.

Что чем заменить

Раньше на CentOS 5 ставили rpmforge, EPEL и иногда ещё пару репозиториев «для PHP». Сегодня набор такой:

ЗадачаБыло на CentOS 5/6Сейчас на AlmaLinux/Rocky 9 и 10
Дополнительные утилиты и программыrpmforge, EPELEPEL (вместе с CRB)
Свежий PHPWebtatic, rpmforgeRemi; модули PHP из AppStream
Драйверы, новые ядраELRepo, rpmforgeELRepo
Пакеты для сборки (devel-библиотеки)часть была в базеCRB (CodeReady Linux Builder)

Webtatic и rpmforge больше не поддерживаются. Если в старой инструкции видите apt.sw.be, repoforge.org или webtatic.com — инструкцию выбрасывайте.

Что такое CRB и зачем он EPEL

CRB (CodeReady Linux Builder) — официальный репозиторий дистрибутива. В нём лежат devel-пакеты и библиотеки, которые не входят в BaseOS и AppStream. Пакеты EPEL собираются с расчётом на то, что CRB доступен. Если его не включить, установка падает с ошибкой вида «nothing provides … needed by …».

CRB — это не сторонний репозиторий. Его собирает сам дистрибутив, подписывает тем же ключом. Включать его безопасно.

  • AlmaLinux 9, Rocky Linux 9, Rocky Linux 10 — CRB по умолчанию выключен.
  • AlmaLinux 10 — с обновления от сентября 2025 года и в 10.1 и новее CRB включён по умолчанию (в файле /etc/yum.repos.d/almalinux-crb.repo стоит enabled=1).

Установка EPEL на AlmaLinux и Rocky Linux 9

Команда dnf config-manager входит в пакет dnf-plugins-core. На минимальной установке его может не быть, поэтому ставим заранее.

dnf install -y dnf-plugins-core
dnf config-manager --set-enabled crb
dnf install -y epel-release
dnf makecache

Пакет epel-release лежит в штатном репозитории extras и AlmaLinux, и Rocky Linux. Он кладёт файлы репозиториев в /etc/yum.repos.d/ и ключ в /etc/pki/rpm-gpg/. Ещё он ставит небольшой скрипт /usr/bin/crb, который делает то же, что dnf config-manager:

crb enable
crb status

На RHEL пакета epel-release в штатных репозиториях нет. Там ставят по прямой ссылке с сервера Fedora, а CRB включают через subscription-manager:

subscription-manager repos --enable codeready-builder-for-rhel-9-$(arch)-rpms
dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm

Установка EPEL на AlmaLinux и Rocky Linux 10

Команды почти те же. Разница в том, что на AlmaLinux 10 CRB обычно уже включён.

# Rocky Linux 10 и AlmaLinux 10 без свежих обновлений
dnf install -y dnf-plugins-core
dnf config-manager --set-enabled crb

# обе системы
dnf install -y epel-release
dnf makecache

Официальная инструкция — в документации EPEL. У EPEL 10 есть особенность. Он собирается под каждый минорный выпуск EL10 отдельно, а пакеты рассчитаны на свежую минорную версию. Если сервер застрял на старом минорном выпуске (замороженное зеркало, отложенные обновления), пакеты EPEL могут потребовать библиотеки новее тех, что стоят в системе. Правило простое: сначала dnf upgrade всей системы, потом установка из EPEL.

Ещё одна деталь AlmaLinux 10 — отдельная сборка под старые процессоры x86_64_v2. Для неё основной EPEL не подходит: он собран под x86_64_v3. AlmaLinux пересобирает EPEL под v2 сам. Если у вас v2-сборка, проверьте, что epel-release взят из репозиториев AlmaLinux, а не скачан с сайта Fedora.

Проверка: EPEL подключён и работает

dnf repolist
dnf info htop

Примерно так выглядит вывод dnf repolist на AlmaLinux 9:

repo id          repo name
appstream        AlmaLinux 9 - AppStream
baseos           AlmaLinux 9 - BaseOS
crb              AlmaLinux 9 - CRB
epel             Extra Packages for Enterprise Linux 9 - x86_64
extras           AlmaLinux 9 - Extras

В выводе dnf info htop должна быть строка Repository : epel (или From repo : epel у установленного пакета). Как пользоваться самим htop, разобрано в статье htop и btop: мониторинг процессов в Linux и FreeBSD.

Какие пакеты в системе пришли из EPEL:

dnf repository-packages epel list --installed

Remi: свежий PHP на AlmaLinux и Rocky Linux

В AppStream есть PHP, но выбор ограничен. EL9 даёт PHP 8.0 по умолчанию и потоки модулей 8.1, 8.2 и 8.3. EL10 даёт PHP 8.3. Если сайту нужен PHP 8.4 или новее, ставят Remi — репозиторий Remi Collet, мейнтейнера PHP в Fedora и RHEL. Remi зависит от EPEL, поэтому сначала выполните шаги выше.

Подключение Remi

# EL9
dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm

# EL10
dnf install https://rpms.remirepo.net/enterprise/remi-release-10.rpm

При первой установке пакета dnf спросит, импортировать ли ключ Remi. Сверьте отпечаток с опубликованным на rpms.remirepo.net и только потом соглашайтесь. Там же есть мастер настройки, который выдаёт команды под вашу систему и версию PHP.

Пакет создаёт несколько файлов в /etc/yum.repos.d/. Важные репозитории:

  • remi-safe — включён по умолчанию. Пакеты с отдельными именами (php84-*) и общие зависимости. Ничего штатного не заменяет.
  • remi-modular — потоки модуля php:remi-8.x. Работают только после явного включения потока.
  • remi — прочие пакеты, которые заменяют штатные. По умолчанию выключен, включать без нужды не стоит.

Вариант 1: одна версия PHP вместо системной

Это самый простой путь для сервера с одним сайтом. Пакеты называются как штатные (php-fpm, php-mysqlnd), меняется только поток модуля. Команды одинаковы для EL9 и EL10:

dnf module list php
dnf module switch-to php:remi-8.4
dnf install php-fpm php-cli php-mysqlnd php-opcache php-gd php-xml php-mbstring php-intl
php -v

Если PHP ещё не установлен, вместо switch-to можно сразу выполнить dnf module install php:remi-8.4. Если установлен, switch-to переключит поток и обновит пакеты до 8.4. Конфигурация лежит там же, где у штатного PHP: /etc/php.ini, /etc/php.d/, пулы FPM в /etc/php-fpm.d/. Служба — php-fpm.

Вариант 2: несколько версий PHP рядом

Для разных сайтов с разными версиями PHP используют SCL-пакеты из remi-safe: php83, php84 и так далее. Каждая версия живёт в своём каталоге под /opt/remi/, конфиги — в /etc/opt/remi/php84/, служба — php84-php-fpm.

dnf install php84 php84-php-fpm php84-php-mysqlnd
systemctl enable --now php84-php-fpm
php84 -v

Как развести пулы, сокеты и виртуальные хосты, подробно описано в статье Несколько версий PHP и PHP-FPM на одном сервере.

Какую версию PHP брать

На осень 2026 года PHP 8.4 и 8.5 в активной поддержке, 8.3 и 8.2 получают только исправления безопасности. По данным Remi, поддержка PHP 8.2 заканчивается в декабре 2026 года. Для нового сайта берите 8.4, если CMS и плагины её поддерживают. Версии ниже 8.2 не ставьте на новые серверы.

После смены версии часто ломаются расширения, собранные под старый PHP. Типичный симптом и разбор — в статье PHP Startup: Unable to load dynamic library.

ELRepo: драйверы и ядра

ELRepo нужен реже. Его ставят, когда штатное ядро не видит сетевую карту или RAID-контроллер: Red Hat убирает из ядра поддержку старого железа. Список драйверов и инструкция — на elrepo.org. Ещё в ELRepo есть ядра kernel-ml (свежая основная ветка) и kernel-lt (долгосрочная).

# EL9
rpm --import https://www.elrepo.org/RPM-GPG-KEY-v2-elrepo.org
dnf install https://www.elrepo.org/elrepo-release-9.el9.elrepo.noarch.rpm

# EL10 (работает только ключ v2)
rpm --import https://www.elrepo.org/RPM-GPG-KEY-v2-elrepo.org
dnf install https://www.elrepo.org/elrepo-release-10.el10.elrepo.noarch.rpm

По умолчанию включён только основной канал elrepo. В нём драйверы в виде kmod-пакетов, штатные пакеты он не заменяет. Каналы elrepo-kernel и elrepo-testing выключены. Ядро ставят разово, явно указав канал:

dnf search --enablerepo=elrepo-kernel kernel-ml
dnf install --enablerepo=elrepo-kernel kernel-ml

Стороннее ядро на рабочем сервере — осознанный риск. Оно не подписано ключом дистрибутива, поэтому с Secure Boot не загрузится без дополнительной настройки. Модули из kmod-пакетов и драйверы производителей под него не собраны. Ставьте его, только если штатное ядро не решает задачу.

Приоритеты репозиториев

На CentOS 5 и 6 приоритеты задавали плагином yum-plugin-priorities. В dnf это встроено: в секции репозитория пишут параметр priority. Чем меньше число, тем выше приоритет. По умолчанию у всех 99.

Если один и тот же пакет есть в двух репозиториях, dnf возьмёт его из репозитория с меньшим priority, даже если там версия старше. Поэтому приоритет ставят штатным репозиториям, а не сторонним. Пример для AlmaLinux 9, файл /etc/yum.repos.d/almalinux-baseos.repo:

[baseos]
name=AlmaLinux $releasever - BaseOS
...
enabled=1
priority=10

Чаще вместо приоритетов удобнее ограничить сторонний репозиторий списком пакетов. Это делается параметрами includepkgs и excludepkgs в его секции. Например, взять из EPEL только то, что нужно, файл /etc/yum.repos.d/epel.repo:

[epel]
...
enabled=1
includepkgs=htop fail2ban* certbot python3-certbot*

Учтите две вещи. Файлы .repo принадлежат пакетам epel-release и almalinux-repos/rocky-repos. При обновлении этих пакетов ваши правки сохранятся, но новая версия файла может лечь рядом как .rpmnew, её надо просмотреть. И второе: для Remi приоритеты не нужны. Модульная фильтрация dnf и так не даст пакетам из remi-modular заменить штатный PHP, пока вы явно не включите поток.

Посмотреть итоговые настройки репозитория:

dnf config-manager --dump epel | grep -E 'priority|includepkgs|excludepkgs|gpgcheck'

Безопасность сторонних репозиториев

Каждый подключённый репозиторий получает право ставить на сервер пакеты, скрипты которых выполняются от root. Поэтому правила такие.

  • Только известные источники. EPEL собирает проект Fedora, ELRepo и Remi работают больше десяти лет и публикуют ключи на своих сайтах. Не ставьте RPM с форумов, файлообменников и сайтов-агрегаторов пакетов.
  • Не отключайте проверку подписи. В файлах репозиториев должно быть gpgcheck=1. Ключ --nogpgcheck и правка gpgcheck=0 «чтобы заработало» превращают любое подменённое зеркало в путь на сервер.
  • Сверяйте отпечаток ключа при первом импорте. dnf показывает его в запросе на импорт.
  • Только HTTPS. В старых инструкциях ссылки на http://. Сегодня все три проекта доступны по HTTPS.
  • Ставьте release-пакет для своей версии. epel-release-latest-8 на EL9 или remi-release-9 на EL10 приведут к конфликтам библиотек.
  • Держите репозитории выключенными, если они нужны разово. Пример — канал elrepo-kernel и --enablerepo при установке.
  • Убирайте лишнее. Репозиторий, который больше не нужен, удаляют вместе с его пакетом: dnf remove remi-release.

Какие ключи импортированы в систему:

rpm -q gpg-pubkey --qf '%{NAME}-%{VERSION}-%{RELEASE}\t%{SUMMARY}\n'

Совет «отключите SELinux, если пакет из EPEL не запускается» встречается часто, но он вредный. Если служба падает из-за SELinux, смотрите ausearch -m AVC -ts recent и правьте контекст или булево значение. Выключать защиту целиком ради одного пакета нельзя.

Типичные ошибки

СимптомПричинаРешение
nothing provides libXXX needed by пакет при установке из EPELНе включён CRBdnf config-manager --set-enabled crb или crb enable
Public key for ... is not installed, GPG check FAILEDКлюч не импортирован или пакет подписан другим ключомПереустановите release-пакет, импортируйте ключ с официального сайта. Не используйте --nogpgcheck
No match for argument: php84Не подключён Remi или выключен remi-safeПоставьте remi-release, проверьте dnf repolist
Пакет filtered out by modular filteringНужный поток модуля не включёнdnf module switch-to php:remi-8.4
Конфликты библиотек после подключенияRelease-пакет от другой версии ELrpm -q epel-release remi-release, поставьте версию под свою систему
Пакеты EPEL 10 требуют библиотеки новее установленныхСистема на старом минорном выпускеСначала dnf upgrade, потом установка
Curl error, Cannot download repomd.xmlНет доступа к зеркалам, DNS, проксиПроверьте сеть и proxy= в /etc/dnf/dnf.conf, затем dnf clean all

А что на Debian и Ubuntu

Прямых аналогов EPEL и CRB там нет: основной архив Debian и раздел universe в Ubuntu уже содержат большую часть того, что на AlmaLinux берут из EPEL. Отличия такие:

AlmaLinux / Rocky LinuxDebian 12/13Ubuntu 24.04
EPELосновной архив (main), при необходимости backportsuniverse (включён по умолчанию)
CRBне нужен, devel-пакеты в основном архивене нужен
Remi для PHPсторонний репозиторий packages.sury.orgPPA ondrej/php
ELReponon-free-firmware, ядро из backportsHWE-ядро
priority= в .repoAPT pinning в /etc/apt/preferences.d/то же

Правила безопасности те же: ключ репозитория кладут в /etc/apt/keyrings/ и привязывают к конкретному источнику через signed-by, а не добавляют в общий список доверенных.

Частые вопросы

Можно ли сегодня поставить rpmforge или RepoForge?

Нет. Проект закрыт, сервера apt.sw.be и repoforge.org не работают, пакеты собраны под CentOS 5 и 6 и не совместимы с EL9 и EL10. Всё полезное из rpmforge сейчас есть в EPEL или в штатных репозиториях.

Безопасно ли включать CRB?

Да. CRB собирает и подписывает сам дистрибутив, это не сторонний источник. В нём в основном devel-пакеты и библиотеки. На AlmaLinux 10 его уже включили по умолчанию, чтобы EPEL работал без ошибок зависимостей.

Заменит ли EPEL системные пакеты?

Нет. Политика EPEL запрещает пакеты, которые конфликтуют со штатными пакетами RHEL или заменяют их. Поэтому EPEL можно держать включённым постоянно. Remi и ELRepo-ядра — другое дело: они заменяют штатные компоненты осознанно.

Чем отличается PHP из Remi от PHP из AppStream?

В AppStream версии ограничены выбором Red Hat: на EL9 до 8.3, на EL10 — 8.3. Remi собирает все поддерживаемые версии, включая самые новые, и обновляет их вскоре после выхода исправлений. Пакеты ставятся тем же механизмом модулей, конфиги лежат там же.

Как удалить сторонний репозиторий?

Удалите его release-пакет: dnf remove remi-release или dnf remove epel-release. Пакеты, поставленные из репозитория, при этом останутся, но перестанут обновляться. Их список смотрите через dnf repository-packages имя list --installed и решайте, что удалить или заменить.

Нужен ли плагин priorities, как в CentOS 6?

Нет. В dnf параметр priority работает без плагинов, достаточно добавить его в секцию репозитория. Пакета yum-plugin-priorities на EL9 и EL10 нет.