因为我对@ikegami有一系列的评论,所以我清理了这个问题,希望它更容易理解。不幸的是,英语不是我的主要原因。语言。 :(
假设有一个环境:
make
,也未gcc
或类似)perl
安装及其核心软件包,仅此而已curl
或cpan
下载/安装perl依赖项MyApp
MyApp
plenv
和cpanm
进行开发时,所以从未检查过安装的依赖项)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
)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
简而言之,用户应该使用:
plackup
) 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。它是否是实现上述目标的正确工具?@ikegami建议一些方法: - "安装所有东西"在我的机器上的一个新目录中 - 将此自包含目录传输到目标计算机
这听起来非常好,因为这个目录也可以包含所有需要的特定于应用程序的数据文件,遗憾的是,我不了解他的解决方案应该如何完成的细节。
FatPacked解决方案看起来也很有趣 - 需要了解它。
答案 0 :(得分:1)
不要自己编写make
或安装程序。只需从另一台计算机上复制make
(这基本上就是apt
/ yum
/等所做的事情,即使您自己编写也必须执行此操作) 。您可以在5分钟内使用cpan
!
此外,如果您需要,可以允许您安装gcc
(例如安装XS模块),尽管它听起来并不像您那样。如果您确实安装了gcc
,我就会安装自己的perl
,以避免与PERL5LIB
打交道。
minicpan
等工具将允许您在没有互联网访问权限的情况下从CPAN安装任何模块。当然,如果镜像您需要的软件包,您可以继续使用已经使用过的命令。
以上说明了如何简单快速地设置机器,以便它可以使用cpan
,从而轻松安装任何模块。
如果您只想安装特定模块及其依赖项,则可以完全避免在目标计算机上使用cpan
。首先,您需要全新安装Perl(最好与目标系统上的版本相同)。然后,只需将模块安装到机器上的新目录上,然后将该目录传输到目标机器。就是这样;没有别的事情需要做。如果两台机器足够相似,这甚至适用于XS模块。
这是ppm
(ActiveState&#39的Perl包管理器)所做的。
不幸的是,虽然这个解决方案几乎和上面的解决方案一样简单,但它不是那么灵活,它不会运行正在安装的模块的测试套件等。它确实具有优势不要求转移任何二进制文件(如果你没有安装任何XS模块)。