Репозиторий 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, EPEL | EPEL (вместе с CRB) |
| Свежий PHP | Webtatic, rpmforge | Remi; модули PHP из AppStream |
| Драйверы, новые ядра | ELRepo, rpmforge | ELRepo |
| Пакеты для сборки (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 | Не включён CRB | dnf 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-пакет от другой версии EL | rpm -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 Linux | Debian 12/13 | Ubuntu 24.04 |
|---|---|---|
| EPEL | основной архив (main), при необходимости backports | universe (включён по умолчанию) |
| CRB | не нужен, devel-пакеты в основном архиве | не нужен |
| Remi для PHP | сторонний репозиторий packages.sury.org | PPA ondrej/php |
| ELRepo | non-free-firmware, ядро из backports | HWE-ядро |
priority= в .repo | APT 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 нет.