このパッケージに依存するRPMを確認してください。

このパッケージに依存するRPMを確認してください。

要求されたパッケージに依存するパッケージのリストを取得したいと思います。たとえば、すべての依存関係を取得したいと思いますtelnet。次のスクリプトを考えました。

for i in `rpm -qa | sort`;
   do rpm -qR $i | grep telnet > /dev/null;
   if [ $? -eq 0 ]; then
       echo $i;
   fi;
done

もっと良い方法がありますか?

ありがとうございます。

答え1

必要なコマンドは次のとおりです。

rpm -q --whatrequires <packagename>

だから:

rpm -q --whatrequires telnet

マニュアルページから

  --whatrequires CAPABILITY
         Query all packages that require CAPABILITY for proper functioning.

答え2

残念ながらrpm -q --whatrequires、時にはそれだけでは不十分です。

$ rpm -q --whatrequires perl-libwww-perl
no package requires perl-libwww-perl

$ rpm -e perl-libwww-perl
error: Failed dependencies:
       perl(LWP) is needed by (installed) perl-XML-Parser-2.36-7.el6.x86_64

その理由は--whatrequiresa を引数として取るからです。関数名、一つの代わりに パッケージ名。一般に、RPMパッケージが同じ名前の関数を1つだけ提供する場合は、パッケージ名をパラメータ--whatrequiresとして渡すことは問題ありませんが、そうでない場合(perl-libwww-perl上記の例のように)別の解決策が必要です。


ソリューション#1:rpm --test -e

コマンドが成功し(実際にシステムを変更せずに!)、依存関係がない場合は; given --test(「テストの実行」)オプションを使用してください。-e

$ rpm --test -e emacs-common && echo 'No dependencies!'
No dependencies!

;失敗すると、上記で既に見たエラー出力が表示されます。

$ rpm --test -e perl-libwww-perl && echo 'No dependencies!'
error: Failed dependencies:
       perl(LWP) is needed by (installed) perl-XML-Parser-2.36-7.el6.x86_64

解決策#2:repoquery --installed --whatrequires

このrepoquery(1)コマンドはyum-utilsRPMの一部として提供され、パッケージ名を機能名で解決するか、その逆に解決するのに十分です。

$ repoquery --installed --whatrequires perl-libwww-perl
perl-libwww-perl-0:5.833-5.el6.noarch
perl-XML-Parser-0:2.36-7.el6.x86_64
perl-libwww-perl-0:5.833-5.el6.noarch

欠点:

  • yum-utilsまだシステムにないかもしれません。
  • yumyum-utils必須)がまだシステムにない可能性があります。
  • 重複出力なし(追加して簡単に修正可能| sort -u
  • 入力パッケージ名をフィルタリングしないでください(修正が簡単)


したがって、解決策1は汚れていますが、全体的により信頼性が高く使いやすいようです。

答え3

回避策#3:rpmdep --depending

パッケージの依存関係を表示する代わりに(rpm -qR)、rpmdepは拡張rpm -q --whatrequiresコマンドとして機能します。 [rpmdepのマニュアルページから抜粋]

また、ソリューション#2には多くのパッケージをインストールする必要があることを指摘したいと思います。 openSUSE Leap 15.4では、zypperはrepoqueryコマンドを有効にするためにインストールする必要がある合計23パッケージ(3.7MB)への依存関係を解決します。

rpmdepはrpmorphanパッケージのユーティリティの1つです。rpm -q --provides/ と似ていますが--requires、主な違いは関数ではなくパッケージに適用されることです。これがOPが要求したものです。

例:

$ rpmdep --depending firewalld
no depending : firewalld is an orphan

$ rpmdep --depending iptables
iptables is needed by firewalld

関連情報