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

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

Как я могу настроить это без получения ошибок, таких как:/usr/local must be writable!?

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

11 ответов

Решение

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

sudo chmod -R +rw /usr/local

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

Вы также можете изменить права доступа группы на 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)

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

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

Правильный ответ в соответствии с документацией Homebrew - использовать не более одной глобальной установки brew на машине, а для всех остальных пользователей установить локальную версию brew.

Это можно сделать одним из

  1. расширение тарбола в каталог, принадлежащий вашему пользователю
  2. выполнение git проверки двух исходных репозиториев

затем включив новый bin каталог в передней части вашего PATH.

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

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

cd $HOME
git clone https://github.com/Homebrew/homebrew-core.git
git clone https://github.com/Homebrew/brew.git

а затем измените свой PATH чтобы предпочесть наш новый каталог бункера для пива.

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

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

Если у вас не установлены инструменты командной строки:

xcode-select --install

Согласно документации по пиву, вы можете установить его в свою домашнюю папку, используя:

  • MacOS Mojave и более ранние версии:
cd $HOME
mkdir homebrew && curl -L 'https://github.com/Homebrew/brew/tarball/master' | tar xz --strip 1 -C homebrew
echo 'export PATH="$HOME/homebrew/bin:$PATH"' >> .bash_profile
exit
  • После MacOS Catalina:
cd $HOME
mkdir homebrew && curl -L 'https://github.com/Homebrew/brew/tarball/master' | tar xz --strip 1 -C homebrew
echo 'export PATH="$HOME/homebrew/bin:$PATH"' >> .zprofile
exit

Тогда ты можешь просто бежать brew doctor чтобы убедиться, что ваша установка правильная

Решение для macOS Mojave 10.14

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

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

  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 теперь должен работать без ошибок.

Вышеприведенное работает нормально, но если вы хотите, чтобы новые файлы автоматически наследовали эти разрешения, установите 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" *
chgrp -R admin *
chmod -R g+rwX *
ls -lae .

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

Homebrew не предназначен для использования разными пользователями Unix. Из FAQ:

Если вам нужно запустить Homebrew в многопользовательской среде, рассмотрите возможность создания отдельной учетной записи пользователя специально для использования Homebrew.

Решение не является жизнеспособным, если вы не убедитесь, что каждый вновь созданный файл в префиксе Homebrew также имеет разрешение на групповую запись, что не относится к стандартному umask- или если вы не продолжите запускать это chmodКоманда каждый раз, когда программа записывает префикс Homebrew.

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

Однако сделайте себе одолжение и используйте установщик для установки префикса по умолчанию. Некоторые вещи могут не собираться при установке в другом месте. Одна из причин, по которой Homebrew работает по сравнению с конкурентами, заключается в том, что мы рекомендуем установить здесь. Выбирайте другой префикс на свой страх и риск!


Чтобы упростить официальную рекомендацию по использованию выделенной учетной записи для Homebrew, вы можете легко выдать себя за эту учетную запись пользователя. Предполагая, что вы назвали этого пользователя:

      sudo -H -u homebrew brew update
  • -Hубеждается HOMEнастроен на домашний адрес пользователя (например, /Users/homebrew), чтобы Homebrew мог заниматься там своими делами.
  • -u homebrewрассказывает sudoвыдавать себя за homebrewучетная запись пользователя вместо стандартной root.

Вот официальный ответ сопровождающего Homebrew.

В дополнение к этому предлагаю проделать еще 3 шага. Предположим, у вас есть администратор, которому принадлежит /usr/local/* dir, и вы вошли в систему как другой пользователь с правами администратора.

  1. Создавать ~/brew.sh с этим содержанием:
      #!/bin/bash
comm="brew $@"
su niki -c "$comm"
  1. chmod +x ~/brew.sh
  2. Добавить этот псевдоним в .zshrc или эквивалент: alias brew="~/brew.sh"

Теперь можно варить из niki_at_work как всегда (он попросит nikiпароль):

      brew update
brew install swiftlint

Если вы хотите использовать специального администратора для brew ex. brewadmin вы должны сначала отварить спиртное: sudo chown -R brewadmin:admin /usr/local/*

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

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

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

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

sudo -Hu administrator brew install <smth>

Другие ответы, представленные здесь (особенно с более высокими оценками), в основном ошибочны.

Плохо: разрешения на запись для общей группы.

Подход с правами на запись для общей группы плох, поскольку Homebrew не предназначен для использования несколькими пользователями Unix. Данная установка Homebrew предназначена для использования только одним пользователем без полномочий root.

  • Предоставляя доступ на запись к определенной группе, которая является общей для всех пользователей, от которых вы хотите вызвать Brew, вы создаете иллюзию, что вы разрешили использование Brew нескольким пользователям.
  • Но umask по умолчанию, который использует пиво, не добавляет групповой доступ на запись, а это означает, что по мере использования Brew все больше и больше частей состояния не будут доступны для записи другим пользователям в вашей группе.
  • Это означает, что если вы устанавливаете пакеты от разных пользователей,brew updateочень быстро перестанет работать ни на одном из этих пользователей, потому что ни у кого больше нет доступа ко всему; и вам придется запускать chmod hack снова и снова.

Плохо: отдельные установки Homebrew.

Подход с отдельными установками Homebrew плох, поскольку в первую очередь вам нужно будет собрать все пакеты из исходников. Во-вторых, что более важно, многие пакеты просто не будут собираться при установке с пользовательским префиксом вместо глобального префикса по умолчанию. Этот метод совершенно не поддерживается командой HomeBrew, и они даже опубликовали заявление об отказе от ответственности:

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

Решение: выделите одну учетную запись пользователя для Homebrew.

Это то, что рекомендуется для многопользовательских систем в FAQ по Homebrew!

Если вам нужно запустить Homebrew в многопользовательской среде, рассмотрите возможность создания отдельной учетной записи пользователя специально для использования Homebrew.

Поскольку Homebrew не предназначен для использования несколькими пользователями и не предназначен для установки где-либо еще, кроме местоположения по умолчанию, вместо этого вы хотите установить Homebrew в местоположение по умолчанию с выделенным пользователем, на которого вы переключаетесь по порядку. чтобы использовать его.

Вышеуказанные решения не работают для меня. Но запуск команды ниже работал для меня.

sudo chown -R $(whoami) $(brew --prefix)/*

Источник: https://github.com/Homebrew/brew/issues/3228

Другие вопросы по тегам