Как использовать Homebrew для многопользовательской программы MacOS Sierra

У меня есть Mac, который делится между двумя инженерами. У обоих есть отдельные учетные записи пользователей. Оба должны периодически запускать brew update и brew install....

Как настроить это без ошибок: /usr/local must be writable!?

Да, я мог бы UserA принимать разрешения /usr/local каждый раз, когда он хочет использовать brew (и то же самое с UserB), но это похоже на массу ненужных проблем.

Ответ 1

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

sudo chmod -R +rw /usr/local

Помните, что, поскольку это системная папка, все пользователи будут использовать одну и ту же установку brew. Один пользователь может удалить пакеты, которые другие установили, и так далее. Поэтому следите за тем, чтобы избежать проблем.

Ответ 2

Вы также можете изменить права доступа группы на admin или другую группу, в которой находятся оба ваших пользователя:

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

Первоисточник: https://gist.github.com/jaibeee/9a4ea6aa9d428bc77925

ОБНОВИТЬ:

В macOS High Sierra вы не можете изменить владельца, группу или разрешения /usr/local. Таким образом, вы должны изменить группу и права доступа к подпапкам:

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

ОБНОВЛЕНИЕ Сентябрь 2018, Высшая Сьерра 10.13.6

  1. Определите путь варки приставки, т.е. путь, который будет использоваться для хранения файлов, связанных с работой с homebrew
  2. Убедитесь, что все пользователи системы, которым необходим доступ к brew находятся в группе администраторов.
  3. Необязательно Добавьте пользователя в группу администраторов, если пользователю нужен доступ к brew

    Потребуется доступ/привилегии для использования команды sudo

  4. Установите путь префикса brew, который будет рекурсивно принадлежать группе администраторов
  5. Установите путь префикса brew для рекурсивной записи всеми пользователями, входящими в группу администраторов.
  6. Проверьте разрешения префикса brew
  7. заваривать 🍻

echo $(brew --prefix)
echo $(groups $(whoami))
sudo dseditgroup -o edit -a $(whoami) -t user admin
sudo chgrp -R admin $(brew --prefix) 
sudo chmod -R g+rwX $(brew --prefix)
ls -lah $(brew --prefix)

Ответ 3

Раскрытое решение для macOS Mojave 10.14

Это отредактированная версия ответа user4815162342, которая не работает для меня из коробки.

  1. В Системных настройках перейдите в раздел "Пользователи и усилители". Группы, щелкните символ блокировки в нижнем левом углу, чтобы разблокировать создание пользователя/группы, затем создайте новую группу под названием brew-usergroup. Добавьте в группу всех пользователей, которые работают с brew (как на скриншоте с немецкого macOS).

enter image description here

  1. В терминале сделайте это:

    echo $(brew --prefix)
    echo $(groups $(whoami))
    sudo dseditgroup -o edit -a $(whoami) -t user brew-usergroup
    sudo chgrp -R brew-usergroup $(brew --prefix)/*
    sudo chmod -R g+rwX $(brew --prefix)/*
    ls -lah $(brew --prefix)
    

    Обратите внимание, что это больше не меняет права папок Brew (как и в других ответах), оно меняет подпапки/файлы папок Brew brew install теперь должен работать без ошибок.

Ответ 4

Вышеописанное работает нормально, но если вы хотите, чтобы новые файлы автоматически наследовали эти разрешения, установите ACL, который наследуется (в противном случае его может удалить только пользователь, который наливает бутылку). Нашли подсказки, как это сделать здесь: https://gist.github.com/nelstrom/4988643

Поскольку root запускается один раз (при условии, что все пользователи группы "admin" должны иметь доступ):

cd /usr/local
chmod -R +a "group:admin allow list,add_file,search,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,file_inherit,directory_inherit" Homebrew Caskroom Cellar bin
chgrp -R admin Homebrew Caskroom Cellar bin
chmod -R g+rwX Homebrew Caskroom Cellar bin
ls -lae .

-e на ls показывает ACL.

Обновление: теперь я использую определенные каталоги (см. выше), так как это не удалось (что-то вроде нехватки памяти)

Ответ 5

Каждый ответ, который пытается взломать разрешения или sudo, неверен. Не используйте sudo и не используйте одну и ту же установку brew для учетных записей пользователей.

Правильный ответ - использовать не более одной "нормальной" установки brew на машине, а для всех остальных пользователей установить локальную версию brew. Это можно сделать, развернув tarball в какой-то каталог, принадлежащий вашему пользователю, и включив в него каталог bin в начале вашего PATH. В качестве альтернативы можно сделать git checkout из двух исходных репозиториев.

Для подхода git вам понадобятся homebrew-core и brew.

Произвольно выбирая мой домашний каталог пользователя, чтобы проверить это:

cd $ HOME; git clone [email protected]: Homebrew/homebrew-core.git; git clone [email protected]: доморощенный /brew.git

а затем измените ваш PATH, выбрав наш новый каталог brew bin.

export PATH=$HOME/brew/bin:$PATH

Поскольку это новая установка, вы должны установить все нужные вам пакеты brew (снова).

Ответ 6

Лучшее решение - добавить запись sudoers, чтобы позволить непривилегированному пользователю 'joe' выполнить любую команду, связанную с brew, от имени администратора.

Создайте файл в /etc/sudoers.d/joe со следующим содержимым:

joe ALL=(administrator) NOPASSWD: /usr/local/bin/brew

Тогда вы можете запустить Brew, как это:

sudo -Hu administrator brew install <smth>