Несколько действий в dnf подряд и интерактивно в dnf shell

Пакетный менеджер dnf работает в целом быстро, однако немало времени занимает прогрузка метаданных, которые содержат в т.ч. список всех файлов всех пакетов. Низкая скорость их прогрузки особенно чувствуется на процессорах с частотой одного ядра меньше 2 ГГц. Иногда бывает нужно выполнить несколько действий одновременно, например, сделать запрос repoquery, обновить систему (upgrade), установить какой-то пакет, а ждать прогрузки метаданных по несколько секунд или даже несколько десятков секунд на Intel Atom N450 на каждое действие не хочется. На помощь приходит dnf shell — интерактивная командная оболочка.

Картинка ниже показывает, что мы делаем:

И так, запускаем dnf shell, ключом командной строки подключив дополнительный репозиторий:

localhost ~ # dnf --repofrompath libarchive,http://abf-downloads.rosalinux.ru/rosa2021.1/container/4020183/x86_64/main/release/ shell
Добавлен libarchive репозиторий из http://abf-downloads.rosalinux.ru/rosa2021.1/container/4020183/x86_64/main/release/
Последняя проверка окончания срока действия метаданных: 0:06:48 назад, Пн 11 апр 2022 21:27:10.
>

dnf shell запустился, метаданные прогрузились, dnf ждет нашей команды. Скомандуем ему запланировать обновление системы:

> upgrade

Команда и вместе с ней расчет транзакции на обновление были выполнены почти моментально, если процессор слабый, то разница по скорости с выполнением dnf upgrade в обычной консоли хорошо заметна на глаз.
Теперь скомандуем вывести запланированную транзакцию:

> transaction
========================================================
 Пакет    Архитектура
                 Версия   Репозиторий             Размер
========================================================
Обновление:
 bsdtar   x86_64 3.5.3-2  libarchive               56 k
 lib64archive18
          x86_64 3.5.3-2  libarchive              311 k
 lib64python3.8
          x86_64 3.8.11-8 mirror-rosa-x86_64-main 1.0 M
 python3  x86_64 3.8.11-8 mirror-rosa-x86_64-main 9.3 M

Результат транзакции
========================================================
Обновление  4 Пакета

Теперь добавим в запланированную транзакцию установку пакета bsdcpio и вновь выведем запланированную траназакцию, которая будет включать в себя и обновление, и установку пакета:

> transaction
==========================================================
 Пакет      Архитектура
                   Версия   Репозиторий             Размер
==========================================================
Установка:
 bsdcpio    x86_64 3.5.3-2  libarchive               28 k
Обновление:
 bsdtar     x86_64 3.5.3-2  libarchive               56 k
 lib64archive18
            x86_64 3.5.3-2  libarchive              311 k
 lib64python3.8
            x86_64 3.8.11-8 mirror-rosa-x86_64-main 1.0 M
 python3    x86_64 3.8.11-8 mirror-rosa-x86_64-main 9.3 M

Результат транзакции
==========================================================
Установка   1 Пакет
Обновление  4 Пакета

Командой run можно запустить выполнение транзакции.
Вместо transaction можно писать ts, вместо upgrade — up.

У меня есть желание сделать библиотеку и/или утилиту для взаимодействия с dnf shell и использовать ее в скриптах подбора и установки проприетарных драйверов NVidia, чтобы они запускали dnf не кучу раз, а заставили его один раз прогрузить метаданные и потом общались с ним по душам.

2
Отправить ответ

avatar
1 Comment threads
1 Thread replies
16 Followers
 
Most reacted comment
Hottest comment thread
2 Comment authors
Михаил Новоселовalgri14 Recent comment authors
  Subscribe  
самые новые самые старые рейтинг
Сообщать по почте
algri14
Гость
algri14

Да, «прогрузка» дико бесит, как в dnf, так и в его графическом фронтенде dnfdragora.
В urpmi и rpmdrake (GUI в Mageia) «прогрузка» работает в несколько раз быстрее, хотя там тоже запускается заново при каждом запуске.