在没有CPAN网络访问的计算机上安装具有大量依赖关系的Perl模块

fra*_*ank 13 perl cpan

我正在尝试在Linux服务器上安装DateTime机器.不幸的是,这个Linux服务器有一些限制的网络访问策略,阻止我直接使用CPAN shell下载内容或安装cpanminus.更改访问策略是我无法控制的,所以我正在寻找一种解决方法.我也没有root访问权限.

但是,我可以将任何内容下载到我工作的Window机器上,然后上传到该服务器上的文件共享.所以我开始逐个删除DateTime依赖项.我会下载一个模块,有时它会有Makefile.PL,有时它会有Build.PL.然后我将每个Build或Makefile重新绑定到我的INSTALL_BASE,测试每个模块.我做了大约20个模块,树木似乎扩展到更小的类,看不到尽头......

我希望你能告诉我一个更好的方法.有没有办法可以从具有所有DateTime依赖关系的CPAN访问权限(即我的Windows框)的机器下载到一个巨大的Perl包中,将其上传到Linux服务器,并在那里运行CPAN(无网络访问)把东西放在正确的地方?谢谢.

sin*_*ish 10

到目前为止最有效的方法是制作一个 minicpan,在linux机器上安装cpanm并使用以下内容替换localcpanm:

alias localcpanm='cpanm --mirror file:///Users/Shared/cpan/ --mirror-only'
Run Code Online (Sandbox Code Playgroud)

我已经在长途火车旅行中使用了这种技术,并且网络访问不完整,取得了巨大的成功.


Dia*_*ius 9

第一步是自动下载所有依赖项.您可以cpanm在网络连接的机器上执行此操作:

cpanm -L /dev/null --save-dists dists --scandeps DateTime

这会生成一个依赖项列表,但更重要的是将它们下载到dists目录中.的-L /dev/null,它不讲究模块,确保已安装.

dists按原样复制到受限制的框中.

然后,cpanm在受限制的盒子上使用以执行本地安装:

cpanm --mirror file:///path/to/dists -L foo DateTime

其中/path/to/distsdists目录的绝对路径.这会将东西安装到foo目录中.