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

6

Eu 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 depois instalar os módulos desejados (incluindo dependências) automaticamente também.

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

    
por Mikael Grönfelt 28.02.2012 / 13:58

5 respostas

4

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

    
por 22.03.2012 / 23:11
15

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 "sim" quando o CPAN pergunta "Deseja configurar o máximo possível automaticamente? [yes]"

Fonte

    
por 28.01.2015 / 14:58
5

"E como lanço instalações de módulo diretamente da linha de comando?"

Isso deve ser feito:

perl -MCPAN -e 'install Your::Package'
    
por 28.02.2012 / 14:12
5

Se é uma tarefa repetitiva, pode ser necessário gastar 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 de versão, problemas de rede, falhas de testes falsos) a serem usados em uma instalação (semi) automática.

    
por 29.02.2012 / 09:45
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
    
por 21.11.2012 / 14:25