4

我正在开发一个打算使用Module::Build. 我需要通过 CPAN 安装一些模块,因为它们无法通过 Ubuntu 的包管理器获得——或者更准确地说,是我们所有服务器使用的内部 apt-get 镜像。虽然这在我们的开发服务器上一切都很好,但 IT (可以理解)不愿意在没有缓存或内部控制的生产机器上运行代码。

由于我们目前没有 CPAN 镜像,这基本上意味着我需要将所有这些非 Ubuntu 模块放在一个地方,以便将它们存档和/或提交给版本控制。理想的解决方案是从源代码控制中检查该实用程序,更改数据库的几个配置变量等,也许运行构建/安装命令,然后完成。幸运的是,开发服务器是生产服务器的克隆,因此使用 XS 或其他特定于体系结构的功能的模块不应该引起问题。

我认为处理这个问题的最干净的方法是检查我需要的模块的源 tarball 并设置Module::Build使用它们来解决它的依赖关系而不是寻找 CPAN,但我没有看到一个选项。这是可行的,还是有另一种方法来汇总我需要的所有模块以进行基本离线部署?

4

3 回答 3

3

正如上面评论中提到的,Pinto可能会满足您的需求,因为它会创建您自己的 CPAN 存储库。

Pinto 有两个主要目标。首先,Pinto 试图解决 CPAN 镜像的不稳定问题。分发档案会不断地从 CPAN 中添加和删除,因此如果您使用它来构建系统或应用程序,您可能不会两次获得相同的结果。其次,Pinto 试图鼓励开发人员使用 CPAN 工具链来构建、测试和管理他们自己的本地软件,即使他们从未计划将其发布到 CPAN。

Pinto 通过提供用于创建和管理您自己的自定义分发档案库的工具来实现这些目标。这些存储库可以包含您喜欢的任何分发档案,并且可以与标准 CPAN 工具链一起使用。这些工具还支持各种操作,使您能够处理开发过程中出现的常见问题。


第二个答案

或者,如果您只打算部署到 Ubuntu,您可以使用dh-make-perl将 CPAN 模块和您自己的模块转换为 Debian 软件包。然后,您可以使用reprepro将它们托管在您自己的存储库中。这样做的好处是您可以更新软件包并执行

apt-get update
apt-get upgrade

在客户端机器上,只要他们有你自己的 repo 作为源

于 2015-01-09T03:22:36.490 回答
1

查看Stratopan纸箱

另见:

于 2015-01-09T04:32:07.793 回答
0

我不确定它有多普遍,但我一直在使用perlbrewPinto来解决您正在谈论的一些问题。

  1. 使用 perlbrew,我不会与“系统”perl 交互。有一个应用程序 perl 和一个系统 perl,我没有安装更高版本的模块的风险,该模块会以某种方式干扰系统 perl 正在执行的操作。

  2. 使用 Pinto,我已经存档了我知道可以使用的 CPAN 模块版本。

当我部署时,我构建了一个 perlbrew perl(具有类似“prod”之类的别名),然后我使用 Pinto 存储库将所有必要的模块安装到该 perlbrew perl 中。我目前使用 cpan 捆绑模块(该模块也进入 Pinto 存储库)来促进这一点,因此您只需从存储库安装捆绑包,它就会自动将所有依赖项放入其中。

于 2016-10-06T15:11:56.797 回答