Администрирование Linux-серверов

Пакеты Linux: DEB, RPM, APT, YUM и DNF

Как устроены пакеты и менеджеры пакетов в Debian/Ubuntu и RHEL-подобных Linux. Чем различаются DEB, RPM, APT, YUM и DNF и почему команды нельзя переносить между семействами ОС.

11 минут
абстрактная иллюстрация экосистем пакетов Linux
DEB-пакет и RPM-пакет — это форматы пакетов и связанные с ними экосистемы. В Debian и Ubuntu обычно используются DEB, dpkg и APT, а в RHEL-подобных системах — RPM, DNF и иногда YUM. Высокоуровневые менеджеры находят пакеты в репозиториях, рассчитывают зависимости и формируют транзакцию; поэтому пакеты, репозитории и команды одного семейства нельзя механически переносить в другое.

Пакет — не просто архив с программой

Пакет Linux содержит файлы программы, но этим его роль не ограничивается. В нём есть метаданные: имя, версия, целевая архитектура, описание, сведения о поставщике и правилах установки. Также пакет может объявлять зависимости пакета — другие компоненты и их допустимые версии, без которых программа не сможет быть установлена или работать корректно.

Метаданные могут описывать конфликты и замену пакетов, владение файлами, а также сценарии, выполняемые до или после установки, обновления и удаления. Благодаря этому система знает, какие файлы относятся к какому пакету, и может проверить, не пытается ли новая установка перезаписать файл другого компонента.

Сам пакетный файл обычно содержит только часть необходимого набора. Например, установка серверного приложения может потребовать библиотек, интерпретатора, службы и дополнительных модулей. Высокоуровневый менеджер пакетов сопоставляет требования пакета с доступными версиями и рассчитывает согласованный набор изменений — пакетную транзакцию.

Две пакетные экосистемы

Типичное устройство управления пакетами в распространённых дистрибутивах

СемействоФормат пакетаНизкоуровневый инструментВысокоуровневый менеджерТипичные дистрибутивы
Debian-подобноеDEB (.deb)dpkgAPT: apt, apt-getDebian, Ubuntu Server
RHEL-подобноеRPM (.rpm)rpmDNF, в отдельных релизах также yumRHEL, Rocky Linux, AlmaLinux, CentOS Stream

Это не симметричные названия одной и той же программы. DEB и RPM — форматы пакетов; dpkg и rpm — низкоуровневые средства учёта и обработки локальных пакетов; APT, DNF и YUM — менеджеры, которые работают с источниками пакетов и зависимостями.

DEB, dpkg и APT в Debian и Ubuntu

DEB-пакет обычно имеет расширение .deb. Низкоуровневый dpkg ведёт локальную базу установленных DEB-пакетов, устанавливает и удаляет локальные файлы пакетов, распаковывает их и запускает предусмотренные сценарии. Сам по себе dpkg не предназначен для поиска пакетов в сети и загрузки недостающих зависимостей из репозиториев.

APT — надстройка над этим уровнем. Она читает настройки репозиториев пакетов, получает и хранит локальные индексы пакетов, выбирает подходящие версии и рассчитывает зависимости. В DEB-репозиториях APT использует индексы доступных бинарных пакетов, обычно известные как Packages, и метаданные выпуска репозитория. После расчёта APT передаёт операции установки и настройки dpkg.

Поэтому установка локального .deb через dpkg и установка по имени пакета через APT решают разные задачи. В первом случае администратор отвечает за доступность зависимостей; во втором APT может найти их среди пакетов подключённых репозиториев. Это не отменяет необходимости проверить состав рассчитанной транзакции перед подтверждением.

APT: apt и apt-get

Команды apt и apt-get относятся к одному стеку APT и используют одну пакетную базу, источники и механизм разрешения зависимостей. В документации APT команда apt позиционируется прежде всего как удобный интерфейс для интерактивной работы администратора: она объединяет часто используемые возможности нескольких утилит APT и может менять формат вывода между версиями.

apt-get — более специализированный интерфейс APT, традиционно применяемый в скриптах и автоматизации. Это не означает, что apt-get универсально лучше для любого сценария: доступные параметры, поведение при запросах и требования к автоматизации нужно сверять с документацией целевого дистрибутива Linux и его релиза. Для ручной работы обычно выбирают apt; для существующих скриптов и воспроизводимых процедур часто используют apt-get, явно задавая нужные параметры.

Практические различия apt и apt-get, просмотр доступных версий, обновление индексов и пакетные операции разобраны в статье «APT в Ubuntu и Debian: установка, обновление, удаление и очистка пакетов».

