Beheben von Berechtigungsfehlern unter OS X Lion nach der Installation von Homebrew

Ich habe gerade von Snow Leopard auf Lion aktualisiert und versuche, Homebrew zu installieren. Nach der Installation führe ich jedoch brew doctordie Installationsanweisungen aus und sehe eine Reihe von Fehlern, die darauf hinweisen, dass /usr/local-Verzeichnisse 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 Schreibberechtigungen für diese Verzeichnisse hat:

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?

Warum "chown" Sie diese Verzeichnisse nicht wie vorgeschlagen auf 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: Ich habe genau das gleiche Problem. Ich sehe jedoch nicht ein, warum es stattdessen mir/usr/local gehören sollte, wenn dieser Computer mehrere Administratorbenutzer hat. Außerdem ist es mir möglich, an die Stellen zu schreiben, über die man sich beschwert. Irgendwelche anderen Ideen? brew doctor

Antworten (4)

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 aufbewahrt.


Ignorieren Sie das Berechtigungsproblem vorerst

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

Ich denke, Sie sollten das Problem ignorieren, anstatt den Besitz 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/localeinem bestimmten Benutzer zu gehören. Ich habe mehr als einen Admin-Benutzer auf diesem Computer. Sie sollten /usr/localBesitz von root:adminals Besitzer 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 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

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

Wenn Pathname.writable_real?Sie stattdessen verwenden, erhalten Sie das richtige Ergebnis – es besagt, dass das Verzeichnis beschreibbar ist:

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

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

Der Unterschied zwischen den beiden Funktionen ist (laut den Ruby-Dokumenten hier und hier ):

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

writable_real?(file_name) → true oder false: Gibt true zurück, wenn die benannte Datei von der echten Benutzer-ID dieses Prozesses beschreibbar ist.

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?!? :-)

Ich glaube, du brauchst nur das:

brew update

Dann versuchen Sie es brew doctorerneut.

Möglicherweise erhalten Sie weiterhin 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, erhalten Sie auch eine Fehlermeldung, die besagt, dass Sie einen ungültigen Pfad haben, aber direkt in der Nachricht werden Sie auch lesen, dass es keinen gültigen Pfad gibt, wenn Sie es sind Verwenden Sie einfach die Befehlszeilentools für Xcode, also ist das auch in Ordnung.

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

Ich habe eine Kombination aus den Vorschlägen von iolsmit und Phil M befolgt: Ich habe diese Verzeichnisse auf meinen Benutzernamen gesetzt und dann brew updateerneut ausgeführt, gefolgt von brew doctor. Dadurch wurden alle Fehlermeldungen beseitigt und Brew-Installationen scheinen jetzt gut zu funktionieren. Danke euch beiden!

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?!? :-)