Как исправить доморощенные разрешения?

601

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

В качестве примера я опубликую сценарий загрузки libjpeg, с которым я сейчас сталкиваюсь.

Я пытаюсь установить libjpeg и получить:

$ brew install libjpeg
==> Downloading https://downloads.sf.net/project/machomebrew/Bottles/jpeg-8d.mountain_lion.bottle.1.tar.gz
Already downloaded: /Library/Caches/Homebrew/jpeg-8d.mountain_lion.bottle.1.tar.gz
==> Pouring jpeg-8d.mountain_lion.bottle.1.tar.gz
Warning: Could not link jpeg. Unlinking...
Error: The brew link step did not complete successfully
The formula built, but is not symlinked into /usr/local
You can try again using `brew link jpeg'
Error: Permission denied - /usr/local/opt/jpeg

"brew link jpeg" приводит к

Error: Permission denied - /usr/local/opt/jpeg

Вот что читает мой доктор

$ brew doctor
Warning: "config" scripts exist outside your system or Homebrew directories.
./configure scripts often look for *-config scripts to determine if
software packages are installed, and what additional flags to use when
compiling and linking.

Having additional scripts in your path can confuse software installed via
Homebrew if the config script overrides a system or Homebrew provided
script of the same name. We found the following "config" scripts:

/Library/Frameworks/Python.framework/Versions/2.7/bin/python-config
/Library/Frameworks/Python.framework/Versions/2.7/bin/python2-config
/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7-config
Warning: You have unlinked kegs in your Cellar
Leaving kegs unlinked can lead to build-trouble and cause brews that depend on
those kegs to fail to run properly once built. Run brew link on these:

jpeg

Эта проблема с разрешением делала невозможным использование brew для чего-либо, и я был бы очень признателен за любые предложения.

Saturnino
источник

Ответы:

955

Я смог решить проблему, используя chownв папке:

sudo chown -R "$USER":admin /usr/local

Также вам (скорее всего) придется сделать то же самое на /Library/Caches/Homebrew:

sudo chown -R "$USER":admin /Library/Caches/Homebrew

Очевидно, я использовал sudoранее таким образом, чтобы изменить разрешение моей папки /usr/local, с этого момента все установки с brew оказались успешными.

Этот ответ любезно предоставлен трекером доморощенных проблем gitHub.

Saturnino
источник
14
Спасибо за это. Мне также нужно было бежать, sudo chown -R $USER:admin /Library/Caches/Homebrewчтобы избавиться от проблем с разрешениями.
alexpls
64
изменение владельца / usr / local для конкретного пользователя не является решением. Это ужасный хак и обходной путь, если у вас однопользовательская система. Но тогда вы можете просто выбрать -R / $ USER: $ USER
fijiaaron
17
@fijiaaron Так что будет лучшим решением?
JUIL
47
chowning / usr / local: полностью безумное решение. Надеюсь, что это не вечеринка.
Джон Клементс
15
Для тех, кто жалуется, что это решение испортит многопользовательские системы (@fijiaaron, @JohnClements, @hmijail, @Alex) - именно поэтому групповые разрешения были инвертированы. В macOS adminгруппа - это каждый пользователь-администратор (то есть каждый пользователь учетной записи macOS, который может sudo, помимо прочего), поэтому, запустив chown -R …:adminвместе chmod -R g+w /usr/local(как предложено @AndreaDeGaetano), вы ничего не сделаете здесь и у вас не будет никаких проблем с другие пользователи также используют /usr/local/ brew.
Слипп Д. Томпсон
480

Новая команда для пользователей MacOS High Sierra , как это не представляется возможным chownпо /usr/local:

bash/zsh:

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

fish:

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

Ссылка: Не могу chown / usr / local в Высокой Сьерре

andrewwong97
источник
Да @Jeffpowrs У меня такая же проблема в macOS 10.13.2
andrewwong97
4
Я использовал раковину рыбы и должен был использовать следующее: sudo chown -R (whoami) (brew --prefix)/*
Tarellel
2
Relatedly. Для того, что я пытался сделать, я должен был выполнить sudo mkdir /usr/local/Frameworksкоманду chown, как показано в этом ответе.
Дэн Бертон
1
Спасибо. Это спасло день.
Аашутош Рати
2
Бог благословит тебя, брат!
Мендиго дос Байт
285

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

brew doctor

Это самый безопасный путь, и среди прочего он предложил мне:

sudo chown -R $(whoami) /usr/local

который решил эту проблему с разрешениями.

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

Nycen
источник
4
Подтверждено, что это устраняет любую проблему, с которой у вас могут быть разрешения с 05/2017
Антон Бабушкин
3
Можно также подтвердить, что это решает любые проблемы с разрешениями и что я смог легко обновить версию моего узла - 06/06/2018 - Спасибо
Richlewis
2
доктор варит не найдет всех вопросов. Проблема, с которой я столкнулся, была / usr / local / Frameworks, не существовала, и я создал ее и установил право собственности на нее. Сам варево не заметил, что как проблема.
Джо В.
2
Я получаю chown: /usr/local: Operation not permittedне работает с 5 июля 2019 года
tavalendo
1
Подсказка к врачу может быть одной из лучших подсказок здесь, потому что она исправляет (или помогает исправить) различные проблемы в любое время!
ecth
82

Если вы используете OSX High Sierra, /usr/localбольше не сможете chown. Ты можешь использовать:

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

Ричард
источник
Спасибо. Спас меня!
Матиас
3
Я обнаружил, что $ (brew --prefix) только что дал мне / usr / local, что High Sierra настаивало, чтобы я не мог изменить разрешения на ... но так как brew требовал разрешения для "/ usr / local / Frameworks" в моем случае Вместо этого я смог использовать «$ (brew --prefix) / Frameworks», и после этого «brew link python @ 2» работал нормально.
Alpheus
Все пользователи Mac с несколькими пользователями, используйте это!
Эрик Нгуен
Спасибо за OSX High Sierra, и, очевидно, мы не можем больше прекратить / user / local, как в предыдущих версиях MAC OSX. Это сработало для меня!
Хосе Мхланга
29

У меня не было /usr/local/Frameworksпапки, так что это исправило ее для меня

sudo mkdir -p /usr/local/Frameworks
sudo chown -R $(whoami) /usr/local/Frameworks

Первая строка создает новую папку Frameworks для домашнего приготовления (brew). Вторая строка дает этой папке ваши текущие права пользователя, которых достаточно.

Используются следующие команды:

mkdir - создавать каталоги [ -p без ошибок, если есть, создавать родительские каталоги по мере необходимости]

chown - изменить владельца файла и группу [ -R рекурсивно оперирует файлами и каталогами]

whoami - вывести эффективный идентификатор пользователя

У меня OSX High Sierra

Карл Йохан Вальнер
источник
27

У меня была эта проблема. Рабочим решением является смена владельца /usr/local текущего пользователя вместо root:

  sudo chown -R $(whoami):admin /usr/local

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

Мое предложение состоит в том, чтобы изменить владельца как указано выше и сделать все, что вы хотите реализовать с помощью Brew .. (обновить, установить ... и т. Д.), А затем вернуть владельца обратно в root как:

  sudo chown -R root:admin /usr/local

Это решило бы проблему и оставило бы владельца в правильном наборе.

Махер Абутраа
источник
4
хм .. а когда мы получим "операция не разрешена" для chown?
Ewoks
@Ewoks это на MacOs?
Махер Абутраа
1
Да, Сьерра Хай: S
Ewoks
проверить это stackoverflow.com/a/32661637/2267723 .. также этот stackoverflow.com/a/38435256/2267723
Махер Абутраа
15

Команда из ответов с наибольшим количеством голосов не работает для меня.

Он получил вывод:

chown: / usr / {my_username} dmin: недопустимое имя пользователя

Эта команда работает нормально (группа для / usr / local adminуже была ):

sudo chown -R $USER /usr/local
skywinder
источник
5
Добавьте несколько цитатsudo chown -R "$USER":admin /usr/local
orkoden
2
@skywinder Ваш ответ сработал для меня. Не нужно было использовать кавычки на $ USER.
Анна С
sudo chown -R "$ USER": admin / usr / local, где вы заменяете $ USER своим именем.
lft93ryt
это привело кError: Running Homebrew as root is extremely dangerous and no longer supported. As Homebrew does not drop privileges on installation you would be giving all build scripts full access to your system.
thesummersign
3
chown: /usr/local: Operation not permitted
Кришнадас ПК
13

Я не хотел пока возиться с правами доступа к папкам, поэтому я сделал следующее:

brew doctor
brew upgrade
brew cleanup

После этого я смог продолжить успешно устанавливать мою другую формулу варева.

Энтони То
источник
1
Это хорошо сработало для моих проблем. Я уже наложил на себя разрешения. \
Комсомол
12

Если вам нужен более целенаправленный подход, чем общий chown -R, вы можете найти этотfix-homebrew скрипт полезным:

#!/bin/sh

[ -e `which brew` ] || {
    echo Homebrew doesn\'t appear to be installed.
    exit -1
}

BREW_ROOT="`dirname $(dirname $(which brew))`"
BREW_GROUP=admin
BREW_DIRS=".git bin sbin Library Cellar share etc lib opt CONTRIBUTING.md README.md SUPPORTERS.md"

echo "This script will recursively update the group on the following paths"
echo "to the '${BREW_GROUP}' group and make them group writable:"
echo ""

for dir in $BREW_DIRS ; do {
    [ -e "$BREW_ROOT/$dir" ] && echo "    $BREW_ROOT/$dir "
} ; done

echo ""
echo "It will also stash (and clean) any changes that are currently in the homebrew repo, so that you have a fresh blank-slate."
echo ""

read -p 'Press any key to continue or CTRL-C to abort.'

echo "You may be asked below for your login password."
echo ""

# Non-recursively update the root brew path.
echo Updating "$BREW_ROOT" . . .
sudo chgrp "$BREW_GROUP" "$BREW_ROOT"
sudo chmod g+w "$BREW_ROOT"

# Recursively update the other paths.
for dir in $BREW_DIRS ; do {
    [ -e "$BREW_ROOT/$dir" ] && (
        echo Recursively updating "$BREW_ROOT/$dir" . . .
        sudo chmod -R g+w "$BREW_ROOT/$dir"
        sudo chgrp -R "$BREW_GROUP" "$BREW_ROOT/$dir"
    )
} ; done

# Non-distructively move any git crud out of the way
echo Stashing changes in "$BREW_ROOT" . . .
cd $BREW_ROOT
git add .
git stash
git clean -d -f Library

echo Finished.

Вместо того, чтобы делать chmodс вашим пользователем, он дает adminгруппе (к которой вы, вероятно, принадлежите) доступ на запись к определенным каталогам, /usr/localкоторые использует homebrew. Это также говорит вам точно, что он собирается сделать, прежде чем делать это.

Дарко
источник
1
Обратите внимание, что некоторые пути, похоже, немного изменились, поэтому вам, возможно, придется выполнить chgrp и chmod еще несколько каталогов, но я все же предпочитаю это вместо chown all для вашего пользовательского подхода!
Аширли
8

В моем случае / usr / local / Frameworks даже не существовало, поэтому я сделал:

sudo mkdir /usr/local/Frameworks
sudo chown -R $(whoami) /usr/local/Frameworks

И тогда все заработало как положено.

Хелен Васконселос
источник
1
Это решило мою проблему, и врач не определил ее как проблему.
Джо В.
7

Это решило проблему для меня.

sudo chown -R "$USER":admin /Users/$USER/Library/Caches/Homebrew
sudo chown -R "$USER":admin /usr/local
Fardin
источник
2
Это решает эту проблему, но я бы отменил этот шаг после успешного связывания. Просто из соображений безопасности.
ora-600
7

Я решил мою проблему с этими командами:

sudo mkdir /usr/local/Cellar
sudo mkdir /usr/local/opt
sudo chown -R $(whoami) /usr/local/Cellar
sudo chown -R $(whoami) /usr/local/opt
hardc0der
источник
1
Спасибо! Это единственное, что помогло. Mac OS 10.13.4В моем случае мне пришлось создать sudo mkdir /usr/local/Frameworks и sudo chown -R $(whoami) /usr/local/Frameworksсвязать Python!
A1m
6

Для многопользовательского Mac это работало для меня:

sudo chown -R $(whoami):admin $(brew --prefix)/*
Хуан Хосе Рамирес
источник
5

Все эти предложения могут работать. В последней версии Brew Doctor, были сделаны лучшие предложения.

Во-первых - исправьте беспорядок, который вы, вероятно, уже сделали /usr/local, запустив это в командной строке:

sudo chown -R root:wheel /usr/local

Затем возьмите на себя ответственность за пути, которые должны быть специально для этого пользователя:

sudo chown -R $(whoami) /usr/local/lib /usr/local/sbin /usr/local/var /usr/local/Frameworks /usr/local/lib/pkgconfig /usr/local/share/locale

Вся эта информация доступна, если вы запустите, sudo brew updateа затем прочитаете все предупреждения и ошибки, с которыми вы столкнетесь ...

Макс Деркум
источник
Установка владельца всего в / usr / local для root: wheel опасен и не нужен. Соответствующий путь / usr / local / Cellar
ben26941
1
вам не нужно трогать эти разрешения, если вы, скажем, уже сделали это и взяли на себя ответственность за них для своего разработчика - или в случае, когда brew уже исказил их, потому что сделал установку с помощью sudo. Само по себе brew рекомендует это исправить в этом случае - что, я думаю, намного менее опасно, чем оставить позади беспорядок в sudo.
Макс Деркум
1
Не могли бы вы дать ссылку на рекомендацию варево тогда?
ben26941
1
Лучший ответ. Это сработало после того, как я сделал миграцию с другого Mac.
BuffMcBigHuge
4

Для меня это сработало после

brew doctor

Команды изменения разрешения привели к другой ошибке

chown: /usr/local: Operation not permitted

Кришнадас ПК
источник
3

На github есть скрипт-убийца, который исправляет perms в / usr / local и каталогах brew, чтобы быть доступным любому, кто является членом группы 'admin'.

https://gist.github.com/jaibeee/9a4ea6aa9d428bc77925

Это лучшее решение, чем выбранный ответ, поскольку, если вы укажете каталоги / usr / local / ___ на $ USER, то вы сломаете других пользователей-администраторов homebrew на этом компьютере.

Вот смелость сценария в то время, когда я отправил это:

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

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

chgrp -R admin /opt/homebrew-cask
chmod -R g+w /opt/homebrew-cask
TheProletariat
источник
2

В MacOS Mojave у меня также не было разрешения на доступ к chownпапке / usr / local ( sudo chown -R "$USER":admin /usr/local).

sudo chown -R "$USER":admin /usr/local/*работал для меня, однако, изменяя разрешения всего в локальной папке.

Надеюсь, это поможет другим с той же проблемой.

paddotk
источник
1

На самом деле это действительно просто, выполните эту команду: brew doctor

И он скажет вам, что делать, чтобы исправить проблемы с разрешениями, например, в моем случае:

Это была проблема:

Warning: The following directories are not writable by your user:
/usr/local/share/man/man5
/usr/local/share/man/man7

И это было решение:

You should change the ownership of these directories to your user.
  sudo chown -R $(whoami) /usr/local/share/man/man5 /usr/local/share/man/man7
Арсалан Мехмуд
источник
1
cd /usr/local && sudo chown -R $(whoami) bin etc include lib sbin share var opt Cellar Frameworks
Гириш Гупта
источник
1

В моем случае возникли проблемы с удалением и переустановкой SaltStack.

После запуска:

ls -lah /usr/local/Cellar/salt/

Я заметил, что владельцем группы был «персонал». (Кстати, я использую macOS Mojave версии 10.14.3.) Группа персонала может быть связана с моей конфигурацией рабочего места, но я на самом деле не знаю. Несмотря на это, я сохранил группу, чтобы не допустить дальнейшего разрушения.

Я тогда побежал:

sudo chown -R "$USER":staff /usr/local/Cellar/salt/

После этого я смог успешно удалить его с помощью этой команды (не как root):

brew uninstall --force salt
devinbost
источник
0

Если у вас нет последней версии Homebrew: я «исправил» это в прошлом, заставив Homebrew работать от имени пользователя root, что можно было сделать только путем смены владельца исполняемых файлов Homebrew на root. В какой-то момент они удалили эту функцию.

И я знаю, что они будут давать много предупреждений о том, что он не должен запускаться от имени root, но давай, иначе он не будет работать должным образом.

Судо
источник
0

Я попробовал все на этой странице, в итоге я использовал это решение:

brew uninstall --force brew-cask; brew untap $tap_name; brew update; brew cleanup; brew cask cleanup;

Моя ситуация была похожа на OP, однако моя проблема была вызвана тем, что я запустил sudo с brew cask, а затем неправильно набрал пароль. После этого я застрял с разрешениями, мешающими установке.

Альфа G33k
источник
0

Чтобы устранить ошибки для прав Brew при запуске папки

brew prune

Это решит проблемы, и нам не придется собирать какие-либо каталоги.

Катто
источник
1
это больше не работает, вы должны сделать сейчасbrew cleanup --prune-prefix
Sliq
0

Я на Каталине, и я получил эту ошибку:

touch: /usr/local/Homebrew/.git/FETCH_HEAD: Permission denied
touch: /usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask/.git/FETCH_HEAD: Permission denied
fatal: Unable to create '/usr/local/Homebrew/.git/index.lock': Permission denied
fatal: Unable to create '/usr/local/Homebrew/.git/index.lock': Permission denied

Мне нужно было только набить Homebrewкаталог

sudo chown -R "$USER":admin /usr/local/Homebrew
Билал
источник
0

Я использовал эти две команды и спас мою проблему

sudo chown -R $(whoami) /usr/local

sudo chown -R $(whoami) /usr/local/etc/bash_completion.d /usr/local/lib/python3.7/site-packages /usr/local/share/aclocal /usr/local/share/locale /usr/local/share/man/man7 /usr/local/share/man/man8 /usr/local/share/zsh /usr/local/share/zsh/site-functions /usr/local/var/homebrew/locks
Марко Апреа
источник
-5

попробуйте также выполнить эту команду

sudo chmod + t / tmp

башар
источник