Утилита dnf. Как пользоваться?

Описание.

DNF (полное название Dandified YUM) — менеджер пакетов для дистрибутивов GNU\Linux на основе RPM-пакетов. Это следующее поколение приложения YUM (полное название Yellowdog Updater, Modified), которое было призвано решить недостатки предыдущего YUM: низкую производительность, высокое потребление памяти и низкую скорость итеративного разрешения зависимостей.

Существует и обновлённая версия — DNF5. Разработана как полная перепись DNF.

Особенности:

  • В отличие от старого DNF, который в основном написан на Python, DNF5 разработан на C++ для лучшей производительности и меньшего использования ресурсов.
  • Устраняет недостатки DNF, например, медленную производительность, сложную обработку зависимостей.

Основные функции DNF / DNF5 включают:

  • Поиск пакета в репозитории.
  • Установка пакетов.
  • Обновление пакетов.
  • Удаление пакетов.
  • Управление репозиториями.
  • Кэширование.
  • Транзакции.

Поиск пакета.

Позволяет найти пакет программного обеспечения в доступных репозиториях.

$ sudo dnf search имя_пакета

Просмотр информации.

Позволяет получить информацию о доступных и установленных пакетах.

$ sudo dnf info имя_пакета

Ответ:

Установка пакетов.

Позволяет устанавливать новые программные пакеты из репозиториев.

$ sudo dnf install имя_пакета
$ sudo dnf5 install имя_пакета

Переустановка пакетов.

Позволяет устанавливать новые программные пакеты из репозиториев.

$ sudo dnf reinstall имя_пакета
$ sudo dnf5 reinstall имя_пакета

Удаление пакетов.

Удалим установленные пакеты:

$ sudo dnf remove имя_пакета
$ sudo dnf5 remove имя_пакета

Обновление пакетов.

Обновим все установленные пакеты до их последних доступных версий с обработкой зависимости и пересборкой их, если это необходимо. Дополнительно обновим метаданные репозиториев перед выполнением обновления:

$ sudo dnf upgrade --refresh
$ sudo dnf5 upgrade --refresh

Управление репозиториями.

Утилита DNF / DNF5 также поддерживает управление репозиториями в системах на базе RPM.

Добавление нового репозитория.

Можно добавить репозиторий вручную, создав файл repo_name.repo в каталоге /etc/yum.repos.d/.

Для добавления нового репозитория используется команда:

$ sudo dnf config-manager --add-repo=https://example.com/repo_name.repo

Пример создания локального файла репозитория:

$ sudo mcedit /etc/yum.repos.d/repo_name.repo

Примерное содержимое репозитория:

[my-repo]
name=My Custom Repository
baseurl=https://example.com/repo/
enabled=1
gpgcheck=1
gpgkey=https://example.com/repo/RPM-GPG-KEY

Просмотр списка репозиториев.

Выполним команду:

$ sudo dnf repolist

Ответ:

Для отображения всех репозиториев, включая отключенные:

$ sudo dnf repolist all

Включение и отключение репозитория.

Можно временно включить или отключить репозиторий без его удаления.

Отключить репозиторий:

$ sudo dnf config-manager --set-disabled <repository-id>

Включить репозиторий:

$ sudo dnf config-manager --set-enabled <repository-id>

Удаление репозитория.

Чтобы удалить репозиторий, удалите соответствующий файл repo_name.repo из каталога /etc/yum.repos.d/.

$ sudo rm /etc/yum.repos.d/repo_name.repo

Настройка приоритетов репозиториев.

Если в системе несколько репозиториев, можно настроить их приоритеты с помощью плагина dnf-plugins-core.

Установим плагин, если он отсутствует:

$ sudo dnf install dnf-plugins-core

Затем создадим файл my-priority-repo.repo в каталоге /etc/yum.repos.d/ с указанием приоритета:

$ sudo mcedit /etc/yum.repos.d/my-priority-repo.repo

Примерное наполнение файла:

[my-high-priority-repo]
name=High Priority Repository
baseurl=https://example.com/high-priority/
enabled=1
priority=1

[my-low-priority-repo]
name=Low Priority Repository
baseurl=https://example.com/low-priority/
enabled=1
priority=10

Чем меньше число в priority, тем выше приоритет репозитория.

Обновление списка репозиториев.

После изменения репозиториев обновите метаданные:

$ sudo dnf clean all
$ sudo dnf makecache

Пример установки, отключения и включения стороннего репозитория.

Пример добавления репозитория EPEL (Extra Packages for Enterprise Linux):

$ sudo dnf install epel-release

После этого пакеты из EPEL станут доступны для установки.

Проверим идентификаторы репозиториев:

$ sudo dnf repolist

Отключить ненужный репозиторий можно с помощью команды:

