如何在没有Internet连接的机器上安装Perl模块?

如何在没有Internet连接的机器上安装Perl模块?,perl,download,module,installation,local,Perl,Download,Module,Installation,Local,我需要在未连接到internet的联网计算机上安装基于Perl的软件。因此,我想下载Perl模块的特定版本和/或最新版本,还想知道这些模块是否需要安装过程 背景: 出于安全原因,这些机器没有连接到互联网,这也被认为是不必要的 我将下载的模块放在一台我称之为“安装服务器”的机器上,它包含我的基于Perl的软件,还包含Perl模块的本地副本 我将一台我想安装基于Perl的软件的机器称为“目标机器”,也没有连接到internet。可以有几个目标机器,每个机器都可以运行我要安装的软件。我登录到目标机器并

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

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

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

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

所以我需要知道:

  • 如何/从何处获取Perl模块的特定版本,例如CGI.pm等
  • 如何安装这些Perl模块。是否只是将它们放在某个目录中,例如库路径,并确保该目录路径位于@INC library path环境变量中(如果尚未位于该环境变量中)
  • 我宁愿不做任何事情,如使安装等作为安装模块的一部分。我想预先编译或准备必要的模块,以便尽可能简单地安装它们。我希望避免像make和它的配置这样的附加依赖,并且必须解析它的输出以检查它是否成功

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

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

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

    2) 如何安装这些Perl模块。这是一种仅仅放置它们的情况吗 在某个目录中,例如库路径,并确保 目录路径在@INC library path环境变量中,如果 还没有

    有时会起作用,但您确实应该经历
    perlmakefile.PL&&make&&make-test&&makeinstall
    过程

    但要做到这一点,需要手动跟踪所有依赖项。解决“我想从CPAN安装东西,但没有网络”问题的通常方法是使用minicpan,如David Dorward在回答中所述。但是,由于您更进一步,说您根本不希望在客户端(目标)机器上进行任何实际安装,并且如果可能的话,您希望使用预编译模块,因此我敦促您签出,特别是(服务器)和

    因为这种方法需要一些研究才能跟上速度,所以我不建议将其用于“我只需要Foo.pm”之类的问题。一旦您讨论了少数依赖项和至少少数客户机,那么它将成为一个更合适的解决方案

    要了解它的工作原理,请查看我在YAPC::EU 2008上的演讲。它还提示了解决PAR::RealSt::Client模块在客户端上可用的引导问题的解决方案(提示:PAR可以生成自包含的可执行文件)。您可以使用将其他非公共模块插入其中。如果您需要更好地控制版本(即不选择最新版本),则可能需要创建一个新版本

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


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

    您应该在回答中强调minicpan。这是解决这个问题的正确方法。@David Dorward-谢谢你在我发布问题后这么快就回复我。正如在最初的问题中提到的,我希望避免make-install等,因为它增加了复杂性,因为我必须手动查找依赖项,我必须确保make存在并正确工作。如果有一个一致、健壮的自动化系统能够干净地处理make的所有结果,我会很乐意遵循这个过程。如果make必须用于提供预编译模块以满足程序的依赖性,那么将Perl称为可移植的intepreted语言似乎是不诚实的。进一步阅读后,我发现模块可能包含C代码,这可以解释为什么make是必要的。遗憾的是,它确实为精确定义配置管理和安装过程添加了更多的步骤。Rob:对于许多简单的模块,将.pm文件复制到@INC目录的适当子目录中确实有效。但是这种方法充满了危险。@Rob:Perl是可移植的,但这并不能阻止人们用它创建不可移植的东西。CPAN只是第三方代码。谢谢tsee的回答。在这个阶段,本地CPAN镜像可能不是适合我的解决方案,因为我有一个相当小的特定模块列表,我希望获得这些模块以满足我的程序的依赖性。此外,我不“拥有”本地CPAN将驻留的机器,并且可能在那里