web-dev-qa-db-ja.com

インストールされている別のパッケージに依存するパッケージをYumにリストする

Sqliteのバージョン3.4に依存するRHEL5にサードパーティのRPMパッケージをインストールしようとしています。 Yumによると、すでに3.3.6がインストールされています。

Sqlite 3.3.6に依存するインストール済みパッケージを一覧表示する方法はありますか?

53
Rich

必要なrpmオプションは次のとおりです。

rpm -q --whatrequires sqlite

編集:追加-他の回答/コメントのディスカッションごとにインストール

編集:削除--rpmの無効なオプションであるためインストール済み

50
Wes Hardaker

回答

_repoquery -q --installed --whatrequires sqlite
_

解説

_rpm -q --whatrequires sqlite_は、パッケージ名への依存関係のみを報告します。

それどころか、repoqueryは次のように動作します(マンページから):

_   --alldeps
          When used with --whatrequires, look for non-explicit dependencies in addition to explicit ones (e.g. files and Provides  in  addition  to  package  names).
          This is the default.
_

パッケージlibdbを取り上げましょう。

_# rpm -q --whatrequires libdb
no package requires libdb
_

libdbに依存するパッケージはないため、スムーズに削除できるはずです。しかしながら...

_# yum remove -y libdb
Loaded plugins: fastestmirror
Resolving Dependencies
--> Running transaction check
---> Package libdb.x86_64 0:5.3.21-19.el7 will be erased
--> Processing Dependency: libdb(x86-64) = 5.3.21-19.el7 for package: libdb-utils-5.3.21-19.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: pam-1.1.8-12.el7_1.1.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: rpm-4.11.3-17.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: rpm-libs-4.11.3-17.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: libdb-utils-5.3.21-19.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: cyrus-sasl-lib-2.1.26-20.el7_2.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: rpm-python-4.11.3-17.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: python-libs-2.7.5-39.el7_2.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: rpm-devel-4.11.3-17.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: 2:postfix-2.10.1-6.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: rpm-build-libs-4.11.3-17.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: iproute-3.10.0-54.el7_2.1.x86_64
--> Running transaction check
. . .
. . .
. . .
Error: Trying to remove "systemd", which is protected
Error: Trying to remove "yum", which is protected
_

ご覧のとおり、他の一部のパッケージは、パッケージに直接依存しておらず、パッケージによって提供されているファイルlibdb-5.3.so()(64bit)に依存しています。

最後に、これがlibdbに依存するパッケージの実際のリストです。

_# repoquery -q --installed --whatrequires libdb
cyrus-sasl-lib-0:2.1.26-20.el7_2.x86_64
iproute-0:3.10.0-54.el7_2.1.x86_64
libdb-utils-0:5.3.21-19.el7.x86_64
pam-0:1.1.8-12.el7_1.1.x86_64
postfix-2:2.10.1-6.el7.x86_64
python-libs-0:2.7.5-39.el7_2.x86_64
rpm-0:4.11.3-17.el7.x86_64
rpm-build-libs-0:4.11.3-17.el7.x86_64
rpm-devel-0:4.11.3-17.el7.x86_64
rpm-libs-0:4.11.3-17.el7.x86_64
rpm-python-0:4.11.3-17.el7.x86_64
_
43

Dnf(yumの新しいバージョン)の場合は、repoquery wrapperコマンドで試すことができます。

dnf repoquery --whatrequires sqlite

利用できない場合は、次のコマンドでインストールできます。

dnf -y install dnf-plugins-core
12
teoincontatto

このコマンドを試すこともできます。

repoquery --whatrequires sqlite

このコマンドは ServerFault および The Fedora Forums からも取得しました。

7
FilBot3

あなたが本当に知りたいのは、「sqlite-3.3.6を必要とするが、sqlite-3.4.zには満足できないパッケージは何か」ということであり、それを見つける唯一の良い方法は、それを試してみてください。お気に入り:

echo | yum upgrade sqlite
3
James Antill

Wes Hardakerが述べたように のように、優れた組み込みメソッドはrpm -q --whatrequires <package>を使用することです。問題は、rpmが依存関係の解決のためにcapabilitiesで動作することです。 dpkgは、LinuxディストリビューションのDebian/Ubuntuファミリーに含まれています。他の人が指摘したように、単にrpm -q --whatrequires sqliteを実行しても全体の話はわかりません。そのため、一部の人がrepoqueryの使用を提案したのはなぜですか。ただし、repoqueryはRHEL/CentOS 7ミニマル(おそらくデスクトップも?)にデフォルトではインストールされないため、すべてのユーザーが使用できるとは限りません。

ユーザーはrpm -q --provides <pkgname>を実行して、パッケージが提供するすべての機能を確認し、次にrpm -q --whatrequires <capability>を使用して、インストールされているパッケージにその機能が必要かどうかを確認できます。この情報は、BASHワンライナーを使用して簡潔に照会できます(ここでは長さを2行に分けています)。

capabilities=($(rpm -q --provides sqlite | awk -F= '{print $1}'));
for c in "${capabilities[@]}"; do rpm -q --whatrequires "$c"; done

これは、rpm自体に組み込まれているオプションのみを使用するため、追加のパッケージ(たとえば、repoqueryを含むパッケージであるCentOS 7のyum-utils)をインストールする必要はありません。 )。

1
villapx