我最近在玩texlive
package,发现有一种方法可以用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