別のインストール済みパッケージに依存するYum内のパッケージのリスト


48

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

sqlite 3.3.6に依存するインストール済みパッケージをリストする方法はありますか?

回答:


47

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

rpm -q --whatrequires sqlite

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

編集:rpmの無効なオプションであるため、削除--installed


3
さらに、repoquery特定のパッケージを必要とするすべてのパッケージの構造のような素敵なツリーを生成するために使用できます。たとえば、repoquery --pkgnarrow=installed --tree-whatrequires sqlite
pdp

3
この答えが信頼できることには同意しません-確かにCentOS 7.xではそうではありません。テストするには、ImageMagickをインストールします。ImageMagickが依存するOpenEXR-libsもインストールされます。rpm -q --whatrequires OpenEXR-libsを実行すると、戻り値は「パッケージにOpenEXR-libsが必要ない」、つまりINCORRECTです。「repoquery -q --installed --whatrequires OpenEXR-libs」を実行すると、「ImageMagick-0:6.7.8.9-15.el7_2.x86_64」が正しく返されます。以下のランダムな男の答えが正しい答えになるはずです。
パンチョ

6
--installedはのオプションですrepoqueryが、では無効ですrpm
ダン・ライス

36

回答

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.

packageを取りましょう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

1
この答えは受け入れられた答えよりも優れています
パンチョ

11

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

dnf repoquery --whatrequires sqlite

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

dnf -y install dnf-plugins-core

あなたは必要--installed --recursiveそれだけで、実際にインストールされているものを返し、リポジトリからプルしないように、最後に
Hashbrown

7

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

repoquery --whatrequires sqlite

このコマンドは、ServerFaultFedora Forumsから入手しました


これにより、インストールしていないパッケージが返されました。
2rs2ts

3

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

echo | yum upgrade sqlite

1

以下のようウェスHardakerが言った、組み込みの方法は良いが使用することですrpm -q --whatrequires <package>。つまり、LinuxディストリビューションのDebian / Ubuntuファミリのように、単にパッケージだけでなく、依存関係を解決rpmする機能で動作しますdpkg。他の人が指摘したように、単にやるrpm -q --whatrequires sqliteことは全体を語らないので、なぜいくつかを使うことを提案したのrepoqueryですか repoqueryただし、デフォルトではRHEL / CentOS 7 minimalにインストールされていないため(デスクトップもありますか?)、すべてのユーザーが利用できるとは限りません。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.