题 如何知道从哪个yum存储库安装了一个包?


在我通过yum安装了一个软件包(配置了多个存储库)之后,如何找到已安装的软件库?

如果我跑 yum info package-name (要么 yum list package-name),我只能看到包装“已安装”。


134
2017-09-03 15:15




好问题!我安装了yum-utils并尝试了一个名为repoquery的工具,但没有运气。 - Sean Staats
也可以看看 serverfault.com/questions/90409/... :) - warren
@warren你的链接没用,因为你的链接是一个关于“什么repo是一个rpm存储在哪里”的问题,但这个问题询问“什么repo是一个安装的rpm”。不同的问题。 - Trevor Boyd Smith
如果你习惯了 rpm -qa|grep NAME 然后你可以 做 yum list installed|grep NAME 找到rpm来自哪个repo。 - Trevor Boyd Smith
@TrevorBoydSmith - 7年前,它很接近。今天,它是 仍然 类似。从来没有说过这是 相同。只是它是相关的。 - warren


答案:


安装了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.

75
2018-06-21 19:16



repoquery似乎不正常,我得到不同的包版本 yum info package_name,它似乎不会以与yum相同的顺序查询存储库。 - Mike Miller
在一些服务器上也一样。 yum info package_name 显然比repoquery返回的结果更多。这就是堆栈交换不应该锁定投票的原因。 - reflexiv
我发现熊Chiamiov的答案不正确。 repoquery -i $pkg 给出回购a $pkg 是可用的,而不是从哪个回购 $pkg 安装。我做了那个命令 rpm -qi $pkg 并获得不同的版本号。 rpm 导致版本号早于 repoquery。
您的本地副本可能已过期,或者已安装了其他命令(如yum)(例如 --use-mirror)。我不认为这是可能的 总是 得到正确的答案。 - Xiong Chiamiov


什么版本的百胜?

在当前版本上,如果安装的软件包与最新的软件包版本相同,则会显示安装的软件包。

$ 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

如果有更新的包可用,那么它将单独显示,新版本显示可用的回购。


37
2017-09-03 16:25



我在CentOs 5.3上使用yum 3.2.19并且“From repo”行不存在。 - lg.
是的......我在3.2.21测试它,它在任何地方都没有这个信息。当我在我的3.2.23的盒子上做它时,它工作。 - Alex
现在这是最好的解决方案,但不适用于RHEL / Centos 5.3。我接受这个解决方案,但我准备选择另一个答案,如果适用于RHEL / Centos 5.3。 - lg.
这也是CentOS 5.5的禁忌。 - Mike Miller
即使在centos 5.8中也没有“来自rep” - sepehr


迟到但(至少在Fedora 15上)可以使用yumdb进行类似的查询:

yumdb info 'python*'

而我实际需要列出来自给定仓库的包裹:

yumdb search from_repo 'my-*-repo'

18
2017-10-26 09:01



它也适用于Fedora 14 - lg.
适用于RHEL 6.2 - pixelbeat


如果所有其他方法都失败,您可以手动检查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存储在此处。


8
2018-05-25 04:19



+1。但是做以下事情会更好: for i in /var/lib/yum/yumdb/b/*bind-utils*/*; do echo $i: `cat $i` | grep -oP 'from_repo:\ \K.*'; done,在上面的例子中返回: updates  - 更具可读性! - Greg Dubicki
@GregDubicki命令的目的是展示更多关于正在发生的事情以及如何存储事物的背景。它显然没有这样做:没有必要 grep 这里的任何东西,你甚至可以放弃循环。很简单 cat /var/lib/yum/yumdb/b/*bind-utils*/from_repo 是你所需要的全部。 - Michael Hampton♦


rpm -qi packagename

会告诉你供应商和包装商


6
2018-02-09 14:48





如果最近安装了软件包,则可以查看/ var / cache / yum。

在该目录中,每个存储库都有一个目录,其中包含一个packages目录。所以,你会做类似的事情:

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] 不显示“from repo:”,如'theotherreceive'所示,这是因为它不在文件primary.xml中,因此无法检索该信息。因此,如果程序包位于两个或多个primary.xml文件中,则必须确定系统上的repo优先级。


4
2017-09-03 16:36



这个解决方案可能是一个选项(我投票),但我正在寻找一个明确的答案。 - lg.


要查看从repo epel安装的内容:(应该在Centos 5.5下工作)注意,如果你没有名为epel的repo,它会吐出所有安装的东西。

repoquery --repoid = epel -a |安装了xargs yum list


4
2018-04-07 21:20



只要存储库中没有更新的包,这似乎就可以工作。所以你需要在使用之前运行yum update。 - codewaggle


基于并回答 Swoogan
在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)


3
2018-05-30 00:19





这些信息是否被捕获?该软件包没有该信息,yum在找到软件包后并不在意。你可以通过弄清楚包装中有哪些回购然后确定哪一个具有优先权来将它拼凑在一起。


1
2017-09-03 16:19



这个解决方案可能是一个选项(我投票),但仅适用于最近安装的软件包,因为我可以更改存储库及其优先级。 - lg.


不是一个很好的解决方案,但我发现可用的yum列表将显示每个包的最新版本可用的位置,例如:

yum list available | 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比较你安装的版本,并且如果版本匹配的话,可以很好地了解它来自哪个repo。


1
2017-09-03 16:37



这是真的只是尚未安装包。 - lg.
虽然它没有完全回答OP的问题,但它对我非常有帮助,因为它在Centoss 5.5中只使用yum而没有其他工具,你可以:1。卸载软件包然后查询以查看repo的位置然后重新安装,或2.在未安装软件包的情况下查询其他计算机。 - lreeder