806 Stimmen

Wie repariere ich Homebrew-Berechtigungen?

Ich habe Homebrew jetzt schon 3 Mal deinstalliert und installiert, weil es mir anscheinend nie erlaubt, irgendetwas zu installieren, da es mir am Ende der meisten Installationen Berechtigungen verweigert.

Als Beispiel werde ich hier das aktuelle Szenario des Libjpeg-Downloads posten, mit dem ich gerade konfrontiert bin.

Ich versuche, libjpeg zu installieren und erhalte:

$ 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' führt zu

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

Hier ist, was mein Brew-Doktor sagt

$ 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 Berechtigungsproblem macht es unmöglich, Brew für irgendetwas zu nutzen, und ich würde mich über jede Empfehlung sehr freuen.

12voto

Wenn Sie einen etwas gezielteren Ansatz als den generellen chown -R möchten, finden Sie möglicherweise dieses fix-homebrew Skript nützlich:

#!/bin/sh

[ -e `which brew` ] || {
    echo Homebrew scheint nicht installiert zu sein.
    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 "Dieses Skript wird die Gruppe auf den folgenden Pfaden rekursiv aktualisieren"
echo "auf die '${BREW_GROUP}' Gruppe und sie für die Gruppe schreibbar machen:"
echo ""

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

echo ""
echo "Es wird auch alle Änderungen im homebrew-Repo verstecken (und bereinigen), damit Sie einen frischen Stand haben."
echo ""

read -p 'Drücken Sie eine beliebige Taste, um fortzufahren, oder STRG-C, um abzubrechen.'

echo "Möglicherweise werden Sie unten nach Ihrem Anmeldepasswort gefragt."
echo ""

# Nicht-rekursiv den Stamm-Braupfad aktualisieren.
echo Aktualisiere "$BREW_ROOT" . . .
sudo chgrp "$BREW_GROUP" "$BREW_ROOT"
sudo chmod g+w "$BREW_ROOT"

# Die anderen Pfade rekursiv aktualisieren.
for dir in $BREW_DIRS ; do {
    [ -e "$BREW_ROOT/$dir" ] && (
        echo Aktualisiere "$BREW_ROOT/$dir" rekursiv. . .
        sudo chmod -R g+w "$BREW_ROOT/$dir"
        sudo chgrp -R "$BREW_GROUP" "$BREW_ROOT/$dir"
    )
} ; done

# Nicht-destruktiv alle Git-Reste beiseite schieben
echo Verstecke Änderungen in "$BREW_ROOT" . . .
cd $BREW_ROOT
git add .
git stash
git clean -d -f Library

echo Fertig.

Anstatt einen chmod für Ihren Benutzer durchzuführen, gibt es der Gruppe admin (der Sie wahrscheinlich angehören) Schreibzugriff auf die spezifischen Verzeichnisse in /usr/local, die homebrew verwendet. Es sagt Ihnen auch genau, was es tun wird, bevor es es ausführt.

9voto

hardc0der Punkte 439

Ich habe mein Problem mit diesen Befehlen gelöst:

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

8voto

auspicious99 Punkte 3300

Zunächst sind mit MacOS Catalina die grundlegenden Möglichkeiten zur Änderung des Eigentums von /usr/local nicht mehr erlaubt. Zum Beispiel:

$ sudo chown -R "$USER":wheel /usr/local
Passwort:
chown: /usr/local: Operation not permitted
$ sudo chown -R "$USER" /usr/local
chown: /usr/local: Operation not permitted
$ sudo chown -R $(whoami) /usr/local
chown: /usr/local: Operation not permitted

Die oben genannten beliebten Antworten können daher nicht verwendet werden. Zweitens, wenn jedoch das Hauptanliegen darin besteht, Homebrew zu installieren oder zu aktualisieren, anstatt die Berechtigungen für /usr/local selbst ändern zu wollen, könnte es übertrieben sein (wie mit dem Vorschlaghammer einen Nagel zu hämmern), die Berechtigungen für /usr/local zu ändern. Es beeinflusst Ihre gesamte Maschine und andere Software könnte ebenfalls /usr/local nutzen. Zum Beispiel habe ich Dateien, die sich auf maven und meinSQL beziehen, in /usr/local.

Eine präzisere Lösung besteht darin, den Anweisungen zur Installation von Homebrew zu folgen, die auf der Homebrew GitHub-Seite angegeben sind, nämlich

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

welches Homebrew innerhalb von /usr/local installiert, ohne das Eigentum von /usr/local selbst zu ändern. Stattdessen werden Cellar, Caskroom, Frameworks, Homebrew usw. innerhalb von /usr/local installiert. Dies scheint meiner Meinung nach eine elegantere, präzisere Lösung zu sein.

8voto

Helen Vasconcelos Punkte 321

In meinem Fall gab es /usr/local/Frameworks nicht einmal, also habe ich:

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

Und dann hat alles wie erwartet funktioniert.

7voto

Für einen Multiuser-Mac hat dies für mich funktioniert:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X