yum 安装包特定模块

gol*_*lem 5 linux yum rhel centos latex

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

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

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

Linux 发行版:CentOS 7

slm*_*slm 7

这些包perl(Net::Telnet)就是所谓的虚拟包。它们仅存在于名称中,本质上是名称为 的真实包的“别名” 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)
Run Code Online (Sandbox Code Playgroud)

像这样指定包名的好处是依赖项不必依赖于特定的版本号。这里的依赖可以说,“我只需要任何旧版本的 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
Run Code Online (Sandbox Code Playgroud)

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

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

$ repoquery -a --whatprovides 'perl(Net::HTTP)'
perl-Net-HTTP-0:6.06-4.fc20.noarch
Run Code Online (Sandbox Code Playgroud)

参考