パッケージがインストールされているyumリポジトリを確認する方法は?


152

yumでパッケージをインストールした後(複数のリポジトリが設定されている場合)、どのリポジトリからインストールされているかを見つけるにはどうすればよいですか?

実行yum info package-name(またはyum list package-name)した場合、パッケージが「インストール」されていることがわかります。


1
いい質問です!yum-utilsをインストールして、repoqueryと呼ばれるutilsを試しましたが、運はありません。
ショーンスターツ

serverfault.com/questions/90409/…も参照してください:)
ウォーレン

あなたのリンクは「どのリポジトリがrpmに保存されているか」に関する質問であるため、リンクは役に立たないが、この質問は「どのリポジトリがインストールされたrpmであるか」を尋ねる。さまざまな質問。
トレバーボイドスミス

あなたがやっていることに慣れているなら、あなたはrpmがどこからレポであるかを見つけるために行うrpm -qa|grep NAMEことができますyum list installed|grep NAME
トレバーボイドスミス

@TrevorBoydSmith-7年前、近かった。今日、それはまだ似ています。同じとは言わなかった。それが関連していたというだけです。
ウォーレン

回答:


82

yum-utilsがインストールされていると、repoqueryは検索する情報を提供します(ここでは「epel」がリポジトリです)。

└─[$]> repoquery -i cherokee

Name        : cherokee
Version     : 0.99.49
Release     : 1.el5
Architecture: i386
Size        : 8495964
Packager    : Fedora Project
Group       : Applications/Internet
URL         : http://www.cherokee-project.com/
Repository  : epel
Summary     : Flexible and Fast Webserver
Description :
Cherokee is a very fast, flexible and easy to configure Web Server. It supports
the widespread technologies nowadays: FastCGI, SCGI, PHP, CGI, TLS and SSL
encrypted connections, Virtual hosts, Authentication, on the fly encoding,
Apache compatible log files, and much more.

2
repoqueryが正しく機能しないようです。異なるパッケージバージョンを取得yum info package_nameすると、yumと同じ順序でリポジトリをクエリしないようです。
マイクミラー

いくつかのサーバーでも同じです。yum info package_name明らかにrepoqueryより多くの結果を返します。これが、スタック交換が投票をロックしない理由です。
反射

8
Xiong Chiamiovの答えが正しくないことがわかりました。repoquery -i $pkg$pkg$pkgインストール元のリポジトリではなく、a が利用可能なリポジトリを提供します。私はそのコマンドを実行しrpm -qi $pkg、異なるバージョン番号を取得しました。rpmのバージョン番号よりも前のバージョン番号になりましたrepoquery

ローカルコピーが最新でないか、yumへの追加コマンド(たとえば--use-mirror)でインストールされている可能性があります。常に正しい答えを得ることができるとは思いません。
Xiong Chiamiov

user158844は正しいです。これにより、指定されたパッケージを提供するリポジトリはわかりますが、特定のパッケージのリポジトリはわかりません。特定のレポジトリからパッケージをインストールし、そのレポジトリを削除し、同じ名前のパッケージを提供する別のレポジトリをインストールした場合、このように「repoquery -i」を実行すると、新しくインストールされたレポをリストするパッケージではなく、実際にパッケージをインストールしました。質問者は、インストールされたソフトウェアが実際にどのパッケージから来たのかを知りたがっています。現在のリポジトリに同じ名前のパッケージがあるとは限りません。
トッドウォルトン

43

yumのバージョンは何ですか?

現在のバージョンでは、インストールされているパッケージが利用可能な最新のものと同じバージョンである場合、インストール元のリポジトリが表示されます。

$ yum info irssi
Installed Packages
Name       : irssi
Arch       : i586
Version    : 0.8.14
Release    : 1.fc11
Size       : 2.3 M
Repo       : installed
From repo  : updates
Summary    : Modular text mode IRC client with Perl scripting
URL        : http://irssi.org/
License    : GPLv2+
Description: Irssi is a modular IRC client with Perl scripting. Only text-mode
           : frontend is currently supported. The GTK/GNOME frontend is no
           : longer being maintained.

$ yum --version
3.2.23

利用可能な新しいパッケージがある場合は、個別に表示され、新しいバージョンには利用可能なリポジトリが表示されます。


CentOs 5.3でyum 3.2.19を使用していますが、「レポから」行が存在しません。
lg。

うん...私は3.2.21でそれをテストしていましたが、その情報はどこにもありません。3.2.23のボックスでそれをやったとき、うまくいきました。
アレックス

これが最善のソリューションですが、RHEL / Centos 5.3には適用できません。この解決策を受け入れますが、RHEL / Centos 5.3にも適用できる場合は、別の回答を選択する準備ができています。
lg。

