Как устранить ошибки разрешений на OS X Lion после установки Homebrew

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
@iolsmit: у меня точно такая же проблема. Тем не менее, я не понимаю, почему он /usr/localдолжен принадлежать мне, если на этой машине несколько администраторов. Кроме того, это возможно для меня, чтобы написать в местах brew doctorжаловаться. Есть еще идеи?
мгд

Ответы:

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 здесь и здесь ):

доступный для записи? (имя_файла) → true или false: возвращает true, если указанный файл доступен для записи по эффективному идентификатору пользователя этого процесса.

writable_real? (file_name) → true или false: возвращает true, если указанный файл доступен для записи по реальному идентификатору пользователя этого процесса.

MGD
источник
Недурно для расследования и разъяснения мгд ... это место! Похоже, что аналогичная проблема была поднята на github.com около года назад, но так и не была (должным образом?) Решена, по крайней мере, не с помощью writable_real?... может быть, пришло время для запроса на удаление?!? :-)
pvandenberk
Исправлено: github.com/mxcl/homebrew/commit/…
mxcl
0

Я считаю, что вам просто нужно это:

brew update

Тогда попробуйте еще brew doctorраз.

Вы все еще можете получить ошибки о любых зависимостях, которые вы не используете (Java в моем случае), что нормально. Если у вас установлены инструменты командной строки для XCode вместо полной установки XCode, вы также получите сообщение об ошибке, в котором говорится, что у вас неверный путь, но прямо в сообщении вы также прочтете, что допустимого пути нет, если вы просто используя инструменты командной строки для XCode, так что все в порядке.

Для пользы других: имейте в виду, что вы должны войти в систему как администратор, чтобы сделать это для работы.

Фил М
источник
0

Я последовал комбинации предложений iolsmit и Фила М: я добавил эти каталоги к своему имени пользователя, затем brew updateснова побежал, а затем brew doctor. Это избавило от всех сообщений об ошибках, и установка brew теперь, кажется, работает хорошо. Спасибо вам обоим!

Рамон
источник
0

Большие пальцы за расследование и разъяснения @ mgd ... это место!

Похоже, что аналогичная проблема была поднята на github.com около года назад, но так и не была (должным образом?) Решена, по крайней мере, не с помощью writable_real?... может быть, пришло время для запроса на удаление?!? :-)

pvandenberk
источник