【问题标题】:How 'bad' is replacing /usr/bin/perl with /usr/local/bin/perl on CentOS?在 CentOS 上用 /usr/local/bin/perl 替换 /usr/bin/perl 有多“糟糕”?
【发布时间】:2011-06-22 04:14:49
【问题描述】:

回答:基本上,如果你编译你自己的 perl 并且你按照你的操作系统所做的那样做的话,它可以在没有重大副作用的情况下完成。虽然这不是推荐的做法,但我已经能够像这样运行一个多月了。如果您知道自己在做什么,我会得出结论,这样做是相对安全的。

我们今天在工作中得出的结论是我们需要将 perl 升级到 5.10.0 CentOS 5.x 自带 perl 5.8.8。

我们确定使用#!/usr/bin/perl 维护脚本所涉及的努力是徒劳的。

根据 CPAN 和其他地方的一些安装内容,替换操作系统的 perl 版本不是一个“好”的主意。我已经更新了/usr/bin/ 中的链接。所以我的问题是,替换 /usr/bin/perl 到底有多糟糕?

我还没有注意到我们的系统有任何不利影响,但我准备在出现问题时立即更正链接(回到 5.8.8)。

我担心 CentOS 标准发行版中可能有一些模块未包含在 CPAN 的源 5.10.0 中。我仍在试图弄清楚这些模块可能是什么。

提前致谢。

【问题讨论】:

  • 为什么不把 shebang 行写成#!/usr/local/bin/perl
  • @Rafe,你可能有几十个甚至几百个脚本已经写了#!/usr/bin/perl。更新所有这些很麻烦。
  • 如果你更新它,最好使用#!/usr/bin/env perl,这将使用$PATH中的第一个perl,而不是硬编码一个特定的文件系统位置,这样你就可以永远不必再经历更新数百个脚本的痛苦(或者通过将它们安装在没有/usr/local/bin/perl...的服务器上来破坏它们)。
  • 这就是为什么所有 perl 框架都需要以 "#!/usr/bin/env perl' 开头,并且所有不以这种方式开头的 perl sn-ps 都需要被否决。跨度>
  • @cjm `find /dir/to/scripts *.pl | perl -p -i -e 's!/usr/bin/perl!/usr/bin/local/perl&g'。完成

标签: perl upgrade centos


【解决方案1】:

根据我的经验,最佳实践是自己从源代码编译整个堆栈(Perl、Apache、ImageMagick 等)。这使您可以完全控制使用哪些版本以及何时升级所有内容。

用您编译的替换/usr/bin/perl 是胡扯。操作系统可能正在使用 /usr/bin/perl 作为其维护的一部分,或者使用 init 脚本,因此更改它可能会使您的服务器变砖或导致奇怪的故障。

所以忽略系统 Perl,构建您自己的,并修复您的脚本以引用您的 Perl 版本。

【讨论】:

    【解决方案2】:

    通常较新版本的 Perl5 试图保持与旧版本的向后兼容性。但这不是 100% 保证的。例如,一个依赖于 Perl 5.8.8 中未定义行为的脚本(不应该发生但有时会发生),该行为在 5.10.0 下可能会有所不同。不过,假设不涉及其他因素,假设为 Perl 5.8.8 编写的脚本将在 5.10.0 下运行通常是相当安全的。

    但通常还有其他因素(模块、XS 代码的字节兼容性等)。可能的陷阱是巨大的。这并不意味着他们中的任何一个都会在这次复飞中阻碍你,但可能会出现问题。

    如果您已经在 /usr/local/bin 中获得了升级的 Perl,请继续使用它。但不要拆除或升级旧的 /usr/bin/ 版本。它只是一小块硬盘(按照今天的标准来说非常小)。

    顺便说一句,很多人都高度评价 perlbrew(CPAN 上的 App::Perlbrew)作为帮助维护多个 Perl 版本的工具。

    【讨论】:

      【解决方案3】:

      好吧,如果您决定更改 Perl 的安装位置,这完全取决于您和您喜欢的位置。但是,请记住,任何带有指向 #!/usr/bin/perl 的 shebang 行的脚本都可能会中断。

      我的建议是在您安装它之后,在 /usr/bin/perl 中创建一个指向您安装的新版本 Perl 的可执行文件的软链接。只是一个想法。它可以避免破坏任何东西。

      创建上面的链接肯定有助于避免@Mu 指出的“破坏您的服务器”的可能性。

      问候,

      杰夫

      【讨论】:

      • 继续并用链接替换它。为了安全起见,我将旧的 perl 移至 perl588 并对其进行备份。我们已经像这样运行我们的系统一个月了,没有明显的副作用。我会说这是相当安全的,因为我为每次系统升级都编译了 perl。
      猜你喜欢
      • 2013-04-22
      • 2014-08-05
      • 2011-11-28
      • 2014-12-17
      • 2023-03-05
      • 2021-03-25
      • 1970-01-01
      • 2011-03-12
      • 2022-11-18
      相关资源
      最近更新 更多