我想做cpanm SomeModule来安装SomeModule和大约10个依赖项,但是目标服务器没有互联网访问权限。我确实有一个非常相似的开发机器(相同的Perl环境,相同的Perl版本),其中cpanm能够下载它的源代码模块。
在学习了cpanm的手册页面后,我觉得可以在开发机器上创建一个tarball,并将其传输到服务器,并使用它一次性安装模块。
不幸的是,我似乎没有找到确切的组合。特别是,由于在dev机器上已经安装了模块,我需要强制它仍然将所有依赖项添加到tarball (当然不包括核心模块)。
有人能给出开发机器和目标机器的命令吗?
编辑:这是专门关于cpanm的。当然,如果您可以权威地说cpanm绝对不可能,那也是一个有效的答案.
编辑:到目前为止,注释和答案建议使用pinto或minicpan来创建一个CPAN模块源代码包。这很好用(尤其是pinto在这方面的使用非常简单)。我现在使用pinto来解决我当前的问题,但平托本身仍然有很多先决条件模块(与Perl相比>100)。我对这个问题的希望是,cpanm是一个独立的、没有安装的脚本,它可以自己完成它(它有广泛的选项,听起来像是它们可以进入这个方向)。这对于在没有大开销的情况下引导Perl安装是很好的。
发布于 2019-11-15 14:56:49
您可以使用纸箱在本地(在您的机器上使用internet访问)捆绑依赖项,然后使用Carton本身安装捆绑发行版,或者使用cpanm本身并指定包的位置。
您需要carton 1.0.32 (生成包索引)和cpanm 1.7016 ( --from选项)才能工作。
在分发的根目录中,您可以
$ carton install # will install the dependencies in `local`
$ carton bundle # will cache the dependencies in `vendor`
$ tree vendor/
vendor/
└── cache
├── authors
│ └── id
│ └── F
│ └── FO
│ └── FOOBAR
│ ├── Some-Dist-1.337.tar.gz
│ └── Another-Dist-0.001001.tar.gz
└── modules
└── 02packages.details.txt.gz稍后,在将其传输到另一台空隙计算机之后,您可以使用carton。
$ carton install --cached
$ carton exec scripts/your-script.pl或直接用cpanm安装
# To emulate carton:
$ cpanm -L local --from "$PWD/vendor/cache" --installdeps --notest --quiet .
# Or to install globally:
$ cpanm --from "$PWD/vendor/cache" .发布于 2016-09-13 14:22:04
您可以手动从CPAN或元盘下载所有依赖项的tars,然后按正确的顺序逐个复制并安装。这对十个模块来说是个小问题,但也不算太糟。你可以写剧本。
但是,您也可以使用微型锅创建一个只包含所需内容的本地小CPAN。这些都是很好的地方副本的一部分或全部的CPAN,例如在USB驱动器,当你需要安装一个模块时,而黑客在飞行代码。它本质上是一个包含更多目录和tars的目录。您只需选择所需的东西,将其压缩,移动到您的生产服务器,在那里解压缩并告诉cpanm从本地CPAN镜像安装。
https://stackoverflow.com/questions/39471985
复制相似问题