安装Homebrew错误


112

尝试安装rvm和ruby 1.9.2

我已经安装了自制软件和git,但由于获得权限错误而无法获得完整的更新。重新安装Snow Leopard,并修复了权限。

现在发生了...

$ brew install wget

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


stackoverflow.com/questions/4804169/…应该标记为已接受答案-我担心没有看到尚未回答此问题的访客会继续前进
dmo 2015年

Answers:


274

sudo chown -R $USER /usr/local

您必须拥有/usr/local/使用该行的所有权。在使用官方文档顶部的ruby one-liner安装Homebrew之后,我必须自己完成此操作。对我来说就像一个魅力。这应该是您唯一需要sudo使用Homebrew的时间。

我不确定红宝石单眼纸是否能做到这一点。如果是这样,则此后我系统上的其他控制权已得到控制/usr/local

编辑:我完全错过了,但是@samvermette没有(请参阅对我的回答的答复):如果您在上方运行此命令并通过自制软件安装了需要特殊用户权限的东西mysql,请确保将这些权限退还给您(如上面的命令为/usr/local您内部的所有内容提供递归所有权($USER)对于mysql,它是…

sudo chown -RL mysql:mysql /usr/local/mysql/data


16
请注意:此命令将删除用户对/ usr / local / mysql / data的所有权mysql。就我而言,这阻止了mysql的启动。使用以下方法解决此问题:sudo chown -RL mysql:mysql /usr/local/mysql/data
samvermette

24
我使用避免了MySQL的问题,sudo chown -R $USER /usr/local/Cellar/usr/local/已经有了正确的权限对我来说
帕克

1
las,用户来了,用户走了……也许有一天,易卜拉欣会回来并标记它。也许。(可能不是。)
Ben Kreeger

4
我不喜欢这个答案。它假定只有一个用户曾经使用过该系统,并且该用户应该拥有/ usr / local的所有内容,尽管问题仅在于自制软件。brew是否不适用于多用户系统?即使有效,这也是一个草率的答案。此外,它没有解释用户可能如何遇到这种情况。提示-我按照规范的说明安装了HomeBrew,然后从TimeMachine备份还原到了另一台计算机。我怀疑是还原更改了文件所有权。
杰森·库姆斯

1
我同意@ JasonR.Coombs; 在不了解实际和安全后果的情况下,人们不应使用这种草率的解决方案。现在,/ usr / local中的任何软件都可能被您用户下运行的任何内容所覆盖,从而打开了安全漏洞。完全有可能通过盲目运行第一个chown命令(除MySQL外)来破坏其他东西,此后识别和修复刚刚破坏的所有内容为时已晚。

41

升级到Mavericks后,我遇到了这个问题,而该页面是在搜索错误消息时的最佳搜索结果。我继续搜索,并在stackoverflow.com上找到了这个答案。简而言之,它是:

sudo chmod a+w /usr/local/Cellar

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

我将这个答案放在这里给其他可能像我一样首先找到此页面的人。但是,应归功于jdi


2
因为每个人现在都可以写到/ usr / local / Cellar,这被认为是不确定的吗?
David Welch 2014年

对于需要访问其他文件夹(例如/usr/local/bin)的软件包,此答案将失败。
Jason R. Coombs 2015年

11

您只能允许Admin用户写入/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

由于属于Admin组的每个用户都将能够安装新的依赖项。


对于多管理员计算机来说,这似乎是一个更好的解决方案(尽管我的/ usr / local / lib目录也需要g + x才能使aspell正常工作)。
詹姆斯·斯努克

1
为了避免出现““ brew link”步骤未成功完成”错误,您还可以应用此线程中的内容,即sudo chgrp -R admin /usr/local/DDDD+ sudo chmod -R g+w /usr/local/DDDD其中DDDD是binshareLibrary / LinkedKegsopt
superk

1
Thnx的答案,我不得不使用“ sudo”,因此,如果这些命令不起作用,请尝试使用sudo作为前缀
MQoder



1

我建议确保当前用户是拥有/ usr / local的组的成员。我相信默认情况下,该组为wheel。要使自己成为该组的成员,请执行以下操作:

$ sudo dscl . append /Groups/wheel GroupMembership $USER

尽管它有点笨拙,但它具有预期的效果-可以访问/usr/local仅供高架成员使用(读取/写入)的项目。这种方法具有上述优点,因为它利用了组成员身份,使系统上的多个(授权)用户可以使用自制程序。


0

您如何安装Homebrew?他们的官方安装说明包括运行ruby脚本。那应该为您解决权限问题。

如果您不想运行脚本,则该页面上有一个名为“为开发人员安装到/ usr / local”的部分,说明了/ usr / local目录所需的权限更改。


我使用了一个脚本并安装了它,但是更新仍然有问题。我将用户数据迁移到了新笔记本电脑上。必须从github b / c做一些变通办法,该脚本最初不起作用。
Ibrahim

-3

编辑:如评论中所述,将sudo与自制软件一起使用是一个坏主意,因此请不要使用以下答案!


如果使用sudo执行命令,也可以防止此错误:

$ sudo brew install wget

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


这种方法在较新版本的自制程序中失败,该版本不允许以root身份(通过sudo)调用。
杰森·库姆斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.