Quiero ordenar topológicamente, según las dependencias, todos los paquetes rpm instalados en mi Fedora con los paquetes más necesarios en la parte superior (por ejemplo, glibc) y los paquetes menos necesarios en la parte inferior. Puedo enumerar todos los paquetes instalados con rpm -qa
, pero no parecen estar ordenados topológicamente.
Mi objetivo es revisar los paquetes instalados, encontrar los que ya no necesito y desinstalarlos.
Respuesta1
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
Instalación:
rpm-devel fedora 19 tiene este paquete
Aquí está rpm-devel para fedora 30
Utilice su administrador de paquetes:
dnf install rpm-devel
Para instalar wget
en CentOS
, ingrese lo siguiente en una ventana de terminal:
sudo yum install wget
Para instalar wget
en Fedora
, ingrese lo siguiente:
sudo dnf install wget
Ahora puede utilizar el comando wget para descargar el archivo .rpm que desee. Introduzca la siguiente:
wget http://some_website/sample_file.rpm
El sistema debería acceder al sitio web y descargar el archivo a su directorio de trabajo actual.
Instale el archivo RPM usando el comando RPM
Para instalar un paquete .rpm en Fedora
Linux CentOS
, ingrese lo siguiente:
sudo rpm –i sample_file.rpm
El modificador –i le indica al administrador de paquetes que desea instalar el archivo.
Puede encontrar más información sobre el instalador de RPM endocumentación de RPM.
Instalar el archivo RPM con Yum
Alternativamente, puede usar el yum
administrador de paquetes para instalar .rpm
archivos.
Introduzca la siguiente:
sudo yum localinstall sample_file.rpm
La localinstall
opción indica yum para buscar en su directorio de trabajo actual el archivo de instalación.
https://superuser.com/questions/483307/cómo-sé-rpms-dependientes-de-aa-package
https://phoenixnap.com/kb/how-to-install-rpm-file-centos-linux
https://linux.die.net/man/8/rpm
EDITAR:
No puedo ponerme rpmgraph
a trabajar, probé tres versiones diferentes de PACKAGE_FILE
la sintaxis de la lista de paquetes, pero solo da errores. Si sabe cómo usar este programa, proporcione una respuesta o edite la mía. Probado en Fedora 28
.Cómo enumerar todos los paquetes instalados con la extensión .rpm. Fedora, Centos, RedHat
# rpmgraph INSTALLED_PACKAGES
(null): read manifest failed:
Respuesta2
Después de buscar un poco, parece que la rpmdep
herramienta del rpmorphan
paquete es la más cercana a lo que quiero. Para ver los paquetes instalados más requeridos, se puede ejecutar con --depending
la opción:
rpmdep -all --depending | tac | less -S
Respuesta3
Una vez escribí un guión para esto, pero casi nunca lo usé.
Yo manejaría las mudanzas con cuidado. Una vez intenté eliminar un paquete llamado "SimplyHTML" porque aparecía como un "nodo hoja", y cuando fui a eliminarlo, descubrí que "freemind" (una herramienta de mapas mentales que uso mucho) lo necesitaba y lo obtuve. eliminado también. ¡Muy raro!
De todos modos, FWIW aquí está el script (que en mi sistema se llama "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};
}