So beheben Sie Berechtigungsfehler unter OS X Lion nach der Installation von Homebrew

9

Ich habe gerade ein Upgrade von Snow Leopard auf Lion durchgeführt und versuche, Homebrew zu installieren. Nach der Installation werde ich jedoch brew doctorgemäß den Installationsanweisungen ausgeführt und sehe eine Reihe von Fehlern, die darauf hinweisen, dass die Verzeichnisse / usr / local nicht beschreibbar sind. Zum Beispiel:

Error: /usr/local/share isn't writable.
This can happen if you "sudo make install" software that isn't managed
by Homebrew.

If a brew tries to write a file to this directory, the install will
fail during the link step.

You should probably `chown` /usr/local/share

Ich bekomme diese für eine Reihe von Verzeichnissen:

You should probably `chown` /usr/local/include

You should probably `chown` /usr/local/share

You should probably `chown` /usr/local/share/man

Ich kann nicht herausfinden, warum dieser Fehler auftritt, da ich anscheinend Teil der Unix-Gruppe bin, die über Schreibberechtigungen für diese Verzeichnisse verfügt:

Mini:~ felciano$ ls -ld /usr/local/share
drwxrwxr-x  4 root  admin  136 May 13 15:53 /usr/local/share
Mini:~ felciano$ whoami
felciano
Mini:~ felciano$ dscl . -read /Groups/admin GroupMembership
GroupMembership: root felciano
Mini:~ felciano$

Was vermisse ich?

Ramon
quelle
Warum "chown" Sie diese Verzeichnisse nicht wie vorgeschlagen in Ihren Benutzernamen? Sie sollten sowieso nicht zu "root" gehören. Für mehrere Benutzer können Sie auch die Gruppenberechtigungen ändern: apple.stackexchange.com/q/42127/14994
iolsmit
@iolsmit: Ich habe genau das gleiche Problem. Ich verstehe jedoch nicht, warum ich stattdessen /usr/localgehören sollte, wenn dieser Computer mehrere Administratorbenutzer hat. Es ist mir auch möglich, an die Orte zu schreiben, über die ich mich beschwere. Irgendwelche anderen Ideen? brew doctor
mgd

Antworten:

7

EDIT: Das Problem ist jetzt in Homebrew behoben:

Wenn das Problem weiterhin auftritt, aktualisieren Sie Homebrew wie folgt:

brew update

Wenn Sie wissen möchten, was das Problem war, habe ich meine ursprüngliche Antwort unten beibehalten.


Ignorieren Sie das Berechtigungsproblem vorerst

Ich habe genau das gleiche Problem und meiner Meinung nach liegt das Problem brew doctoreher in Ihrer als in meiner und meiner Installation.

Ich denke, Sie sollten das Problem ignorieren, anstatt den Eigentümer von zu ändern /usr/local. Alternativ können Sie Ihr lokales brew doctorSkript reparieren, bis ein Fix veröffentlicht wird. Siehe unten.

Ich halte es nicht für richtig, /usr/localeinen bestimmten Benutzer in Besitz zu nehmen. Ich habe mehr als einen Administrator auf diesem Computer. Sie sollten /usr/localim Besitz von root:adminals Eigentümer und Gruppe verlassen.

Meine Untersuchung

Wie für Sie habe ich eine /usr/local, die von meinem Benutzer, der auch Mitglied der adminGruppe ist, perfekt beschreibbar ist :

$ ls -ld /usr/local/
drwxrwxr-x  14 root  admin  476 22 Jun 23:33 /usr/local/
$ whoami
mgd
$ dscl . -read /Groups/admin GroupMembership
GroupMembership: root mgd rgd

Lassen Sie uns testen, ob das Verzeichnis wirklich beschreibbar ist:

$ ls -l /usr/local/newfile
ls: /usr/local/newfile: No such file or directory
$ touch /usr/local/newfile
$ ls -l /usr/local/newfile
-rw-r--r--  1 mgd  admin  0 23 Jun 14:52 /usr/local/newfile

Weitere Untersuchungen des brew doctorCodes führten mich zu dem Schluss, dass die Verwendung der Ruby-Funktion Pathname.writable?das Problem verursacht. Betrachten Sie diese interaktive Ruby-Sitzung:

$ irb
>> require 'pathname'
=> true
>> Pathname('/usr/local').writable?
=> false

Funktion Pathname.writable?sagt, /usr/localist nicht beschreibbar, obwohl wir wissen, dass es ist.

Wenn Sie Pathname.writable_real?stattdessen verwenden, erhalten Sie das richtige Ergebnis - das Verzeichnis ist beschreibbar:

>> Pathname('/usr/local').writable_real?
=> true

Dies sollte in behoben werden /usr/local/Library/Homebrew/cmd/doctor.rb. Sie können das Problem in Ihrer eigenen Installation beheben, während Sie auf eine Korrektur warten.

Der Unterschied zwischen den beiden Funktionen ist (gemäß den Ruby-Dokumenten hier und hier ):

beschreibbar? (Dateiname) → wahr oder falsch: Gibt wahr zurück, wenn die benannte Datei durch die effektive Benutzer-ID dieses Prozesses beschreibbar ist.

writable_real? (Dateiname) → true oder false: Gibt true zurück, wenn die benannte Datei durch die tatsächliche Benutzer-ID dieses Prozesses beschreibbar ist.

mgd
quelle
Daumen hoch für die Untersuchung und Klärung von mgd ... es ist genau richtig! Es scheint, dass ein ähnliches Problem vor etwa einem Jahr auf github.com angesprochen wurde, aber nie (richtig?) Gelöst wurde, zumindest nicht durch die Verwendung von writable_real?... Vielleicht ist es Zeit für eine Pull-Anfrage?!? :-)
pvandenberk
Behoben
0

Ich glaube, Sie brauchen nur Folgendes:

brew update

Dann versuchen Sie es brew doctorerneut.

Möglicherweise erhalten Sie immer noch Fehler zu Abhängigkeiten, die Sie nicht verwenden (in meinem Fall Java), was in Ordnung ist. Wenn Sie die Befehlszeilentools für Xcode anstelle der vollständigen Installation von Xcode installiert haben, wird auch eine Fehlermeldung angezeigt, dass Sie einen ungültigen Pfad haben. Direkt in der Nachricht wird jedoch auch angezeigt, dass kein gültiger Pfad vorhanden ist Verwenden Sie einfach die Befehlszeilentools für Xcode, damit ist das auch in Ordnung.

Zum Nutzen anderer: Denken Sie daran, dass Sie als Administrator angemeldet sein müssen, damit dies funktioniert.

Phil M.
quelle
0

Ich folgte einer Kombination der Vorschläge von iolsmit und Phil M: Ich habe diese Verzeichnisse meinem Benutzernamen zugeordnet und bin dann brew updateerneut gelaufen , gefolgt von brew doctor. Dadurch wurden alle Fehlermeldungen beseitigt, und die Brauinstallationen scheinen nun gut zu funktionieren. Danke euch beiden!

Ramon
quelle
0

Daumen hoch für die Untersuchung und Klärung von @ mgd ... es ist genau richtig!

Es scheint, dass ein ähnliches Problem vor etwa einem Jahr auf github.com angesprochen wurde, aber nie (richtig?) Gelöst wurde, zumindest nicht durch die Verwendung von writable_real?... Vielleicht ist es Zeit für eine Pull-Anfrage?!? :-)

pvandenberk
quelle