RPM, rpm, DNF и YUM в RHEL-подобных системах

RPM — формат пакета, обычно с расширением .rpm. Утилита rpm работает с локальной базой RPM-пакетов: может устанавливать, запрашивать сведения, проверять и удалять пакеты. Она не является полноценным менеджером репозиториев: при установке отдельного локального RPM ей неоткуда автоматически подобрать и загрузить все недостающие зависимости.

DNF получает сведения из подключённых RPM-репозиториев, выбирает версии, разрешает зависимости и выполняет рассчитанную транзакцию через RPM-стек. RPM-репозитории публикуют метаданные в формате rpm-md: основной указатель обычно расположен в repodata/repomd.xml, а связанные метаданные содержат сведения о доступных пакетах, зависимостях и других свойствах. Это другой формат и структура, чем индексы APT для DEB-репозиториев.

YUM исторически был высокоуровневым менеджером RPM-пакетов. В современных поддерживаемых RHEL-подобных системах основным интерфейсом обычно выступает DNF. Поэтому краткий ответ на вопрос «dnf — что это?» такой: это менеджер пакетов RPM-семейства, который управляет репозиториями, зависимостями и транзакциями поверх RPM.

YUM vs DNF: почему ответ зависит от релиза

Нельзя одинаково описать yum во всех версиях RHEL, Rocky Linux, AlmaLinux и CentOS. Набор пакетов, реализация команды и поддерживаемый синтаксис зависят от конкретного дистрибутива и основного релиза. Например, документация Red Hat для RHEL 8 и RHEL 9 описывает yum как совместимый интерфейс, предоставляемый через DNF: вызов yum направляется на DNF. Это не делает классический YUM и DNF одной программой и не позволяет переносить такое утверждение на любой старый или будущий выпуск.

В RHEL-подобной системе нужно сначала определить фактический релиз и сверить документацию именно для него. Особенно это важно для старых систем, неподдерживаемых выпусков и автоматизации, где различие параметров или поведения может изменить результат. Статус CentOS и различия между его вариантами рассмотрены отдельно в статье «CentOS Stream и CentOS 7: статус поддержки, различия и выбор сценария».

Практические операции DNF и YUM, а также проверка рассчитанных изменений вынесены в материал «DNF и YUM: установка, обновление и удаление пакетов в RHEL-подобных Linux».

Чем DEB отличается от RPM

Оба формата решают общую задачу: поставляют файлы программы вместе с метаданными, сведениями о версии, архитектуре и, при необходимости, сценариями обслуживания. Главное практическое различие — не расширение файла, а пакетная экосистема вокруг него: формат метаданных, локальная база установленных пакетов, правила именования зависимостей, репозитории, механизмы разрешения версий и штатные инструменты управления.

DEB-пакет создаётся для Debian-совместимой экосистемы и обрабатывается dpkg/APT. RPM-пакет создаётся для RPM-экосистемы и обрабатывается rpm/DNF или YUM. Один и тот же продукт может выпускаться в обоих форматах, но это будут отдельные сборки, рассчитанные на разные библиотеки, зависимости, расположение файлов и правила целевой ОС.

Почему нельзя переносить пакеты, репозитории и команды

Не смешивайте пакетные семейства

Штатные APT-инструменты не устанавливают RPM как обычные пакеты Debian, а DNF/YUM не предназначены для установки DEB как RPM-пакетов. Сторонние способы конвертации форматов иногда существуют, но не делают пакет поддерживаемым для другой ОС и не гарантируют корректность зависимостей, сценариев установки или расположения файлов.

Инструкция для Ubuntu может предполагать имя DEB-пакета, APT-репозиторий, сервисный файл и версию библиотеки, которых нет в RHEL. Инструкция для RHEL, в свою очередь, может ссылаться на RPM-пакет, DNF-плагин или rpm-md-репозиторий, не имеющий аналога в Debian. Даже одинаковое имя приложения не гарантирует одинаковые имя пакета, версию, зависимости или параметры службы.

  • Не добавляйте репозиторий другого дистрибутива или другого основного релиза без явно заявленной совместимости поставщика.
  • Не заменяйте apt на dnf или yum простой подстановкой в команде: различаются имена пакетов, параметры и модель репозиториев.
  • Не устанавливайте локальный пакет, пока не подтверждены его архитектура, целевая ОС, релиз и источник.
  • Перед подтверждением транзакции читайте список устанавливаемых, обновляемых и удаляемых пакетов.

