14

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

但是,我可以将任何内容下载到我工作的 Window 机器上,然后上传到该服务器上的文件共享中。于是我开始一一拉下DateTime依赖。我会下载一个模块,有时它会有 Makefile.PL,有时它会有 Build.PL。然后我将每个 Build 或 Makefile 重新设置为我的 INSTALL_BASE,测试每个模块。我做了大约 20 个模块,而且这些树似乎扩展到更小的类,而且看不到尽头......

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

4

4 回答 4

11

到目前为止最有效的方法是制作一个 minicpan ,在 linux 机器上安装cpanmlocalcpanm并别名如下:

alias localcpanm='cpanm --mirror file:///Users/Shared/cpan/ --mirror-only'

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

于 2013-06-20T08:00:14.983 回答
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

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

于 2013-06-25T17:12:14.493 回答
1

这个问题有一些解决方案,例如Carton就像 ruby​​ 的捆绑器,或者Pinto旨在成为您自己的私有 CPAN(据我所知)。

于 2013-06-23T03:27:19.040 回答
1

我在工作中使用的一种解决方案是拥有一个带有 perlbrew 的开发服务器、一个 Perl + 模块和每个应用程序的应用程序,所有这些都在一个 git repo 中。在生产机器上访问 git 存储库是部署应用程序和使用标签在版本之间切换所需的全部内容。

于 2013-06-25T16:04:04.170 回答