2010-07-08 63 views
3

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

回答

6

如果可以的话,建立一个尽可能靠近系统的并行系统(就体系结构和perl版本而言),然后使用local::lib将所有依赖关系安装到单独的lib目录中。然后,您可以简单地将该目录scp到您的封闭系统,再次使用local :: lib(并设置一些环境变量),您的代码将能够使用该目录。

+0

我正在尝试这个,到目前为止它看起来不错。我会更新结果。 – 2010-07-08 18:59:46

+1

local :: lib模块很甜美。看起来不错。谢谢! – 2010-07-08 19:37:15

1

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

+0

这个环节并没有真正解决“因为我的服务器是穿着贞操带我不能使用CPAN”的问题。 – mob 2010-07-08 17:28:57

+1

是的,那很好。我想知道是否没有办法以某种方式获得CPAN需要的文件,将它们通过服务器SCP,然后让CPAN做它的事情。 – 2010-07-08 17:37:31

+0

一般来说,CPAN需要一个相当完整的开发环境,设置它可能会更麻烦。 – 2010-07-08 18:06:11

1

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

假设情况并非如此,您可以试着选择将并行系统设置为@Ether suggested。另一方面,如果您使用的模块及其依赖项是纯Perl模块,那么您应该可以使用PAR::Packer将脚本及其依赖关系和scp单个文件打包到主机上。

+0

你的意思是PAR :: Packer? App :: Packer :: PAR只是内部。 – tsee 2010-07-09 09:02:15

+0

@tsee唉!谢谢你的纠正。 – 2010-07-09 11:46:25

1

您是否尝试过cpan减号?如果没有,这是如何得到它。

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

你可以在local :: lib中使用它。 :-D

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

0

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

ssh [email protected] -R 3128:proxy_ip:3128 (for a tunnelling a Squid setup) 

然后在远程服务器上的CPAN

o conf http_proxy=http://localhost:3128 
o conf commit 
+0

PS这与防火墙后面的任何Internet需求都是相关的,而不仅限于Perl和CPAN。 – 2013-05-15 05:28:31