Я хочу отсортировать топологически, в соответствии с зависимостями, все установленные пакеты rpm в моей Fedora, чтобы наиболее требуемые пакеты были наверху (например, glibc), а наименее требуемые пакеты — внизу. Я могу перечислить все установленные пакеты с помощью rpm -qa
, но они, похоже, не отсортированы топологически.
Моя цель — просмотреть установленные пакеты, найти те, которые мне больше не нужны, и удалить их.
решение1
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 имеет этот пакет
Используйте ваш менеджер пакетов:
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 в Fedora
Linux 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};
}