$ sudo dnf config-manager --set-disabled <repository-id>

Чтобы отключить несколько репозиториев — можно разделить их идентификаторы запятыми.

Отключить EPEL можно вот так:

$ sudo dnf config-manager --set-disabled epel

Проверим идентификаторы репозиториев вместе со отключенными репозиториями:

$ sudo dnf repolist all

Включить обратно EPEL можно вот так:

$ sudo dnf config-manager --set-enabled epel

Удалить насовсем можно вот так:

$ sudo dnf remove epel-release

Важно! После отключения/включения репозитория рекомендуется запустить команды:

$ sudo dnf clean all
$ sudo dnf makecache

Как откатить изменения — транзакции.

Теория откатов.

Все операции DNF / DNF5 могут быть отменены откатом, что обеспечивает больше безопасности при установке или обновлении пакетов.

Утилита DNF / DNF5 является более современным и функциональным инструментом по сравнению с предыдущей утилитой управления пакетами YUM.

Для начала обновим систему:

$ sudo dnf upgrade --refresh

Далее проверим систему на ошибки:

$ sudo dnf check

Ответ: пустая строка.

Как видим DNF / DNF5 выдал пустую строку, это значит проблем не нашел.

Проверяет локальный packagedb и выдает информацию о любых найденных проблемах.

Далее посмотрим историю:

$ sudo dnf history list

Команда history позволяет пользователю просматривать события прошлых транзакций и действовать в соответствии с этой информацией.

По умолчанию выводит весь список, также можно искать по номерам или пакетам.

Далее можно посмотреть историю отдельной транзакции:

$ sudo dnf history info

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

Здесь следует обратить внимание на строку:

Status : Ok

Вот мы и пришли собственно к откатам:

$ sudo history rollback №(package-name)

Эта команда позволяет отменить все транзакции, выполненные после указанной транзакции.

Здесь и далее используем номера транзакций (можно делать как удобнее), если невозможно отменить некоторые транзакции из-за текущего состояния RPMDB (Код возврата), он не отменит ни одну транзакцию.

Также есть и другие варианты использования команды history.

Повторить указанную транзакцию:

$ sudo history redo №(package-name)

Отменить указанную транзакцию:

$ sudo dnf history undo №(package-name)

Еще следует отметить, что откаты работают с пакетами установленными при помощи DNF / DNF5 и PackageKit (Gnome-Software, Dnfdragora). Флатпаки управляются отдельно.

Практическое применение отката.

Например установим текстовый редактор Geany:

$ sudo dnf install geany

Ответ:

Далее посмотрим историю:

$ sudo dnf history list

Ответ:

Далее можно снова посмотреть историю отдельной транзакции:

$ sudo dnf history info

Ответ: Status : Ok

Далее откатим установку текстового редактора Geany.

Это подразумевает возврат/откат до транзакции 64 в history, так как транзакция 65 была — это установка Geany.

$ sudo dnf history rollback 64

Ответ:

Как видим мы откатили все изменения после транзакции 65.

Повторить указанную транзакцию:

$ sudo dnf history redo 65

Ответ:

Как видим мы опять установили текстовый редактор Geany.

Отменить транзакцию установки:

$ sudo dnf history undo 65

Ответ:

Как видим мы опять удалили Geany.

Проверим!

Показать все пакеты установленные пользователем и найти в списке текстовый реактор Geany:

$ sudo dnf repoquery --userinstalled | grep geany

Ответ: пустой ответ.

Списки пакетов.

Есть несколько команд для получения списка установленных пакетов, включая те, которые были установлены вручную пользователем.

Список всех установленных пакетов.

$ sudo dnf list installed

Список пакетов, установленных вручную (без зависимостей).

Эта команда покажет все пакеты, которые были установлены вручную, исключая те, что были добавлены как зависимости.

Чтобы получить список пакетов, установленных вручную пользователем, можно использовать следующую команду:

$ sudo dnf repoquery --userinstalled

Список пакетов, установленных вручную (включая зависимости).

$ sudo dnf repoquery --installed

Список пакетов, установленных вручную, в формате, удобном для повторной установки.

$ sudo dnf repoquery --userinstalled --qf "%{name}"

Ответ:

Использование утилиты rpm.

Можно использовать старую-добрую утилиту rpm для получения списка установленных пакетов.

Все установленные пакеты по алфавиту.

$ sudo rpm -qa | sort | less

Пакеты, установленные вручную.

Вывести пакеты с датой их установки в систему:

$ sudo rpm -qa --qf "%{NAME}\t%{INSTALLTIME:date}\n" | sort -k2 | grep -v "dependency" | less

Ответ:

Оригиналы источников информации.

  1. losst.pro «Как откатить изменения в Fedora.»