Instalação silenciosa e com script dos módulos CPAN e Perl?


9

Preciso instalar o CPAN e alguns módulos Perl automaticamente em um script de instalação do Scientific Linux (RHEL). Infelizmente, os módulos específicos que eu quero (pelo menos um deles) não podem ser encontrados como RPM: s até onde eu vi.

Então, eu preciso instalar o CPAN, configurá-lo automaticamente (ou com um arquivo de configuração) e, em seguida, instalar os módulos desejados (incluindo dependências) automaticamente.

Isso não parece um requisito muito incomum, mas eu não vi nenhuma documentação realmente boa sobre isso. O problema é que sempre que o CPAN é iniciado pela primeira vez, uma configuração interativa é executada. Isso pode ser pulado de alguma forma? E como inicio instalações de módulos diretamente da linha de comando?

Respostas:


5

Você pode querer olhar para o cpanm ; é leve, com script de shell e muito mais simples que o CPAN clássico.


1
Surpreendentemente, a resposta certa. Use cpanm. Se você estiver usando perlbrew, use perlbrew install-cpanme pronto.
Craig Ringer

Publiquei uma nova pergunta e resposta em serverfault.com/q/815649/102814 porque estou chateado com o quão relativamente desconhecido isso é, e esse perlbrew não chegou a lugar algum.
Craig Ringer

23

Tente definir essa variável de ambiente antes de executar o CPAN:

export PERL_MM_USE_DEFAULT=1

Isso faz com que o perl responda automaticamente "yes" quando o CPAN pergunta "Deseja configurar o máximo possível automaticamente? [Yes]"

Fonte


Essa resposta é muito melhor que a resposta aceita.
23719 kapad

6

"E como inicio instalações de módulos diretamente da linha de comando?"

Isso deve fazer:

perl -MCPAN -e 'install Your::Package'

5

Se for uma tarefa repetitiva, pode valer a pena passar algumas horas com cpan2rpm e transformá-las em RPMs. Na minha experiência, as execuções de CPAN (mesmo interativas) são muito afetadas por eventos inesperados (peculiaridades da versão, problemas de rede, falhas de testes falsos) para serem confiáveis ​​em uma instalação (semi-) automática.


3

Isso deve fazer a mágica:

get_cpanm(){
    if [ \! -f /usr/local/bin/cpanm ]; then
            cd $TMP_DIR && curl --insecure -L http://cpanmin.us | perl - App::cpanminus
            if [ \! -f /usr/local/bin/cpanm ]; then
                    echo "Downloading from cpanmin.us failed, downloading from xrl.us"
                    curl -LO http://xrl.us/cpanm &&
            chmod +x cpanm &&
            mv cpanm /usr/local/bin/cpanm
            fi
    fi
    CPANM=$(which cpanm);
    if [ \! -f "$CPANM" ]; then
            echo "ERROR: Unable to find cpanm"
            return 1;
    fi
    return 0
}
cpanm Time::HiRes CGI Moose Config::JSON other::cpanmodules
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.