Quero classificar topologicamente, de acordo com as dependências, todos os pacotes rpm instalados no meu Fedora, com os pacotes mais necessários no topo (por exemplo, glibc) e os pacotes menos necessários no fundo. Posso listar todos os pacotes instalados com rpm -qa
, mas eles não parecem estar classificados topologicamente.
Meu objetivo é revisar os pacotes instalados, encontrar aqueles que não preciso mais e desinstalá-los.
Responder1
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
Instalação:
rpm-devel fedora 19 tem este pacote
Aqui está o rpm-devel para o fedora 30
Use seu gerenciador de pacotes:
dnf install rpm-devel
Para instalar wget
no CentOS
, digite o seguinte em uma janela de terminal:
sudo yum install wget
Para instalar wget
em Fedora
, digite o seguinte:
sudo dnf install wget
Agora, você pode usar o comando wget para baixar o arquivo .rpm desejado. Digite o seguinte:
wget http://some_website/sample_file.rpm
O sistema deve acessar o site e baixar o arquivo para seu diretório de trabalho atual.
Instale o arquivo RPM usando o comando RPM
Para instalar um pacote .rpm no Fedora
Linux CentOS
, digite o seguinte:
sudo rpm –i sample_file.rpm
A opção –i informa ao gerenciador de pacotes que você deseja instalar o arquivo.
Mais informações sobre o instalador RPM podem ser encontradas noDocumentação RPM.
Instale o arquivo RPM com Yum
Alternativamente, você pode usar o yum
gerenciador de pacotes para instalar .rpm
arquivos.
Digite o seguinte:
sudo yum localinstall sample_file.rpm
A localinstall
opção instrui yum a procurar no diretório de trabalho atual o arquivo de instalação.
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
EDITAR:
Não consigo começar rpmgraph
a trabalhar, tentei três versões diferentes da PACKAGE_FILE
sintaxe da lista de pacotes, mas só dá erros. Se você sabe como usar este programa, forneça uma resposta ou edite a minha. Testado em Fedora 28
.Como listar todos os pacotes instalados com a extensão .rpm. Fedora, Centos, RedHat
# rpmgraph INSTALLED_PACKAGES
(null): read manifest failed:
Responder2
Depois de pesquisar um pouco, parece que a rpmdep
ferramenta do rpmorphan
pacote é a que mais se aproxima do que desejo. Para ver os pacotes instalados mais necessários, pode ser executado com --depending
a opção:
rpmdep -all --depending | tac | less -S
Responder3
Certa vez, escrevi um roteiro para isso, mas quase nunca o usei.
Eu lidaria com as remoções com cuidado. Certa vez, tentei excluir um pacote chamado "SimplyHTML" porque ele surgiu como um "nó folha", e quando fui removê-lo, descobri que o "freemind" (uma ferramenta de mapeamento mental que uso muito) precisava dele e consegui excluído também. Muito estranho!
De qualquer forma, FWIW aqui está o script (que no meu sistema é chamado de "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};
}