在Homebrew中安装出现错误

112

尝试安装rvm和ruby 1.9.2

我已经安装了homebrew和git,但是由于一直出现权限错误,无法完全更新。重新安装了Snow Leopard并修复了权限。

现在出现了以下错误...

$ brew install wget

错误: 无法写入/usr/local/Cellar


这篇文章应该被标记为已接受的答案 - 我担心那些没有看到这个问题没有被回答的访问者会离开。 - dmo
8个回答

275
您需要使用以下命令将所有权归还给自己:sudo chown -R $USER /usr/local。我在使用官方文档顶部的ruby one-liner安装Homebrew后,也不得不这样做。对我来说非常有效。这应该是您使用Homebrew时唯一需要使用sudo的时候。如果ruby one-liner已经完成此操作,则我的系统中的其他内容控制了/usr/local。编辑:我完全忽略了这一点,但@samvermette没有(请参见我的答案回复):如果您运行上面的命令并安装了某些需要特殊用户权限的homebrew软件(例如mysql),请确保将这些权限归还(因为上述命令将/usr/local中的所有内容递归地归还给您($USER)。对于mysql,做法是... sudo chown -RL mysql:mysql /usr/local/mysql/data

16
请注意:这个命令将会从 mysql 用户中移除对 /usr/local/mysql/data 文件夹的所有权。在我的情况下,这会导致 mysql 无法启动。通过执行以下命令可以解决这个问题:sudo chown -RL mysql:mysql /usr/local/mysql/data - samvermette
24
我通过使用 sudo chown -R $USER /usr/local/Cellar 避免了 MySQL 的问题,因为 /usr/local/ 对我来说已经拥有了正确的权限。 - Parker
4
我不喜欢这个答案。它假设只有一个用户使用系统,并且该用户应该拥有所有 /usr/local 目录下的文件,尽管问题只涉及 HomeBrew。即使 HomeBrew 可以在多用户系统中工作,这也是一个粗心的回答。此外,它没有解释用户可能如何遇到这种情况。提示 - 我使用规范指南安装了 HomeBrew,然后从 TimeMachine 备份(还原到另一台机器)。我怀疑是那次还原改变了文件所有权。 - Jason R. Coombs
使用此命令后,我仍然收到错误提示:Error: Permission denied - /Library/Caches/Homebrew/Formula/node.brewing。请谨慎使用。 - Henrique de Sousa
1
我同意@JasonR.Coombs的观点;人们不应该在不了解实际和安全后果的情况下使用这种不精确的解决方案。在/usr/local中的任何软件现在都可能被以你的用户身份运行的任何东西覆盖,从而打开一个安全漏洞。如果你盲目地运行第一个chown命令,完全有可能你会弄坏其他东西(除了MySQL),此时识别和修复你可能刚刚捣乱的一切将为时已晚。 - rob
显示剩余3条评论

41

我在升级到Mavericks后遇到了这个问题,在谷歌搜索错误信息时,这个页面是排名最靠前的结果。我继续搜索,找到了这篇关于stack overflow.com的答案。简而言之, 就是:

sudo chmod a+w /usr/local/Cellar

这对我来说解决了问题,因为它仅更改了错误消息中引用的特定路径的权限,所以似乎不太可能对其他安装产生负面影响。

我将这个答案放在这里,供任何可能像我一样首先找到此页面的人使用。然而,功劳应归于jdi


2
这是否被认为是不安全的,因为现在每个人都可以写入 /usr/local/Cellar? - David Welch
这个答案对于需要访问其他文件夹(例如/usr/local/bin)的软件包无效。 - Jason R. Coombs

11

您是否只允许管理员用户写入/usr/local/

chgrp -R admin /usr/local
chmod -R g+w /usr/local
chgrp -R admin /Library/Caches/Homebrew
chmod -R g+w /Library/Caches/Homebrew

只要用户属于管理员组,就可以安装新的依赖项。


看起来对于多管理员机器来说是更好的解决方案(尽管我的 /usr/local/lib 目录也需要 g+x 才能让 aspell 正常工作)。 - James Snook
1
为了避免出现“'brew link' 步骤未成功完成”错误,您还可以应用此线程中的内容,即 sudo chgrp -R admin /usr/local/DDDD + sudo chmod -R g+w /usr/local/DDDD,其中 DDDD 是 _bin_、_share_、_Library/LinkedKegs_、_opt_。 - superk
1
谢谢回答,我必须使用“sudo”,所以如果这些命令不起作用,请尝试在前面加上sudo。 - MQoder

5

2
卸载并重新安装HomeBrew就可以解决问题。

1
我建议确保当前用户是拥有 /usr/local 的组的成员。我相信默认情况下,该组是 wheel。要将自己添加到该组中:
$ sudo dscl . append /Groups/wheel GroupMembership $USER

虽然这种方法有些笨拙,但它确实达到了预期的效果——允许访问位于/usr/local目录下只能被高权限成员使用(读/写)的项目。与其他方法相比,该方法具有更多优点,因为它利用了组成员身份,使系统上的多个授权用户可以使用自制软件。

0
你是如何安装Homebrew的?他们的官方安装说明包括运行一个Ruby脚本。这应该会为您处理权限问题。
如果您不想运行脚本,该页面有一个名为“为开发人员安装到/usr/local”的部分,其中解释了需要更改/usr/local目录权限的内容。

我使用了一个脚本并安装成功,但在更新时仍然出现问题。我将用户数据迁移到了新的笔记本电脑上。由于脚本一开始无法正常工作,所以我不得不从Github上找到一些解决方法。 - Ibrahim

-3

编辑:如评论中所述,使用sudo和homebrew是一个坏主意,因此不要使用以下答案!


如果您使用sudo执行命令,也可以避免此错误:

$ sudo brew install wget

但是要小心使用sudo,因为您可能会犯很多错误。


这种方法在禁止通过sudo作为root调用的homebrew的最新版本中会失败。 - Jason R. Coombs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接