我正在使用Module::Build
部署的Perl应用程序。我需要通过CPAN安装许多模块,因为它们不能通过Ubuntu的软件包管理器获得 - 或者更确切地说,是我们所有服务器使用的内部apt-get镜像。虽然这对我们的开发服务器来说非常好,但是(可以理解)IT不愿意在没有内部缓存或以其他方式控制的生产机器上运行代码。
由于我们目前没有CPAN镜像,这基本上意味着我需要将所有这些非Ubuntu模块放在一个位置,以便它们可以存档和/或提交到版本控制。理想的解决方案是从源代码控制中检查实用程序,为数据库更改一些配置变量等,可以运行build / install命令,然后完成。幸运的是,开发服务器是生产服务器的克隆,因此使用XS或其他体系结构特定功能的模块不应该导致问题。
我认为最简单的处理方法是检查我需要的模块的源代码压缩包,并设置Module::Build
使用它们来解析其依赖关系,而不是寻找CPAN,但我不会看到一个选项。这是可行的,还是有另一种方法来整合我本质上离线部署所需的所有模块?
答案 0 :(得分:3)
正如上面的评论所述,Pinto可能会满足您的需求,因为它会创建您自己的CPAN回购。
平托有两个主要目标。首先,Pinto试图解决这个问题 CPAN镜像中的不稳定性。分发档案是 不断添加和删除CPAN,所以如果你用它来构建 系统或应用程序,您可能无法获得相同的结果两次。 其次,Pinto旨在鼓励开发人员使用CPAN工具链 用于建立,测试和依赖管理他们自己的本地 软件,即使他们从未计划将其发布到CPAN。
Pinto通过提供创建和创建工具来实现这些目标 管理您自己的分发存档自定义存储库。这些 存储库可以包含您喜欢的任何分发存档,也可以 与标准CPAN工具链一起使用。这些工具也支持 各种操作,使您能够处理常见问题 在开发过程中出现。
第二个答案
或者,如果您只是要部署到Ubuntu,您可以将CPAN模块 - 和您自己的模块转换为带有dh-make-perl的Debian软件包。然后,您可以使用reprepro在自己的仓库中托管它们。这样做的好处是你可以更新包并做一个
apt-get update
apt-get upgrade
在客户端计算机上,只要他们有自己的repo作为源
答案 1 :(得分:1)
答案 2 :(得分:0)
我不确定它有多常见,但我一直在使用perlbrew和Pinto来解决您正在讨论的一些问题。
使用perlbrew,我不会与“系统”perl交互。有一个应用程序perl和一个perl系统,我没有安装更高版本的模块的风险,它会以某种方式干扰系统perl正在做的事情。
使用Pinto,我已经知道CPAN模块的存档版本。
当我部署时,我构建一个perlbrew perl(带有别名,如“prod”或其他东西),然后使用Pinto存储库将所有必需的模块安装到perlbrew perl中。我目前使用cpan捆绑模块(该模块也进入Pinto仓库)来实现这一点,因此您只需从存储库安装捆绑包,它就会自动将所有依赖项放入其中。