Je jouais avec le package texlive
récemment et j'ai découvert qu'il existe un moyen d'installer des packages de style tex avec la command yum install 'tex(package.sty)'
. Je n'ai jamais vu le nom du package a été spécifié comme ça avant. Skimming through yum page man n'a pas donné d'informations pertinentes.
Après quelques googler j'ai trouvé des mentions de possibilité d'installer des modules Perl de la même manière, par exemple yum install 'perl(Net::Telnet)'
. Bien que cela ne fonctionne pas pour moi.
Quelqu'un peut-il fournir plus d'informations sur ce type de spécification du nom du package avec miam? Y a-t-il d'autres packages (en dehors de tex) qui peuvent être installés de la même façon? Puis-je get une list de ces packages sur mon système? Est-ce une fonctionnalité supplémentaire qui est ajoutée à yum comme un plugin lors de l'installation d'un package correspondant ( texlive
dans ce cas)?
Linux Distro: CentOS 7
Les packages perl(Net::Telnet)
sont ce qu'on appelle des packages virtuels. Ils existent uniquement dans le nom et sont essentiellement un "alias" pour le package réel dont le nom est vraiment perl-Net-Telnet
.
Ces packages prennent naissance au travers de leur définition dans le file .spec
tel que fourni ou .spec
. Vous pouvez en voir ici dans ce package, 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)
L'avantage de spécifier les noms de packages comme ceci est que les dependencies ne doivent pas countr sur des numéros de version spécifiques. Ici, une dépendance peut dire: "Je n'ai besoin que d'une ancienne version de X".
NOTE: Ces noms ne fonctionnent que lors de l' yum install 'perl(X)'
ils ne fonctionnent pas avec yum search
ou yum info
, par exemple. Si vous jetez un coup d'œil à la page man yum
, vous verrez les vrais noms des packages qui fonctionneront avec toutes les commands de YUM dans la section « SPECIFYING PACKAGE NAMES ».
Si vous tentez de faire une installation de l'un d'eux et d'activer la messagerie verbeuse de yum
vous verrez des conseils:
$ 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
Remarquez les mentions «fournir virtuel» et «fournir file»? Il s'agit du moteur de dependencies dans yum
search les packages qui "fournissent" ce que vous avez spécifié dans le nom, par exemple perl(Net::HTTP)
, sur les autres packages recherchant des correspondances.
Vous pouvez également s'appuyer sur la repoquery
pour vous montrer cette relation aussi:
$ repoquery -a --whatprovides 'perl(Net::HTTP)' perl-Net-HTTP-0:6.06-4.fc20.noarch