我正在尝试写一个 Juju 公式应用程序::爱丽丝,一个基于网络的 IRC 客户端。
根据安装说明我执行以下命令从 CPAN 中获取 Alice 及其所有依赖项:
curl -L http://xrl.us/cpanm | perl - --sudo App::cpanminus
cpanm --sudo --installdeps App::Alice
我写公式为了做到这一点,当它启动 EC2 实例时它会安装整个东西,这是我的安装钩子:
#!/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
问题是,在 m1.small 上,从 CPAN 中获取并构建所有内容需要大约 10 分钟。等待的时间太长了,尤其是如果我每次想要运行 Alice 时都要支付 10 分钟的计算时间!所以我在想,如果我可以安装已经作为软件包存在的 CPAN 模块并将其添加到 apt-get 行中,这将节省大量时间。
当我使用 Alice 时,我立即收到一个错误,提示需要 SSL,因此我将libnet-ssleay-perl
包添加到了正确的行中。
我的问题是我不想运行安装并手动确定它需要哪些模块,在档案中搜索它,然后添加它。
是否有一种工具或方法可以让我找出 Alice 需要哪些打包的模块,以便我可以从存档中安装这些模块,还是我需要去搜索每一个模块?
答案1
我查看了 Makefile.PL 并发现了以下内容:
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';
这使我能够搜索每个单独的包。我无法找到以编程方式查找依赖项的方法,因此我手动搜索每个包。