2010-02-11 66 views
4

我在维护一个运行我们的基本服务器软件的自动安装的perl脚本。新的要求之一是安装Inline :: Java模块。在Linux上自动化Inline :: Java安装(Centos/Redhat)

我们通常的安装使用Yum的策略似乎失败了,因为yum中没有Inline :: Java。我无法找到它的RPM版本,因此无法作为RPM进行安装。唯一的选择似乎是通过CPAN安装或运送tar,并且有一个步骤可以识别SDK位置并运行'perl Makefile.PL J2SDK =;使;安装'。

本能地说,我认为这对于自动化安装有点不稳定,我曾经遇到过CPAN安装失败的问题,而且我不想在现场服务器上进行安装,但我无法想象更好的选择。

我考虑的另一个选择是运送.pm文件,将它放在用户定义的目录中并使用'use lib'将该文件定义为位置,但是由于Inline :: Java的工作方式,我不认为这是可能的,它需要InlineJavaServer的位置等等。

有没有人有更好的解决方案或意见上哪个是最好的?

回答

2

Inline::Java将查找InlineJavaServer.jar和它需要的其他文件与Inline/Java.pm文件位于同一位置。从一台机器上的安装目录复制整个发行版并将其复制到另一台机器(具有相同的体系结构)并不像听起来那么疯狂。如果你只有几个不同的系统(不是所有的linux,32位和64位,perl 5.6和perl 5.10等等),那么为每个系统制作一个单独的软件包是很容易的。

Inline::Java中有一些安装时配置,包括指定要使用的默认Java安装。但是这个(和其他默认配置)总是可以被环境变量覆盖,如PERL_INLINE_JAVA_J2SDK(完整列表见Inline::Java perldoc)。您可以将Inline::Java与您自己的自定义模块(比如 MyCompany::InlineJavaConfig)打包,该模块可以在Inline::Java模块在每个脚本中加载之前设置适当的环境变量。

还有一些其他安装配置,如是否配置JNI和其他本地支持。将支持这些功能的文件从一台机器复制到另一台机器可能有点复杂。但我想不出任何理由,它不会奏效。

+0

谢谢,我有人错过了这个环境变量。这个解决方案对我来说很有效,而且破坏很小。 – NeilInglis 2010-02-12 11:48:54

3

你可以将build your ownperl-Inline-Java打包并放在一个专用的yum仓库中,甚至可以将它提供给Fedora/EPEL。

+0

这可能是更好的答案,但我遇到了一些创建RPM的问题,并且由于时间紧迫,我采取了简单的选择并使用了复制目录策略。 我试着用cpan2rpm来创建RPM。我碰到的问题是Inline :: Java包装的动态性质,它似乎依赖于Inline :: Java-> find_default_j2sdk(它发现在构建时生成的文件),我无法重写。 这很可能是我的失败,我远离RPM专家。当我有空闲时,我可能会再试一次。 – NeilInglis 2010-02-12 11:48:21