我有一个perl脚本,我把它放在一起做一些监视和绘图。
它在我的开发系统上很好用,我可以从CPAN安装我自己的模块。
我正在做的是捆绑它以部署到另一个系统上。但是这里有一个问题 - 这个其他系统是“独立的”并且没有网络连接。 (我已经更改了控制文件,以填写,表明我正在安装什么)。
结果,我真的想要一个很容易理解的方法:
- 我的脚本正在使用哪些模块。 (包括依赖项)
- 如何轻松抓住它们(可能cpan get
)
- 有一种简单的方法可以告诉我正在使用的外部二进制文件吗? (我肯定使用ssh
和rrdtool
- 前者肯定是安装的,后者可能没有安装。
我对如何做到这一点有一些想法,但它让我觉得应该更平滑。
我可能还需要部署一个新的perl,所以我在思考我是否最好安装系统perl的模块(在RHEL5上可能是5.8.8),或者只是'整理'整个东西它是一个独立的perl实例的目录。
答案 0 :(得分:4)
使用pp将脚本和所有相关模块和库打包成独立的可执行文件。
pp -x yourscript.pl -o outputfilename
如果需要,请参阅文档以获取如何链接到外部共享对象(等)的示例。使用pp,在outputfilename
将运行的目标系统上不需要perl。
答案 1 :(得分:1)
重新审视这一点,因为需求并没有真正消失。我已经开始使用docker
- 这是一个'形象'和'容器'应用程序部署系统,除其他外,允许您打包'申请。
您创建一个Dockerfile
- 与Makefile
类似 - 贯穿安装perl
+依赖项的步骤(通过包管理器或CPAN)。< / p>
一旦有了,你就拥有了一个独立的,可运行的图像&#39;您可以克隆并创建(#&#34;容器&#34;在docker用语中)的实例。
它也非常有用 - 即使你不通过容器部署 - 来弄清楚这个应用程序/软件包的依赖性。容器中的版本具有所需的所有本地安装,因为它是一个干净的构建。
答案 2 :(得分:0)
当你拥有一个无法控制Perl安装的系统时(安装是真正的,非常旧的Perl版本,如5.8.8,它缺少很多很好的改进,比如state
个变量, autodie
,say
和switch
),您应该查看Perlbrew。
Perlbrew允许您安装Perl的用户版本。 (实际上,它允许您安装多个版本的Perl),并允许您在Perlbrew安装和正式安装的版本之间切换。它使Perl中的所有内容变得更加容易。
您可以更自由地安装新的Perl模块,您可以自己完成该任务,而不是等待IT部门为您完成。
我最终在我们的一个系统上使用它,其中Perl的原始版本并没有做我的Perl版本所做的事情。我最初要求我们的IT升级,但他们真的搞砸了升级。来回走动后,我只是问我是否可以安装Perlbrew。
哪一点很重要。总是请求许可。很多时候,IT部门非常乐意承担责任。他们不是Perl人,而CPAN是一个他们不想处理的世界。能够摆脱必须回答你的问题,并打电话来安装这个或那个Perl模块是一个很大的安慰。