我们是否应该让 Perl 下载并安装自己的模块?

CPAN,即 Comprehensive Perl Archive Network(综合 Perl 存档网络),是遍布全球的 Perl 软件存档网络。 Perl 5.6.x 版本包含一些模块(包括 CPAN 和 CPAN::FirstTime),这些模块允许它从 Internet 上的 CPAN 站点获取 Perl 模块,验证其校验和,甚至使用 gcc 进行编译。 深入描述 CPAN 和 Perl 的 CPAN 功能超出了本文的范围,但我有一个提示和一个警告要提供。

首先是提示。 要安装 Example::Module 模块(不是真正的 Perl 模块),您需要输入命令

perl -MCPAN -e 'install Example::Module"

如果您是第一次使用 -MCPAN 标志,则会触发 CPAN::FirstTime 模块,并且会要求您选择 Perl 如何从 CPAN 获取和安装模块的各种选项。 这些都是措辞恰当的问题,并提供了合理的默认值。 但是,请务必注意此命令执行时的输出:您正在安装的模块可能依赖于其他模块,并且可能需要您返回并执行,例如,输入

perl -MCPAN -e 'install Example::PreRequisite"

然后再尝试安装第一个模块。

现在是警告:使用 CPAN 的安全性与其他任何 Internet 来源下载和安装任何其他软件的安全性并没有什么不同。 我个人认为 CPAN 实用程序看起来相当安全; 在安装之前,每个下载的模块都会自动根据包含密码学上很强的 MD5 哈希值的校验和进行检查。

但是,即使假设给定软件包的校验和可能不会与被篡改的模块一起被替换(这是一个很大的假设),这一切所能防止的也只是软件在被其作者上传到 CPAN 后未经授权的更改。 没有任何东西可以阻止一个邪恶的注册 CPAN 开发人员(任何人都可以注册成为开发人员)上传恶意代码以及有效的校验和。 请注意,也没有任何东西可以阻止那个邪恶的开发人员将坏东西发布到 SourceForge 或 Freshmeat。

因此,我希望我没有在赘述这一点,如果您真的想变得偏执,那么安装给定 Perl 模块最安全的方法是

  1. 在 http://search.cpan.org/ 上识别/找到该模块。
  2. 点击链接到 CPAN 上该模块的页面。
  3. 从其开发人员的官方网站(在上述步骤 2 中提到的网页上的“作者信息”下找到)下载该模块,而不是从 CPAN 下载。
  4. 如果可用,也下载开发人员为刚下载的 tarball 提供的任何校验和或哈希值。
  5. 使用 gpgmd5 等来验证 tarball 是否与哈希值匹配(嗯,这本身可能就是一个很好的 Paranoid Penguin 专栏)。 除了 md5 之外,软件分发商还普遍使用几种不同的完整性检查方法,但很少有最终用户普遍使用它们。
  6. 解压缩并展开 tarball,例如,
tar -xzvf groovyperlmod.tar.gz
  1. 如果您是一位正义的偏执功夫大师,或者渴望成为一位,请查看源代码是否存在疏忽和/或恶作剧行为,将您的发现报告给开发者和/或整个世界,并在开源社区的敬畏和感激之情中沐浴。(只有当人们费心去检查时,开源代码才是真正开放的!)
  2. 按照模块的构建和安装说明进行操作,通常包含在一个名为 INSTALL 的文件中,通常类似于
perl ./Makefile.PL
make
make test
make install

请注意,如果 swatch 的 Makefile.PL 脚本提醒您需要哪些模块,那么要使用偏执安装方法,您需要记下所需的模块名称,然后在安装模块和重新运行 swatch 的 Makefile.PL 之前终止该脚本(通过普通的 Ctrl-C)。

实际上,还有第三种安装缺失 Perl 模块的方法:从您的 Linux 发行版的 FTP 站点或 CD-ROM 安装。 虽然没有一种方法能接近 CPAN 的选择,但大多数 Linux 发行版都打包了最流行的 Perl 模块的版本。 请参阅下表,了解您需要的 swatch 模块以及 Red Hat 7 和 Debian 2.2 中包含它们的软件包。

swatch 模块

这些内容可能看起来与 swatch 没有什么特别的关联,而且确实如此,但它很重要——越来越多的实用程序要么作为 Perl 模块发布,要么作为依赖于 Perl 模块的 Perl 脚本发布,因此 swatch 很可能不会是您安装的最后一个基于 Makefile.PL 的实用程序。 了解所有这些模块疯狂行为的一些后果值得我花这么多笔墨,相信我。

© . All rights reserved.