Wie behebe ich Homebrew-Berechtigungen?

601

Ich habe Homebrew jetzt dreimal deinstalliert und installiert, da es mir anscheinend nie erlaubt, etwas zu installieren, da mir am Ende der meisten Installationen die Berechtigung verweigert wird.

Als Beispiel werde ich dieses libjpeg-Download-Szenario veröffentlichen, mit dem ich derzeit konfrontiert bin.

Ich versuche libjpeg zu installieren und bekomme:

$ 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' ergibt

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

Hier ist, was mein Brauarzt liest

$ 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

Dieses Erlaubnisproblem hat es unmöglich gemacht, Brew für irgendetwas zu verwenden, und ich würde mich über Vorschläge sehr freuen.

Saturnino
quelle

Antworten:

955

Ich konnte das Problem mithilfe chowndes Ordners lösen :

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

Außerdem müssen Sie (höchstwahrscheinlich) dasselbe tun auf /Library/Caches/Homebrew:

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

Anscheinend hatte ich sudozuvor in einer Weise verwendet, die meine Ordnerberechtigung weiter geändert /usr/localhat. Von nun an haben sich alle Installationen mit Brew als erfolgreich erwiesen.

Diese Antwort wurde mit freundlicher Genehmigung von gitHubs Homebrew Issue Tracker geliefert

Saturnino
quelle
14
Danke dafür. Ich musste auch laufen sudo chown -R $USER:admin /Library/Caches/Homebrew, um meine Berechtigungsprobleme zu beseitigen.
alexpls
64
Eine Änderung des Besitzes von / usr / local auf einen bestimmten Benutzer ist keine Lösung. Es ist ein schrecklicher Hack und eine Problemumgehung, wenn Sie ein Einzelbenutzersystem haben. Aber dann könnten Sie genauso gut -R / $ USER: $ USER
Fijiaaron
17
@fijiaaron Was wäre eine bessere Lösung?
juil
47
chowning / usr / local: völlig verrückte Lösung. Ich hoffe sehr, dass dies nicht die Parteilinie ist.
John Clements
15
Für diejenigen, die sich beschweren, dass diese Lösung Mehrbenutzersysteme (@fijiaaron, @JohnClements, @hmijail, @Alex) durcheinander bringt - genau deshalb wurden Gruppenberechtigungen invertiert. Auf macOS, die für admindie Gruppe jeden Benutzer admin (die jeder macOS Benutzerkonto Benutzer ist, kann sudounter anderem), so , indem Sie chown -R …:adminzusammen mit chmod -R g+w /usr/local(wie durch @AndreaDeGaetano vorgeschlagen), werden Sie hier nichts falsch machen und Null Probleme mit andere Benutzer verwenden ebenfalls /usr/local/ brew.
Slipp D. Thompson
479

Neuer Befehl für Benutzer auf macOS High Sierra , da es nicht möglich ist, chownauf /usr/local:

bash/zsh::

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

fish::

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

Referenz: Kann nicht / usr / local in High Sierra chown

