Você pode querer olhar cpanm para isso; é leve, shell scriptable e muito mais simples que o CPAN clássico.
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?
Você pode querer olhar cpanm para isso; é leve, shell scriptable e muito mais simples que o CPAN clássico.
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]"
"E como lanço instalações de módulo diretamente da linha de comando?"
Isso deve ser feito:
perl -MCPAN -e 'install Your::Package'
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.
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
Tags bash perl cpan shell-scripting