Управление пакетами RPM, DNF и Zypper [102.5]

Рейтинг: 68.5% · 14 голосов
Полный курс LPIC-1 (экзамены 101-500 и 102-500): архитектура, загрузка, пакеты, команды и текст, ФС и права, шелл-скрипты, пользователи, сервисы, сеть, безопасность. Debian и RHEL.
Ответить
Аватара пользователя
Sergey_Sysadmin
Сообщения: 134
Зарегистрирован: 11 май 2026, 05:31

Управление пакетами RPM, DNF и Zypper [102.5]

Сообщение Sergey_Sysadmin »

Оглавление курса (41)
  1. Введение в LPIC-1 и как устроен путь администратора
  2. Железо, устройства и модули ядра [101.1]
  3. Загрузка системы: от BIOS до systemd [101.2]
  4. systemd, цели и уровни выполнения [101.3]
  5. План разметки диска и swap [102.1]
  6. Загрузчик GRUB 2 [102.2]
  7. Разделяемые библиотеки [102.3]
  8. Управление пакетами в Debian: dpkg и apt [102.4]
  9. Управление пакетами RPM, DNF и Zypper [102.5] (вы здесь)
  10. Linux как гость виртуализации [102.6]
  11. Командная строка Bash [103.1]
  12. Обработка текста фильтрами [103.2]
  13. Базовое управление файлами [103.3]
  14. Потоки, конвейеры и перенаправление [103.4]
  15. Процессы: создание, мониторинг, сигналы [103.5]
  16. Приоритеты выполнения процессов [103.6]
  17. Регулярные выражения [103.7]
  18. Редактор vi и vim [103.8]
  19. Разделы и создание файловых систем [104.1]
  20. Целостность и обслуживание ФС [104.2]
  21. Монтирование файловых систем [104.3]
  22. Урок 21. Права доступа и владение: rwx, chmod, umask и специальные биты
  23. Жёсткие и символические ссылки
  24. FHS и поиск файлов в системе [104.7]
  25. Окружение и кастомизация оболочки [105.1]
  26. Урок 25. Написание простых bash-скриптов [105.2]
  27. Графика, рабочие столы и доступность
  28. Учётные записи пользователей и групп
  29. Автоматизация задач: cron, at, таймеры [107.2]
  30. Локализация и интернационализация [107.3]
  31. Системное время и синхронизация [108.1]
  32. Системное логирование [108.2]
  33. Основы почтового агента (MTA) [108.3]
  34. Печать и CUPS [108.4]
  35. Основы интернет-протоколов [109.1]
  36. Постоянная конфигурация сети [109.2]
  37. Диагностика сети [109.3]
  38. DNS на стороне клиента [109.4]
  39. Задачи администрирования безопасности [110.1]
  40. Настройка безопасности хоста [110.2]
  41. Шифрование данных: SSH и GnuPG [110.3]
Урок 8. Управление пакетами RPM, DNF и Zypper [102.5]

В мире Red Hat, Fedora и SUSE пакеты упакованы в формат RPM, а ставятся и обновляются через менеджеры более высокого уровня. Задача администратора - не просто поставить программу, а понимать, какой инструмент за что отвечает: rpm работает с одним файлом и локальной базой, dnf и zypper тянут зависимости из репозиториев и проверяют подписи. В этом уроке разберём оба уровня, увидим, чем dnf5 в Fedora 41+ отличается от dnf4 в RHEL 10, и как zypper делает то же самое на стороне SUSE.

Изображение

Как это работает

RPM - это и формат файла (имя_версия_релиз_архитектура.rpm), и низкоуровневая утилита, и локальная база установленных пакетов. База в современных системах лежит в /var/lib/rpm и с RHEL 9 хранится в формате sqlite, а не в старых berkeley db файлах. Команда rpm работает только с тем, что вы ей подсунули: дали один .rpm - поставит ровно его, а если ему не хватает зависимостей, просто откажется с ошибкой. Сам он по сети ничего не ищет.

