Jak naprawić uprawnienia Homebrew?

601

Odinstalowałem i zainstalowałem Homebrew 3 razy teraz, ponieważ wydaje się, że nigdy nie pozwala mi niczego instalować, ponieważ odmawia mi uprawnień pod koniec większości instalacji.

Jako przykład opublikuję ten scenariusz pobierania libjpeg, z którym się obecnie spotykam.

Próbuję zainstalować libjpeg i uzyskać:

$ 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

Wynik „brew link jpeg” powoduje

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

Oto, co czyta mój lekarz piwowarstwa

$ 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

Ten problem z uprawnieniami uniemożliwia użycie naparu do niczego i byłbym bardzo wdzięczny za wszelkie sugestie.

Saturnino
źródło

Odpowiedzi:

955

Byłem w stanie rozwiązać problem, używając chownw folderze:

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

Również (najprawdopodobniej) będziesz musiał zrobić to samo na /Library/Caches/Homebrew:

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

Najwyraźniej użyłem sudowcześniej w sposób, który zmienił moje uprawnienia do folderów /usr/local, odtąd wszystkie instalacje z naparami okazały się skuteczne.

Ta odpowiedź jest dostępna dzięki uprzejmości domowego trackera problemów gitHub

Saturnino
źródło
14
Dzięki za to. Musiałem także uruchomić, sudo chown -R $USER:admin /Library/Caches/Homebrewaby pozbyć się problemów z uprawnieniami.
alexpls
64
zmiana właściciela / usr / local na konkretnego użytkownika nie jest rozwiązaniem. Jest to straszny hack i obejście, jeśli masz system dla jednego użytkownika. Ale wtedy równie dobrze możesz po prostu chown -R / $ USER: $ USER
fijiaaron
17
@fijiaaron Więc co byłoby lepszym rozwiązaniem?
lipiec
47
chowning / usr / local: całkowicie szalone rozwiązanie. Mam nadzieję, że tak naprawdę nie jest to linia imprezy.
John Clements
15
Dla tych, którzy narzekają, że to rozwiązanie zepsuje systemy dla wielu użytkowników (@fijiaaron, @JohnClements, @hmijail, @Alex) - właśnie dlatego uprawnienia grupy zostały odwrócone. W systemie macOS admingrupą jest każdy użytkownik administracyjny (czyli każdy użytkownik konta użytkownika systemu macOS, który może sudomiędzy innymi), więc działając chown -R …:adminrazem z chmod -R g+w /usr/local(jak sugeruje @AndreaDeGaetano), nie zrobisz tutaj nic złego i nie będziesz mieć problemów z inni użytkownicy również używają /usr/local/ brew.
Slipp D. Thompson
478

Nowe polecenie dla użytkowników systemu macOS High Sierra, ponieważ nie jest możliwe chownwłączenie /usr/local:

bash/zsh:

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

fish:

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

Odniesienie: Nie można chown / usr / local w High Sierra

