Дозвіл на домашню мову та кілька користувачів, які потребують приготування оновлення


79

Я використовую Homebrew для управління встановленнями пакетів на Lion (насправді Lion Server, але це не має значення) .

Homebrew був встановлений одним користувачем. Тепер інший користувач хотів би додати пакет, і Homebrew не радий:

$ brew update
fatal: Unable to create '/usr/local/.git/index.lock': Permission denied
Error: Failure while executing: git checkout -q master

Це вважається поганим? Я подумав, що однією з переваг використання /usr/local/для встановлення є те, що вам не потрібно sudo. Але явно ми це робимо.

Усі користувачі, яким потрібно змінити Homebrew, є членами адміністративної групи. Тож я міг би не chmod -R g+w /usr/local/боятись, що це щось зашкодить чи створить проблеми безпеки?!?

Поради?

$ ls -al /usr/local/.git/
total 432
drwxr-xr-x  14 ladmin  admin     476 Feb 24 11:48 .
drwxrwxr-x  14 root    admin     476 Feb  9 15:27 ..
-rw-r--r--   1 ladmin  admin      94 Feb 24 11:48 FETCH_HEAD
-rw-r--r--   1 ladmin  admin      23 Feb 24 11:48 HEAD
-rw-r--r--   1 ladmin  admin      41 Feb  9 15:28 ORIG_HEAD
drwxr-xr-x   2 ladmin  admin      68 Feb  9 15:27 branches
-rw-r--r--   1 ladmin  admin     218 Feb  9 15:27 config
-rw-r--r--   1 ladmin  admin      73 Feb  9 15:27 description
drwxr-xr-x  12 ladmin  admin     408 Feb  9 15:27 hooks
-rw-r--r--   1 ladmin  admin  200272 Feb 24 11:48 index
drwxr-xr-x   3 ladmin  admin     102 Feb  9 15:27 info
drwxr-xr-x   4 ladmin  admin     136 Feb  9 15:27 logs
drwxr-xr-x   4 ladmin  admin     136 Feb  9 15:27 objects
drwxr-xr-x   5 ladmin  admin     170 Feb  9 15:27 refs

Відповіді:


100

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

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

Людям не потрібно запускати сюдо, щоб адмініструвати домашню мову. Вам просто потрібно змінити деякі дозволи. Оскільки ви вже маєте:

Усі користувачі, яким потрібно змінити Homebrew, є членами адміністративної групи.

Вам потрібно зробити ще дві речі:

  1. Переконайтесь, що все, що /usr/localналежить до групи admin; і
  2. Переконайтеся, що хтось із групи 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групи повинен мати можливість керувати встановленням домашньої версії на машині. Якщо вам потрібно додати користувача до групи адміністратора, це можна зробити так:

 dseditgroup -o edit -a <username> -t user admin

(цьому користувачеві потрібно буде знову увійти, щоб отримати привілеї).

З метою розумності на машині ви можете розглянути можливість створення власної вилки Homebrew і вказати місцевий сховище git homebrew git на місцевий вил. Це дозволяє вам налаштувати Homebrew для свого середовища та контролювати версії пакетів, які люди можуть встановити за допомогою brewкоманди. Якщо декілька людей роблять встановлення, ви можете зіткнутися з проблемами версій або проблемами залежності.


1
У мене така ж проблема, і я змінив права власності на групу та групові дозволи, як запропоновано. brew doctorвсе ще скаржиться, що, наприклад /usr/local/include, не піддається запису, навіть якщо я вручну можу перевірити, чи можу я тут написати файл (наприклад, використовуючи echo "hello" > /usr/local/include/testfile). Я член адміністративної групи. Будь-які ідеї для налагодження?
мгд

2
Це рішення працювало для мене, але воно не стосується локального кешу Homebrew. Я також пропоную бігати:chmod -R g+w /Library/Caches/Homebrew
Дрю Дара-Абрамс