Поверх rpm стоит менеджер уровня репозиториев. Он читает метаданные из настроенных репозиториев, строит граф зависимостей через решатель (в dnf это libdnf и libsolv, в zypper - libzypp с тем же libsolv), скачивает нужные пакеты и вызывает rpm транзакцией. Именно поэтому вы говорите dnf install nginx, а не ищете руками десяток зависимых rpm.

Репозиторий - это каталог с пакетами плюс сжатые метаданные (repodata), описывающие, что в нём лежит и что от чего зависит. Доверие к репозиторию строится на GPG-подписи: метаданные и сами пакеты подписаны ключом, а открытый ключ вы импортируете заранее. Без совпадения подписи менеджер откажется ставить пакет - это защита от подмены.

Важный сдвиг 2026 года: в Fedora 41 и новее по умолчанию стоит dnf5 - переписанный на C++ менеджер, который заодно заменил собой microdnf, так что отдельного minimal-варианта в контейнерах больше не нужно. А вот RHEL 10, Rocky и Alma 10 пока остаются на dnf4 (ветка из Fedora 40). Команда yum во всех них - просто символическая ссылка на dnf, живущая для совместимости.

Команды и примеры

Низкоуровневый rpm. Запросы (-q) читают локальную базу, установка (-i) и удаление (-e) меняют систему.

Код: Выделить всё

rpm -qa                  # все установленные пакеты
rpm -q bash              # версия конкретного пакета
rpm -qi bash             # подробная инфо: лицензия, сборщик, дата
rpm -ql bash             # список файлов пакета
rpm -qf /bin/ls          # какому пакету принадлежит файл
rpm -qc httpd            # только конфиги пакета
rpm -V bash              # верификация: что изменилось с момента установки
rpm -ihv ./pkg.rpm       # установить локальный файл (h - прогресс, v - подробно)
rpm -e bash              # удалить (откажется, если есть зависящие)
rpm --import KEY.gpg     # импортировать GPG-ключ в базу rpm
Вывод rpm -V показывает по букве на каждое отличие: 5 - не совпала контрольная сумма, S - размер, T - время, M - права. Строка с буквой c означает, что это конфиг (его правка - норма).

DNF на RHEL/Fedora. Имена подкоманд одинаковы для dnf4 и dnf5.

Код: Выделить всё

dnf search nginx              # поиск по имени и описанию
dnf info nginx                # сведения о пакете из репозитория
dnf provides /usr/sbin/nginx  # какой пакет даёт этот файл/возможность
dnf install nginx             # установка с зависимостями
dnf remove nginx              # удаление
dnf upgrade                   # обновить всё (update - синоним)
dnf list installed            # установленные пакеты
dnf list --available          # доступные в репозиториях
dnf history                   # журнал транзакций
dnf history undo 42           # откатить транзакцию номер 42
dnf group list                # группы пакетов
dnf group install "Development Tools"
dnf repolist                  # список подключённых репозиториев
В dnf5 синтаксис тот же, но появилась группировка вроде dnf repo list и dnf advisory; команда yum указывает на dnf. Файлы репозиториев лежат в /etc/yum.repos.d/ (имя историческое, dnf тоже его читает). Минимальный файл:

Код: Выделить всё

[myrepo]
name=My Local Repo
baseurl=https://repo.example.com/el10/
enabled=1
gpgcheck=1
gpgkey=https://repo.example.com/RPM-GPG-KEY-example
Zypper на SUSE (openSUSE Leap 16, SLES 16). Тот же RPM, другой фронтенд; в Leap 16 zypper умеет параллельную загрузку.

Код: Выделить всё

zypper search nginx           # поиск (se)
zypper info nginx             # сведения
zypper install nginx          # установка (in)
zypper remove nginx           # удаление (rm)
zypper refresh                # обновить метаданные репозиториев (ref)
zypper update                 # обновить пакеты (up)
zypper dup                    # distribution upgrade - для rolling и смены версии
zypper repos                  # список репозиториев (lr)
zypper addrepo URL alias      # добавить репозиторий (ar)
zypper what-provides /bin/ls  # аналог dnf provides (wp)
Ключевое отличие zypper: команда dup (dist-upgrade) для openSUSE Tumbleweed и смены релиза, тогда как простое up держит вас в рамках текущей версии.

