Встановлення в Homebrew помилок


112

Спроба встановити rvm та ruby ​​1.9.2

Я вже встановив homebrew та git, але не зміг отримати повне оновлення, тому що я постійно отримував помилки дозволу. Повторно встановили Snow Leopard та відремонтували дозволи.

Зараз це відбувається ...

$ brew встановити wget

Помилка: не вдається записати в / usr / local / льох


stackoverflow.com/questions/4804169/… слід позначити як прийняту відповідь - я побоююся, що відвідувачі, які не бачать, що на це питання не отримали відповіді, продовжуватимуться
dmo

Відповіді:


274

sudo chown -R $USER /usr/local

Вам доведеться дати собі право власності на /usr/local/використання цієї лінії прямо там. Мені довелося це зробити самостійно після використання рубінового однолінійного верху вгорі офіційних документів для встановлення Homebrew. Працювало як шарм для мене. Це повинно бути єдиний раз, коли вам знадобиться sudoдомашня мова.

Я не впевнений, чи робить це рубіновий однолінійний. Якщо так, то з моєї системи з цього /usr/localчасу взяв під контроль щось інше .

Редагувати : я цілком пропустив це, але @samvermette цього не зробив (див. Відповіді на мою відповідь): якщо запустити цю команду вище та встановити щось встановлене через homebrew, що вимагає спеціальних дозволів користувача, наприклад mysql, обов'язково поверніть ці дозволи (як вищевказана команда надає рекурсивне право власності на все, що знаходиться всередині /usr/localвас ( $USER). У випадку mysql це…

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


16
Зверніть увагу : ця команда видалить з користувача право власності на / usr / local / mysql / дані mysql. У моєму випадку це завадило запуску mysql. Виправте це за допомогою:sudo chown -RL mysql:mysql /usr/local/mysql/data
samvermette

24
Я уникнув проблеми mysql, використовуючи, sudo chown -R $USER /usr/local/Cellarяк /usr/local/для мене вже були правильні дозволи
Parker

1
На жаль, користувачі приходять, і користувачі йдуть ... можливо, колись Ібрагім повернеться і позначить це. Може бути. (Напевно, ні.)
Бен Крігер

4
Мені не подобається ця відповідь. Він передбачає, що лише один користувач коли-небудь використовує систему, і користувач повинен володіти всім / usr / local, незважаючи на те, що мова йде лише про домашню мову. Чи пивоварня не працює з багатокористувацькими системами? Це неохайна відповідь, навіть якщо вона працює. Крім того, це не пояснює, як користувач, можливо, стикався з цією ситуацією. Підказка - я встановив HomeBrew за допомогою канонічних інструкцій, після чого відновився з резервної копії TimeMachine (на іншу машину). Я підозрюю, що саме відновлення змінило право власності на файл.
Джейсон Р. Кумбс

1
Я згоден з @ JasonR.Coombs; люди не повинні використовувати це неохайне рішення, не розуміючи практичних і безпечних наслідків. Будь-яке програмне забезпечення в / usr / local тепер може бути перезаписане тим, що працює під вашим користувачем, відкриваючи отвір у захисті. Цілком можливо, що ви накрутите щось інше (окрім MySQL), сліпо виконуючи першу команду chown, після якої буде вже пізно ідентифікувати та виправити все, що ви, можливо, щойно накрутили.
пограбувати

41

У мене виникла ця проблема після оновлення до Mavericks, і ця сторінка була головним результатом пошуку під час гугл-повідомлення про помилку. Я продовжив пошук і знайшов цю відповідь на стеці overflow.com . Коротко кажучи, це:

sudo chmod a+w /usr/local/Cellar

Це вирішило проблему для мене, і оскільки вона змінює лише дозволи для конкретного шляху, на який посилається у повідомленні про помилку, здавалося, малоймовірно матиме негативні побічні ефекти при інших установках.

Я даю цю відповідь тут усім, хто, можливо, знайде цю сторінку першим, як я. Однак кредит повинен перейти до jdi .


2
Чи вважається це небезпечним, як тепер кожен може писати в / usr / local / льох?
Девід Уелч

Ця відповідь не відповідає пакетам, які потребують доступу до інших папок (наприклад, /usr/local/bin).
Джейсон Р. Кумбс

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 працював).
Джеймс Снук

1
Щоб уникнути отримання кроку "Посилання" заварювання "не завершилося успішно", ви також можете застосувати те, що знаходиться в цій темі , а саме sudo chgrp -R admin /usr/local/DDDD+, sudo chmod -R g+w /usr/local/DDDDде DDDD є бін , обмін , бібліотека / LinkedKegs , opt
superk

1
Thnx для anwer, мені довелося використовувати "sudo", тому якщо ця команда не працює, спробуйте
приєднати



1

Я пропоную переконатися, що поточний користувач є членом групи, яка володіє / usr / local. Я вважаю, що за замовчуванням така група є wheel. Щоб стати членом цієї групи:

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

Незважаючи на те, що це молоток неелегантний, він має задуманий ефект - забезпечує доступ до предметів /usr/local, призначених лише для використання (читання / записування) піднесеними членами. Цей підхід має переваги іншого вище, оскільки він використовує переваги членства в групі, дозволяючи декільком (авторизованим) користувачам у системі використовувати домашню мову.


0

Як ви встановили Homebrew? Їх офіційні інструкції по установці включають біг рубіновий скрипт. Це має вирішити питання щодо дозволу для вас.

Якщо ви не хочете запускати сценарій, є розділ цієї сторінки під назвою "Встановлення в / usr / local для розробників", який пояснює зміну дозволів, необхідних для / usr / local каталогу.


Я використав сценарій, і він встановлений, але він все ще мав проблеми з оновленням. Я перемістив дані користувачів на новий ноутбук. Довелося зробити кілька обхідних шляхів з github b / c, сценарій спочатку не працював.
Ібрагім

-3

EDIT : Як згадувалося в коментарях, погано використовувати судо з домашньою мовою, тому не використовуйте наступну відповідь!


Ви також можете запобігти цій помилці, якщо виконаєте команду за допомогою sudo:

$ sudo brew install wget

Але подбайте про використання, sudoоскільки ви можете зробити багато помилок.


Цей підхід не вдається з пізніми версіями домашньої мови, які забороняють викликати як root (через sudo).
Джейсон Р. Кумбс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.