Смешивание чужих пакетов или источников может привести к неразрешимым зависимостям, конфликтам файлов, замене системных библиотек либо неподдерживаемой конфигурации. Если пакетная операция уже завершилась ошибкой, не следует удалять блокировки или принудительно менять базу пакетов без выяснения причины: для этого есть материал «Не устанавливаются пакеты в Linux: блокировки, зависимости и ошибки APT/DNF».

Как выбрать правильный инструмент

ЗадачаDebian и UbuntuRHEL-подобные системы
Узнать и применить пакеты из штатных репозиториевAPT: обычно apt для интерактивной работы или apt-get в подходящей автоматизацииDNF; доступность yum проверяют по релизу
Учесть или исследовать локальный пакетdpkg для .debrpm для .rpm
Работать с зависимостями и несколькими пакетамиAPT рассчитывает транзакцию и передаёт операции dpkgDNF/YUM рассчитывают транзакцию в RPM-экосистеме
Выбрать инструкциюТолько для Debian/Ubuntu и точного релизаТолько для RHEL-подобной ОС и точного релиза

Перед любой пакетной работой определите семейство и релиз установленной ОС, затем используйте её официальную документацию и репозитории. Если задача связана с обновлением сервера, ядра или возможной перезагрузкой, порядок подготовки и проверки описан отдельно в статье «Обновление Linux-сервера: пакеты, ядро, перезагрузка и откат».

Термины в статье

Дистрибутив Linux — готовая операционная система на базе ядра Linux, включающая набор программ, репозитории, пакетный менеджер и правила обновления и сопровождения.
Зависимость пакета — требование пакета к другому пакету или его версии, без выполнения которого установка, запуск либо корректное обновление ПО невозможны или ограничены.
Индекс пакетов — набор метаданных репозитория, содержащий сведения о версиях, зависимостях, архитектурах и расположении доступных пакетов.
Кэш пакетов — локально сохранённые менеджером пакетов архивы пакетов и, в зависимости от реализации, метаданные репозиториев для повторного использования.
Менеджер пакетов — средство установки, обновления, удаления и учёта программных пакетов; высокоуровневые менеджеры также работают с репозиториями и разрешают зависимости.
Пакетная транзакция — согласованный набор действий по установке, обновлению, удалению и настройке пакетов, формируемый менеджером пакетов в рамках одной команды или задания.
Репозиторий пакетов — структурированный источник пакетов и метаданных, из которого менеджер пакетов получает версии ПО, зависимости, обновления и информацию о подписях.
Системная служба — программный компонент, которым ОС управляет как логической единицей для фонового выполнения задач или предоставления функций программам и пользователям.
AlmaLinux — корпоративный дистрибутив Linux, поддерживаемый сообществом и AlmaLinux OS Foundation, ориентированный на совместимость с интерфейсами и экосистемой RHEL.
APT — система управления пакетами в Debian-подобных Linux, которая получает пакеты из репозиториев, разрешает зависимости и передаёт установку низкоуровневому менеджеру dpkg.
CentOS Linux — прекращённый свободно доступный дистрибутив Linux, создававшийся из исходных пакетов RHEL и ориентированный на бинарную совместимость с соответствующим выпуском RHEL.
CentOS Stream — дистрибутив Linux с непрерывной поставкой пакетов, формирующих следующую минорную версию Red Hat Enterprise Linux; он расположен между Fedora и RHEL.
DEB-пакет — архивный формат распространения ПО в Debian-совместимых Linux, содержащий файлы программы, метаданные и сведения о зависимостях.
Debian — универсальный дистрибутив Linux с пакетами DEB и системой APT, известный консервативной веткой Stable и разделением репозиториев по веткам разработки.
DNF — менеджер пакетов для RPM-дистрибутивов, разрешающий зависимости и выполняющий операции с репозиториями; в современных системах он заменил классический YUM.
dpkg — низкоуровневый менеджер пакетов Debian, устанавливающий пакеты из локальных .deb-файлов, удаляющий установленные пакеты и ведущий их базу без загрузки зависимостей из репозиториев.
RHEL — корпоративный дистрибутив Linux от Red Hat с фиксированными основными версиями, сертификационной экосистемой и моделью сопровождения, зависящей от подписки.
Rocky Linux — корпоративный дистрибутив Linux, создаваемый из исходных пакетов экосистемы RHEL и ориентированный на совместимость с RHEL без использования его товарных знаков.
RPM-пакет — файл формата RPM для распространения бинарного ПО или исходного кода. Он содержит метаданные и обычно полезную нагрузку; зависимости и сценарии необязательны.
Ubuntu Server — серверный вариант дистрибутива Ubuntu на базе Debian с APT и типовыми средствами автоматизации, доступный в виде установочных и готовых образов.
YUM — менеджер пакетов для RPM-дистрибутивов Linux, который устанавливает, обновляет и удаляет ПО, автоматически разрешая зависимости из репозиториев.

