Понимание управления пакетами в Linux: APT vs. YUM vs. DNF
Практическое сравнение APT, YUM и DNF для установки, обновления, удаления и устранения неполадок с пакетами Linux.
Понимание управления пакетами в Linux: APT vs. YUM vs. DNF
Если вы переходите между Ubuntu, Debian, Fedora, Rocky Linux, AlmaLinux или RHEL, управление пакетами — одно из первых мест, где мышечная память дает сбой. Задача везде одна и та же: установить программное обеспечение, применить обновления безопасности, удалить то, что больше не нужно, и поддерживать согласованность зависимостей. Команды и расположение файлов различаются настолько, что копирование неверного руководства может потратить время или повредить хост.
APT, YUM и DNF — это не конкурирующие инструменты, которые обычно выбирают на одной машине. Они принадлежат к разным семействам дистрибутивов. APT — это обычный высокоуровневый инструмент в системах на основе Debian. YUM долгое время был высокоуровневым инструментом в старых системах на основе Red Hat. DNF — это современная замена в текущих Fedora, RHEL 8 и новее, CentOS Stream, Rocky Linux и AlmaLinux.
Что такое менеджер пакетов?
По своей сути менеджер пакетов — это набор программных инструментов, которые автоматизируют процесс установки, обновления, настройки и удаления программных пакетов из операционной системы. Вместо компиляции программного обеспечения из исходного кода или ручного управления зависимостями менеджер пакетов взаимодействует с репозиториями программного обеспечения для получения предварительно скомпилированных двоичных файлов и автоматической обработки всех необходимых предварительных условий.
Ключевые функции менеджера пакетов включают:
- Разрешение зависимостей: Автоматически определяет и устанавливает все необходимые библиотеки и другие программные пакеты, необходимые для работы конкретного приложения.
- Репозитории программного обеспечения: Управляет подключениями к удаленным серверам (репозиториям), где хранятся пакеты, обеспечивая доступ к широкому спектру программного обеспечения.
- Обновления системы: Облегчает обновление отдельных пакетов или всей операционной системы, обеспечивая применение исправлений безопасности и новых функций.
- Целостность пакетов: Проверяет подлинность и целостность пакетов с помощью цифровых подписей для предотвращения несанкционированного доступа.
- Чистое удаление: Гарантирует, что при удалении программного обеспечения все связанные с ним файлы и зависимости будут удалены чисто, избегая засорения системы.
Дистрибутивы Linux обычно используют один из двух основных форматов пакетов: .deb для систем на основе Debian и .rpm для систем на основе Red Hat. APT управляет пакетами .deb, а YUM и DNF управляют пакетами .rpm.
APT (Advanced Package Tool)
APT — это утилита командной строки для управления пакетами .deb, в основном используемая в Debian и его производных, таких как Ubuntu, Linux Mint, Pop!_OS и многих других. Он известен своим надежным разрешением зависимостей и обширной экосистемой программного обеспечения.
Основные концепции
dpkg: В то время какaptявляется высокоуровневым инструментом,dpkg— это лежащий в основе низкоуровневый инструмент, который фактически устанавливает, удаляет и управляет отдельными пакетами.deb. APT действует как интерфейс кdpkg, обрабатывая репозитории и зависимости.sources.list: Файл/etc/apt/sources.list(и файлы в/etc/apt/sources.list.d/) определяет расположение репозиториев программного обеспечения, которые APT использует для поиска пакетов. Это могут быть официальные репозитории, сторонние PPA (Personal Package Archives) или локальные источники.- Структура пакета: Пакеты распространяются в виде файлов
.deb, которые по сути являются архивами, содержащими скомпилированное программное обеспечение, файлы конфигурации и метаданные.
Распространенные команды APT
Исторически apt-get был основной командой, но команда apt (представленная около Debian 8 / Ubuntu 16.04) предлагает более удобный интерфейс, объединяя наиболее распространенные функции apt-get и apt-cache.
| Задача | Команда apt |
Описание |
|---|---|---|
| Обновить списки пакетов | sudo apt update |
Обновляет список доступных пакетов и их версий из репозиториев. |
| Обновить установленные пакеты | sudo apt upgrade |
Обновляет все установленные пакеты до их новейших версий. Не удаляет пакеты. |
| Полное обновление системы | sudo apt full-upgrade |
Обновляет все установленные пакеты, удаляя старые, если это необходимо для разрешения зависимостей. |
| Установить пакет | sudo apt install <имя_пакета> |
Устанавливает указанный пакет и его зависимости. |
| Удалить пакет | sudo apt remove <имя_пакета> |
Удаляет пакет, но сохраняет его файлы конфигурации. |
| Очистить пакет | sudo apt purge <имя_пакета> |
Удаляет пакет и его файлы конфигурации. |
| Поиск пакета | apt search <ключевое_слово> |
Ищет пакеты, соответствующие ключевому слову. |
| Показать детали пакета | apt show <имя_пакета> |
Отображает подробную информацию о пакете. |
| Очистить старые пакеты | sudo apt autoremove |
Удаляет автоматически установленные пакеты зависимостей, которые больше не нужны. |
Примеры
# Обновить списки пакетов
sudo apt update
# Установить веб-сервер 'nginx'
sudo apt install nginx
# Обновить все установленные пакеты
sudo apt upgrade
# Удалить 'nginx' и его файлы конфигурации
sudo apt purge nginx
Преимущества APT
- Надежная обработка зависимостей: APT хорошо объясняет, что он планирует установить, обновить, оставить или удалить перед изменением системы.
- Большая экосистема репозиториев: Репозитории Debian и Ubuntu охватывают широкий спектр серверного и настольного программного обеспечения.
- Предсказуемое поведение сервера: Стабильные выпуски Debian и Ubuntu LTS обычно отдают предпочтение проверенным версиям пакетов, а не новейшим выпускам вышестоящих разработчиков.
Недостатки APT
- Новые версии программного обеспечения: Иногда пакеты в официальных репозиториях могут быть не самыми последними версиями из-за ориентации на стабильность и тщательное тестирование.
YUM (Yellowdog Updater, Modified)
YUM был основным менеджером пакетов для Red Hat Enterprise Linux (RHEL) и его производных, таких как CentOS, Fedora (до недавнего времени) и Scientific Linux. Он работает с пакетами .rpm (Red Hat Package Manager).
Основные концепции
rpm: Аналогичноdpkg,rpm— это низкоуровневый инструмент управления пакетами для файлов.rpm. YUM действует как высокоуровневый интерфейс.- Файлы
.repo: Конфигурации репозиториев обычно определяются в файлах.repo, расположенных в/etc/yum.repos.d/. Эти файлы указывают базовый URL, ключи GPG и другие метаданные для каждого репозитория. - Структура пакета: Программное обеспечение распространяется в виде файлов
.rpm, содержащих двоичные файлы, библиотеки и метаданные.
Распространенные команды YUM
| Задача | Команда yum |
Описание |
|---|---|---|
| Проверить наличие обновлений | sudo yum check-update |
Проверяет наличие доступных обновлений без их установки. |
| Обновить все пакеты | sudo yum update |
Обновляет все установленные пакеты. |
| Установить пакет | sudo yum install <имя_пакета> |
Устанавливает указанный пакет и его зависимости. |
| Удалить пакет | sudo yum remove <имя_пакета> |
Удаляет пакет. |
| Поиск пакета | yum search <ключевое_слово> |
Ищет пакеты, соответствующие ключевому слову. |
| Показать детали пакета | yum info <имя_пакета> |
Отображает подробную информацию о пакете. |
| Очистить кэшированные файлы | sudo yum clean all |
Очищает кэшированные метаданные репозитория и пакеты. |
Примеры
# Проверить наличие доступных обновлений
sudo yum check-update
# Установить веб-сервер 'httpd' (Apache)
sudo yum install httpd
# Обновить все установленные пакеты
sudo yum update
# Удалить 'httpd'
sudo yum remove httpd
Преимущества YUM
- Зрелое корпоративное поведение: YUM все еще распространен в старых системах RHEL и CentOS, поэтому вы увидите его в устаревших руководствах.
- История транзакций:
yum historyможет показать предыдущие установки, обновления и удаления. В некоторых случаях вы можете отменить или откатить транзакцию, но вы должны тщательно это тестировать, потому что файлы конфигурации, состояние служб и внешние данные не восстанавливаются магическим образом.
Недостатки YUM
- Производительность: Иногда может быть медленнее по сравнению с современными менеджерами пакетов, такими как DNF, особенно с большими репозиториями или сложными деревьями зависимостей.
- Заменяется: В более новых системах на основе RHEL (RHEL 8+) DNF заменил YUM в качестве менеджера пакетов по умолчанию, хотя
yumчасто все еще работает как псевдоним дляdnf.
DNF (Dandified YUM)
DNF — это менеджер пакетов следующего поколения для дистрибутивов на основе Red Hat, являющийся преемником YUM. Он используется по умолчанию в Fedora (начиная с версии 18), RHEL 8+, CentOS Stream, AlmaLinux и Rocky Linux. DNF устраняет многие недостатки YUM, предлагая улучшенную производительность и разрешение зависимостей.
Основные концепции
libsolv: DNF используетlibsolvдля разрешения зависимостей, что является высоко оптимизированным и обеспечивает значительно лучшую производительность, чем старый решатель YUM.- Модульность: Ключевая функция в RHEL 8+ и Fedora, модульность позволяет одновременно использовать разные версии или потоки программного пакета (например, Python 3.6 vs. Python 3.8), и пользователи могут выбирать, какой из них установить.
- Совместимость: DNF поддерживает интерфейс командной строки, который в значительной степени совместим с YUM, что облегчает переход для пользователей.
Распространенные команды DNF
Многие команды DNF идентичны или очень похожи на команды YUM.
| Задача | Команда dnf |
Описание |
|---|---|---|
| Проверить наличие обновлений | sudo dnf check-update |
Проверяет наличие доступных обновлений без их установки. |
| Обновить все пакеты | sudo dnf update |
Обновляет все установленные пакеты. |
| Установить пакет | sudo dnf install <имя_пакета> |
Устанавливает указанный пакет и его зависимости. |
| Удалить пакет | sudo dnf remove <имя_пакета> |
Удаляет пакет. |
| Поиск пакета | dnf search <ключевое_слово> |
Ищет пакеты, соответствующие ключевому слову. |
| Показать детали пакета | dnf info <имя_пакета> |
Отображает подробную информацию о пакете. |
| Очистить кэшированные файлы | sudo dnf clean all |
Очищает кэшированные метаданные репозитория и пакеты. |
| Список доступных модулей | dnf module list |
Перечисляет доступные потоки программных модулей. |
| Включить модуль | sudo dnf module enable <модуль> |
Включает определенный поток модуля. |
Примеры
# Проверить наличие доступных обновлений
sudo dnf check-update
# Установить базу данных 'mariadb-server'
sudo dnf install mariadb-server
# Обновить все установленные пакеты
sudo dnf update
# Список доступных потоков модулей Node.js
dnf module list nodejs
# Включить поток модуля Node.js 16 (если доступно)
sudo dnf module enable nodejs:16
# Удалить 'mariadb-server'
sudo dnf remove mariadb-server
Преимущества DNF
- Улучшенное разрешение зависимостей: DNF использует
libsolv, который обычно обрабатывает сложные варианты зависимостей быстрее и понятнее, чем старое поведение YUM. - Более чистый вывод и API: DNF легче использовать в скриптах, чем старый YUM, во многих административных рабочих процессах.
- Модульность: Обеспечивает гибкость для установки разных версий программного обеспечения в одной системе.
- Современный дизайн: Создан с четким API для расширений и более чистым кодом.
Недостатки DNF
- Новая технология: Хотя он стабилен, некоторые функции, особенно связанные с модульностью, могут потребовать немного более крутой кривой обучения для новых пользователей.
Ключевые различия и варианты использования
Фундаментальное различие между APT и YUM/DNF заключается в семействе дистрибутивов, которое они обслуживают, и формате пакетов, с которыми они работают.
| Особенность | APT (Debian/Ubuntu) | YUM/DNF (RHEL/Fedora) |
|---|---|---|
| Формат пакета | .deb (Debian Package) |
.rpm (Red Hat Package) |
| Базовый инструмент | dpkg |
rpm |
| Файлы конфигурации | /etc/apt/sources.list |
/etc/yum.repos.d/*.repo |
| Основные дистрибутивы | Debian, Ubuntu, Mint, Pop!_OS | RHEL, Fedora, CentOS, AlmaLinux, Rocky Linux |
| Решатель зависимостей | Внутренний (надежный, хорошо протестированный) | YUM: Внутренний (медленнее); DNF: libsolv (быстрее, современный) |
| Эволюция | apt-get -> apt |
yum -> dnf |
| Модульность | Не встроена напрямую (PPA для гибкости) | DNF предлагает потоки module для нескольких версий |
- APT идеально подходит для пользователей и администраторов, которые ценят непоколебимую стабильность, обширную поддержку сообщества и огромный репозиторий программного обеспечения. Это выбор для систем на основе Debian, которые популярны как для серверов, так и для настольных компьютеров.
- YUM хорошо служил своей цели в корпоративных средах в течение многих лет, обеспечивая стабильный и проверенный метод управления программным обеспечением. Хотя он все еще присутствует как псевдоним, его прямое использование постепенно прекращается.
- DNF — это современный стандарт для систем на основе Red Hat. Это выбор для тех, кто использует современные RHEL, Fedora или их производные, предлагая производительность, расширенное разрешение зависимостей и такие функции, как модульность, что делает его отличным для сред разработки и производства, требующих определенных версий программного обеспечения.
Лучшие практики управления пакетами
Независимо от того, какой менеджер пакетов вы используете, соблюдение лучших практик обеспечивает здоровье и безопасность системы:
- Регулярные обновления: Периодически запускайте
sudo apt update && sudo apt upgradeилиsudo dnf update, чтобы применять исправления безопасности и исправления ошибок. - Понимайте перед установкой: Всегда проверяйте, что делает пакет и его репутацию, прежде чем устанавливать, особенно из сторонних репозиториев.
- Проверяйте источники репозиториев: Убедитесь, что любые добавленные репозитории заслуживают доверия, чтобы предотвратить установку вредоносного или нестабильного программного обеспечения.
- Очищайте: Используйте
sudo apt autoremoveилиsudo dnf autoremove, чтобы удалить осиротевшие зависимости и освободить дисковое пространство. - Просматривайте
apt showилиdnf info: Перед установкой используйте эти команды, чтобы получить подробную информацию о пакете, включая его зависимости и размер. - Резервируйте критические системы: Перед выполнением крупных обновлений (например,
apt full-upgradeили обновлений дистрибутива) убедитесь, что у вас есть резервная копия критических данных и конфигураций.
Устранение неполадок менеджера пакетов
Большинство сбоев менеджера пакетов не являются загадочными, если разделить их на три категории: метаданные репозитория, конфликты зависимостей и состояние локальной базы данных пакетов.
Если APT говорит, что не может найти пакет, начните с sudo apt update. APT не запрашивает каждый удаленный репозиторий заново для каждой установки. Он использует локальные метаданные. Если пакет был недавно добавлен или если машина давно не обновляла свои списки, установка может завершиться ошибкой, даже если репозиторий правильный. Если apt update сам по себе завершается ошибкой, прочитайте строку репозитория в ошибке. Часто реальной проблемой является устаревший PPA, просроченный ключ подписи, сломанное зеркало или неподдерживаемое кодовое имя дистрибутива.
В системах DNF или YUM эквивалентным первым шагом обычно является:
sudo dnf makecache
sudo dnf repolist
В старых системах:
sudo yum makecache
sudo yum repolist
repolist полезен, потому что он подтверждает, включен ли репозиторий вообще. Пакет может быть доступен из EPEL, CodeReady Builder, PowerTools, CRB или репозитория поставщика, но не из базовых репозиториев ОС. В этом случае исправление заключается не в загрузке случайного RPM из Интернета. Более чистое исправление — включить правильный репозиторий и позволить менеджеру пакетов обрабатывать зависимости.
Конфликты зависимостей требуют большей осторожности. Если APT предлагает удалить большую часть системы, остановитесь и прочитайте транзакцию. То же самое относится к dnf remove. Удаление пакета может удалить службы, которые от него зависят. На серверах я люблю копировать предлагаемую транзакцию в заметки об инциденте перед ее принятием. Это дает вам запись того, что изменилось, если после этого сломается служба.
Для прерванных установок используйте встроенную команду восстановления, прежде чем пытаться выполнить ручную очистку:
# Debian/Ubuntu
sudo dpkg --configure -a
sudo apt -f install
# Fedora/RHEL-семейство
sudo dnf check
sudo dnf history
Ручное удаление в /var/lib/dpkg, /var/lib/rpm, /var/cache/apt или /var/cache/dnf должно быть крайней мерой. Эти каталоги являются состоянием менеджера пакетов, а не обычным мусором.
Практическая шпаргалка по переводу
Когда вы следуете документации, написанной для другого семейства Linux, переводите намерение, а не только команду.
| Задача | Debian/Ubuntu | Fedora/RHEL-семейство |
|---|---|---|
| Обновить метаданные репозитория | sudo apt update |
sudo dnf makecache |
| Обновить установленные пакеты | sudo apt upgrade |
sudo dnf upgrade или sudo dnf update |
| Установить пакет | sudo apt install nginx |
sudo dnf install nginx |
| Удалить пакет | sudo apt remove nginx |
sudo dnf remove nginx |
| Удалить пакет и конфигурацию | sudo apt purge nginx |
Нет точного эквивалента; скрипты пакета могут оставить конфигурацию/данные |
| Поиск пакетов | apt search nginx |
dnf search nginx |
| Показать информацию о пакете | apt show nginx |
dnf info nginx |
| Список установленных пакетов | apt list --installed |
dnf list installed |
| Просмотр файлов пакета | dpkg -L nginx |
rpm -ql nginx |
| Найти пакет, владеющий файлом | dpkg -S /путь/файл |
rpm -qf /путь/файл |
Последняя пара недооценена. Если вы найдете странный двоичный файл или файл конфигурации на хосте, dpkg -S или rpm -qf скажет вам, какой пакет им владеет. Если пакет не владеет им, файл мог быть создан приложением, скриптом развертывания, администратором или злоумышленником. Это само по себе ничего не доказывает, но дает вам лучший следующий вопрос.
Самый безопасный способ думать об управлении пакетами прост: оставайтесь в рамках инструмента, который ожидает ваш дистрибутив, читайте транзакции перед их принятием и относитесь к сторонним репозиториям как к производственным зависимостям. Как только вы узнаете, где живут файлы репозитория и как проверять принадлежность пакетов, APT, YUM и DNF перестанут казаться разными мирами.