dnf: пакетный менеджер RHEL/Fedora
Если Debian/Ubuntu — это apt + dpkg, то в мире RHEL/Fedora — dnf + rpm. Аналогичная архитектура: высокоуровневый менеджер с разрешением зависимостей и репозиториями + низкоуровневый инструмент для работы с пакетами.
Junior DE столкнётся с RHEL-семейством в нескольких сценариях: 1) Amazon Linux 2/3 — это derivative RHEL, на нём бежит огромное количество EC2 инстансов. 2) Cloudera/Hortonworks Hadoop — официально поддерживается на RHEL/CentOS. 3) Oracle Database на Linux — только RHEL. 4) Air-gapped enterprise серверы часто на RHEL по compliance причинам. Так что хотя бы базово знать dnf — нужно.
dnf vs yum vs rpm
Параллель с apt/dpkg в Debian
yum на современных RHEL 9/10 — это просто symlink на dnf. Команды работают, но deprecated. В скриптах используйте dnf.
Установка, поиск, удаление
# Установить
sudo dnf install postgresql-server
# Несколько пакетов
sudo dnf install -y nginx redis htop
# Поиск
dnf search postgresql
# Детально про пакет
dnf info postgresql-server
# Удалить
sudo dnf remove postgresql-server
# Удалить + неиспользуемые зависимости
sudo dnf autoremove
В отличие от apt, в RHEL-мире обычно нет разделения на remove (с сохранением конфигов) и purge (без). Сохранение конфигов настраивается опциями конкретного пакета.
Обновления
# Скачать свежие метаданные и обновить все пакеты
sudo dnf upgrade
# Проверить, какие обновления доступны (без установки)
dnf check-update
# Обновить только конкретный пакет
sudo dnf upgrade postgresql-server
# Безопасные обновления (только security fixes)
sudo dnf upgrade --security
В dnf нет разделения update и upgrade как в apt — обе команды эквивалентны и обновляют пакеты. Скачивание метаданных делается автоматически при любой операции (если кэш устарел) или явно через dnf makecache.
dnf history — главная фишка
Это убийственно полезная функция, которой в apt нет: история транзакций с возможностью отката.
# Список всех транзакций
dnf history
# ID | Command line | Date and time | Action(s) | Altered
# ---|-------------------------------|------------------|-----------|--------
# 42| install postgresql | 2026-05-12 14:23 | Install | 24
# 41| upgrade | 2026-05-10 09:15 | Upgrade | 156
# Подробно про транзакцию
dnf history info 42
# Откатить транзакцию
sudo dnf history undo 42
# Удалит всё, что было установлено в транзакции 42
# Повторить транзакцию
sudo dnf history redo 42
Сценарий: вы обновили десяток пакетов, что-то сломалось. На Ubuntu нет встроенного отката (приходится вручную ставить старые версии). На RHEL/Fedora — dnf history undo <ID> и всё назад. Это сильно меняет психологию: можно смелее экспериментировать.
dnf group — установка групп пакетов
# Список доступных групп
dnf group list
# Что входит в группу
dnf group info "Development Tools"
# Установить группу целиком
sudo dnf group install "Development Tools"
# Это поставит gcc, make, autoconf, etc.
# Группа для GNOME desktop
sudo dnf group install "GNOME Desktop Environment"
«Development Tools» — самая частая группа: gcc, make, automake, glibc-devel, openssl-devel — всё что нужно для компиляции C-программ. На Ubuntu аналог — пакет build-essential.
Репозитории — /etc/yum.repos.d/
# Список настроенных репов
ls /etc/yum.repos.d/
# Список репов с статусом enabled/disabled
dnf repolist
# Все, включая disabled
dnf repolist --all
Файл репозитория — .repo:
[postgresql]
name=PostgreSQL repository
baseurl=https://download.postgresql.org/pub/repos/yum/17/redhat/rhel-9-x86_64
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/PGDG-RPM-GPG-KEY-RHEL
# Включить/отключить репозиторий
sudo dnf config-manager --set-enabled postgresql
sudo dnf config-manager --set-disabled postgresql
# Установить только из конкретного репо
sudo dnf install --enablerepo=postgresql postgresql-17
rpm — низкоуровневые операции
# Все установленные пакеты
rpm -qa
# Конкретный пакет — установлен ли
rpm -q postgresql-server
# Файлы пакета
rpm -ql postgresql-server
# Какой пакет владеет файлом
rpm -qf /usr/bin/psql
# postgresql-17.0-1.x86_64
# Установить .rpm файл напрямую
sudo rpm -i package.rpm
# Удалить
sudo rpm -e postgresql-server
# Информация о .rpm файле (не установленном)
rpm -qip downloaded.rpm
rpm -qf — обратный поиск, аналог dpkg -S в Debian.
EPEL — must-have репозиторий
RHEL по дефолту имеет ограниченный набор пакетов (только то, что Red Hat поддерживает). Для нормальной работы DE нужно подключить EPEL — Extra Packages for Enterprise Linux:
# RHEL 9 / Rocky / Alma
sudo dnf install -y epel-release
sudo dnf upgrade
# Теперь доступны такие пакеты как htop, ripgrep, fd-find, jq, ncdu
sudo dnf install -y htop ripgrep fd-find jq
EPEL — community-maintained, поддерживается Fedora Project. Это де-факто стандарт для RHEL-серверов.
DE-сценарии в RHEL-мире
1. Amazon Linux 2/3 (EC2)
# Amazon Linux 3 — derivative RHEL 9
# По умолчанию доступен dnf
# Установка PostgreSQL клиента
sudo dnf install -y postgresql
# AWS CLI обычно предустановлен, но если нет
sudo dnf install -y awscli2
# Базовые DE-тулзы (EPEL подключён по умолчанию на AL2023)
sudo dnf install -y htop tmux jq ripgrep
2. Cloudera CDP / Hadoop на RHEL
# Cloudera поставляет собственные репы через .repo файл
sudo curl -o /etc/yum.repos.d/cloudera-manager.repo \
https://archive.cloudera.com/cdp7/7.1.9/redhat9/yum/cloudera-manager.repo
sudo dnf install -y cloudera-manager-server cloudera-manager-agent
# Дальше — настройка через Cloudera Manager UI
3. Lockdown версии (production)
# В RHEL для блокировки версий — versionlock plugin
sudo dnf install -y python3-dnf-plugin-versionlock
# Заморозить версию
sudo dnf versionlock postgresql-17
# Список заморожённых
sudo dnf versionlock list
# Разморозить
sudo dnf versionlock delete postgresql-17
Сравнительная шпаргалка apt vs dnf
Шпаргалка для переключения между Debian и RHEL мирами
Попробуй сам (если есть RHEL-машина)
Если у вас Ubuntu — попробуйте через Docker:
Запуск разных дистрибутивов через Docker# Запустить Rocky Linux в Docker
docker run -it --rm rockylinux:9 bash
# Внутри контейнера
dnf --version
dnf repolist
dnf search ripgrep # не найдёт без EPEL
dnf install -y epel-release
dnf search ripgrep # теперь найдёт
dnf install -y htop ripgrep
htop # F10 выход
exit
Или попробовать Fedora — там EPEL не нужен, всё включено по умолчанию:
docker run -it --rm fedora:40 bash
# Внутри
dnf install -y htop tmux jq
htop
exit
Cross-link: предыдущий урок 01 — apt. Следующий урок 03 — Homebrew на macOS. Модуль 14 — systemd одинаковый на RHEL и Ubuntu, потому что обе используют systemd.