将预装的应用程序/软件包转换为Homebrew



我真的很喜欢Homebrew。然而,在我了解神奇的OSX软件包管理器之前,我一直在安装时遇到问题。

我得到的是:

Error: The linking step did not complete successfully
The formula built, but is not symlinked into /usr/local
You can try again using `brew link [name]'

这当然也失败了。也许我错过了什么——我觉得这个问题应该在某个地方被问到,但我找不到。卸载该应用程序的Homebrew版本,然后在其上运行brew link也会失败(因为/usr/local/Cellar中没有keg)。

这是配方作家的问题,而不是Homebrew本身的问题吗?Homebrew提供的许多软件似乎也不是那种简单的卸载过程,这可能是问题的一部分。

我已经能够通过删除最初(Homebrew之前)安装时放置的文件来完成一些工作。这只是非常耗时,我希望有一些更自动的东西。

做你想做的事真的没有什么是自然而然的。如果你仔细想想,真的不可能——如果你在没有包管理器的情况下安装了一些东西,就没有安装过程的记录,所以没有办法自动卸载它

在某些情况下,您可以直接cd到源代码中并"进行卸载"。在其他情况下,您可以查看brew将要安装的内容,并假设预brew安装创建了完全相同的文件集。(我想,你甚至可以用脚本来自动执行。)安装至少会告诉你为什么失败,以及你必须删除哪些文件(你也可以用脚本自动删除这些文件——尽管如果你只删除了这些文件,你通常会留下很多配置等信息)。

但不管怎样,如果你想让brew和非brew的东西共享/usr/local(这通常有效,似乎是官方推荐的),你必须手动处理冲突。

有关更多信息,请参阅常见问题解答(如果您还没有)。

如果你想减轻自己的痛苦,有几种方法可以做到。以下是选择:

  1. 清除/usr/local中的所有内容,重新安装brew,然后重新安装所需的所有内容(最好使用Homebrew版本,如果不存在,通常可以很容易地创建自己的配方)。您可能需要备份旧的/usr/local,以防以后发现"所需的一切"不完整……这显然是最干净的解决方案,但这意味着要重复您已经完成的工作。

  2. 将/usr/local重命名为/opt/oldusrlocal,将其放在/usr/local之后的路径上,并让Homebrew完全管理/usr/local。这可能会破坏一些在构建/安装过程中存储绝对路径的包,这意味着你必须重新构建它们(这是切换到brew版本的好机会),这看起来很麻烦,但效果很好。

  3. 如上所述重命名/usr/local,不要将其放在您的路径中,并在发现需要时手动将其符号链接到/usr/local中。

  4. 将brew安装到/usr/local之外的某个位置(并将其放在/usr/local之前的路径上)。正如Homebrew常见问题解答所解释的那样,有一些公式(以及egss/gems/等之外的公式)不能正常工作(因为几乎每个人都针对/usr/local进行测试),但这是可行的。

最新更新