Вопросы по теме

Все вопросы и ответы

Можно ли считать установку пакета подтверждением работы приложения?

Нет. Успешная пакетная транзакция подтверждает изменение состава пакетов, но не работоспособность службы, конфигурации, сети или самого приложения. Эти проверки выполняют отдельно.

Можно ли заменить apt на yum или dnf в команде?

Нет, команды из инструкций для Debian/Ubuntu нельзя механически переносить в RHEL-подобную систему заменой apt на dnf или yum, и наоборот. Менеджеры работают в разных пакетных экосистемах: APT использует DEB-пакеты и индексы своих репозиториев, а DNF/YUM — RPM-пакеты и метаданные rpm-md.

Даже при одинаковом названии приложения пакет может называться иначе, иметь другую версию, набор зависимостей, расположение файлов или параметры службы. Инструкция для Ubuntu также может использовать APT-репозиторий, которого нет в RHEL, а инструкция для RHEL — DNF-плагин или RPM-репозиторий без аналога в Debian.

Перед выполнением команды определите семейство и точный основной релиз ОС. Используйте только репозитории, для которых поставщик явно заявил совместимость с этой ОС и её релизом. Перед подтверждением операции проверьте рассчитанный список устанавливаемых, обновляемых и удаляемых пакетов.

Чем YUM отличается от DNF?

YUM и DNF относятся к RPM-экосистеме и решают сходные задачи: работают с репозиториями, зависимостями и пакетными транзакциями. Однако это не означает, что они всегда являются одной программой или поддерживают одинаковое поведение.

YUM исторически был высокоуровневым менеджером RPM-пакетов. В современных поддерживаемых RHEL-подобных системах основным инструментом обычно выступает DNF. Например, для RHEL 8 и RHEL 9 документация Red Hat описывает yum как совместимый интерфейс, вызов которого направляется на DNF.

Перед использованием yum в инструкции или скрипте нужно определить точный дистрибутив и его основной релиз, а затем сверить документацию для этой версии. Это особенно важно для старых и неподдерживаемых систем: доступные параметры, реализация команды и результат выполнения могут отличаться.

Что выбрать для скрипта: apt или apt-get?

Обычно для ручной работы выбирают apt, а для существующих скриптов и воспроизводимых процедур часто используют apt-get с явно заданными параметрами. Обе команды относятся к APT, используют одни источники, пакетную базу и механизм зависимостей. Перед автоматизацией нужно сверить параметры и поведение с документацией конкретного дистрибутива и релиза.

Можно ли установить RPM в Ubuntu или DEB в RHEL?

Нет, штатные средства пакетного управления не предназначены для установки пакетов другого семейства. В Debian и Ubuntu используются DEB, dpkg и APT; в RHEL-подобных системах — RPM, rpm, DNF и иногда YUM. Это различающиеся экосистемы с собственными форматами метаданных, правилами зависимостей, репозиториями и локальными базами пакетов.

Сторонние способы преобразования пакета из одного формата в другой иногда существуют, но преобразование расширения или контейнера не делает программу поддерживаемой для целевой ОС. У пакета могут не совпасть требуемые библиотеки, имена зависимостей, сценарии установки, пути размещения файлов и правила работы службы.

Для установки выбирайте сборку, выпущенную поставщиком именно для вашего семейства ОС, архитектуры и основного релиза. Не добавляйте репозитории другого дистрибутива или релиза без явно заявленной поставщиком совместимости.

Почему dpkg или rpm не подтягивает зависимости локального пакета?

Потому что dpkg и rpm работают прежде всего с локальными пакетами и их базой учёта. Они могут установить или обработать файл .deb либо .rpm, но сами по себе не предназначены для поиска и загрузки недостающих зависимостей из репозиториев. Для расчёта зависимостей используют APT в Debian/Ubuntu и DNF/YUM в RHEL-подобных системах.

Можно ли удалять блокировки или менять базу пакетов после ошибки?

Нет, не до выяснения причины ошибки. Принудительное удаление блокировок или изменение базы пакетов может усугубить проблему и привести к несогласованному состоянию системы. Сначала нужно определить причину сбоя пакетной операции, проверить зависимости и рассчитанные изменения, а затем выбирать безопасный способ восстановления.