perl 有没有一种方法可以保存来自cpanm安装模块的二进制工件,以便分发到类似的系统?

z31licg0  于 2023-04-06  发布在  Perl
关注(0)|答案(1)|浏览(141)

我正在使用脚本从基础Amazon Linux 2导入开始在wsl中创建映像。以下是一些脚本。{{THIRDPARTYCACHE}}标签被替换为持久存储的路径,持久性在于它通过分发注销(映像销毁)而生存:

sudo yum -y --setopt=cachedir={{THIRDPARTYCACHE}}/yum/cache install \
dejavu-sans-fonts.noarch \
freetds \
mailx \
moreutils \
nmon \
perl-Archive-Zip \
perl-Class-Accessor \
perl-DateTime \
perl-DateTime-Format-Strptime \
perl-DBD-MySQL \
perl-DBI \
perl-Digest-SHA \
perl-GD \
perl-JSON \
perl-libwww-perl \
perl-Log-Log4perl \
perl-LWP-Protocol-https \
perl-parent \
perl-XML-Parser \
pigz \
rng-tools \
ruby \
smem \
sysstat \
tree \
nmap-ncat \
git \
git-lfs \
xorg-x11-server-Xvfb \
wget \
openssl11 \
"perl(Data::Dump)" \
libXtst \
which \
perl-Coro \
perl-AnyEvent-AIO \
perl-PadWalker \
perl-App-cpanminus \
net-tools \
nss-tools 

sudo yum -y --setopt=cachedir={{THIRDPARTYCACHE}}/yum/cache group install "development tools"
sudo cpanm --no-test Perl::LanguageServer

最后两行花费了大量的时间,并成功地实现了安装perl模块Perl::LanguageServer的预期结果。cpanm的最后一条消息是:已成功安装Perl-LanguageServer-v2.5.0 48个已安装的发行版
我正在寻找一种方法,我可以缓存Perl::LanguageServer(沿着它的所有依赖项),允许潜在地跳过开发工具组安装和模块的编译/构建及其所有依赖项的能力。

mctunoxg

mctunoxg1#

@ikegami的建议是制作完整的Perl模块安装包,这是一个很好的建议。这也可以让你稳定安装,因为主要的CPAN工具更喜欢尽可能地升级;如果你可以做软件包,那就做吧。在某个单独的目录中,为你的项目安装一个perl,安装其中的所有模块,并将该目录打包到你的软件包中。
Emil Perhinschi在Twitter上提醒我DhMakePerl是存在的。Debian的人有很好的工具来制作Perl包。我知道你说你在Amazon Linux上(我想是基于RedHat或Fedora),但其他人可能会发现这些工具很方便。我不太了解打包。
但是,除了部署软件包之外,您可以通过不测试模块来加快cpancpanm的安装速度。您可能想知道它们是否工作,但您只需要执行一次:

% cpan -T ...
 % cpanm --notest ...

cpan上使用cpanm意味着您可以跳过下载非常大的数据文件,但cpanm意味着更多的网络连接。
如果你想自己托管所有的模块(比如说,在一个MiniCPAN中),你可以减少下载模块的时间。
最后,在你想要使用的第三方模块的数量和你的部署的容易性之间有一个平衡。不同的人对此有不同的容忍度。考虑一下你是否真的需要你使用的一些模块,以及这是否会给系统管理员带来太多的痛苦。使用一个模块可能会带来几十个其他的发行版作为依赖(对于Test::* 模块来说尤其如此)。MetaCPAN显示依赖关系。例如,如果你只想要当前的年份,你真的需要DateTime吗?

相关问题