it-swarm.cn

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

在按yum安装软件包(配置了多个存储库)之后,如何找到已从哪个存储库安装的软件包?

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

159
lg.

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

什么版本的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

如果有可用的较新软件包,则将单独显示该软件包,新版本将显示可从中使用的仓库。

45
theotherreceive

即将到来,但是(至少在Fedora 15上)可以使用yumdb进行类似的查询:

yumdb info 'python*'

我实际上需要列出给定回购中的软件包:

yumdb search from_repo 'my-*-repo'
22
Martian

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

11
Michael Hampton
rpm -qi packagename

会告诉您供应商和包装商

6
Esmail

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

repoquery --repoid = epel -a | xargs yum列表已安装

5
David A.

根据 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)

4
iddqd

如果该软件包是最近安装的,则可以在/ 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文件中,则必须确定系统上的存储库优先级。

4
Swoogan

无需安装任何额外工具,获取或输出无关信息的最简单,最直接的方法就是:

yum list installed [package name]

第三列将提供安装软件包的存储库的ID。

在使用grep的原始问题的评论中提到了这一点,但这不是必需的。您可以直接将包名称传递给yum进行过滤。

1
Scott Buchanan

您可以将详细标志添加到“ yum info”:

yum info -v <package_name>

安装库将在“从仓库”输出中。

1
smw

该信息可以在任何地方捕获吗?程序包没有该信息,并且yum在找到程序包后也不会在意。您可以通过弄清楚哪些存储库包含该程序包,然后确定哪个优先级来将其组合在一起。

1
Alex

这不是一个很好的解决方案,但是我发现可用的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 rpm无融合
gstreamer-plugins-bad-devel.x86_64 0.10.9-1.fc10 rpm无融合

因此,您可以在软件包中创建一个可用的yum列表,然后使用已安装的yum list来比较安装的版本,并很好地了解版本匹配时来自哪个回购。

1
gareth_bowles

以上命令都不适合我。这就是我要做的。

yum provides "*compat-libstdc*"

一个很好的参考在这里。

https://access.redhat.com/sites/default/files/attachments/rh_yum_cheatsheet_1214_jcs_print-1.pdf

1
cokedude

所以我知道这是一个有点老的问题-但它出现在Google搜索中,寻找我想要的东西。

还有一种方法可以获取所使用的存储库的唯一列表:

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

这将列出已安装软件包的存储库。

1
Steven Haigh