Як вирішити помилки дозволів на OS X Lion після встановлення Homebrew


9

Я щойно модернізувався від Snow Leopard до Лева і намагаюся встановити Homebrew. Однак після встановлення я переглядаю brew doctorінструкції з установки та бачу ряд помилок, що вказують на те, що / usr / локальні каталоги не підлягають запису. Наприклад:

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

EDIT: Проблема тепер вирішена на домашній мові:

Якщо проблема все ще виникає, оновіть домашню мову так:

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коду призвело до того, що використання функції рубіну 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 тут і тут ):

(ім'я_файлу) → вірно чи помилково: повертає істину, якщо названий файл записується за допомогою ефективного ідентифікатора користувача цього процесу.

writable_real? (ім'я_файла) → true або false: Повертає true, якщо названий файл можна записати за допомогою реального ідентифікатора користувача цього процесу.


Великі пальці для дослідження і уточнення mgd ... це місце на місці! Схоже, подібне питання виникло на github.com близько року тому, але його ніколи (належним чином?) Не було вирішено, принаймні, не використовуючи writable_real?... можливо, настав час для запиту на виклик ?!? :-)
pvandenberk


0

Я вважаю, що вам просто потрібно це:

brew update

Потім спробуйте brew doctorще раз.

Ви все ще можете отримати помилки щодо будь-яких залежностей, якими ви не користуєтесь (Java в моєму випадку), що нормально. Якщо у вас встановлено Інструменти командного рядка для Xcode замість повної інсталяції Xcode, ви також отримаєте повідомлення про помилку, у якому сказано, що у вас неправильний шлях, але прямо в повідомленні ви також прочитаєте, що немає правильного шляху, якщо ви просто використовуючи інструменти командного рядка для Xcode, так що це також добре.

На користь інших: майте на увазі, що вам потрібно буде ввійти як адміністратор, коли це потрібно для роботи.


0

Я дотримувався комбінації пропозицій iolsmit та Філа М: я порушив ці каталоги на моє ім’я користувача, потім brew updateзнову побіг за ним brew doctor. Це позбулося всіх повідомлень про помилки та установки пивоваріння, здається, працюють добре. Дякую обом!


0

Великі пальці для розслідування та уточнення @ mgd ... це місце на!

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.