我需要在未连接到互联网的联网计算机上安装基于Perl的软件。因此,我想下载Perl模块的特定版本和/或最新版本,我还想知道这些模块是否需要安装过程。
背景
出于安全原因,这些机器没有连接到互联网,也认为这是不必要的。
我会将下载的模块放在我称之为“安装服务器”的计算机上,它包含基于Perl的软件,并且还包含Perl模块的本地副本。
我打电话给我想安装基于Perl的软件的机器,“目标机器”,也没有连接到互联网。可以有几台目标机器,每台机器都可以运行我想要安装的软件。我登录目标计算机并运行安装脚本,该脚本将通过本地网络连接到安装机器,以获取基于Perl的软件和相关的Perl模块并安装它们。
所以我需要知道:
作为安装模块的一部分,我不想做make install等任何事情。我希望模块可以根据需要进行预编译或准备,以便安装它们尽可能简单。我想避免其他依赖项,如make及其配置,并且必须解析其输出以检查它是否成功。
请通过询问上述具体问题来帮助我,因为我无法改变未连接到互联网的“安装机器”和“目标机器”的概念 - 我必须提供一个在此范围内工作的解决方案布置。
答案 0 :(得分:14)
解决“我想从CPAN安装东西但没有网络”问题的常用方法是使用David Daward在他的回答中写道的minicpan。但是,由于你要更进一步,说你根本不想在客户端(目标)机器上进行任何真正的安装,并且你想尽可能使用预编译模块,我建议你查看{{ 3}},特别是PAR(服务器)和PAR::Repository。
由于这种方法在你加速之前需要进行一些研究,我不会建议“我只需要Foo.pm”就像问题一样。一旦你谈论了一些依赖关系和至少一些客户端,那么它就变成了一个更合适的解决方案。
有关其工作原理的概述,请查看我在YAPC :: EU 2008上的演讲的PAR::Repository::Client。它还提示了解决使用PAR :: Repository :: Client模块的引导问题在客户端上(提示:PAR可以生成自包含的可执行文件)。
答案 1 :(得分:11)
您可以创建一个只有CPAN所有内容的最新版本的MiniCPAN。您可以使用CPAN::Mini::Inject将其他非公共模块插入其中。如果您需要更好地控制版本(即不选择最新版本),您可能需要创建DPAN。
使用上述任何解决方案,您都可以将CPAN客户端配置为从本地源提取。这可能是您提前知道的目录,也可能是您动态识别的内容,如CD或拇指驱动器。这只是正确设置配置的问题。
您可以为大多数工作创建操作系统软件包,但这仍然意味着您必须至少在第一次编译它们。
答案 2 :(得分:4)
1)如何/在何处获得特定版本的Perl模块,例如CGI.pm等
如果您不想要最新版本,可以按照面包屑中的链接获取早期版本。
http://img.skitch.com/20091209-bu7kt3bj65374k7iijfnhrue2y.png
2)如何安装这些Perl模块。这只是放置它们的情况 在某个目录中,例如一个库路径,并确保这一点 目录路径在@INC库路径环境变量中,如果 它还没有?
有时有效,但您确实应该完成perl Makefile.PL && make && make test && make install
流程。
执行此操作需要您手动追踪所有依赖项。使用minicpan之类的东西可能会更好。