15

我需要在未连接到 Internet 的联网机器上安装基于 Perl 的软件。因此,我想下载 Perl 模块的特定版本和/或最新版本,并且我还想知道这些模块是否需要安装过程。

背景:
出于安全原因,这些机器没有连接到互联网,这也被认为是不必要的。

我会将下载的模块放在我称为“安装服务器”的机器上,它包含基于 Perl 的软件,还包含 Perl 模块的本地副本。

我将一台我想安装基于 Perl 的软件的机器称为“目标机器”,它也没有连接到互联网。可以有几台目标机器,每台机器都可以运行我要安装的这个软件。我登录到目标机器并运行一个安装脚本,该脚本将通过本地网络连接到安装机器,以获取基于 Perl 的软件和依赖的 Perl 模块并安装它们。

所以我需要知道:

  1. 如何/从何处获取特定版本的 Perl 模块,例如 CGI.pm 等
  2. 如何安装这些 Perl 模块。是否只是将它们放在某个目录中,例如库路径,并确保该目录路径位于 @INC 库路径环境变量中(如果还没有的话)?

作为安装模块的一部分,我宁愿不必做任何诸如 make install 之类的事情。我想根据需要对模块进行预编译或准备,以便尽可能简单地安装它们。我想避免其他依赖项,如 make 及其配置,并且必须解析其输出以检查它是否成功。

请通过询问上述具体问题来帮助我,因为我无法更改未连接到互联网的“安装机器”和“目标机器”的概念 - 我必须提供一个在这种安排下工作的解决方案。

4

3 回答 3

14

解决“我想从 CPAN 安装东西但没有网络”问题的常用方法是使用 minicpan,正如 David Dorward 在他的回答中所写的那样。但是由于您要更进一步,说您根本不想在客户端(目标)机器上进行任何实际安装,并且如果可能的话您想使用预编译模块,我敦促您检查PAR和特别是PAR::Repository(服务器)和PAR::Repository::Client

由于这种方法在您加快速度之前需要进行一些研究,所以我不会建议它用于“我只需要 Foo.pm”之类的问题。一旦您谈论少数依赖项和至少少数客户端,那么它就成为更合适的解决方案。

有关其工作原理的概述,请查看我在 YAPC::EU 2008 上的演讲幻灯片。它还暗示了使 PAR::Repository::Client 模块在客户端上可用的引导问题的解决方案(提示:PAR可以生成自包含的可执行文件)。

于 2009-12-09T13:53:13.437 回答
11

您可以创建一个包含 CPAN 中所有内容的最新版本的MiniCPAN您可以使用CPAN::Mini::Inject将其他非公共模块插入其中。如果您需要更好地控制版本(即不选择最新版本),您可能需要创建一个DPAN

使用这些解决方案中的任何一个,您都可以将 CPAN 客户端配置为从本地源中提取。这可能是您提前知道的目录,也可能是您动态计算的目录,例如 CD 或拇指驱动器。这只是正确设置配置的问题。

您可能能够为您的大部分工作创建操作系统包,但这仍然意味着您必须至少在第一次编译它们。

于 2009-12-09T15:01:19.703 回答
6

1) 如何/从何处获得特定版本的 Perl 模块,例如 CGI.pm 等

http://search.cpan.org/

如果您不想要最新版本,您可以按照面包屑中的链接获取较早版本。

http://img.skitch.com/20091209-bu7kt3bj65374k7iijfnhrue2y.png

2) 如何安装这些 Perl 模块。是否只是将它们放在某个目录中,例如库路径,并确保该目录路径位于 @INC 库路径环境变量中(如果还没有的话)?

有时会奏效,但你真的应该经历这个perl Makefile.PL && make && make test && make install过程。

这样做需要您手动跟踪所有依赖项。使用类似minicpan的东西可能会更好。

于 2009-12-09T11:42:07.123 回答