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)

Ответ на: комментарий от alex1101

Не, это другое. Например, вот этот rpm-unneeded выведет мне все пакеты (надеюсь все, это вопрос к сишникам), которые никакой autoremove не удалит как ненужную никому зависимость. Вот:

[me@my ~]$ dnf autoremove
Last metadata expiration check: 3:33:20 ago on Tue 06 Dec 2022 13:25:43 MSK.
Dependencies resolved.
Nothing to do.
Complete!

[me@my ~]$ rpm-unneeded 
NetworkManager-1:1.40.0-2.el8_7.x86_64
baobab-3.28.0-4.el8.x86_64
bash-completion-1:2.7-5.el8.noarch
chrony-4.2-1.el8.x86_64
dconf-editor-3.28.0-1.el8.x86_64
elrepo-release-8.3-1.el8.elrepo.noarch
file-roller-3.28.1-4.el8.x86_64
firefox-102.5.0-1.el8_7.alma.x86_64
flameshot-0.6.0-4.el8.x86_64
gnome-calculator-3.28.2-2.el8.x86_64
gnome-disk-utility-3.28.3-2.el8.x86_64
gnome-system-monitor-3.28.2-1.el8.x86_64
gnome-terminal-nautilus-3.28.3-3.el8.x86_64
gnome-tweaks-3.28.1-7.el8.noarch
goldendict-1.5-0.29.RC2.el8.x86_64
google-noto-emoji-color-fonts-20200916-2.el8.noarch
google-noto-emoji-fonts-20200916-2.el8.noarch
hplip-3.18.4-9.el8.alma.x86_64
hunspell-ru-1:0.99g5-13.el8.noarch
intel-gpu-tools-2.99.917-39.20200205.el8.x86_64
kernel-4.18.0-425.3.1.el8.x86_64
kwrite-22.04.1-1.el8.x86_64
libreoffice-writer-1:6.4.7.2-11.el8.alma.x86_64
libva-intel-driver-2.4.1-1.el8.x86_64
lm_sensors-3.4.0-23.20180522git70f7e08.el8.x86_64
man-db-2.7.6.1-18.el8.x86_64
mlocate-0.26-20.el8.x86_64
mock-rpmfusion-free-37.2-1.el8.noarch
mpv-0.34.1-2.el8.x86_64
nautilus-3.28.1-21.el8.x86_64
okay-release-1-5.el8.noarch
okular-22.04.1-1.el8.x86_64
python3-tracer-0.7.5-2.el8.noarch
qt5ct-1.1-8.el8.x86_64
raven-release-1.0-3.el8.noarch
rpmfusion-nonfree-release-8-0.1.noarch
sudo-1.8.29-8.el8.x86_64
tapper-0.5.0-0.vdb.1.el8.x86_64
terminus-fonts-console-4.48-1.el8.noarch
transmission-gtk-3.00-1.el8.x86_64
xbanish-1.8-1.el8.x86_64
xsensors-0.80-9.el8.x86_64
yandex-disk-0.1.6.1080-1.fedora.x86_64
yum-4.7.0-11.el8.alma.noarch
zram-generator-defaults-1.1.2-2.el8.noarch
papin-aziat ★★★★★
() автор топика
Последнее исправление: papin-aziat (всего исправлений: 1)
Ответ на: комментарий от alex1101

А ещё веселее дела обстоят в gnome-software, когда юзер ставит программы чисто посмотреть, потом удаляет, а потом обнаруживает, что у него откуда не возьмись 50 гигов в разделе /, потому что зависимости оно удалять не умеет или не хочет.

Поправьте, если не прав, давно не пользовался packagekit-ом, но кажется dnf autoremove в этой ситуации уже не помогает. Вот тут и поможет эта программка почистить систему.

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

Хех, а я при обновлении пакетов смотрю на незнакомые, проверяю что они делают в koji и если какой-то мусор, то пробую удалить. Если тащат при удалении пол системы, оставляю. Попробую предложенное решение, спасибо!

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

dnf при обновлении всё сам делает, следить за этим не надо.

Те, что тебе удаётся потом удалить, называются «слабые зависимости», так что если умеешь находить и ставить недостающие компоненты, то лучше добавить в dnf.conf install_weak_deps=False или добавлять в строку --setopt=install_weak_deps=False, когда потребуется.

проверяю что они делают в koji

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

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

Когда у тебя тысячи транзакций, то ушатаешься по ним что-то проследить.

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

Остаётся грепать или читать dnf list installed, но опять же надо предоставлять себе что ищешь.

Вариант читать или грепать rpm -qa то же самое.

Хотя я говорил про gnome-software, ведь люди им пользуются, пока не узнают всю правду :-)

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

Разумеется перестают, ведь соответствующие файлы *.repo будут удалены из yum.repos.d, больше пакет ничего не делает, ну ещё ключи наверное добавляет.

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

Чего чистить? Кого чистить? Я, вообще, не люблю систему чистить от «одиноких» пакетов, или «необязательных» пакетов. Вычистишь так систему, а потом djvu не открывается :))) (бонба папину азияту).

И, я так понял, везде так, во всех дистрах. Вроде от пакета никто не зависит, даже как необязательный, или рекомендуемый, а удалишь и проблемы вылазят незнамо откуда. Как определить такие пакеты какимнить apt-autoclean, или rpm-make-me-happy?

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

Вычистишь так систему, а потом djvu не открывается :)))

Это на бомжаре такие дела?

Не, в шапках жёсткие, не, твёрдые зависимости так делать не позволят.

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

Даже в альте есть apt-cache list-nodeps, хоть и прикручено сбоку и не упомянуто в мане. Странно, что в фидоре нужно столько приседать. А может и правильно, нефиг удалять что попало, а то так и зонды юзер вырежет случайно.

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

Когда у тебя тысячи транзакций, то ушатаешься по ним что-то проследить.

Речь шла об установке софта «на попробовать» с последующим удалением. Всё остальное – гипотетический сценарий.

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

Фига ты поделил на нуль мои старания :-)

На самом деле у меня

[me@my ~]$ dnf leaves
No such command: leaves. Please use /bin/dnf --help
It could be a DNF plugin command, try: "dnf install 'dnf-command(leaves)'"
[me@my ~]$ dnf install 'dnf-command(leaves)'
Last metadata expiration check: 4:42:27 ago on Tue 06 Dec 2022 13:25:43 MSK.
No match for argument: dnf-command(leaves)
Error: Unable to find a match: dnf-command(leaves)

Ща будем разбираться!

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

Кстати, вот же вы консольщики... Я в Синаптике дебьяновском, в манджаровском Памаке, в гуях, беру и открываю список ненужных пакетов и щелчком мыши вывожу информацию о пакете и работаю с ним по человечески. А вы в сосноле соберёте «вундервафлю» вредительского направления, и радуетесь. Не так давно радетель сосноли предложил составить список установленных пакетов, отсортированный по размеру. Но... Оказалось он не умеет отличать биты от байтов от килобайтов и остальных, в результате бессмысленная каша убила мне кучу секунд и нервов. Ты теперь выкладываешь скрипт но на сях, который тоже должен похерить систему на радость утколапых :))))

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

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

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

rpm-unneeded выведет мне все пакеты (надеюсь все, это вопрос к сишникам), которые никакой autoremove не удалит как ненужную никому зависимость

И какие пакеты из этого списка тебе действительно не нужны?

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

Не так давно радетель сосноли предложил составить список установленных пакетов, отсортированный по размеру

Это как раз полезно в связке с сабжевой фичей. Чтобы посмотреть каких слонопотамов можно безопасно поудалять, а не просто медитировать на алфавитные списки пакетов. Эта ваша гуйня ничего такого не может обычно. Скрипты и конвейеры её уделывают как тузик грелку всегда.

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

питоны, хаскели и пр. языки делающие одну операцию для одной программы

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

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

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

Так не работал тот скрипт, написанный мечом и оралом.

А в графических ПМ списки сортируются в хренадцати сортеролях лёгким нажатием кнопки. Куда тебе с консолями до этого. Хотя, да, всё это должны были написать. Но это сделали больше двадцати лет назад, а вы всё пишете полувредные скрипты каждый раз с нуля, потому что забыли что в прошлый раз писали.

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

Я сначала сделал как обычно, заметил что не работает. Просто не пишет ничего в /boot/efi/%machine_id%

Поискал инструкцию для Федоры - тоже не работает. Может чего-то в системде не хватает. Но тогда это еще один косяк федороцев.

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

вот у тебя нетворкменеджер в списке ненужных. Ты уверен что всё правильно сделал? Кстати, в deb есть возможность пометить пакет как специально установленный. В rpm, как понимаю, тоже. Твой скрипт это учитывает? Лень сорцы читать :)

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

Я сам первый раз эту тему попробовал, сделал чётко по инструкции и всё работает на альме 8, установил-перегрузил-переключил-удалил ядро, всё норм — добавляет и удаляет в entries автоматически.

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

Это список ненужных пакетов другим пакетам, а не мне :-)

это учитывает?

хз, не проверял, надеюсь, что нет, иначе он будет бесполезен например для случаев, когда человек удалил пакеты через гуй, а зависимости остались в системе помеченными «в ручную», а именно так вроде бы и делает gnome-software. Так же будет бесполезен, если я что-то наставил руками помелочи.

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

когда человек удалил пакеты через гуй, а зависимости остались в системе помеченными «в ручную», а именно так вроде бы и делает gnome-software.
делает gnome-software

В одном слове всё моё отношение к редхату и гному и их нужности... Но это никак не отражает того что делают НОРМАЛЬНЫЕ графические пакетные менеджеры.

Реально советую попробовать дебьяновский Синаптик. Или манджаровский Памак. Только из-за этих ПМ можно терпеть проблемы самих дистрибутивов.

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

Он появился в пакете dnf-plugins-core в федоре-26 в 2017 году в версии 2: https://koji.fedoraproject.org/koji/buildinfo?buildID=885703

В энетерпрайз его не положили, сволочи, хотя версия 4.

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

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

Gnome-software всего лишь морда к packagekit, который в свою очередь абстракция над пакетным менеджером. Как пакетный менеджер настроен так и будет все удаляться. Сам по себе Gnome-software никак пакетами не управляет.

Polugnom ★★★★★
()

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

У тебя две трети системы - бесполезная фигня ))

Roy-Batty
()