LINUX.ORG.RU

DNF: джва года ждал!

 , , , , rocky linux


2

2

Очередной раз тут листал федоровский фак (кстати, категорически рекомендую независимо от дистрибутива) и наткнулся на вот это, и вспомнил как же плохо живётся в DNF без такой фичи — возможности обнаружить «одинокие» пакеты (с собой они могут тащить другие пакеты), которые не требуются никаким другим пакетам как зависимость.

Дебиянщики ща будут пальцы гнуть и будут правы. Кстати, интересно, как с этим в раче?

Для Ъ выложу здесь.

sudo dnf install gcc libsolv-devel

Кстати, мне этих не хватило, ещё потребовалось поставить redhat-rpm-config.

touch rpm-unneeded.c

В этот файлик положите

#include <solv/pool.h>
#include <solv/poolarch.h>
#include <solv/repo_rpmdb.h>
#include <solv/solver.h>

int main(void)
{
    Pool *pool;
    Repo *rpmdb;
    Solver *solver;
    Queue q;

    pool = pool_create();
    pool_setarch(pool, NULL);
    pool_set_flag(pool, POOL_FLAG_IMPLICITOBSOLETEUSESCOLORS, 1);

    rpmdb = repo_create(pool, "@system");
    repo_add_rpmdb(rpmdb, NULL, 0);
    pool->installed = rpmdb;

    solver = solver_create(pool);
    solver_set_flag(solver, SOLVER_FLAG_KEEP_EXPLICIT_OBSOLETES, 1);
    solver_set_flag(solver, SOLVER_FLAG_BEST_OBEY_POLICY, 1);
    solver_set_flag(solver, SOLVER_FLAG_YUM_OBSOLETES, 1);

    queue_init(&q);
    solver_solve(solver, &q);
    solver_get_unneeded(solver, &q, 1);

    for (int i = 0; i < q.count; i++)
    {
        printf("%s\n", pool_solvid2str(pool, q.elements[i]));
    }

    queue_free(&q);
    pool_free(pool);

    return 0;
}

Собираем

gcc $(rpm -E %{optflags}) -fPIC rpm-unneeded.c -o rpm-unneeded $(rpm -E %{build_ldflags}) -lsolv -lsolvext

Положим подальше, хорошая программа!

mkdir ~/.local/bin
mv rpm-unneeded ~/.local/bin

Всё! Теперь любители чистоты и всяких там оптимизаций могут приступать к очищению своей системы от всякой бесполезной фигни.

Пару слов новичку. Среди пакетов, которые можно спокойно удалить окажутся и пакеты связанные с загрузкой системы такие как grub2-* или shim-x64, следи за тем, чтобы они не улетели в приступе пуризма, иначе система не загрузится.

Кстати, избавиться от этих «опасных» пакетов можно переходом на systemd-boot, тогда больше ничто не будет стоять на пути у твоей ярости, рекомендую.


UPD.

Спасибо @t184256, теперь я знаю, что в федоре уже прикрутили плагин к DNF, но у меня федоры нет, поэтому не могу посмотреть и сравнить.

Так что господа дебиянщики — всё, больше вам нечем похвастать.

–––––––

UPD 2

Прикрутили в федору аж в 2017 году, назывался python2-dnf-plugin-leaves. Посыпаю голову пеплом, век живи, век учись…

пруф: https://koji.fedoraproject.org/koji/buildinfo?buildID=885703

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

★★★★★

Последнее исправление: papin-aziat (всего исправлений: 4)
Ответ на: комментарий от papin-aziat

Это моя система, эти пакеты мне нужны, поэтому они в списке, тех, которые не нужны, в списке уже нет ;-)

Ты даже не знаешь, что тебе нужно, а если есть список нужного, то не знаешь, от чего у него такие зависимости. Это рак бинарных потребителей. Тут никак, только опыт. Философы фапнули на фразу «но зачем? Я пользователь (потребитель), мне разбираться не надо, я не мейнтейнер». И будут правы.

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

Roy-Batty
()
Последнее исправление: Roy-Batty (всего исправлений: 1)
Ответ на: комментарий от Polugnom

Твои бы слова да Богу в уши :-)

Это старая проблема, обсуждали уже много раз.

В будущем может так и будет, где-то читал что в планах такое есть, но пока вот такой уродец (если в последних федорах не произошло что-то, чего я пропустил, но вроде почитываю новости).

papin-aziat ★★★★★
() автор топика
Ответ на: комментарий от papin-aziat

Какая беда? Да прям в readme к нему написано

A plugin system is used to access software from different sources. Plugins are provided for:
Traditional package installation via PackageKit (e.g. Debian package, RPM).

И оно так и работает. Сам gnome-software не управляет пакетами. Так что все вопросы к настройке dnf или yum, или что там используется.

Polugnom ★★★★★
()
Ответ на: комментарий от Polugnom

