Утилита 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
Ответ:

Оригиналы источников информации.
- losst.pro «Как откатить изменения в Fedora.»