Como posso programaticamente descobrir quais módulos do CPAN estão relacionados aos módulos empacotados?

2

Estou tentando escrever uma fórmula Juju para App :: Alice , um cliente de IRC baseado na web.

De acordo com as instruções de instalação , eu executo os seguintes comandos para prender Alice e todos são dependências do CPAN:

curl -L http://xrl.us/cpanm | perl - --sudo App::cpanminus
cpanm --sudo --installdeps App::Alice

Eu escrevi a fórmula para fazer isso. Assim, ao lançar uma instância do EC2, instala a coisa toda, aqui está meu gancho de instalação:

#!/bin/bash
DEBIAN_FRONTEND=noninteractive sudo apt-get -y install build-essential libnet-ssleay-perl
set -eux # -x for verbose logging to juj debug-log
curl -L http://xrl.us/cpanm | perl - --sudo App::cpanminus
cpanm --sudo --installdeps App::Alice

O problema é que demorou cerca de 10 minutos em um m1.small para criar e construir tudo a partir do CPAN. Isso é muito tempo para esperar, especialmente se eu vou pagar por 10 minutos de tempo de computação toda vez que eu quiser rodar Alice! Então eu estava pensando se eu poderia instalar os módulos CPAN que já existem como pacotes e adicioná-los à linha apt-get que isso economizaria um monte de tempo.

Imediatamente recebi um erro ao usar o Alice que precisava de SSL, então adicionei o pacote libnet-ssleay-perl à linha correta.

Meu problema é que não quero executar a instalação e determinar manualmente quais módulos ele precisa, procurá-lo no arquivo morto e adicioná-lo.

Existe uma ferramenta ou método que me permita descobrir quais módulos Alice precisa que sejam empacotados para que eu possa instalá-los a partir do arquivo ou eu preciso procurar cada um deles?

    
por Jorge Castro 30.07.2011 / 05:42

1 resposta

2

Eu olhei no Makefile.PL e achei isto:

all_from 'lib/Alice.pm';
requires 'List::MoreUtils' => '0';
requires 'Any::Moose' => '0';
requires 'Try::Tiny' => '0';
requires 'EV' => '0';
requires 'AnyEvent' => '5.2';
requires 'AnyEvent::AIO' => '0';
requires 'AnyEvent::IRC' => '0.95';
requires 'AnyEvent::HTTP' => '0';
requires 'Twiggy' => '0';
requires 'Plack' => '0';
requires 'Plack::Session' => '0';
requires 'DBD::SQLite' => '0';
requires 'SQL::Abstract' => '0';
requires 'AnyEvent::DBI' => '0';
requires 'IRC::Formatting::HTML' => '0.28';
requires 'Text::MicroTemplate' => '0.09';
requires 'JSON' => '2.12';
requires 'File::ShareDir' => '0.01';
requires 'File::Copy' => '0';
requires 'Net::SSLeay' => '0';
test_requires 'Test::More' => '0.86';
test_requires 'Test::TCP' => '0';
install_share 'share';
install_script 'bin/alice';

Isso me permitiu procurar por cada pacote individual. Eu não conseguia descobrir uma maneira de descobrir os deps programaticamente, então eu procurei por cada um à mão.

    
por Jorge Castro 06.08.2011 / 06:15