Ich möchte alle installierten RPM-Pakete auf meinem Fedora topologisch nach Abhängigkeiten sortieren, wobei die am meisten benötigten Pakete oben (z. B. glibc) und die am wenigsten benötigten Pakete unten stehen sollen. Ich kann alle installierten Pakete mit auflisten rpm -qa
, aber sie scheinen nicht topologisch sortiert zu sein.
Mein Ziel ist es, die installierten Pakete zu überprüfen, diejenigen zu finden, die ich nicht mehr benötige, und sie zu deinstallieren.
Antwort1
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
Installation:
rpm-devel Fedora 19 hat dieses Paket
Hier ist rpm-devel für Fedora 30
Verwenden Sie Ihren Paketmanager:
dnf install rpm-devel
Zur Installation wget
in CentOS
geben Sie Folgendes in ein Terminalfenster ein:
sudo yum install wget
Zur Installation wget
in Fedora
geben Sie Folgendes ein:
sudo dnf install wget
Nun können Sie mit dem Befehl wget die gewünschte .rpm-Datei herunterladen. Geben Sie Folgendes ein:
wget http://some_website/sample_file.rpm
Das System sollte die Website aufrufen und die Datei in Ihr aktuelles Arbeitsverzeichnis herunterladen.
Installieren Sie die RPM-Datei mit dem RPM-Befehl
Um ein .rpm-Paket unter Linux zu installieren Fedora
, CentOS
geben Sie Folgendes ein:
sudo rpm –i sample_file.rpm
Der Schalter –i teilt dem Paketmanager mit, dass Sie die Datei installieren möchten.
Weitere Informationen zum RPM-Installer finden Sie imRPM-Dokumentation.
Installieren Sie die RPM-Datei mit Yum
Alternativ können Sie den yum
Paketmanager zum Installieren .rpm
von Dateien verwenden.
Gebe folgendes ein:
sudo yum localinstall sample_file.rpm
Die localinstall
Option weist yum an, in Ihrem aktuellen Arbeitsverzeichnis nach der Installationsdatei zu suchen.
https://superuser.com/questions/483307/wie-weiß-ich-das-abhängige-rpms-von-aa-package
https://phoenixnap.com/kb/wie-installiere-man-die-rpm-datei-centos-linux
https://linux.die.net/man/8/rpm
BEARBEITEN:
Ich kann es nicht rpmgraph
zum Laufen bringen. Ich habe drei verschiedene Versionen der PACKAGE_FILE
Paketlistensyntax ausprobiert, aber es kommen immer nur Fehler. Wenn Sie wissen, wie man dieses Programm benutzt, geben Sie bitte eine Antwort oder bearbeiten Sie meine. Getestet am Fedora 28
.So listen Sie alle installierten Pakete mit der Erweiterung .rpm auf. Fedora, Centos, RedHat
# rpmgraph INSTALLED_PACKAGES
(null): read manifest failed:
Antwort2
Nach einiger Suche scheint das rpmdep
Tool aus dem rpmorphan
Paket dem am nächsten zu kommen, was ich suche. Um die am meisten benötigten installierten Pakete anzuzeigen, kann es mit der folgenden --depending
Option ausgeführt werden:
rpmdep -all --depending | tac | less -S
Antwort3
Ich habe mir hierfür einmal ein Skript geschrieben, es aber kaum genutzt.
Ich würde Entfernungen mit Vorsicht angehen. Ich habe einmal versucht, ein Paket namens „SimplyHTML“ zu löschen, weil es als „Blattknoten“ angezeigt wurde, und als ich es entfernen wollte, stellte ich fest, dass „Freemind“ (ein Mind-Mapping-Tool, das ich häufig verwende) es benötigte und ebenfalls gelöscht wurde. Sehr seltsam!
Wie dem auch sei, hier ist das Skript (das auf meinem System „leaf-rpms“ heißt):
#!/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};
}