Я знайшов допис у своєму блозі blog.strug.de/2012/06/my-homebrew-multi-user-setup і адаптував сценарій із цього raw.githubusercontent.com/steshaw/shelly/master/bin/…
Стівен Шоу

2
Схоже, Homebrew переніс кеш-пам'ять у каталог поточного користувача. Щойно побачив: ==> Міграція / Бібліотека / Кеші / Домашня мова на /Users/bluechain.admin/Library/Caches/Homebrew ... під час оновлення варіння. Якщо я правильно інтерпретую це, це означає, що нам більше не потрібно турбуватися про те, щоб мати кешований реєстр кешу в глобальному масштабі для Homebrew.
Ендарет

Для користувачів High Sierra, які мають цю проблему, тепер вам потрібно використовувати це: sudo chown -R $(whoami) $(brew --prefix)/*замість команд, наведених вище. Отримав це звідси
Джефф Краненбург

7

Ви можете ввімкнути дозволи для домашнього перегляду для більш ніж одного користувача через групу адміністратора або через будь-яку іншу групу користувачів. Ось трохи розширений рецепт для налаштування цього:

Групі необхідно адмініструвати локальний каталог встановлення домашнього перекладу. Так привласнити / USR / місцеві для адміністратора групи (або вашої кращою групі) і включити дозволу групи записи:

chgrp -R admin /usr/local
chmod -R g+w /usr/local

Група також потребує дозволів для локального кешу формул та вихідних файлів homebrew у / Бібліотека / Кеші / Домашнє слово :

chgrp -R admin /Library/Caches/Homebrew
chmod -R g+w /Library/Caches/Homebrew

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

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

- Оновлення 2015-08-20

Нещодавно я знову використовував цю відповідь, щоб створити обліковий запис гостя з доступом додому. Для використання Cask з другого облікового запису адміністратора я також повинен був виконати наступні команди:

chgrp -R admin /opt/homebrew-cask
chmod -R g+w /opt/homebrew-cask

4

Я просто збирався прокоментувати прийняту відповідь (але репутації для цього ще не маю).

Як користувач Caskroom.io я також рекомендую додати:

sudo chown -R admin /opt/homebrew-cask
sudo chmod -R g+w /opt/homebrew-cask
sudo chmod -R g+w  /Library/Caches/Homebrew/

оскільки cask - надзвичайно корисне розширення до домашньої мови, вміщує всі його файли /opt/homebrew-cask


1
За /optя думаю , ви маєте в виду /usr/local? Як /optне існує в останніх встановленнях OS X, навіть після встановлення домашньої версії.
forquare

У червні 2016 року Homebrew-Cask (розширення варіння) перемістив місце розташування за замовчуванням для своєї папки Caskroom /usr/local(або точніше $(brew --prefix)) з /opt/homebrew-caskцього питання, тепер ця відповідь є спірною, але була дійсною, коли вона була написана. Див Переміщення по замовчуванням caskroom розташування # 21603
Дзен

1

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

sudo chown -R $ USER / usr / local


0

Я б проголосував за встановлення групового дозволу - і мені здається, це саме те, для чого воно існує, і не повинно створювати проблем із безпекою.

  • Не використовуйте судо.

tl; dr Sudo небезпечно, і ви все одно встановили TextMate.app без sudo.

Домашня мова створена для роботи без використання судо. Ви можете вирішити використовувати його, але ми настійно не рекомендуємо цього робити. Якщо ви використовували судо і натрапили на помилку, то, швидше за все, це буде причиною. Будь ласка, не подайте звіт про помилку, якщо ви не зможете відтворити його після перевстановлення Homebrew з нуля, не використовуючи sudo.


Отже, ваша порада була б sudo chmod -R g+w /usr/local/?
Мелтемі

Так, але ви можете попросити другу думку, скориставшись однією з них: IRC (irc: //irc.freenode.net/#machomebrew); Список розсилки (homebrew@librelist.com); Twitter ( twitter.com/machomebrew )
iolsmit
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.