Instalar módulos personalizados do perl

1

Eu construí um RPM de uma coleção de software proprietária em um ambiente do CentOS 7, mas o processo de compilação exigia a execução de alguns módulos Perl ( .pm files) encontrados dentro da própria fonte. Quando executo rpm -Uvh rpm-name.rpm , recebo dependências com falha com os módulos Perl exatos encontrados na origem. Então a questão é, como faço para instalar módulos Perl personalizados?

Alguns dos arquivos .pm definem um pacote e outros definem sub-rotinas. Eu tentei copiar o diretório dos scripts para /usr/lib64/perl5/ , mas não funcionou. cpan -D Module::Name me dá Can't call method userid on an undefined value at /usr/share/perl5/App/Cpan.pm line 836 . Eu procuro criar um RPM a partir dos módulos perl, mas parece que todos estão explicando como criar RPMs a partir de CPAN modules.

    
por 3bdalla 07.11.2018 / 12:20

1 resposta

1

Não está claro a partir de sua descrição o que exatamente está acontecendo (mensagens de erro específicas ajudariam ou um exemplo de especificação de pacote que reproduz o problema), mas parece que as dependências de RPM deram errado, de alguma forma. Existem várias opções dependendo do que exatamente é o problema.

Fornecer o pacote ausente

Indica que o pacote fornece o módulo ausente no arquivo *.spec :

Provides: perl(Module::Name)
...

isso pode ser feito no arquivo *.spec do software. Às vezes, isso pode exigir um RPM que não faz nada além de fornecer a dependência ausente , principalmente quando você tem um pacote de terceiros que não pode ou não deseja modificar para corrigir as dependências.

Desativar o Autoreq

Um grande martelo é desativar os requisitos automáticos do pacote;

Autoreq: 0

isso, por sua vez, pode exigir que% adequadoBuildRequires, Requires e outras instruções no arquivo *.spec configurem dependências apropriadas para o pacote (ou você poderia lidar com isso em seu gerenciamento de configuração quanto a quais pacotes precisam ser instalado). Eu tive que definir esse sinalizador em 4 dos pacotes de móduloperl-* de 133% que eu mantenho localmente, por exemplo, em perl-File-ChangeNotify.spec :

# KLUGE don't pull in IO::KQueue which in turn needs *BSD
Autoreq: 0
BuildRequires:  perl(Carp)
...
Requires:       perl(Carp)
...

Alter de Filtrar os Scripts de Dependências Automáticas

Isso é mais trabalhoso, pois requer alterar ou filtrar a saída do código que o RPM executa para determinar os requisitos; a documentação do RPM parece estar desatualizada como meu teste centos 7 O sistema não tem mais os scripts find-* mencionados nessa página, então, sem dúvida, algo mudou com esse processo e quem sabe onde ou se está documentado agora. Em vez disso, uso um dos dois métodos acima, pois não tive tempo de pesquisar o que eles mudaram sobre os scripts de requisitos.

    
por 07.11.2018 / 16:13