インストールされた rpm パッケージをトポロジ的に並べ替えるにはどうすればよいでしょうか?

インストールされた rpm パッケージをトポロジ的に並べ替えるにはどうすればよいでしょうか?

Fedora にインストールされているすべての rpm パッケージを、依存関係に応じてトポロジ的に並べ替え、最も必要なパッケージ (たとえば 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にはこのパッケージがあります

fedora 30用のrpm-develはこちら

パッケージ マネージャーを使用します。

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

システムは Web サイトにアクセスし、ファイルを現在の作業ディレクトリにダウンロードします。

RPM コマンドを使用して RPM ファイルをインストールする

FedoraまたはLinuxに .rpm パッケージをインストールするにはCentOS、次のように入力します。

sudo rpm –i sample_file.rpm

–i スイッチは、パッケージ マネージャーにファイルをインストールすることを伝えます。

RPMインストーラーの詳細については、RPMドキュメント

Yum で RPM ファイルをインストールする

あるいは、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

参考:

編集:

動作しません。パッケージ リストの構文rpmgraphを 3 つの異なるバージョンで試しました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};
}

関連情報