在极其受限制的环境中安装基于perl的Web应用程序

时间:2016-11-04 18:28:48

标签: perl

因为我对@ikegami有一系列的评论,所以我清理了这个问题,希望它更容易理解。不幸的是,英语不是我的主要原因。语言。 :(

假设有一个环境:

  • 未安装任何开发工具(无make,也未gcc或类似)
  • perl 安装及其核心软件包,仅此而已
  • 不允许传出网络访问 - 例如用户无法使用curlcpan下载/安装perl依赖项
  • 用户甚至没有管理员(root)权利
  • 但要安装并评估一些基于perl的网络应用,请将其称为MyApp

MyApp

  • 不使用任何基于XS的模块。 (至少,我希望 - 在使用plenvcpanm进行开发时,所以从未检查过安装的依赖项)
  • 它是一个纯PSGI应用程序,简单plackup app.psgi正常工作
  • 该应用使用了一些数据文件,这些文件应包含在"部署"。

主要问题是: 如何准备MyApp以及所有使用过的CPAN模块,以便轻松安装在此类限制中环境?

目标是:

  • 我不需要保存我的工作和我的时间
  • 但我希望节省用户的时间并希望尽量减少他所需的操作,因此安装(部署)应该尽可能简单。

E.g。如何以最少的(他的)步骤将正在运行的web-app运送到用户的机器上。 - 最简单的事情可能是:    - 复制一个文件(zip或tarbal)    - 打开包装    - 从终端执行解压缩目录中的一些run.pl

要获得上述简单安装,我的想法如下:

1。)创建一个tarball,解压缩后将包含3个文件夹和1个perl脚本,请说:

myapp_repo/
myapp_repo/distlib   #will contain all MyApp's perl modules also ALL used CPAN modules and their dependecies
myapp_repo/datafiles #will contain app-specific data files and such
myapp_repo/install.pl
myall_repo/lib   #will contain modules directly used by the `install.pl`

2.)我将开发一个install.pl脚本,它将用作 installer-tool ,如

perl install.pl new /path/to/app_root

它将(应该):

  • /path/to/app_root下创建所有需要的目录(尤其是将安装perl模块的lib
  • 将致电" local" cpanm内部myapp_repo/lib仅使用distlib中的分发文件安装应用程序的perl模块及其CPAN依赖项。
  • 将生成并安装所需的运行时脚本,并将app.psgi安装到/path/to/app_root/bin
  • 将为应用安装所需的数据文件。

3。)因此,在此之后用户应该能够简单地运行:

/path/to/app_root/bin/plackup /path/to/app_root/bin/app.psgi

简而言之,用户应该使用:

  • 系统范围的perl和系统范围的perl-core模块
  • 和任何其他
    • 运行时perl脚本(如plackup
    • 和所需的CPAN模块
  • 应仅使用文件(无网络访问)安装到自包含目录树中。

E.g。 install.pl应该在内部调用cpanm来实现以下cpanm命令(等效)

cpanm --mirror file://path/to/myapp_repo/distlib --mirror-only My::App

应该只使用My::App

中的文件安装myapp_repo/distlib和所有依赖而不网络访问

有些问题:

  • 可以在没有cpanm的情况下使用make(称为本地安装的模块)吗?
  • 为了创建myapp_repo/distlib,我考虑使用Pinto。它是否是实现上述目标的正确工具?
  • 忘记了什么?或者换句话说:
  • 以上是可行的(阅读:工作)方式吗?
  • 是否是任何其他工具,我可以/应该使用它来简化这种分发tarball的创建?

@ikegami建议一些方法: - "安装所有东西"在我的机器上的一个新目录中 - 将此自包含目录传输到目标计算机

这听起来非常好,因为这个目录也可以包含所有需要的特定于应用程序的数据文件,遗憾的是,我不了解他的解决方案应该如何完成的细节。

FatPacked解决方案看起来也很有趣 - 需要了解它。

1 个答案:

答案 0 :(得分:1)

不要自己编写make或安装程序。只需从另一台计算机上复制make(这基本上就是apt / yum /等所做的事情,即使您自己编写也必须执行此操作) 。您可以在5分钟内使用cpan

此外,如果您需要,可以允许您安装gcc(例如安装XS模块),尽管它听起来并不像您那样。如果您确实安装了gcc,我就会安装自己的perl,以避免与PERL5LIB打交道。

minicpan等工具将允许您在没有互联网访问权限的情况下从CPAN安装任何模块。当然,如果镜像您需要的软件包,您可以继续使用已经使用过的命令。

以上说明了如何简单快速地设置机器,以便它可以使用cpan,从而轻松安装任何模块。

如果您只想安装特定模块及其依赖项,则可以完全避免在目标计算机上使用cpan。首先,您需要全新安装Perl(最好与目标系统上的版本相同)。然后,只需将模块安装到机器上的新目录上,然后将该目录传输到目标机器。就是这样;没有别的事情需要做。如果两台机器足够相似,这甚至适用于XS模块。

这是ppm(ActiveState&#39的Perl包管理器)所做的。

不幸的是,虽然这个解决方案几乎和上面的解决方案一样简单,但它不是那么灵活,它不会运行正在安装的模块的测试套件等。它确实具有优势不要求转移任何二进制文件(如果你没有安装任何XS模块)。