安装Homebrew后如何解决OS X Lion上的权限错误


9

我刚刚从Snow Leopard升级到Lion,并尝试安装Homebrew。但是,安装后,我brew doctor按照安装说明运行,并看到一系列错误,表明/ usr / local目录不可写。例如:

Error: /usr/local/share isn't writable.
This can happen if you "sudo make install" software that isn't managed
by Homebrew.

If a brew tries to write a file to this directory, the install will
fail during the link step.

You should probably `chown` /usr/local/share

我得到了一堆目录:

You should probably `chown` /usr/local/include

You should probably `chown` /usr/local/share

You should probably `chown` /usr/local/share/man

我不知道为什么会出现此错误,因为我似乎是Unix组的成员,该组对这些目录具有写权限:

Mini:~ felciano$ ls -ld /usr/local/share
drwxrwxr-x  4 root  admin  136 May 13 15:53 /usr/local/share
Mini:~ felciano$ whoami
felciano
Mini:~ felciano$ dscl . -read /Groups/admin GroupMembership
GroupMembership: root felciano
Mini:~ felciano$

我想念什么?


为什么不按照建议将这些目录“小丑”为您的用户名?无论如何,它们不应该属于“根”。对于多个用户,您还可以更改组权限:apple.stackexchange.com/q/42127/14994
iolsmit 2012年

@iolsmit:我有完全相同的问题。但是,当该计算机具有多个管理员用户时,我看不出为什么/usr/local应该属于。另外,我有可能写信brew doctor抱怨的地方。还有其他想法吗?
mgd 2012年

Answers:


7

编辑:问题现在已在Homebrew中修复:

如果仍然遇到问题,请按以下方式更新Homebrew:

brew update

如果您想知道问题出在哪里,我将原始答案保留在下面。


暂时忽略许可问题

我遇到了完全相同的问题,我认为问题出在,brew doctor而不是您和我的安装中。

我认为您应该忽略此问题,而不要更改的所有权/usr/local。或者,您可以修复本地brew doctor脚本,直到发布修复程序为止。见下文。

我认为让/usr/local特定用户拥有所有权是不正确的。我在这台计算机上有多个管理员用户。您应该将/usr/local所有者root:admin身份保留为所有者和组。

我的调查

像您一样,/usr/local我的用户也可以完全写入该用户,该用户也是该admin组的成员:

$ ls -ld /usr/local/
drwxrwxr-x  14 root  admin  476 22 Jun 23:33 /usr/local/
$ whoami
mgd
$ dscl . -read /Groups/admin GroupMembership
GroupMembership: root mgd rgd

让我们测试该目录是否确实可写:

$ ls -l /usr/local/newfile
ls: /usr/local/newfile: No such file or directory
$ touch /usr/local/newfile
$ ls -l /usr/local/newfile
-rw-r--r--  1 mgd  admin  0 23 Jun 14:52 /usr/local/newfile

brew doctor代码的进一步研究得出的结论是,使用ruby函数Pathname.writable?导致了问题。考虑以下交互式Ruby会话:

$ irb
>> require 'pathname'
=> true
>> Pathname('/usr/local').writable?
=> false

函数Pathname.writable?/usr/local不是可写的,即使我们知道也是如此。

Pathname.writable_real?相反,使用会给出正确的结果–它表示该目录是可写的:

>> Pathname('/usr/local').writable_real?
=> true

这应该在中修复/usr/local/Library/Homebrew/cmd/doctor.rb。您可以在等待修复的同时,在自己的安装中修复它。

这两个函数之间的区别是(根据此处此处的Ruby文档):

可写?(file_name)→true或false:如果命名文件可被此过程的有效用户ID写入,则返回true。

writable_real?(file_name)→true或false:如果此过程的真实用户ID可写入命名文件,则返回true。


竖起大拇指对mgd的调查和澄清...现场!似乎大约一年前在github.com上也提出过类似的问题,但从未(正确地?)得到解决,至少没有通过使用writable_real?...也许是时候提出拉取请求了吗?!:-)
pvandenberk 2012年


0

我相信您只需要这样:

brew update

然后再试brew doctor一次。

您可能仍会收到关于未使用的任何依赖项的错误(在我的情况下为Java),这没关系。如果您安装了用于Xcode的命令行工具,而不是完整安装的Xcode,您还会收到一条错误消息,提示您具有无效的路径,但是在该消息中,您还将读取到没有有效的路径。只需使用Xcode的命令行工具,这样就可以了。

为了他人的利益:请记住,要使其正常工作,您需要以管理员身份登录。


0

我遵循了iolsmit和Phil M的建议:将这些目录更改为我的用户名,然后brew update再次运行brew doctor。这消除了所有错误消息,并且brew安装现在似乎可以正常工作。谢谢你俩!


0

竖起大拇指@mgd的调查和澄清...现场!

似乎大约一年前在github.com上也提出过类似的问题,但从未(正确地?)得到解决,至少没有通过使用writable_real?...也许是时候提出拉取请求了吗?!:-)

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.