andrewwong97
quelle
Ja @ Jeffpowrs Ich habe das gleiche Problem in MacOS 10.13.2
andrewwong97
4
Ich benutze die Fischschale und musste folgendes verwenden: sudo chown -R (whoami) (brew --prefix)/*
Tarellel
2
In ähnlicher Weise. Für das, was ich versuchte, musste ich sudo mkdir /usr/local/Frameworks, gefolgt von dem Befehl chown, wie er in dieser Antwort erscheint.
Dan Burton
1
Vielen Dank. Das hat den Tag gerettet.
Aashutosh Rathi
2
Gott segne dich, BRO!
Mendigo dos Bytes
285

Befolgen Sie als erste Option für jeden, der hier landet wie ich, was auch immer dies Ihnen vorschlägt:

brew doctor

Es ist der sicherste Weg, und unter anderem schlug er mir vor:

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

das löste das Berechtigungsproblem.

Das OP hat genau das getan, aber anscheinend den obigen Vorschlag nicht erhalten; Sie könnten, und es ist immer besser, dort zu beginnen und nur dann nach nicht trivialen Lösungen zu suchen, wenn es nicht geholfen hat.

Nycen
quelle
4
Bestätigt, dass dies alle Probleme behebt, die Sie möglicherweise mit Berechtigungen ab 05/2017 haben
Anton Babushkin
3
Kann auch bestätigen, dass dies alle Berechtigungsprobleme löst und dann meine Knotenversion mit Leichtigkeit aktualisieren konnte - 06/06/2018 - Danke
Richlewis
2
Brauarzt wird nicht alle Probleme finden. Das Problem, das ich hatte, war / usr / local / Frameworks, das es nicht gab, und das zu erstellen und das Eigentum daran festzulegen, hat es behoben. Brew selbst bemerkte das nicht als Problem.
Joe W
2
Ich bekomme ab dem chown: /usr/local: Operation not permitted5. Juli 2019 keine Arbeit
Tavalendo
1
Der Hinweis beim Arzt ist vielleicht einer der besten Hinweise hier, da er jederzeit verschiedene Probleme behebt (oder hilft)!
ecth
82

Wenn Sie auf OSX High Sierra sind, /usr/localkann nicht mehr sein chown. Sie können verwenden:

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

Richard
quelle
Vielen Dank. Rettete mich!
Matthias
3
Ich fand, dass $ (Brew - Präfix) mir nur / usr / local gab, worauf High Sierra bestand, dass ich die Berechtigungen nicht ändern konnte ... aber da Brew in meiner Instanz Berechtigungen für "/ usr / local / Frameworks" wollte Ich konnte stattdessen "$ (Brew - Präfix) / Frameworks" verwenden, und "Brew Link Python @ 2" funktionierte danach gut für mich.
Alpheus
Verwenden Sie dies für alle Mac-Benutzer mit mehreren Benutzern!
Erik Nguyen
Vielen Dank an OSX High Sierra, und anscheinend können wir den / user / local nicht mehr wie in früheren Versionen von MAC OSX chown. Das hat bei mir funktioniert!
Jose Mhlanga
29

Ich hatte den /usr/local/FrameworksOrdner nicht, daher wurde er für mich behoben

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

In der ersten Zeile wird ein neuer Frameworks-Ordner erstellt, den Homebrew (Brew) verwenden kann. In der zweiten Zeile erhalten Sie für diesen Ordner Ihre aktuellen Benutzerberechtigungen, die ausreichen.

Verwendete Befehle sind wie folgt:

mkdir - Verzeichnisse erstellen [ -p kein Fehler, falls vorhanden, übergeordnete Verzeichnisse nach Bedarf erstellen ]

chown - Dateieigentümer und -gruppe ändern [ -R Dateien und Verzeichnisse rekursiv bearbeiten]

whoami - effektive Benutzer-ID drucken

Ich habe OSX High Sierra

Karl Johan Vallner
quelle
27

Ich hatte dieses Problem. Eine funktionierende Lösung besteht darin, den Besitz des /usr/local aktuellen Benutzers zu ändern , anstatt rootvon:

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

Aber das ist wirklich kein richtiger Weg. Hauptsächlich, wenn Ihr Computer ein Server oder ein Mehrbenutzer ist.

Mein Vorschlag ist, den Besitz wie oben zu ändern und alles zu tun, was Sie mit Brew implementieren möchten (aktualisieren, installieren ... usw.), und dann den Besitz wieder auf root zurückzusetzen als:

  sudo chown -R root:admin /usr/local

Das würde das Problem lösen und das Eigentum in der richtigen Menge halten.

Maher Abuthraa
quelle
4
hmm .. und wann bekommen wir "Operation nicht erlaubt" für Chown?
Ewoks
@Ewoks ist das auf MacOs?
Maher Abuthraa
1
Ja, Sierra High: S
Ewoks
Überprüfen Sie diese stackoverflow.com/a/32661637/2267723 ..auch diese stackoverflow.com/a/38435256/2267723
Maher Abuthraa
15

Der Befehl von der Antwort mit der höchsten Stimme funktioniert bei mir nicht.

Es wurde ausgegeben:

chown: / usr / {mein_Benutzername} dmin: unzulässiger Benutzername

Dieser Befehl funktioniert einwandfrei (Gruppe für / usr / local war adminbereits):

sudo chown -R $USER /usr/local
Skywinder
quelle
5
Fügen Sie einige Zitate hinzusudo chown -R "$USER":admin /usr/local
orkoden
2
@skywinder Deine Antwort hat bei mir funktioniert. Musste keine Anführungszeichen für $ USER verwenden.
Anna S
sudo chown -R "$ USER": admin / usr / local, wo Sie $ USER durch Ihren Namen ersetzen.
lft93ryt
Dies führte zuError: 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.
Summersign
3
chown: /usr/local: Operation not permitted
Krishnadas PC
13

Ich wollte noch nicht mit Ordnerberechtigungen herumspielen, also habe ich Folgendes getan:

brew doctor
brew upgrade
brew cleanup

Ich konnte dann meine andere Brühformel erfolgreich weiter installieren.

Anthony To
quelle
1
Dies funktionierte gut für meine Probleme. Ich hatte mir bereits die Erlaubnis erteilt. \
Komsomol
12

Wenn Sie einen etwas gezielteren Ansatz als die Decke wünschen chown -R, ist diesesfix-homebrew Skript möglicherweise hilfreich:

#!/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.

Anstatt chmodIhrem Benutzer eine Antwort zu geben, erhält die adminGruppe (zu der Sie vermutlich gehören) Schreibzugriff auf die spezifischen Verzeichnisse /usr/local, die von Homebrew verwendet werden. Außerdem erfahren Sie genau, was Sie vor dem Ausführen tun möchten.

Darco
quelle
1
Beachten Sie, dass sich einige der Pfade ein wenig geändert zu haben scheinen, so dass Sie möglicherweise ein paar weitere Verzeichnisse chgrp und chmod müssen, aber ich bevorzuge dies immer noch gegenüber dem chown alles zu Ihrem Benutzeransatz!
Ashirley
8

In meinem Fall existierten die / usr / local / Frameworks nicht einmal, also tat ich Folgendes:

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

Und dann hat alles wie erwartet funktioniert.

Helen Vasconcelos
quelle
1
Dies hat mein Problem behoben und wurde vom Brauarzt nicht als Problem erkannt.
Joe W
7

Dies löste das Problem für mich.

sudo chown -R "$USER":admin /Users/$USER/Library/Caches/Homebrew
sudo chown -R "$USER":admin /usr/local
Fardin
quelle
2
Dies löst dieses Problem, aber ich würde diesen Schritt nach erfolgreicher Verknüpfung rückgängig machen. Nur aus Sicherheitsgründen.
ora-600
7

Ich habe mein Problem mit den folgenden Befehlen behoben:

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
quelle
1
Vielen Dank! Das ist das einzige, was geholfen hat Mac OS 10.13.4In meinem Fall musste ich Python erstellen sudo mkdir /usr/local/Frameworks und sudo chown -R $(whoami) /usr/local/Frameworksverknüpfen können!
A1m
6

Bei einem Mehrbenutzer-Mac funktionierte dies für mich:

sudo chown -R $(whoami):admin $(brew --prefix)/*
Juan José Ramírez
quelle
5

Alle diese Vorschläge können funktionieren. In der neuesten Version von Brew Doctor wurden jedoch bessere Vorschläge gemacht.

Erstens - beheben Sie das Chaos, das Sie wahrscheinlich bereits verursacht haben, /usr/localindem Sie dies in der Befehlszeile ausführen:

sudo chown -R root:wheel /usr/local

Übernehmen Sie dann die Verantwortung für die Pfade, die speziell für diesen Benutzer bestimmt sind:

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

Alle diese Informationen sind verfügbar, wenn Sie sudo brew updatealle Warnungen und Fehler ausführen und dann lesen, auf die Sie stoßen werden ...

Max Dercum
quelle
Das Setzen des Eigentums an allem in / usr / local auf root: rad ist gefährlich und unnötig. Der relevante Pfad ist / usr / local / Cellar
ben26941
1
Sie müssen diese Berechtigungen nicht berühren, es sei denn, Sie haben bereits gesagt, dass Sie sie für Ihren Entwicklungsbenutzer übernommen haben - oder in dem Fall, in dem Brew sie bereits entstellt hat, weil eine Installation mit sudo durchgeführt wurde. Brew selbst empfiehlt dieses Update in diesem Fall - was meiner Meinung nach viel weniger gefährlich ist, als das Sudo-Chaos hinter sich zu lassen.
Max Dercum
1
Könnten Sie dann einen Link zur Brauempfehlung bereitstellen?
ben26941
1
Beste Antwort. Es hat funktioniert, nachdem ich eine Migration von einem anderen Mac durchgeführt habe.
BuffMcBigHuge
4

Bei mir hat es danach geklappt

brew doctor

Das Ändern von Berechtigungsbefehlen führte zu einem weiteren Fehler

chown: /usr/local: Operation not permitted

Krishnadas PC
quelle
3

Es gibt ein Killerskript auf Github, das Dauerwellen in / usr / local- und Brew-Verzeichnissen korrigiert, damit jeder, der Mitglied der 'admin'-Gruppe ist, darauf zugreifen kann.

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

Dies ist eine bessere Lösung als die gewählte Antwort, da Sie, wenn Sie die Verzeichnisse / usr / local / ___ in $ USER umwandeln, alle anderen Administratorbenutzer von Homebrew auf diesem Computer unterbrechen.

Hier sind die Eingeweide des Skripts zu dem Zeitpunkt, als ich dies gepostet habe:

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
DasProletariat
quelle
2

Unter MacOS Mojave hatte ich auch keine Berechtigung für chownden Ordner / usr / local ( sudo chown -R "$USER":admin /usr/local).

sudo chown -R "$USER":admin /usr/local/*hat für mich jedoch funktioniert und die Berechtigungen für alles im lokalen Ordner geändert .

Hoffentlich hilft dies anderen bei demselben Problem.

Paddotk
quelle
1

Eigentlich ist es ganz einfach, führen Sie diesen Befehl aus: brew doctor

Und es wird Ihnen sagen, was zu tun ist, um Berechtigungsprobleme zu beheben, zum Beispiel in meinem Fall:

Das war das Problem:

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

Und das war die Lösung:

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
Arsalan Mehmood
quelle
1
cd /usr/local && sudo chown -R $(whoami) bin etc include lib sbin share var opt Cellar Frameworks
Girish Gupta
quelle
1

In meinem Fall habe ich Probleme beim Entfernen und erneuten Installieren von SaltStack.

Nach dem Rennen:

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

Mir ist aufgefallen, dass der Gruppeninhaber "Mitarbeiter" war. (Übrigens, ich verwende macOS Mojave Version 10.14.3.) Die Mitarbeitergruppe könnte mit meiner Arbeitsplatzkonfiguration zusammenhängen, aber ich weiß es nicht wirklich. Unabhängig davon habe ich die Gruppe erhalten, um zu verhindern, dass ich etwas weiter zerbreche.

Ich rannte dann:

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

Danach konnte ich es mit diesem Befehl erfolgreich entfernen (nicht als root):

brew uninstall --force salt
Devinbost
quelle
0

Wenn Sie nicht über das neueste Homebrew verfügen: Ich habe dies in der Vergangenheit "behoben", indem ich Homebrew gezwungen habe, als Root ausgeführt zu werden. Dies war nur möglich, indem der Besitz der ausführbaren Homebrew-Dateien in "root" geändert wurde. Irgendwann haben sie diese Funktion entfernt.

Und ich weiß, dass sie viele Warnungen geben werden, die besagen, dass es nicht als Root ausgeführt werden sollte, aber komm schon, sonst funktioniert es nicht richtig.

sudo
quelle
0

Ich habe alles auf dieser Seite ausprobiert und am Ende diese Lösung verwendet:

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

Meine Situation war ähnlich wie beim OP, mein Problem wurde jedoch speziell dadurch verursacht, dass sudo mit dem Brühfass ausgeführt wurde und dann mein Passwort falsch war. Danach hatte ich keine Berechtigungen mehr, die die Installation verhinderten.

Alpha G33k
quelle
0

Um Fehler für Brew-Berechtigungen beim Ausführen von Ordnern zu beheben

brew prune

Dadurch werden die Probleme behoben und wir müssen keine Verzeichnisse durchsuchen.

Catto
quelle
1
das funktioniert nicht mehr, du musst es jetzt tunbrew cleanup --prune-prefix
Sliq
0

Ich bin auf Catalina und habe diesen Fehler erhalten:

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

Ich musste nur das HomebrewVerzeichnis durchforsten

sudo chown -R "$USER":admin /usr/local/Homebrew
Bilal
quelle
0

Ich habe diese beiden Befehle verwendet und mein Problem gespeichert

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
Marco Aprea
quelle
-5

Versuchen Sie auch, diesen Befehl auszuführen

sudo chmod + t / tmp

bashar
quelle