修复 macports 故障

修复 macports 故障

我尝试安装一些软件包并出现以下错误:

$ sudo port install pkgconfig
--->  Computing dependencies for pkgconfig
--->  Dependencies to be installed: libiconv
--->  Installing libiconv @1.14_0
Error: org.macports.install for port libiconv returned: no destroot found at: /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_textproc_libiconv/libiconv/work/destroot
Error: Failed to install libiconv
Please see the log file for port libiconv for details:
    /opt/local/var/macports/logs/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_textproc_libiconv/libiconv/main.log
Error: The following dependencies were not installed: libiconv
To report a bug, follow the instructions in the guide:
    http://guide.macports.org/#project.tickets
Error: Processing of port pkgconfig failed

这似乎是 macports 的问题。所以我尝试更新端口。它抛出了同样的错误(未找到 destroot):

$ sudo port upgrade outdated
--->  Installing expat @2.1.0_0
Error: org.macports.install for port expat returned: no destroot found at: /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_textproc_expat/expat/work/destroot
Please see the log file for port expat for details:
    /opt/local/var/macports/logs/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_textproc_expat/expat/main.log
Error: Problem while installing expat
To report a bug, follow the instructions in the guide:
    http://guide.macports.org/#project.tickets

我试过sudo port selfupdate,但没有用。不过还是管用的。例如,sudo port -v selfupdate当我尝试通过 安装 expat 时,我得到了以下信息:sudo port install -fp expat

no destroot found at: /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_textproc_expat/expat/work/destroot

该错误提示我查看它创建的日志,可以在这里找到:http://pastebin.com/H39VTf7b。尽管我使用 sudo 运行命令,但它仍然涉及用户权限。

之后,我尝试手动创建 expat 目录。然后它失败了,告诉我它没有 ncurses 的 destroot。也创建了它(以及 chown 到 macports)。现在它为 gawk 失败了(日志文件:http://pastebin.com/E5w66mqe)。我无法遍历所有依赖项并为它们创建目录。我也不知道如何解决这个问题。我尝试将 macports 文件的所有者更改为“macports”,但没有结果。

编辑:我还重新安装了命令行工具。仍然没有结果。

答案1

当先前从二进制存档安装失败时,会发生“未找到 destroot”错误(至少我是这样认为的,我还没有深入研究并修复它,因为到目前为止我无法重现)。

无论如何,解决方案不是手动操作,而是运行sudo port clean $portname并重试。这是每次构建失败时您应该尝试的第一件事,它可以 100% 修复“未找到 destroot”错误。

顺便说一句,安装或升级时不应使用-p开关。在这种情况下,它被认为是有害的。它不会被删除,因为它对一些不相互依赖的操作很有用,例如sudo port -p fetch outdated。MacPorts 通常会强制重建未做任何更改的端口,以便获取依赖项的更新版本。如果您运行sudo port -p upgrade outdated该命令,即使依赖项的更新版本无法构建,也会导致重建,这违背了升级的初衷。

您的 gawk 安装失败,因为您的/opt/local/bin/xz二进制文件已损坏,并且无法提取源代码:

:info:extract dyld: Library not loaded: /opt/local/lib/libiconv.2.dylib
:info:extract   Referenced from: /opt/local/lib/libintl.8.dylib
:info:extract   Reason: Incompatible library version: libintl.8.dylib requires version 8.0.0 or later, but libiconv.2.dylib provides version 7.0.0

讽刺的是,当您使用 运行升级时,这种情况确实会发生-p。要修复此特定错误,您需要重建端口gettextsudo port -nf upgrade gettext。您还应该运行sudo port rev-upgrade以发现类似问题并自动修复它们(或至少尝试修复)。

答案2

附注:如果 Python 相关包显示 destroot 错误,请检查 pip 的双重安装。在我的特定情况下,我安装了 py27-funcsigs 作为端口包,并且还安装了 funcsigs 和 pip。我必须先删除 pip 版本。

sudo -H pip uninstall funcsigs
sudo port clean py27-funcsigs
sudo port install py27-funcsigs

希望这可以帮助。

相关内容