gpt4 book ai didi

perl - 在极为受限的环境中安装基于Perl的Web应用程序

转载 作者:行者123 更新时间:2023-12-02 08:28:07 30 4
gpt4 key购买 nike

因为我在@ikegami上有很多评论,所以我整理了这个问题,希望它会更容易理解。不幸的是,英语不是我的“主要”语言。 :(

假设有一个环境,其中:


没有安装开发工具(没有make,也没有gcc等)
perl随其核心软件包一起安装,仅此而已
不允许传出网络访问权限-例如用户无法使用curlcpan下载/安装perl依赖项
用户甚至没有管理员(root)权限
但要安装和评估一些基于Perl的Web应用程序,请将其称为MyApp


MyApp


不使用任何基于XS的模块。 (至少,我希望-在开发中使用plenvcpanm,所以不要深入检查已安装的依赖项)
这是一个纯PSGI应用程序,简单的plackup app.psgi正常运行
该应用程序使用了一些应包含在“部署”中的数据文件。


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

目标是:


我不需要节省我的精力和时间
但我想节省用户的时间,并希望将所需的操作减至最少,因此安装(部署)应尽可能简单。


例如。如何以最少的可能(他)步骤将正在运行的Web应用程序获取到用户的计算机。
-最简单的事情可能是:
-复制一个文件(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脚本,它将用作安装程序工具,例如

perl install.pl new /path/to/app_root


并且它将(应该):


/path/to/app_root下创建所有需要的目录(尤其是 lib将在其中安装perl模块的目录)
将内部(从 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模块

应该仅使用文件(不能通过网络访问)安装到独立的目录树中。


例如。 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解决方案看起来也很有趣-需要了解它。

最佳答案

不要编写自己的make或安装程序。只需从另一台机器上复制make(基本上就是apt / yum / etc要做的,即使您自己编写,也必须要做)。您将能够在5分钟内使用cpan

此外,尽管听起来不像您说的那样,但应允许您在需要时安装gcc(例如,安装XS模块)。如果您确实安装了gcc,则我将安装自己的perl,以避免不得不处理PERL5LIB

诸如minicpan之类的工具将使您无需Internet即可从CPAN安装任何模块。当然,如果镜像所需的软件包,则可以继续使用已经在使用的命令。



上面介绍了如何简单快速地设置机器,使其可以使用cpan从而轻松安装任何模块。

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

这就是ppm(ActiveState的Perl软件包管理器)的作用。

不幸的是,尽管该解决方案几乎与上述解决方案一样简单,但它却没有那么灵活,它不运行正在安装的模块的测试套件,等等。它的优点是不需要传输任何二进制文件(如果您没有安装任何XS模块)。

关于perl - 在极为受限的环境中安装基于Perl的Web应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40429573/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com