Правильно, чисто в стиле Гнома «а мы ни за что не отвечаем, это всё они». А Синаптик делает всё как надо вот уже дохренадцать лет. Но консольщики даже не подозревают о примитивности их скриптиков, а аппсторщики усиленно отрывают пользователям мозг и даже не заметили что ни те ни эти не нужны изначально и небыло изначально нужды пилить столько велосипедов, просто потому что есть Синаптик.

R_He_Po6oT ★★★★★
()
Ответ на: комментарий от R_He_Po6oT

Synaptic - морда к апту. Поэтому и работает только с apt. А gnome-software морда к packagekit и через него работает с кучей пакетных менеджеров. Но никакого отношения к зависимостям сам не имеет.

Polugnom ★★★★★
()
Ответ на: комментарий от R_He_Po6oT

У packagekit есть пару киллер-фич — установка обновлений оффлайн, то есть в однопользовательском режиме, и в случае падения гуёв он продолжает работать как положено, что делает его безопасным для обновления системы прямо из ДЕ.

papin-aziat ★★★★★
() автор топика
Ответ на: комментарий от Polugnom

Ну чего ты ко мне пристал? Откуда я знаю, как там работает этот кит, тем более, что я им не пользуюсь.

Где-то не раз эту тему на ЛОРе поднимали и народ жалуется, что gnome-software оставляет зависимости.

Возможно здесь: Перегружайся, если не хочешь проблем!

papin-aziat ★★★★★
() автор топика
Ответ на: комментарий от Polugnom

А gnome-software морда к packagekit и через него работает с кучей пакетных менеджеров.

Так же как и кдешный Discover. Такое же угрёбище, но я не заметил, чтобы он удалял мне зависимости, или помечал что-то. с тем же пакаджкитом работает.

R_He_Po6oT ★★★★★
()
Ответ на: комментарий от papin-aziat

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

papin-aziat ★★★★★
() автор топика
Ответ на: комментарий от papin-aziat

не знаю что там в dnf и вообще в rpm мире, в Debian gnome-software отрабатывает установку и удаление так:

Start-Date: 2022-12-06  20:41:45
Commandline: packagekit role='install-packages'
Requested-By: udachnik (1000)
Install: gir1.2-geocodeglib-1.0:amd64 (3.26.2-2, automatic), gir1.2-champlain-0.12:amd64 (0.12.20-1, automatic), gir1.2-rest-0.7:amd64 (0.8.1-1.1, automatic), geoclue-2.0:amd64 (2.5.7-3, automatic), gir1.2-gfbgraph-0.2:amd64 (0.2.4-1, automatic), gir1.2-gtkchamplain-0.12:amd64 (0.12.20-1, automatic), folks-common:amd64 (0.14.0-1, automatic), gir1.2-geoclue-2.0:amd64 (2.5.7-3, automatic), libfolks25:amd64 (0.14.0-1+b1, automatic), libgfbgraph-0.2-0:amd64 (0.2.4-1, automatic), gnome-maps:amd64 (3.38.6-0+deb11u1), gir1.2-goa-1.0:amd64 (3.38.0-3, automatic), gir1.2-gweather-3.0:amd64 (3.36.1-3, automatic), libgeoclue-2-0:amd64 (2.5.7-3, automatic)
End-Date: 2022-12-06  20:41:48

Start-Date: 2022-12-06  20:42:05
Commandline: packagekit role='remove-packages'
Requested-By: udachnik (1000)
Remove: gir1.2-geocodeglib-1.0:amd64 (3.26.2-2), gir1.2-champlain-0.12:amd64 (0.12.20-1), gir1.2-rest-0.7:amd64 (0.8.1-1.1), gir1.2-gfbgraph-0.2:amd64 (0.2.4-1), gir1.2-gtkchamplain-0.12:amd64 (0.12.20-1), folks-common:amd64 (0.14.0-1), gir1.2-geoclue-2.0:amd64 (2.5.7-3), libfolks25:amd64 (0.14.0-1+b1), libgfbgraph-0.2-0:amd64 (0.2.4-1), gnome-maps:amd64 (3.38.6-0+deb11u1), gir1.2-goa-1.0:amd64 (3.38.0-3), gir1.2-gweather-3.0:amd64 (3.36.1-3), libgeoclue-2-0:amd64 (2.5.7-3)
End-Date: 2022-12-06  20:42:07

Polugnom ★★★★★
()
Ответ на: комментарий от papin-aziat

Не понял, в каком смысле «делают»?

У меня Workstation и по-умолчанию напихано много ненужного. Так вот при обновлении системы (всегда в терминале, так как PackageKit удаляется одним из первых) порой я вижу неизвестные мне пакеты (скажем libhandy или speexdsp). И тогда я ищу в koji что это за пакет и если он мне кажется ненужным, пробую удалить. Вот сейчас попробую поставить rpm-unneeded и посмотрю, что же я упустил.

Irben ★★★
()
Ответ на: комментарий от Irben