Частые грабли
  • rpm -i не подтянет зависимости и просто упадёт с failed dependencies - для всего, что сложнее одного автономного пакета, берите dnf или zypper.
  • Отключать gpgcheck ради удобства - прямой путь к установке подменённого пакета. Лучше импортировать ключ через rpm --import.
  • После добавления репозитория метаданные могут быть кэшированы. В zypper нужен refresh, в dnf обычно срабатывает автоматически, но dnf clean all спасает при странном поведении.
  • Путать update и upgrade в dnf не страшно (синонимы), а вот в zypper up и dup - совсем разные вещи: dup может удалить пакеты при смене дистрибутива.
  • Ждать microdnf на Fedora 41+ бессмысленно - его больше нет, dnf5 сам по себе компактный. На RHEL 10 microdnf ещё встречается в минимальных образах.
  • rpm -e по имени без версии при двух установленных версиях выдаст ошибку multiple packages - указывайте полное имя-версию.
Мини-лаба
  • На стенде с Fedora/RHEL или openSUSE определите версию менеджера: dnf --version (увидите 5.x на Fedora 41+) или zypper --version.
  • Узнайте, какому пакету принадлежит /usr/bin/ssh, через rpm -qf, затем посмотрите все его файлы через rpm -ql.
  • Найдите пакет, предоставляющий бинарник, командой dnf provides */netstat (или zypper wp), и поставьте его.
  • Запустите rpm -V на любом пакете, отредактируйте его конфиг и снова выполните rpm -V - найдите строку с пометкой c.
  • Создайте файл репозитория в /etc/yum.repos.d/ или добавьте репозиторий через zypper ar, проверьте через dnf repolist / zypper lr.
  • Посмотрите журнал dnf history (или zypper история через /var/log/zypp/history) и найдите свою последнюю установку.
Контрольные вопросы
  • Чем принципиально отличается rpm -i от dnf install при установке пакета с зависимостями?
  • Какой ключ rpm покажет, какому пакету принадлежит конкретный файл, и какой - список всех файлов пакета?
  • Что произойдёт при установке, если gpgcheck=1, но соответствующий GPG-ключ не импортирован?
  • В чём разница между zypper update и zypper dup, и когда применять второе?
  • Что изменилось в Fedora 41+ относительно dnf и microdnf, и какой менеджер по умолчанию в RHEL 10?
  • Как откатить последнюю транзакцию dnf и где dnf хранит её журнал?
👍5 ❤️1 🔥1 😄 🤔
Аватара пользователя
elastic_smith
Сообщения: 1
Зарегистрирован: 16 май 2026, 16:46

Re: Управление пакетами RPM, DNF и Zypper [102.5]

Сообщение elastic_smith »

Поставил Fedora 42, привычно набрал microdnf в контейнере - а его нет. Теперь понятно почему, спасибо что предупредили.
👍 ❤️1 🔥1 😄 🤔2
Аватара пользователя
wireguard13
Сообщения: 1
Зарегистрирован: 18 май 2026, 13:04

Re: Управление пакетами RPM, DNF и Zypper [102.5]

Сообщение wireguard13 »

А zypper dup реально может пакеты посносить? У меня на Tumbleweed после dup пара программ пропала, думал баг.
👍2 ❤️1 🔥 😄 🤔
Ответить
← Предыдущая глава
Управление пакетами в Debian: dpkg и apt [102.4]
Следующая глава →
Linux как гость виртуализации [102.6]

Все главы курса «LPIC-1: администратор Linux (101 + 102)»

Поделиться темой: ✈ Telegram VK
  • Похожие темы

Вернуться в «LPIC-1: администратор Linux»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость