Как топологически отсортировать установленные пакеты RPM?

Как топологически отсортировать установленные пакеты RPM?

Я хочу отсортировать топологически, в соответствии с зависимостями, все установленные пакеты rpm в моей Fedora, чтобы наиболее требуемые пакеты были наверху (например, glibc), а наименее требуемые пакеты — внизу. Я могу перечислить все установленные пакеты с помощью rpm -qa, но они, похоже, не отсортированы топологически.

Моя цель — просмотреть установленные пакеты, найти те, которые мне больше не нужны, и удалить их.

решение1

man rpmgraph:

rpmgraph(8) - Linux man page
Name
rpmgraph - Display RPM Package Dependency Graph
Synopsis

rpmgraph PACKAGE_FILE ...
Description

rpmgraph uses PACKAGE_FILE arguments to generate a package dependency graph. Each
PACKAGE_FILE argument is read and added to an rpm transaction set. The elements 
of the transaction set

are partially ordered using a topological sort.

The partially ordered elements are then printed to standard output.


Nodes in the dependency graph are package names, and edges in the directed graph 
point to the parent of each node. The parent node is defined as the last 
predecessor of a package when partially ordered using the package dependencies as
a relation. That means that the parent of a given package is the package's last
prerequisite.

The output is in dot(1) directed graph format, and can be displayed or printed
using the dotty graph editor from the graphviz package. There are no rpmgraph
specific options, only common rpm options. See the rpmgraph usage message for    
what is currently implemented. 

  [1]: https://linux.die.net/man/8/rpmgraph

Монтаж:

rpm-devel fedora 19 имеет этот пакет

Вот rpm-devel для fedora 30

Используйте ваш менеджер пакетов:

dnf install rpm-devel

Для установки wgetвведите CentOSв окне терминала следующее:

sudo yum install wget

Для установки wgetвведите Fedoraследующее:

sudo dnf install wget

Теперь вы можете использовать команду wget для загрузки нужного вам файла .rpm. Введите следующее:

wget http://some_website/sample_file.rpm

Система должна связаться с веб-сайтом и загрузить файл в ваш текущий рабочий каталог.

Установить RPM-файл с помощью команды RPM

Чтобы установить пакет .rpm в FedoraLinux CentOS, введите следующее:

sudo rpm –i sample_file.rpm

Параметр –i сообщает менеджеру пакетов, что вы хотите установить файл.

Более подробную информацию об установщике RPM можно найти вДокументация RPM.

Установить RPM-файл с помощью Yum

yumКроме того, для установки файлов можно использовать менеджер пакетов .rpm.

Введите следующее:

sudo yum localinstall sample_file.rpm

Опция localinstallуказывает yum искать установочный файл в текущем рабочем каталоге.


https://superuser.com/questions/483307/how-do-i-know-dependent-rpms-of-aa-package

https://phoenixnap.com/kb/how-to-install-rpm-file-centos-linux

https://linux.die.net/man/8/rpm

РЕДАКТИРОВАТЬ:

Я не могу приступить rpmgraphк работе, я пробовал три разных версии PACKAGE_FILEсинтаксиса списка пакетов, но они просто выдают ошибки. Если вы знаете, как использовать эту программу, пожалуйста, дайте ответ или отредактируйте мой. Проверено на Fedora 28.Как вывести список всех установленных пакетов с расширением .rpm. Fedora, Centos, RedHat

# rpmgraph INSTALLED_PACKAGES 
(null): read manifest failed:

решение2

После небольшого поиска, кажется, что rpmdepинструмент из rpmorphanпакета наиболее близок к тому, что я хочу. Чтобы увидеть самые необходимые установленные пакеты, его можно запустить с --dependingопцией:

rpmdep -all --depending | tac | less -S

решение3

Я когда-то сам написал сценарий для этого, но почти никогда им не пользовался.

Я бы относился к удалениям с осторожностью. Однажды я попытался удалить пакет под названием "SimplyHTML", потому что он появился как "конечный узел", и когда я попытался удалить его, обнаружил, что "freemind" (инструмент для составления ментальных карт, которым я часто пользуюсь) нуждается в нем и тоже был удален. Очень странно!

В любом случае, если вам интересно, вот скрипт (который в моей системе называется «leaf-rpms»):

#!/usr/bin/perl
use strict;
use warnings;
use 5.10.0;
use Data::Dumper;

# a leaf RPM is one that has no deps and you can safely delete

# run it as is, delete any that you think are useless

my @installed = `rpm -qa --queryformat="%{NAME}\n"`;
chomp(@installed);
my %count;

@ARGV = ("dnf repograph |");

while (<>) {
    chomp;
    next if /^digraph packages/;
    next unless m({) .. m(});
    next if m({) or m(});

    s/"//g;
    $count{$_}++;
}
# print Dumper \@installed;
# print Dumper \@all;
# print Dumper \%count;
# print "----\n";

my %dup;
for my $k (sort @installed) {
    next if $dup{$k}++;
    print "$k\n" unless exists $count{$k};
}

Связанный контент