Доступен пакетный менеджер DNF 2.0, пришедший на смену Yum

2016-12-26

Опубликован второй значительный релиз пакетного менеджера DNF (2.0), который вобрал в себя улучшения, подготовленные после задействования DNF по умолчанию в Fedora Linux и сосредоточенный на улучшении совместимости с YUM.

В DNF 2.0 реализованы более понятные уведомления о проблемах с зависимостями, организован показ списка слабых зависимостей в суммарных параметрах транзакции, добавлена улучшенная система подсказки для доступных команд. В основной состав DNF перемещён плагин Repoquery. Добавлены новые unit-файлы для systemd: dnf-automatic-notifyonly, dnf-automatic-download и dnf-automatic-install.

Реализованы команды и опции:

  • "dnf remove --duplicates" и "dnf remove --oldinstallonly" для удаления старых версий дублирующих друг друга пакетов и старых пакетов категории installonly.
  • Новая команда "dnf repoquery" (ранее данная функциональность развивалась как отдельный плагин) для поиска пакетов во внешних репозиториях (аналог "rpm -q" для удалённого репозитория);
  • Добавлена опция "--repo репозиторий" для ограничения операций только репозиторием, выбранным по идентификатору или маске.
  • Новая команда "dnf check" для выполнения проверки целостности локальной БД packagedb и вывода информации о возможных проблемах. Поддерживаются опции для ограничения проверки отдельными областями, например "--dependencies", "--duplicates", "--obsoleted и "--provides".
  • Новая команда "dnf upgrade-minimal", позволяющая обновить каждый пакет до самой свежей версии с улучшениями или исправлениями ошибок и уязвимостей.
  • Новые опции для выбора уровня безопасности: bugfix, enhancement, newpackage, security, advisory, bzs, cves, sec-severity и secseverity.

К сожалению, некоторые изменения в выпуске, связанные с поддержкой особенностей работы YUM, привели к нарушению полной совместимости с веткой DNF-1. В том числе возвращено свойственное для YUM поведение для настроек файла конфигурации, например опции "include" и "exclude" заменены на "includepkgs" и "excludepkgs", для установки опциональных зависимостей вместо команды "with-optional" теперь предлагается параметр "--with-optional", вместо "dnf search all" - "dnf search --all", вместо "dnf makecache timer" - "dnf makecache --timer", вместо "dnf list command" - "dnf list --command", вместо "dnf repolist [enabled|disabled|all]" - "dnf repolist [--enabled|--disabled|--all]" и т.д. Также изменены аргументы в некоторых вызовах Python API.

Напомним, что DNF является ответвлением от Yum 3.4, созданным для развития некоторых новых идей, таких как использование библиотеки hawkey в качестве бэкенда для разрешения зависимостей. В качестве основных проблем Yum, которые побудили к созданию DNF, называют некачественную документацию на API, проблемный алгоритм разрешения зависимостей и невозможность рефакторинга внутренних функций. По сравнению с Yum, DNF обладает заметно более высокой скоростью работы, низким потреблением памяти и более качественным управлением зависимостями. Кроме того, DNF может выполняться как при помощи Python 2, так и Python 3, что позволило реализовать план по поставке Python 3 в Fedora по умолчанию.

Для разрешения зависимостей в DNF задействован SAT solver, реализованный в библиотеке libsolv (hawkey выступает в роли надстройки над libsolv), созданной в рамках проекта openSUSE. Обработки метаданных и загрузка пакетов выполняется через librepo. Для расширения функциональности DNF предоставляет новый, не совместимый с Yum, API для плагинов и интеграции с другими приложениями, такими как инсталлятор Anaconda. На уровне опций командной строки и файлов конфигурации, DNF почти полностью совместим с YUM.