【问题标题】:How to bundle modules for an offline server with cpanm如何使用 cpanm 为离线服务器捆绑模块
【发布时间】:2016-09-13 14:00:23
【问题描述】:

我想做cpanm SomeModule 来安装SomeModule 以及大约10个依赖项,但是目标服务器无法访问互联网。我确实有一台非常相似的开发机器(相同的 Perl 环境,相同的 Perl 版本),cpanm 能够下载它的源模块。

看了cpanm的man page,感觉可以在开发机上创建一个tarball,传到服务器,用它一口气安装模块。

不幸的是,我似乎没有找到它的确切组合。特别是,在开发机器上已经安装了模块,我需要强制它仍然将所有依赖项添加到 tarball(当然不包括核心模块)。

谁能给开发机器和目标机器的命令?

编辑:这特别是关于cpanm。当然,如果您可以权威地说cpanm绝对不可能,那也是一个有效的答案......

编辑:到目前为止的 cmets 和答案建议使用 pintominicpan 创建 CPAN 模块源包。这很好用(尤其是pinto 用起来很简单)。我现在使用pinto 来解决我当前的问题,但是,Pinto 本身仍然有很多必备模块(与 Perl-Core 相比>100 个)。我对这个问题的希望是cpanm,它是一个独立的、无需安装的脚本,可以自己完成(它有很多选项,听起来像是他们可以朝那个方向发展)。这对于在没有大量开销的情况下引导 Perl 安装非常有用。

【问题讨论】:

标签: perl bundle offline cpanm


【解决方案1】:

您可以从 CPAN 或 metacpan 手动下载所有依赖项的 tars,然后复制它们并以正确的顺序一一安装。这对十个模块来说有点工作,但还不错。你可以写一个脚本。

但您也可以使用minicpan 创建仅包含您需要的内容的本地小型 CPAN。拥有部分或全部 CPAN 的本地副本非常棒,例如当您在飞行中破解代码时需要安装模块时,在 USB 驱动器上。它本质上是一个包含更多目录和 tar 的目录。你可以选择你需要的东西,压缩它,把它移动到你的生产服务器,在那里解压,然后告诉 cpanm 从本地 CPAN 镜像安装。

【讨论】:

  • 我实际上创建了带有完整 CPAN 镜像的 USB 驱动器,以便在 2013 年柏林的德国 Perl 研讨会上作为赞助商品赠送它们。这些都受到高度赞赏。主要是因为它们是免费的 USB 驱动器(我认为...)。
  • 是的,当然我可以手动下载模块或使用其他东西。这个问题专门针对cpanm
  • @AnoE 我明白了。无论如何我都会留下这个,将来可能对人们有所帮助。
  • 当然,做我的客人。 ;)
【解决方案2】:

您可以使用 Carton 在本地捆绑依赖项(在您可以访问 Internet 的计算机上),然后使用 Carton 本身安装捆绑的发行版,或使用 cpanm 本身并指定捆绑位置。

你需要carton1.0.32(生成包索引)和cpanm1.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" .

【讨论】:

    猜你喜欢
    • 2014-04-12
    • 2014-03-07
    • 1970-01-01
    • 1970-01-01
    • 2018-04-12
    • 2021-01-17
    • 2015-07-27
    • 2018-06-25
    • 2015-12-26
    相关资源
    最近更新 更多