2
これは、CentOS 5.5でも禁止事項です。
マイクミラー

「担当者から」は、centos 5.8でも利用できません
Sepehr

22

遅くなりますが(少なくともFedora 15では)同様のクエリにyumdbを使用できます:

yumdb info 'python*'

そして、与えられたレポからパッケージをリストするために実際に必要なもの:

yumdb search from_repo 'my-*-repo'

Fedora 14
lg

1
RHEL 6.2上で動作します
pixelbeat

8

他のすべてが失敗した場合は、yumdbを手​​動で検査できます。にあり、/var/lib/yum/yumdbインストールされているすべてのパッケージに関する詳細情報が含まれています。特に興味があるでしょうfrom_repo。たとえば、bind-utilsパッケージの場合:

# for i in /var/lib/yum/yumdb/b/*bind-utils*/*; do echo $i: `cat $i`; done
/var/lib/yum/yumdb/b/73ea08770fa666e18c59842bf65fa0f3a0b103d8-bind-utils-9.8.2-0.23.rc1.el6_5.1-x86_64/checksum_data: 39f7840f93d3d76825a9e8da79cfe0366f7fad68f018a273477aee62cccfa3f4
/var/lib/yum/yumdb/b/73ea08770fa666e18c59842bf65fa0f3a0b103d8-bind-utils-9.8.2-0.23.rc1.el6_5.1-x86_64/checksum_type: sha256
/var/lib/yum/yumdb/b/73ea08770fa666e18c59842bf65fa0f3a0b103d8-bind-utils-9.8.2-0.23.rc1.el6_5.1-x86_64/command_line: install bind-utils
/var/lib/yum/yumdb/b/73ea08770fa666e18c59842bf65fa0f3a0b103d8-bind-utils-9.8.2-0.23.rc1.el6_5.1-x86_64/from_repo: updates
/var/lib/yum/yumdb/b/73ea08770fa666e18c59842bf65fa0f3a0b103d8-bind-utils-9.8.2-0.23.rc1.el6_5.1-x86_64/from_repo_revision: 1397654451
/var/lib/yum/yumdb/b/73ea08770fa666e18c59842bf65fa0f3a0b103d8-bind-utils-9.8.2-0.23.rc1.el6_5.1-x86_64/from_repo_timestamp: 1397654759
/var/lib/yum/yumdb/b/73ea08770fa666e18c59842bf65fa0f3a0b103d8-bind-utils-9.8.2-0.23.rc1.el6_5.1-x86_64/installed_by: 0
/var/lib/yum/yumdb/b/73ea08770fa666e18c59842bf65fa0f3a0b103d8-bind-utils-9.8.2-0.23.rc1.el6_5.1-x86_64/reason: user
/var/lib/yum/yumdb/b/73ea08770fa666e18c59842bf65fa0f3a0b103d8-bind-utils-9.8.2-0.23.rc1.el6_5.1-x86_64/releasever: 6

必要な情報だけを取得するには:

# cat /var/lib/yum/yumdb/b/*bind-utils*/from_repo
updates

それ以降のバージョンでは、さらに多くのデータが提供されます。たとえば、EL 7では、パッケージのダウンロード元の正確なミラーとURLがここに保存されます。


+1。しかしfor i in /var/lib/yum/yumdb/b/*bind-utils*/*; do echo $i: `cat $i` | grep -oP 'from_repo:\ \K.*'; done、上記の例では次のような結果を返します:updates-より読みやすく!
グレッグドゥビッキ

1
@GregDubickiこのコマンドのポイントは、何が起こっているのか、物事がどのように保存されているのか、より多くのコンテキストを示すことでした。どうやら失敗したようです。ここではgrep何もする必要はなく、ループをドロップすることもできます。cat /var/lib/yum/yumdb/b/*bind-utils*/from_repo必要なのは非常に簡単です。
マイケルハンプトン

6
rpm -qi packagename

ベンダーとパッケージャーを教えてくれます


5

リポジトリepelからインストールされたものを確認するには:(Centos 5.5で動作するはずです)、epelという名前のリポジトリがない場合、インストールされたすべてのものを吐き出します。

repoquery --repoid = epel -a | xargs yumリストがインストールされています


1
これは、リポジトリに更新されたパッケージがない限り機能するようです。そのため、使用する直前にyum updateを実行する必要があります。
codewaggle

4

パッケージが最近インストールされた場合、/ var / cache / yumを見ることができます。

そのディレクトリ内には、各リポジトリのディレクトリがあり、その中にパッケージディレクトリがあります。だから、あなたは次のようなことをするでしょう:

