Вопрос или проблема
В README для Microdnf говорится, что это “Минимальный dnf для (в основном) Docker-контейнеров, который использует libdnf и, следовательно, не требует Python.”
Не перечислены функции microdnf
и не объясняется, в каком смысле он “минимален” по сравнению с dnf
.
В анонсе Red Hat об Atomic Base Image говорится, что “Microdnf не является полным заменителем yum”, но также не уточняется, что именно отсутствует.
Существует страница руководства в интернете — я не уверен, насколько она официальна — но и там также не уточняется, какова разница по сравнению с dnf
.
Вопрос в следующем: в чем разница между microdnf
и dnf
? Что можно сделать только с dnf
и нельзя с microdnf
? Существует ли ресурс, который это перечисляет?
Не перечислены функции microdnf и не объясняется, в каком смысле он “минимален” по сравнению с dnf.
Минимальность как заявлено: ни Python, ни зависимости от модулей Python. А это довольно много пакетов, если задуматься.
rpm -q --requires dnf
python3-dnf = 4.2.23-4.el8
rpm -q --requires python3-dnf
python3-gpg
python3-hawkey >= 0.48.0-3
python3-libcomps >= 0.1.8
python3-libdnf
python3-libdnf >= 0.48.0-3
python3-rpm >= 4.14.2-35
Фактическое дерево зависимостей значительно расширится, если проверить зависимость каждого модуля Python.
в чем разница между microdnf и dnf
Я предполагаю, что фактическая разница также будет заключаться в отказе от использования Python:
- Нет интерфейса Python, и, следовательно, вы не можете вызвать
microdnf
из Python-кода, используя согласованный API. Вам придется использовать модульsubprocess
Python - Фактический
dnf
может быть расширен многими дополнительными командами, предоставляемымиdnf-plugins-core
и другими пакетами плагинов. Вы не можете ожидать никаких из этих функций вmicrodnf
. Они вряд ли когда-либо появятся вmicrodnf
.
Я обнаружил, что microdnf не может устанавливать группы пакетов. Мне нужно установить полный yum или dnf, если я хочу это сделать.
microdnf install dnf dnf-plugins-core
.
Ответ или решение
Вопрос о различиях между microdnf
и dnf
достаточно важен, особенно для тех, кто работает с контейнерными технологиями и минималистичными системами. Microdnf
, как указано в его README, предназначен для использования в контейнерах и не требует Python, что делает его более легким и быстродействующим по сравнению с полной версией dnf
. Однако, такая минимизация неизбежно приводит к ограничениям функциональности. Давайте рассмотрим, что именно microdnf
не может сделать и как это выражается на практике.
Теоретическая база
Microdnf
представляет собой упрощенный инструмент для управления пакетами в системах на базе RPM, таких как Red Hat Enterprise Linux и CentOS. Это облегчённая утилита по сравнению с dnf
, которая используется для тех же целей, но обладает более обширными возможностями и удобством. Основное различие между ними заключается в том, что dnf
построен на Python и поддерживает обширную систему плагинов, тогда как microdnf
использует libdnf
и исключает зависимости на Python и его модули.
Преимущества и недостатки
Преимущества microdnf
:
- Минимизация ресурсов:
Microdnf
менее обязателен к системным ресурсам, так как не требует Python и его зависимостей. - Производительность: Быстрее чем
dnf
благодаря меньшему числу загружаемых библиотек.
Недостатки microdnf
:
- Ограниченная функциональность: Не поддерживает расширения и плагины как
dnf-plugins-core
. - Нет поддержки API на Python: Это ограничивает возможность командных вызовов из Python-кода без использования оболочек или модулей
subprocess
.
Пример функциональных ограничений
Примером ограничения является невозможность установки групп пакетов. В dnf
можно использовать команды для установки групп, что особенно полезно для настройки рабочих сред с определенными предустановленными наборами приложений. Microdnf
не поддерживает эту функцию и требует полного установления dnf
для таких задач.
microdnf install dnf dnf-plugins-core
Эта команда показывает, что для работы с группами пакетов и плагинами необходимо установить полный набор инструментов dnf
.
Применение и практические последствия
В практическом применении выбор между microdnf
и dnf
часто обусловлен целями и требованиями проекта. В контейнерных средах, где важно минимизировать размер образов и ускорить их загрузку и развертывание, microdnf
имеет смысл как рациональное решение. Это обусловлено тем, что он позволяет выполнять базовые операции управления пакетами без накладных расходов, связанных с Python и многочисленными зависимостями.
Однако, для более сложных задач, таких как управление расширенными конфигурациями ПО, использованием плагинов, интеграцией систем управления конфигурацией или автоматизацией, microdnf
будет недостаточным. В этих случаях целесообразно рассмотреть установку полного dnf
или даже релевантный переход на другие инструменты управления пакетами, соответствующие потребностям инфраструктуры.
Запрос ресурсов, которые бы точно перечислили все возможные пробелы между этими утилитами, зачастую приводит к необходимости обратиться к различным неофициальным источникам и мануалам. В официальной документации часто отсутствуют подробные сравнения, что требует от пользователя либо экспериментального подхода, либо перехода к полноценной версии dnf
для соответственного тестирования возможностей и ограничений.
Подводя итог, microdnf
— это эффективный инструмент для специфических задач, но с рядом существенных ограничений, которые стоит учитывать при выборе между ним и dnf
. Важно осознавать компромиссы между производительностью и функциональностью, и выбирать инструмент, наиболее подходящий для ваших конкретных сценариев использования.