希望问题的简短版本:如果我在安装了特定软件包的计算机上,是否有一个yum命令会告诉我哪个配置存储库提供了该软件包? (或者,可以使用哪个存储库提供尚未安装的软件包。)
后台需要一些上下文:我们有一个迷宫的yum存储库。我有一台机器安装了特定的rpm软件包,另一台机器的配置库显然没有足够的迷宫,所以我无法将我想要的软件包安装到该机器上。我需要将最小的必要存储库添加到新机器中。我不能只是将存储库从一台机器霰弹到另一台机器上。只是走出去抓住转速不是一个选择,因为我需要这个是可重复的。
答案 0 :(得分:36)
yum list packagename
这将显示包在哪个存储库的输出的第三列。
对于已安装的软件包,这将无效,因为第三列仅显示“已安装”。在这种情况下,你可以做,例如“rpm -qi packagename”,通常Vendor,Packager和Build Host标记将指示包所属的存储库。此外,将一些repo符号附加到包版本号上也很常见。
答案 1 :(得分:25)
repoquery -i {packagename}
这将为您提供实际的回购名称与yum返回的无用的“已安装”。 repoquery由yum-utils提供。
答案 2 :(得分:12)
您可以使用yum -v search
向您显示包以及包含的存储库。如果您还添加--showduplicates
,您将看到该包的所有版本。
答案 3 :(得分:2)
对于单个包,您可以使用
找到它PACKAGE=ruby-enterprise
repoquery --qf "%{repoid}" $PACKAGE
将 $ PACKAGE 替换为您关注的软件包的名称。
您可以使用
查找来自特定存储库的所有软件包REPO=ruby-enterprise-opt
repoquery --repoid=$REPO -a --qf "%{name}" | sort > repo_packages
rpm -qa --qf "%{name}\n" | sort > installed_packages
comm -1 -2 repo_packages installed_packages
将 $ REPO 替换为您关注的存储库的ID;您可以使用yum repolist
查看所有已启用存储库的ID。
答案 4 :(得分:1)
以下是一些发现给定已安装软件包的存储库的方法:
repoquery -i {packagename}
或
CMakeFiles/tripleClassification.dir/src/tripleClassification.cpp.o: In function `boost::program_options::typed_value<std::string, char>::xparse(boost::any&, std::vector<std::string, std::allocator<std::string> > const&) const':
tripleClassification.cpp:(.text._ZNK5boost15program_options11typed_valueISscE6xparseERNS_3anyERKSt6vectorISsSaISsEE[_ZNK5boost15program_options11typed_valueISscE6xparseERNS_3anyERKSt6vectorISsSaISsEE]+0x19): undefined reference to `boost::program_options::validate(boost::any&, std::vector<std::string, std::allocator<std::string> > const&, std::string*, int)'
参考文献:
答案 5 :(得分:0)
yum reinstall [package_name]
然后,当要求确认时,您可以选择N以不更改您的系统:
centos上的示例输出:
Resolving Dependencies
--> Running transaction check
---> Package mc.x86_64 1:4.6.1a-35.el5 set to be updated
--> Finished Dependency Resolution
Dependencies Resolved
==============================================================================================================================================
Package Arch Version Repository Size
==============================================================================================================================================
Reinstalling:
mc x86_64 1:4.6.1a-35.el5 base 2.1 M
Transaction Summary
==============================================================================================================================================
Remove 0 Package(s)
Reinstall 1 Package(s)
Downgrade 0 Package(s)
Total download size: 2.1 M
Is this ok [y/N]:
答案 6 :(得分:0)
这应该等同于 yum list installed
,但具有机器可读的输出:
repoquery --installed '*' --queryformat='%{name} %{evr} %{ui_from_repo}' | column -t
显然,制作一个列出可能字段的手册页太麻烦了;但您可以查看 https://github.com/rpm-software-management/yum/blob/master/yum/packages.py 并使用您列出的对象类存在的任何属性。
例如,如果您要列出已安装的软件包,则可以使用 YumInstalledPackage
的字段,因此可以使用其基类 YumHeaderPackage
、YumAvailablePackage
、PackageObject
的字段和RpmBase
。
这是一个例子:
$ repoquery --installed '*' --qf='%{name} %{evr} %{ui_from_repo}' | head -n 10 | column -t
GeoIP 1.5.0-14.el7 @rhos-13.0-rhel-7-signed
MySQL-python 1.2.5-1.el7 @rhos-13.0-rhel-7-signed
NetworkManager 1:1.18.0-5.el7 @anaconda/7.7
NetworkManager-config-server 1:1.18.0-5.el7 @anaconda/7.7
NetworkManager-libnm 1:1.18.0-5.el7 @anaconda/7.7
NetworkManager-team 1:1.18.0-5.el7 @anaconda/7.7
NetworkManager-tui 1:1.18.0-5.el7 @anaconda/7.7
OpenIPMI 2.0.27-1.el7 @rhos-13.0-rhel-7-signed
OpenIPMI-libs 2.0.27-1.el7 @rhos-13.0-rhel-7-signed
OpenIPMI-modalias 2.0.27-1.el7 @rhos-13.0-rhel-7-signed
值得一读the comment that documents the ui_from_repo
property,以了解该字段的可能格式。