我有一台无法访问互联网的Linux服务器(防火墙阻止访问)。我想安装一个新的Perl。我有什么选择,最好的方法是什么?系统Perl(包含在OS安装中)必须保持不变。
我一直在使用perlbrew,我认为这是进行在线安装的最佳方式。但是perlbrew中涉及的所有步骤似乎都需要访问互联网:你从网上下载它,它从网上下载新的Perl版本等等。我还没有找到一个粘合剂如何让它脱机工作。
如果perlbrew不可能,我可以将Perl从源代码构建到服务器上的自定义位置。我认为这可能最终变得复杂,耗时且容易出错。每次我更新Perl时,我都会手动创建一个新版本。
还有其他安装方法,我目前还不知道。当然,我可以坚持使用Perl系统,但它是一个过时的版本,我已经在使用新的语法功能。或者我可以开始谈判以更改防火墙策略以允许perlbrew的互联网访问。
答案 0 :(得分:5)
但是perlbrew中涉及的所有步骤似乎都需要访问互联网
如果配置不正确,则不会。
要离线安装perlbrew,请安装App-perlbrew dist。手动关注its dependencies是一件苦差事,所以改为prepare a MiniCPAN mirror(-p
包含Perl dists),将其转移到目标计算机并configure CPAN to use the local mirror。运行cpan App::perlbrew
进行安装。
安装perlbrew后,运行其mirror
command将CPAN镜像配置为$PERLBREWROOT/Config.pm
。编辑此文件以将其更改为本地MiniCPAN镜像。将Perl dist tarball拖放到$PERLBREWROOT/dists/
。
请注意,编译Perl需要一个有效的C编译器工具链,以及libdb(BerkeleyDB)和gdbm的开发文件。 (阅读INSTALL
文件一次,即使perlbrew的自动配置和Perl的configure.SH
默认值隐藏了这些细节。)
编译器工具链可能更难以离线获取,除非之前已经使用过OS安装来编译其他C的东西。
答案 1 :(得分:2)
perlbrew没什么特别之处。如果您不打算使用它来下载Perl源代码,那么它并没有为您节省太多。获得Perl源代码后,您只需配置并安装它:
% ./Configure -des -Dprefix=/path/to/installation
% make install
完成后,Perl的所有内容都在该安装路径下。
我不喜欢perlbrew,因为它隐藏了人们这项任务非常简单,所以他们觉得他们不能自己做。
答案 2 :(得分:1)
您是否考虑过从不同方向攻击它?如果每次都要请求互联网访问,那么保持最新状态将是一件痛苦的事。同样,如果您错过了/错误配置了CPAN镜像中的任何软件包,那么在您实际尝试使用它们时很难纠正。
也许只需构建一个带有简化的linux + perl +模块的小型虚拟机。在最后保持最新状态,只需将全部内容放在USB记忆棒上即可。您将拥有一个易于安装的已知工作安装。
答案 3 :(得分:0)
我个人所做的是在我离线时(而不是休假)使用git checkout。一旦你有了整个git工作目录,通过检查标签来构建任何发布的版本是微不足道的:
git checkout v5.17.4
git clean -f # cleanup previously compiled .o files etc
sh ./Configure ...
根据您如何将文件传输到主机,这可能很方便,因为您还可以在那里设置私有git repo,以便其他计算机可以git push
新提交到那里。