包特定模块的 yum 安装

包特定模块的 yum 安装

我最近在玩texlivepackage,发现有一种方法可以用yum install 'tex(package.sty)'命令安装tex风格的包。我以前从未见过像这样指定包名称。浏览 yum 手册页没有产生相关信息。

经过一番谷歌搜索后,我发现提到了安装 Perl 模块的可能性以类似的方式,例如yum install 'perl(Net::Telnet)'。虽然它对我不起作用。

有人可以提供有关这种类型的 yum 指定包名称的更多信息吗?是否有其他包(除了 tex)模块可以以类似的方式安装?我可以获得系统上此类软件包的列表吗?这是在安装相应软件包期间(texlive在本例中)作为插件添加到 yum 的额外功能吗?

Linux 发行版:CentOS 7

答案1

这些包perl(Net::Telnet)就是所谓的虚拟包。它们仅以名称存在,本质上是名称为 true 的真实包的“别名” perl-Net-Telnet

.spec这些包通过其在文件中的定义作为提供或要求而存在。您可以在此包中看到一些内容perl-Net-HTTP

$ more $HOME/rpmbuild/SPECS/perl-Net-HTTP.spec
...
BuildRequires:  perl(IO::Socket::IP)
BuildRequires:  perl(IO::Socket::SSL) >= 1.38
BuildRequires:  perl(IO::Uncompress::Gunzip)
BuildRequires:  perl(Symbol)
BuildRequires:  perl(URI)
BuildRequires:  perl(vars)

像这样指定包名称的优点是依赖项不必依赖于特定的版本号。这里的依赖可以说,“我只需要任何旧版本的 X”。

笔记:例如,这些名称仅在执行yum install 'perl(X)'它们无法使用的yum search或 时才有效。yum info如果您查看yum手册页,它会讨论保证与“中的所有 YUM 命令一起使用”的软件包的真实名称。指定包名称“ 部分。

你还能怎么判断?

如果您尝试安装其中之一并启用yum详细消息传递,您将看到提示:

$ sudo yum --verbose install "perl(Net::HTTP)"
Not loading "blacklist" plugin, as it is disabled
Loading "fastestmirror" plugin
Loading "langpacks" plugin
Loading "refresh-packagekit" plugin
Loading "tsflags" plugin
Not loading "whiteout" plugin, as it is disabled
Adding en_US to language list
Config time: 0.015
Adding en_US to language list
Yum version: 3.4.3
rpmdb time: 0.000
Setting up Package Sacks
Loading mirror speeds from cached hostfile
 * fedora: mirror.nexcess.net
 * rpmfusion-free: mirror.pw
 * rpmfusion-free-updates: mirror.pw
 * rpmfusion-nonfree: mirror.pw
 * rpmfusion-nonfree-updates: mirror.pw
 * updates: mirror.nexcess.net
pkgsack time: 0.043
Checking for virtual provide or file-provide for perl(Net::HTTP)
Obs Init time: 0.385
Package perl-Net-HTTP-6.06-4.fc20.noarch already installed and latest version
Nothing to do

注意到“虚拟提供”和“文件提供”的提及了吗?这些是yum寻找“提供”您在名称中指定的内容的包的依赖引擎,即perl(Net::HTTP)在其他寻找匹配的包上。

您也可以依靠向repoquery您展示这种关系:

$ repoquery -a --whatprovides 'perl(Net::HTTP)'
perl-Net-HTTP-0:6.06-4.fc20.noarch

参考

相关内容