Learning Platform
Глоссарий Troubleshooting
Урок 12.02 · 18 мин
Начальный
dnfyumrpmRHELFedoraCentOSRockyAlma

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

Уровни инструментов в RHEL-мире

Параллель с apt/dpkg в Debian

dnfDandified YUM — современный преемник yum. С 2015 (Fedora 22), 2019 (RHEL 8). Заменяет yum полностью
был
yumYellowdog Updater Modified — старый frontend. Доступен как alias на dnf, но deprecated. Старые туториалы могут показывать yum
rpmRPM Package Manager — low-level. Работа с .rpm файлами напрямую, база установленных пакетов в /var/lib/rpm/. Аналог 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
TIP

Сценарий: вы обновили десяток пакетов, что-то сломалось. На 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

apt vs dnf — equivalent команды

Шпаргалка для переключения между Debian и RHEL мирами

apt install pkgУстановка пакета
=
dnf install pkgАналог
apt remove pkgУдалить
=
dnf remove pkgАналог
apt update + upgradeОбновить
=
dnf upgradeМетаданные обновляются автоматически
apt search keywordПоиск
=
dnf search keywordАналог
apt show pkgДетально
=
dnf info pkgАналог
dpkg -L pkgФайлы пакета
=
rpm -ql pkgАналог
dpkg -S /pathКто владеет файлом
=
rpm -qf /pathАналог

Попробуй сам (если есть 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.


Проверка знанийKnowledge check
Объясни, что делает `dnf history undo 42` и почему этой команде нет прямого аналога в apt/Debian.
ОтветAnswer
dnf history хранит транзакции — каждое действие (install/upgrade/remove) записывается с уникальным ID и списком затронутых пакетов. dnf history undo 42 откатывает транзакцию #42: если в ней были установлены пакеты — они удалятся; если обновлены — вернутся к предыдущим версиям; если удалены — переустановятся. Это очень удобно когда обновление сломало production: одна команда возвращает всё к состоянию до. В apt такого встроенного механизма нет. /var/log/apt/history.log содержит список действий, но нет команды «откатить транзакцию X». Откат на Ubuntu делают вручную: смотрят в history.log, какие пакеты обновились, и устанавливают конкретные старые версии через apt install pkg=version. Поэтому psychology: на RHEL-серверах можно смелее обновлять (всегда есть undo), на Debian/Ubuntu — нужно осторожнее, либо использовать snapshot файловой системы (LVM, ZFS, BTRFS).

Проверьте понимание

Результат: 0 из 0
Концептуальный
Вопрос 1 из 5. Что такое dnf и в чём его отличие от yum?

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс

Войдите чтобы оценить урок

Прогресс модуля
0 из 4