在同一台机器上安装 Homebrew 和 Macports 是否安全?

Ric*_*ich 81 package-management macports homebrew macos

我在 iMac 上安装了 MacPorts,并安装了相当数量的端口。

不过,我对试用 Homebrew 很感兴趣,因为我听说过很多关于它的好消息,并且因为我注意到它包含我使用的几个工具的更新版本。

但是两者可以在同一台机器上共存,还是我需要先完全卸载 MacPorts?

还有,如果两者可以同时安装,是不是就完全独立了?Homebrew 的特点之一是它不会重新安装系统中已经包含的东西的新版本(例如python)。这是否也扩展到不安装 MacPorts 已经维护的版本?

如果我随后卸载 MacPorts 会怎样?

mmm*_*mmm 24

它们不会很好地共存。Apple gcc 在 /usr/local 中查找某些内容。这意味着 macports 编译可以找到搬运工没有预料到的东西。有关在 /usr/local 中找到的内容的示例,请参阅 macports 邮件列表和错误。

  • 我只是粗略地看了一下自制软件,但是如果您将自制软件的默认安装位置从 /usr/local 更改为 /opt/homebrew/usr/local 之类的内容,是否可以避免该问题? (4认同)

rai*_*mue 19

我在一个类似的问题上给出了另一个答案

如果 Homebrew 安装在 /usr/local 中,则从源代码构建软件时会出现问题。这是默认值,这是一个糟糕的选择,因为此路径位于编译器和其他工具的默认搜索路径中。因此,从其他打包软件构建可能会选择错误的依赖项,使用 Homebrew 的版本而不是他们自己的版本。

多年前,在项目的最初阶段,甚至 MacPorts 也在使用 /usr/local。但事实证明,它没有与常见问题解答中记录的其他工具合作。不幸的是,Homebrew 开发人员不想听到之前的经验并忽略了这些事实......

一般来说,最好只使用一种工具来避免所有问题。MacPorts 正在尽最大努力修补任何硬编码的路径,例如 Fink 使用的 /sw。所以通常它会起作用,但是在 /usr/local 中安装任何东西肯定会导致问题。

[…]


Cha*_*art 8

我曾经认为,对 Gnu 构建工具将构成什么的担忧/usr/local近乎偏执。构建工具期望那里有很多东西:在包管理器出现之前的美好时光(我开玩笑),我们将任何东西编译到/usr/local. 但是,虽然 Autoconf 通常会解决问题,但许多开源项目的构建复杂性确实会导致问题,当您遇到困难时,这些问题很难解决。

但是 Autoconf 发现它不应该遇到的问题的风险/usr/local需要平衡维护滋扰有两个、三个或四个不同的 Perl、Tcl 和 Ruby 副本,每个副本覆盖不同的包库。不愉快。

由于我在 MacPorts 和 Fink 方面的经验通常正是由此引起的恼怒,并且在某些时候切换到以老式方式编译/usr/local. 我尝试将 MacPorts 配置为安装到/usr/local. 我理解这样做的动机是在处理他们的邮件列表和错误跟踪器上的求助呼声时让他们的生活更轻松:但是请注意,虽然我们应该尊重志愿打包人员的努力并将他们的时间视为宝贵的作为用户,调试便利并不是唯一影响您的简单性。

至少在这方面,Homebrew 以过去的方式做事,而 MacPorts 尽量不干涉。如果您愿意使用 Homebrew 记录您需要哪些软件包,并在遇到困难时将 /usr/local 擦干净并重新安装,那么您可以随时退出,以防出现严重问题。一旦您意识到 /usr/local 中的问题通常不会对您的机器造成永久性损坏的风险,您可能会更自由地承担风险。

我会注意到 OSX 上的包装比 FreeBSD 差多少:Apple 似乎并不真正关心其 BSD 子系统的可用性,因为这是他们可以帮助解决的问题。

  • @Raim:他们有很好的理由 - 在他们的错误跟踪便利性和在用户机器上安装的简单性之间几乎是一种权衡。我关心后者。 (3认同)
  • MacPorts 作为不使用 /usr/local 的充分理由,请参阅 http://trac.macports.org/wiki/FAQ#defaultprefix (2认同)
  • 由于某人(或某物)在 `/usr/local` 中安装了 $lib 的副本而导致出错的事情的数量是无穷无尽的。体系结构、版本、配置的功能和标志、部分安装、存在安全问题的过时安装以及和将导致问题。当然,如果您知道自己在做什么,请继续,但不要提交有关它的错误。经验表明人们无论如何都会提交错误,这正是跟踪模式(`-t`,见下文)存在的原因,以及为什么避免使用 `/usr/local` 是默认建议的原因。 (2认同)

小智 6

根据MacPorts 常见问题解答

请注意,从 2.3.0 开始,MacPorts 可以从端口的构建系统中自动隐藏 /usr/local(以及端口不依赖的所有其他文件)。此功能称为跟踪模式,通过向端口提供 -t 标志来激活,例如

sudo port -t install <portname>
Run Code Online (Sandbox Code Playgroud)

这是相关的,因为根据 Homebrew 安装页面:

Homebrew 相对于竞争对手有效的原因之一是因为我们建议安装到 /usr/local。选择另一个前缀有风险!

因此,在个人经验很少的情况下,我的理论是始终使用 -t 标志进行 MacPort 安装应该可以防止 MacPorts 和 Homebrew 在同一系统上共存的大多数问题。解决您的最后一个问题:我看不出卸载 MacPorts 会导致任何问题的任何原因。


pla*_*ang 5

在我使用端口多年的计算机上安装自制软件时,我可以阅读以下内容:

Warning: You have MacPorts or Fink installed:
  /opt/local/bin/port

This can cause trouble. You don't have to uninstall them, but you may want to
temporarily move them out of the way, e.g.

  sudo mv /opt/local ~/macports
Run Code Online (Sandbox Code Playgroud)

当心!