find /var/cache/yum -name [package-name]*

ただし、キャッシュは/etc/yum.confファイルで有効にする必要があります。

cachedir=/var/cache/yum
keepcache=1

yum clean [packages|all]キャッシュディレクトリをクリアすることに注意してください。

キャッシュディレクトリが空の場合、別の方法があります。読み込まれる情報yum info [package]は、/ var / cache / yum / [repo] /primary.xml.gzから取得されます

次のように入力して、ファイルを調べることができます。

gunzip -d -c /var/cache/yum/[repo]/primary.xml.gz | grep '<name>[package]'

ただし、yum info [package]「theotherreceive」で示される「From repo:」が表示されないマシンでは、primary.xmlファイルにないため、その情報を取得する方法はありません。したがって、パッケージが2つ以上のprimary.xmlファイルにある場合、システムのリポジトリの優先度を決定する必要があります。


このソリューションはオプションかもしれませんが(私は投票します)、決定的な答えを探しています。
lg。

4

Swoogan
On RedHatおよびCentOSに 基づく回答

sudo grep -ir PACKAGE_NAME /var/cache/yum/

結果は次のようになります

Binary file /var/cache/yum/REPOSITORY_NAME/primary.xml.gz.sqlite matches

ここで、repository_name はパッケージを見つけることができるリポジトリであり、おそらくリストの最初のリポジトリからインストールされました(yum repolistを参照)


1

その情報はどこでもキャプチャされますか?パッケージにはその情報がなく、yumはパッケージを検出した後も気にしません。おそらく、どのリポジトリにパッケージがあるかを把握し、次にどのリポジトリに優先順位があるかを判断することで、それをつなぎ合わせることができます。


このソリューションはオプションかもしれません(私は投票します)が、最近インストールされたパッケージに対してのみです。リポジトリとその優先順位を変更できるからです。
lg。

1

素晴らしい解決策ではありませんが、利用可能なyumリストは、各パッケージの最新バージョンが利用できる場所を示していることがわかりました。例えば:

yumリストが利用可能| grep gstreamer

PackageKit-gstreamer-plugin.x86_64 0.3.16-1.fc10          updates               

bluez-gstreamer.i386 4.30-2.fc10アップデート
gstreamer.i386 0.10.21-2.fc10のFedora
のgstreamer-devel.i386 0.10.21-2.fc10のFedora
のgstreamer-devel.x86_64 0.10.21-2.fc10 Fedoraの
gstreamer- plugins-bad-devel.i386 0.10.9-1.fc10 rpmfusion-free
gstreamer-plugins-bad-devel.x86_64 0.10.9-1.fc10 rpmfusion-free

そのため、パッケージで利用可能なyumリストを作成し、yum list installedを使用してインストール済みバージョンを比較し、バージョンが一致する場合にどのリポジトリからのものであるかを把握することができます。


これは、パッケージがまだインストールされていない場合のみです。
lg。

OPの質問には正確には答えられませんが、Centoss 5.5ではyumだけで他のユーティリティは使用できず、次のことができるため、非常に役に立ちました。 、または2.パッケージがインストールされていない別のマシンでクエリを実行します。
リーダー14

1

「yum info」に冗長フラグを追加できます。

yum info -v <package_name>

インストールリポジトリは「From repo」出力の下にあります。


これが、yum-utilsのインストールを必要としない唯一のソリューションのようです。
マークエディントン

これは、「インストール済み」のみをリストしています。
frogstarr78

1

だから私はこれがやや古い質問であることを知っています-しかし、それは私が探していたもののグーグル検索で出てきます。

使用されているリポジトリの一意のリストを取得する方法もあります。

# repoquery -ai | grep 'Repository  : ' | sort | uniq

これにより、パッケージがインストールされたリポジトリが一覧表示されます。


1

余分なツールをインストールしたり、不要な情報を取得したり出力したりすることなく、最も簡単で最も簡単なアプローチは次のとおりです。

yum list installed [package name]

3番目の列は、パッケージのインストール元のリポジトリのIDを提供します。

これは、grepを使用した元の質問のコメントで言及されましたが、必ずしも必要ではありません。yumフィルターに直接パッケージ名を渡すことができます。



-1

最も簡単な方法は次のとおりです。

rpm -qa --qf '%{NAME} %{VENDOR}\n'

その他のヒントとコツはこちらから入手できます:http : //wiki.centos.org/TipsAndTricks/YumAndRPM


2
このようにして(grep -iパッケージ名でパイプを追加)、ベンダーは検出しますが、リポジトリは検出しません。
lg。

1
ベンダーは(ほとんど)リポジトリとは何の関係もありません。
マッテオ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.