如何在受限服务器上安装Perl模块?

时间:2010-07-08 16:50:26

标签: perl cpan

我有一台服务器,我可以进入,但就是这样。否则它完全与外界隔绝。我正在尝试部署我写给它的一些脚本,但它们有几个Perl依赖项(Params :: Validate,XML :: Simple等)我无法通过yum获取它们,因为我们的卫星服务器没有这些包并且正常的CPAN安装将不起作用,因为主机受到如此限制。移动模块源并进行编译非常繁琐。我已经这样做了一天多,试图解决依赖关系,看不到尽头。有没有办法解决?非常感谢任何帮助。

5 个答案:

答案 0 :(得分:6)

如果可以的话,尽可能将并行系统(对于架构和perl版本)设置为封闭系统,并使用local::lib将所有依赖项安装到单独的lib目录中。然后你可以简单地将该目录scp到你的封闭系统,再次使用local :: lib(并设置一些环境变量),你的代码将能够利用该目录。

答案 1 :(得分:1)

请参阅this,它解释了可用于将CPAN模块投入生产的多种方法。

答案 2 :(得分:1)

如果您可以更改您的托管服务提供商,这将是转换的好时机;-)(我个人认为Linode rocks!)。

假设情况并非如此,您可以尝试将并行系统设置为@Ether suggested

另一方面,如果您使用的模块及其依赖项是纯Perl模块,那么您应该能够使用PAR::Packer打包脚本及其依赖项,并scp将单个文件打包过来对主持人。

答案 3 :(得分:1)

你试过cpan减去吗?如果没有,这是如何得到它。

curl -L http://cpanmin.us | perl - App::cpanminus

您可以将它与local :: lib一起使用。 :-D

Chromatic有一个great post关于如何在受限制的系统上获得更新的(和多个)perl版本。

答案 4 :(得分:0)

我使用SSH隧道从远程服务器隧道回到本地代理服务器。这样你就可以安装你需要的任何模块。 只需将http_proxy变量设置为本地计算机远程转发的本地端口(如果这有意义)。

即。

ssh user@remote -R 3128:proxy_ip:3128  (for a tunnelling a Squid setup)

然后在cpan

中的远程服务器上
o conf http_proxy=http://localhost:3128
o conf commit