Eu tenho um rpm
pacote que construí que depende do perl
. Quando tento instalar este pacote, ele falha:
$ rpm -ivh <package-y>
error: Failed dependencies:
perl is needed by package-y.x86_64
Se eu executar dnf info perl
, mostra que o perl não está instalado, mas consigo encontrar perl
no meu sistema:
which perl
perl: /usr/bin/perl /opt/lampp/bin/perl /usr/share/man/man1/perl.1.gz
E verificando a versão do perl:
$ perl --version
This is perl 5, version 26, subversion 2 (v5.26.2) built for x86_64-linux-thread-multi
(with 47 registered patches, see perl -V for more detail)
Copyright 1987-2018, Larry Wall
Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.
Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl". If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.
Parece que o perl é instalado por padrão no meu sistema (fedora), mas por que o gerenciador de pacotes (dnf ou rpm) não o reconhece?
Especificar dependências para algo como Perl pode ser muito complexo. Por exemplo, quando você
package-y
diz que requerperl
, isso significa Perl 5.x ou Perl 6.x? Ele precisa de uma versão secundária específica do Perl 5.x? Ou um antigo Perl 4.x seria suficiente para isso?Aqui está a parte das Diretrizes de Empacotamento do Fedora que diz respeito ao Perl. Como você pode ver, é bastante complicado. Parece que você
package-y
não está seguindo essas diretrizes. É destinado especificamente ao Fedora, ou é empacotado para alguma outra distribuição aleatória?A melhor maneira de corrigi-lo sem reempacotar
package-y
seria descobrir quais requisitos específicos vocêpackage-y
realmente tem para o Perl e, em seguida, criar um pacote fictício com um nome semelhantedependencies-for-package-y.rpm
a ambosProvides: perl
(para permitir que o pacote fictício satisfaça os requisitos depackage-y
) e pelo menosRequires: perl(:VERSION) >= <minimum required Perl version for package-y>
(para fornecer as informações dospackage-y
requisitos reais do 's para o gerenciador de pacotes).Se o seu
package-y
inclui módulos Perl pré-compilados ou links paralibperl.so
, o pacote fictício também deve ter a palavra-Requires: perl(:MODULE_COMPAT_<version number>)
chave apropriada. Dessa forma, se o seu Perl atual for atualizado de uma forma que quebra a compatibilidade do módulo, por exemplo, devido a um problema de segurança, seu gerenciador de pacotes dirá que você também deve atualizarpackage-y
, removê-lo ou adiar a atualização do seu Perl porque atualizá-lo quebrariapackage-y
.Sua corrente
/usr/bin/perl
é realmente fornecida por um pacote chamadoperl-interpreter
. Você pode ver as palavras-chave Requires e Provides que o pacote possui em rpmfind.net.