Jak rozwiązać błędy uprawnień w systemie OS X Lion po instalacji Homebrew

9

Właśnie zaktualizowałem system Snow Leopard do Lion i próbuję zainstalować Homebrew. Jednak po instalacji uruchamiam się brew doctorzgodnie z instrukcjami instalacji i widzę serię błędów wskazujących, że katalogów / usr / local nie można zapisać. Na przykład:

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

Dostaję je za kilka katalogów:

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

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

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

Nie mogę zrozumieć, dlaczego pojawia się ten błąd, ponieważ wydaje się, że jestem częścią grupy Unix, która ma uprawnienia do zapisu w tych katalogach:

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$

czego mi brakuje?

Ramon
źródło
Dlaczego nie „zmieniłeś” tych katalogów na swoją nazwę użytkownika, zgodnie z sugestią? I tak nie powinny należeć do „root”. W przypadku wielu użytkowników możesz także zmienić uprawnienia grupy: apple.stackexchange.com/q/42127/14994
iolsmit
@iolsmit: Mam dokładnie ten sam problem. Nie widzę jednak /usr/localpowodu, dla którego powinienem należeć do mnie, gdy ten komputer ma wielu użytkowników administracyjnych. Ponadto, mogę pisać do lokalizacji, na które brew doctornarzeka. Jakieś inne pomysły?
mgd

Odpowiedzi:

7

EDYCJA: Problem został już naprawiony w Homebrew:

Jeśli problem nadal występuje, zaktualizuj Homebrew w następujący sposób:

brew update

Jeśli chcesz wiedzieć, na czym polega problem, poniżej zamieściłem oryginalną odpowiedź.


Na razie zignoruj ​​kwestię zezwolenia

Mam dokładnie ten sam problem i moim zdaniem problem jest brew doctorraczej związany z instalacją.

Myślę, że powinieneś zignorować ten problem, a nie zmienić własność /usr/local. Alternatywnie możesz naprawić swój lokalny brew doctorskrypt, dopóki poprawka nie zostanie wydana. Patrz poniżej.

Nie uważam za słuszne uczynienie /usr/localwłasnością określonego użytkownika. Mam więcej niż jednego użytkownika administratora na tym komputerze. Powinieneś pozostawić /usr/localwłasność root:adminjako właściciel i grupa.

Moje dochodzenie

Podobnie jak dla ciebie, /usr/localmój użytkownik, który jest również członkiem admingrupy, doskonale zapisuje dane :

$ 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

Sprawdźmy, czy katalog jest naprawdę zapisywalny:

$ 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

Dalsze badanie brew doctorkodu doprowadziło mnie do wniosku, że Pathname.writable?przyczyną problemu jest użycie funkcji ruby . Rozważ tę interaktywną sesję Ruby:

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

Funkcja Pathname.writable?mówi, że /usr/localnie można zapisywać, chociaż wiemy, że jest.

Użycie Pathname.writable_real?zamiast tego daje poprawny wynik - mówi, że katalog można zapisać:

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

To powinno zostać naprawione w /usr/local/Library/Homebrew/cmd/doctor.rb. Możesz to naprawić we własnej instalacji, czekając na poprawkę.

Różnica między tymi dwiema funkcjami jest (zgodnie z dokumentami Ruby tutaj i tutaj ):

writable? (nazwa_pliku) → true czy false: Zwraca true, jeśli nazwany plik jest zapisywalny przez efektywny identyfikator użytkownika tego procesu.

writable_real? (nazwa_pliku) → true lub false: Zwraca true, jeśli nazwany plik jest zapisywalny przez rzeczywisty identyfikator użytkownika tego procesu.

mgd
źródło
Kciuki za dochodzenie i wyjaśnienia mgd ... jest na miejscu! Wygląda na to, że podobny problem został zgłoszony na github.com około rok temu, ale nigdy (właściwie?) Nie został rozwiązany, przynajmniej nie przy użyciu writable_real?... może nadszedł czas na żądanie ściągnięcia?!? :-)
pvandenberk
0

Uważam, że potrzebujesz tego:

brew update

Następnie spróbuj brew doctorponownie.

Nadal mogą występować błędy dotyczące wszelkich zależności, których nie używasz (w moim przypadku Java), co jest w porządku. Jeśli masz zainstalowane narzędzia wiersza polecenia dla Xcode zamiast pełnej instalacji Xcode, otrzymasz również komunikat o błędzie informujący, że masz niepoprawną ścieżkę, ale bezpośrednio w komunikacie przeczytasz również, że nie ma prawidłowej ścieżki, jeśli jesteś po prostu używając narzędzi wiersza poleceń dla Xcode, więc to też jest w porządku.

Z korzyścią dla innych: pamiętaj, że aby to zadziałało, musisz zalogować się jako administrator.

Phil M.
źródło
0

Postępowałem zgodnie z sugestiami iolsmit i Phila M.: Zmieniłem te katalogi na moją nazwę użytkownika, a następnie uruchomiłem brew updateponownie, a następnie brew doctor. Pozbyło się to wszystkich komunikatów o błędach i instalacje zaparzania wydają się teraz działać dobrze. Dziękuję wam obu!

Ramon
źródło
0

Kciuki za dochodzenie i wyjaśnienia @ mgd ... jest na miejscu!

Wygląda na to, że podobny problem został zgłoszony na github.com około rok temu, ale nigdy (właściwie?) Nie został rozwiązany, przynajmniej nie przy użyciu writable_real?... może nadszedł czas na żądanie ściągnięcia?!? :-)

pvandenberk
źródło