Дык не надо уже, есть нативный плагин, тему читаешь?

papin-aziat ★★★★★
() автор топика
Ответ на: комментарий от Irben

Впрочем, было бы интересно посмотреть на разницу выхлопов dnf leaves и сабжа, а то у меня нет федоры проверить, а в ентерпрайз не положили :-(

papin-aziat ★★★★★
() автор топика

в приступе пуризма

Периодически запускаю dnf autoremove смотрю на длинный список «ненужных» пакетов и отменяю это дело. Лучше стабильная система, а пару сотен мегов на диске мне не жалко.

Кстати dnf leaves выводит какое-то афигенноге количество пакетов. Эта команда кажется мне почти бесполезной.

rupert ★★★★★
()
Последнее исправление: rupert (всего исправлений: 1)
Ответ на: комментарий от papin-aziat

Впрочем, было бы интересно посмотреть на разницу выхлопов dnf leaves и сабжа, а то у меня нет федоры проверить, а в ентерпрайз не положили :-(

[jurikolo@localhost ~]$ dnf leaves | wc -l
436
[jurikolo@localhost ~]$ rpm-unneeded | wc -l
343

Если прям интересна разница, могу отсортировать и залить в какой-нибудь fpaste

Irben ★★★
()
Ответ на: комментарий от Irben

Интересно…

Не, названия не надо, просто убедись, что почти сотня строк именно пакеты, а не какая-нибудь другая инфа, а то я где-то видел, что там какие-то стрелочки рисует.

papin-aziat ★★★★★
() автор топика
Ответ на: комментарий от papin-aziat

Всё по делу, пакеты реальные. На примере NetworkManager’а увидел разницу:

[jurikolo@localhost ~]$ dnf leaves | grep NetworkManager
- NetworkManager-adsl-1:1.38.6-1.fc36.x86_64
- NetworkManager-bluetooth-1:1.38.6-1.fc36.x86_64
- NetworkManager-config-connectivity-fedora-1:1.38.6-1.fc36.noarch
- NetworkManager-initscripts-ifcfg-rh-1:1.38.6-1.fc36.x86_64
- NetworkManager-initscripts-updown-1:1.38.6-1.fc36.noarch
- NetworkManager-openconnect-gnome-1.2.8-2.fc36.x86_64
- NetworkManager-openvpn-gnome-1:1.8.18-1.fc36.x86_64
- NetworkManager-ppp-1:1.38.6-1.fc36.x86_64
- NetworkManager-pptp-gnome-1:1.2.10-1.fc36.x86_64
- NetworkManager-ssh-gnome-1.2.12-3.fc36.x86_64
- NetworkManager-vpnc-gnome-1:1.2.8-1.fc36.x86_64
- NetworkManager-wifi-1:1.38.6-1.fc36.x86_64
[jurikolo@localhost ~]$ rpm-unneeded | grep NetworkManager
NetworkManager-adsl-1:1.38.6-1.fc36.x86_64
NetworkManager-bluetooth-1:1.38.6-1.fc36.x86_64
NetworkManager-config-connectivity-fedora-1:1.38.6-1.fc36.noarch
NetworkManager-initscripts-ifcfg-rh-1:1.38.6-1.fc36.x86_64
NetworkManager-initscripts-updown-1:1.38.6-1.fc36.noarch
NetworkManager-openconnect-gnome-1.2.8-2.fc36.x86_64
NetworkManager-openvpn-gnome-1:1.8.18-1.fc36.x86_64
NetworkManager-ppp-1:1.38.6-1.fc36.x86_64
NetworkManager-pptp-gnome-1:1.2.10-1.fc36.x86_64
NetworkManager-ssh-gnome-1.2.12-3.fc36.x86_64
NetworkManager-vpnc-gnome-1:1.2.8-1.fc36.x86_64

Подсказка, чтобы долго глазами не искать: - NetworkManager-wifi-1:1.38.6-1.fc36.x86_64

Irben ★★★
()
Ответ на: комментарий от Irben

Ясно, значит сабжевая программа работает хуже или как-то иначе, но факт в том, что NetworkManager-wifi можно спокойно удалить, если у тебя нет вайфая.

papin-aziat ★★★★★
() автор топика
Ответ на: комментарий от grem

dnf repoquery –unneeded

Как я понял, эта команда покажет все пакеты, которые удалит autoremove, поэтому лично у меня пустой выхлоп. Из мана:

Limit the resulting set to leaves packages that were installed as dependencies so they are no longer needed. This switch lists packages that are going to be removed after executing the dnf autoremove command.
papin-aziat ★★★★★
() автор топика
Ответ на: комментарий от Irben

Собрал себе этот плагин.

У меня тоже отличаются

$ dnf leaves | wc -l
59
$ rpm-unneeded | wc -l
46

Получается python3-dnf-plugin-leaves работает лучше, супер!

papin-aziat ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.