andrewwong97
źródło
Tak @Jeffpowrs Mam ten sam problem w systemie macOS 10.13.2
andrewwong97
4
Używam skorupy ryb i musiałem użyć następujących elementów: sudo chown -R (whoami) (brew --prefix)/*
Tarellel
2
Pokrewnie. Za to, co próbowałem zrobić, musiałem wykonać sudo mkdir /usr/local/Frameworkspolecenie chown, jak pokazano w tej odpowiedzi.
Dan Burton
1
Dzięki. To uratowało dzień.
Aashutosh Rathi
2
BÓG BŁOGOSŁAWIA, BRO!
Mendigo dos Bytes
285

Jako pierwszą opcję dla każdego, kto wyląduje tutaj tak jak ja, wykonaj wszystko, co to sugeruje:

brew doctor

To najbezpieczniejsza ścieżka i między innymi zasugerował mi:

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

które rozwiązało problem z uprawnieniami.

OP właśnie to zrobił, ale najwyraźniej nie otrzymał powyższej sugestii; możesz i zawsze lepiej jest zacząć od tego i dopiero wtedy poszukaj nietrywialnych rozwiązań, jeśli to nie pomoże.

Nycen
źródło
4
Potwierdzono, że to rozwiązuje wszelkie problemy z uprawnieniami na dzień 05/2017
Anton Babushkin
3
Potwierdzam również, że to rozwiązuje wszelkie problemy z uprawnieniami i udało mi się z łatwością zaktualizować moją wersję węzła - 06.06.2018 - Dzięki
Richlewis
2
lekarz piwowarski nie znajdzie wszystkich problemów. Problem, który miałem, to / usr / local / Frameworks nie istniał, a utworzenie go i ustawienie własności na tym rozwiązało. sam browar nie zauważył tego jako problemu.
Joe W
2
Dostaję, chown: /usr/local: Operation not permittedże nie działa od 5 lipca 2019 r.
tavalendo
1
Wskazówka z lekarzem jest być może jedną z najlepszych wskazówek tutaj, ponieważ naprawia (lub pomaga naprawić) różne problemy w dowolnym momencie!
ecth
82

Jeśli korzystasz z OSX High Sierra, /usr/localnie możesz już być chown. Możesz użyć:

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

Richard
źródło
Dzięki. Uratował mnie!
Matthias,
3
Odkryłem, że $ (brew --prefix) właśnie dał mi / usr / local, co High Sierra nalegało, że nie mogę zmienić uprawnień na ... ale ponieważ brow chciał w moim przypadku uprawnień do "/ usr / local / Frameworks" , Zamiast tego mogłem używać „$ (brew --prefix) / Frameworks”, a potem „brew link python @ 2” działało dla mnie dobrze.
alpheus
Wszyscy użytkownicy komputerów Mac z wieloma użytkownikami, użyj tego!
Erik Nguyen,
Dziękuję za OSX High Sierra i najwyraźniej nie możemy już zmienić / user / local jak w poprzednich wersjach MAC OSX. To zadziałało dla mnie!
Jose Mhlanga
29

Nie miałem /usr/local/Frameworksfolderu, więc naprawiłem go

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

Pierwszy wiersz tworzy nowy folder Frameworks do użycia przez homebrew (napar). Druga linia daje temu folderowi aktualne uprawnienia użytkownika, które są wystarczające.

Użyto następujących poleceń:

mkdir - twórz katalogi [ -p bez błędu, jeśli istnieje, twórz katalogi nadrzędne w razie potrzeby]

chown - zmiana właściciela pliku i grupy [ -R rekurencyjnie działa na plikach i katalogach]

whoami - wydrukuj efektywny identyfikator użytkownika

Mam OSX High Sierra

Karl Johan Vallner
źródło
27

Miałem ten problem. Działającym rozwiązaniem jest zmiana właściciela /usr/local na bieżącego użytkownika zamiast root:

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

Ale tak naprawdę to nie jest właściwy sposób. Głównie, jeśli twój komputer jest serwerem lub wieloma użytkownikami.

Sugeruję, aby zmienić własność jak wyżej i zrobić wszystko, co chcesz zaimplementować w Brew .. (zaktualizuj, zainstaluj ... itd.), A następnie zresetuj własność z powrotem do roota jako:

  sudo chown -R root:admin /usr/local

To rozwiązałoby problem i utrzymywało własność w odpowiednim zestawie.

Maher Abuthraa
źródło
4
hmm .. a kiedy dostaniemy „operacja niedozwolona” dla chown?
Ewoks
@Ewoks to na MacO?
Maher Abuthraa
1
Tak, Sierra High: S
Ewoks,
sprawdź ten stackoverflow.com/a/32661637/2267723 .. również ten stackoverflow.com/a/38435256/2267723
Maher Abuthraa
15

Polecenie z najlepiej głosowanej odpowiedzi nie działa dla mnie.

Ma wynik:

chown: / usr / {moja_nazwa_użytkownika} dmin: nielegalna nazwa użytkownika

To polecenie działa dobrze (grupa dla / usr / local adminjuż była ):

sudo chown -R $USER /usr/local
skywinder
źródło
5
Dodaj cytatysudo chown -R "$USER":admin /usr/local
orkoden
2
@skywinder Twoja odpowiedź zadziałała dla mnie. Nie musiałem używać kwotowań na USER $.
Anna S.
sudo chown -R "$ USER": admin / usr / local gdzie zamieniasz $ USER na swoje imię i nazwisko.
lft93ryt
zaowocowało toError: 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.
thesummersign
3
chown: /usr/local: Operation not permitted
Krishnadas PC
13

Nie chciałem jeszcze chować z uprawnieniami do folderów, więc wykonałem następujące czynności:

brew doctor
brew upgrade
brew cleanup

Byłem wtedy w stanie kontynuować instalację mojej innej formuły parzenia.

Anthony To
źródło
1
To działało dobrze w przypadku moich problemów. Mam już uprawnienia SUDO. \
Komsomol
12

Jeśli chcesz nieco bardziej ukierunkowane podejście niż koc chown -R, tenfix-homebrew skrypt może być przydatny:

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

Zamiast zrobić chmoddla użytkownika, daje admingrupie (do której prawdopodobnie należysz) dostęp do zapisu do określonych katalogów /usr/localużywanych przez homebrew. Mówi także dokładnie, co zamierza zrobić przed zrobieniem tego.

darco
źródło
1
Zauważ, że niektóre ścieżki wydają się nieco zmienione, więc być może będziesz musiał chgrp i chmod jeszcze kilka katalogów, ale nadal wolę to niż wszystko, co chcesz, niż podejście użytkownika!
ashirley,
8

W moim przypadku / usr / local / Frameworks nawet nie istniał, więc zrobiłem:

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

A potem wszystko działało zgodnie z oczekiwaniami.

Helen Vasconcelos
źródło
1
To naprawiło mój problem i nie zostało wykryte jako problem przez piwowara.
Joe W
7

To rozwiązało przede mną problem.

sudo chown -R "$USER":admin /Users/$USER/Library/Caches/Homebrew
sudo chown -R "$USER":admin /usr/local
Fardin
źródło
2
To rozwiązuje ten problem, ale cofnęłem ten krok po udanym połączeniu. Tylko ze względów bezpieczeństwa.
ora-600
7

Rozwiązałem problem z następującymi poleceniami:

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
źródło
1
Dzięki! To jedyna rzecz, która pomogła Mac OS 10.13.4W moim przypadku musiałem stworzyć sudo mkdir /usr/local/Frameworks i sudo chown -R $(whoami) /usr/local/Frameworksmóc połączyć Pythona!
A1m
6

W przypadku komputera Mac z wieloma użytkownikami działało to dla mnie:

sudo chown -R $(whoami):admin $(brew --prefix)/*
Juan José Ramírez
źródło
5

Wszystkie te sugestie mogą działać. W najnowszej wersji Brew Doctor pojawiły się jednak lepsze sugestie.

Po pierwsze - napraw bałagan, który prawdopodobnie już spowodowałeś /usr/local, uruchamiając go w wierszu poleceń:

sudo chown -R root:wheel /usr/local

Następnie przejmij na własność ścieżki, które powinny być specjalnie dla tego użytkownika:

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

Wszystkie te informacje są dostępne, jeśli uruchomisz, sudo brew updatea następnie przeczytasz wszystkie ostrzeżenia i błędy, które napotkasz ...

Max Dercum
źródło
Ustawienie własności wszystkiego w / usr / local na root: koło jest niebezpieczne i niepotrzebne. Odpowiednia ścieżka to / usr / local / Cellar
ben26941
1
nie musisz dotykać tych uprawnień, chyba że masz ... powiedz, że już poszedłeś i przejąłeś je na własność dla programisty - lub w przypadku, gdy brew już je zniekształciło, ponieważ wykonało instalację z sudo. brew sama zaleca tę poprawkę w takim przypadku - co moim zdaniem jest o wiele mniej niebezpieczne niż pozostawienie bałaganu sudo.
Max Dercum,
1
Czy możesz podać link do rekomendacji naparu?
ben26941,
1
Najlepsza odpowiedź. Działało po tym, jak przeprowadziłem migrację z innego komputera Mac.
BuffMcBigHuge
4

Dla mnie to zadziałało później

brew doctor

Zmiana komend uprawnień spowodowała kolejny błąd

chown: /usr/local: Operation not permitted

Krishnadas PC
źródło
3

Na github znajduje się skrypt zabójcy, który naprawia perms w katalogach / usr / local i brew, aby były dostępne dla każdego, kto jest członkiem grupy „admin”.

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

Jest to lepsze rozwiązanie niż wybrana odpowiedź, ponieważ jeśli zmienisz katalog / usr / local / ___ na $ USER, wtedy złamiesz innych użytkowników adminów homebrew na tym komputerze.

Oto wnętrzności skryptu w momencie, kiedy to opublikowałem:

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
TheProletariat
źródło
2

Na MacOS Mojave nie miałem uprawnień do chownfolderu / usr / local ( sudo chown -R "$USER":admin /usr/local).

sudo chown -R "$USER":admin /usr/local/*działało jednak dla mnie, zmieniając uprawnienia do wszystkiego wewnątrz folderze lokalnym.

Mam nadzieję, że pomoże to innym osobom z tym samym problemem.

paddotk
źródło
1

W rzeczywistości jest to bardzo proste, wykonaj następujące polecenie: brew doctor

I powie ci, co robić, aby rozwiązać problemy z uprawnieniami, na przykład w moim przypadku:

To był problem:

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

To było rozwiązanie:

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
źródło
1
cd /usr/local && sudo chown -R $(whoami) bin etc include lib sbin share var opt Cellar Frameworks
Girish Gupta
źródło
1

W moim przypadku mam problemy z usunięciem i ponowną instalacją SaltStack.

Po bieganiu:

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

Zauważyłem, że właścicielem grupy był „personel”. (BTW, używam macOS Mojave wersja 10.14.3.) Grupa pracowników może być powiązana z konfiguracją mojego miejsca pracy, ale tak naprawdę nie wiem. Niezależnie od tego zachowałem grupę, aby zapobiec dalszemu niszczeniu.

Potem pobiegłem:

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

Potem udało mi się go usunąć za pomocą tego polecenia (nie jako root):

brew uninstall --force salt
devinbost
źródło
0

Jeśli nie masz najnowszej wersji Homebrew: „Naprawiłem” to w przeszłości, zmuszając Homebrew do działania jako root, co można zrobić tylko poprzez zmianę własności plików wykonywalnych Homebrew na root. W pewnym momencie usunęli tę funkcję.

I wiem, że dadzą wiele ostrzeżeń, mówiąc, że nie powinien działać jako root, ale daj spokój, inaczej nie działa poprawnie.

sudo
źródło
0

Próbowałem wszystkiego na tej stronie, ostatecznie skorzystałem z tego rozwiązania:

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

Moja sytuacja była podobna do OP, jednak mój problem był spowodowany konkretnie uruchomieniem sudo z beczką naparu, a następnie nieprawidłowym hasłem. Potem utknąłem z uprawnieniami uniemożliwiającymi instalację.

Alpha G33k
źródło
0

Aby rozwiązać błędy dotyczące uprawnień Brew podczas uruchamiania folderu

brew prune

To rozwiąże problemy i nie będziemy musieli przeglądać żadnych katalogów.

Catto
źródło
1
to już nie działa, musisz teraz zrobićbrew cleanup --prune-prefix
Sliq
0

Jestem na Catalinie i dostałem ten błąd:

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

Musiałem tylko przejrzeć Homebrewkatalog

sudo chown -R "$USER":admin /usr/local/Homebrew
Bilal
źródło
0

Użyłem tych dwóch poleceń i zapisałem mój problem

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
źródło
-5

spróbuj także wykonać to polecenie

sudo chmod + t / tmp

bashar
źródło