我在 FreeBSD 上使用 ports 系统。使用 ports 升级 Perl 的最简单方法是什么?我目前卸载了所有 perl 及其依赖项。我认为应该有一种很酷的方法来升级 Perl 及其所有依赖项。那会是什么?
答案1
请参阅 /usr/ports/UPDATING 中来自 20120630 的条目,其中详细说明了如何使用 portmaster 或 portupgrade 执行此操作
答案2
这是...更手动的方法。
perl-after-upgrade 应该可以解决大多数文件的问题(除了像 irssi 这样的二进制文件),然而我发现它不再那么好用了,所以我只能手动完成所有操作。
在升级 perl 之前,我会关闭所有依赖它的程序,因为在升级过程中,这些程序可能会出问题。对我来说,这通常意味着关闭 SpamAssassin,实际上我只需要花几分钟关闭 postfix 即可。
我还将转储当前对 perl - 的依赖列表pkg info -r perl
,以防您必须退回到手动升级所有内容。
首先,构建并安装 perl 版本。所有 perl 模块都将被破坏,因为它们仍安装在旧的 perl 目录中。使用 portmaster 或 portupgrade 强制重建所有 perl 模块:portmaster p5-
对我来说很管用。
然后查找依赖于 perl 的二进制文件,这些文件已损坏 - 我使用 libchk 来完成此操作。只需运行它并查找具有无法解析的 libperl.so 引用的二进制文件。pkg which
如果从名称上看不出来,请使用它找出安装了该二进制文件的端口,然后使用 portmaster 或 portupgrade 重建该端口。
您可能可以开始恢复基于 perl 的服务,例如 SpamAssassin。
然后我去查看 /usr/local/lib/perl5 目录,看看是否还有不应该存在的文件。pkg which
再次找出它们来自哪里,升级这些端口,重复此操作,直到它为空或每个文件都无人认领。
portmaster -r perl-
是实现此目的的廉价且简单的方法,但这可能会花费数小时来重建实际上不需要重建的东西。 这种方法可能要快得多,但工作量要大得多,需要多一点的调整。