
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-perl
pacote 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.