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

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

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

De acordo com oinstruções de instalaçãoEu executo os seguintes comandos para capturar Alice e todas as suas dependências do CPAN:

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

escrevia fórmulapara fazer isso, quando iniciar uma instância do EC2, ele instalará tudo, 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 capturar e construir tudo do CPAN. É muito tempo de espera, especialmente se vou pagar por 10 minutos de tempo de computação toda vez que quiser executar o Alice! Então eu estava pensando se pudesse instalar os módulos CPAN que já existem como pacotes e adicioná-los à linha apt-get, isso economizaria muito tempo.

Imediatamente recebi um erro ao usar Alice informando que ele precisava de SSL, então adicionei o libnet-ssleay-perlpacote na linha certa.

Meu problema é que não quero executar a instalação e determinar manualmente quais módulos são necessários, procurá-los no arquivo e adicioná-los.

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

Responder1

Procurei no Makefile.PL e encontrei 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 pesquisar cada pacote individual. Eu nunca consegui descobrir uma maneira de descobrir os departamentos programaticamente, então procurei cada um manualmente.

informação relacionada