Come riparare i permessi homebrew?


601

Ho disinstallato e installato Homebrew 3 volte perché sembra che non mi permetta mai di installare nulla in quanto mi nega le autorizzazioni alla fine della maggior parte delle installazioni.

Ad esempio, posterò questo scenario di download di libjpeg che sto attualmente affrontando.

Provo a installare libjpeg e ottengo:

$ 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" risulta in

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

Ecco cosa legge il mio dottore della birra

$ 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

Questo problema di autorizzazione ha reso impossibile l'uso della birra su qualsiasi cosa e apprezzerei davvero qualsiasi suggerimento.

Risposte:


955

Sono stato in grado di risolvere il problema utilizzando chownnella cartella:

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

Inoltre (molto probabilmente) dovrai fare lo stesso su /Library/Caches/Homebrew:

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

Apparentemente avevo usato sudoprima in un modo che alterava il mio permesso di cartella /usr/local, da qui in poi tutte le installazioni con brew hanno dimostrato di avere successo.

Questa risposta arriva per gentile concessione del localizzatore di problemi homebrew di gitHub


14
Grazie per questo. Ho anche dovuto correre sudo chown -R $USER:admin /Library/Caches/Homebrewper sbarazzarmi dei miei problemi con le autorizzazioni.
alexpls,

64
cambiare la proprietà di / usr / local in un utente specifico non è una soluzione. È un trucco terribile e una soluzione alternativa se si dispone di un sistema a singolo utente. Ma poi potresti anche solo chown -R / $ USER: $ USER
fijiaaron

17
@fijiaaron Quindi quale sarebbe una soluzione migliore?
juil

47
chowning / usr / local: soluzione completamente folle. Spero sinceramente che questo non sia in realtà la linea del partito.
John Clements,

15
Per coloro che si lamentano che questa soluzione rovinerà i sistemi multiutente (@fijiaaron, @JohnClements, @hmijail, @Alex) - questo è esattamente il motivo per cui le autorizzazioni di gruppo sono state invertite. Su macOS, il admingruppo è ogni utente amministratore (che è ogni utente dell'account utente macOS che può sudo, tra le altre cose), quindi correndo chown -R …:admininsieme chmod -R g+w /usr/local(come suggerito da @AndreaDeGaetano), non farai nulla di sbagliato qui e avrai zero problemi con anche altri utenti utilizzano /usr/local/ brew.
Slipp D. Thompson

479

Nuovo comando per gli utenti MacOS High Sierra in quanto non è possibile chownsu /usr/local:

bash/zsh:

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

fish:

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

Riferimento: impossibile chown / usr / local in High Sierra


Sì @Jeffpowrs Sto riscontrando lo stesso problema in macOS 10.13.2
andrewwong97,

4
Uso la conchiglia e ho dovuto usare quanto segue: sudo chown -R (whoami) (brew --prefix)/*
Tarellel

2
In relazione a. Per quello che stavo cercando di fare, ho dovuto sudo mkdir /usr/local/Frameworks, seguito dal comando chown come appare in questa risposta.
Dan Burton,

1
Grazie. Questo ha salvato la giornata.
Aashutosh Rathi,

2
DIO TI BENEDI, BRO!
Mendigo dos Bytes

285

Come prima opzione per chiunque atterra qui come ho fatto io, segui qualunque cosa ti suggerisca di fare:

brew doctor

È il percorso più sicuro e, tra le altre cose, mi ha suggerito di:

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

che ha risolto il problema delle autorizzazioni.

L'OP ha fatto proprio questo, ma a quanto pare non ha ricevuto il suggerimento di cui sopra; potresti, ed è sempre meglio iniziare da lì, e solo allora cercare soluzioni non banali se non ha aiutato.


4
Confermato questo risolve qualsiasi problema che potresti avere con le autorizzazioni a partire dal 05/2017
Anton Babushkin,

3
Posso anche confermare che questo risolve eventuali problemi di autorizzazione ed è stato quindi in grado di aggiornare facilmente la mia versione del nodo - 06/06/2018 - Grazie
Richlewis,

2
brew doctor non troverà tutti i problemi. Il problema che avevo era / usr / local / Frameworks non esisteva e la creazione e l'impostazione della proprietà su quello risolto. la stessa birra non l'ha notato come un problema.
Joe W,

2
Ricevo chown: /usr/local: Operation not permittednon funziona dal 5 luglio 2019
tavalendo il

1
Il suggerimento con il medico è forse uno dei migliori suggerimenti qui, perché risolve (o aiuta a risolvere) problemi diversi in qualsiasi momento!
ect,

82

Se sei su OSX High Sierra, /usr/localnon puoi più essere chown'd. Puoi usare:

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


Grazie. Mi ha salvato!
Matthias,

3
Ho scoperto che $ (brew --prefix) mi ha appena dato / usr / local, che High Sierra ha insistito sul fatto che non potevo cambiare i permessi in ... ma dato che brew voleva permessi su "/ usr / local / Frameworks" nella mia istanza , Sono stato in grado di usare "$ (brew --prefix) / Frameworks", e dopo "brew link python @ 2" ha funzionato bene per me.
alfeo

Tutti gli utenti Mac con più utenti, usa questo!
Erik Nguyen,

Grazie su OSX High Sierra, e apparentemente non possiamo più chown / user / local come nelle versioni precedenti di MAC OSX. Questo ha funzionato per me!
Jose Mhlanga,

29

Non avevo la /usr/local/Frameworkscartella, quindi questo l'ha riparata per me

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

La prima riga crea una nuova cartella Frameworks da utilizzare per l'homebrew (brew). La seconda riga fornisce a quella cartella le tue attuali autorizzazioni utente, che sono sufficienti.

I comandi utilizzati sono i seguenti:

mkdir - crea directory [ -p nessun errore se esiste, crea le directory principali secondo necessità]

chown - cambia proprietario e gruppo di file [ -R opera in modo ricorsivo su file e directory]

whoami - stampa userid efficace

Ho OSX High Sierra


27

Ho avuto questo problema. Una soluzione funzionante è cambiare la proprietà di /usr/local dell'utente corrente anziché rootda:

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

Ma davvero questo non è un modo corretto. Principalmente se la tua macchina è un server o più utenti.

Il mio suggerimento è di cambiare la proprietà come sopra e fare tutto ciò che vuoi implementare con Brew .. (aggiorna, installa ... ecc.) Quindi ripristina la proprietà alla radice come:

  sudo chown -R root:admin /usr/local

Questo risolverebbe il problema e manterrebbe la proprietà impostata nel set corretto.


4
hmm .. e quando otteniamo "operazione non consentita" per chown?
Ewoks,

@Ewoks è quello su MacOs?
Maher Abuthraa,

1
Sì, Sierra High: S
Ewoks,


15

Il comando dalla risposta più votata non funziona per me.

Ha ottenuto l'output:

chown: / usr / {my_username} dmin: nome utente illegale

Questo comando funziona correttamente (il gruppo per / usr / local era admingià):

sudo chown -R $USER /usr/local

5
Aggiungi alcune citazionisudo chown -R "$USER":admin /usr/local
orkoden

2
@skywinder La tua risposta ha funzionato per me. Non è stato necessario utilizzare le virgolette su $ USER.
Anna S,

sudo chown -R "$ USER": admin / usr / local dove sostituisci $ USER con il tuo nome.
lft93ryt,

questo ha provocatoError: 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.
novembre

3
chown: /usr/local: Operation not permitted
Krishnadas PC

13

Non volevo andare in giro con le autorizzazioni per le cartelle, quindi ho fatto quanto segue:

brew doctor
brew upgrade
brew cleanup

Sono stato quindi in grado di continuare con successo l'installazione dell'altra mia formula di birra.


1
Questo ha funzionato bene per i miei problemi. Avevo già ottenuto l'autorizzazione SUDO. \
Komsomol il

12

Se desideri un approccio leggermente più mirato rispetto alla coperta chown -R, potresti trovare utile questofix-homebrew script:

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

Invece di fare una richiesta chmodal tuo utente, dà al admingruppo (a cui apparentemente appartieni) l'accesso in scrittura alle directory specifiche /usr/localutilizzate da homebrew. Ti dice anche esattamente cosa intende fare prima di farlo.


1
Nota che alcuni dei percorsi sembrano essere cambiati un po ', quindi potresti dover chgrp e chmod qualche directory in più, ma preferisco ancora questo rispetto al chown tutto al tuo approccio utente!
Ashirley,

8

Nel mio caso il / usr / local / Frameworks non esisteva nemmeno, quindi ho fatto:

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

E poi tutto ha funzionato come previsto.


1
Ciò ha risolto il mio problema e non è stato rilevato come problema dal brew doctor.
Joe W,

7

Questo mi ha risolto il problema.

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

2
Questo risolve questo problema ma annullerei questo passaggio dopo aver collegato correttamente. Solo per motivi di sicurezza.
ora-600,

7

Ho risolto il mio problema con questi comandi:

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

1
Grazie! Questa è l'unica cosa che mi ha aiutato Mac OS 10.13.4Nel mio caso ho dovuto creare sudo mkdir /usr/local/Frameworks e sudo chown -R $(whoami) /usr/local/Frameworkspoter collegare Python!
A1m

6

Per un Mac multiutente, questo ha funzionato per me:

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

5

Tutti questi suggerimenti possono funzionare. Nell'ultima versione di brew doctor, tuttavia, sono stati forniti suggerimenti migliori.

Innanzitutto, correggi il disordine che probabilmente hai già creato /usr/localeseguendo questo nella riga di comando:

sudo chown -R root:wheel /usr/local

Quindi diventa proprietario dei percorsi che dovrebbero essere specifici per questo utente:

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

Tutte queste informazioni sono disponibili se esegui sudo brew updatee poi leggi tutti gli avvisi e gli errori in cui ti imbatterai ...


Impostare la proprietà di tutto in / usr / local su root: la ruota è pericolosa e non necessaria. Il percorso rilevante è / usr / local / Cellar
ben26941

1
non è necessario toccare tali permessi, a meno che tu non abbia .. dire che è già andato avanti e ne è diventato proprietario per il tuo utente di sviluppo - o nel caso in cui brew li abbia già rovinati perché ha fatto un'installazione con sudo. In questo caso, in questo caso, raccomanda questa soluzione - che penso sia molto meno pericolosa rispetto a lasciare il sudo pasticcio dietro.
Max Dercum,

1
Potresti fornire un link alla raccomandazione della birra allora?
ben26941,

1
Migliore risposta. Ha funzionato dopo che ho fatto una migrazione da un altro Mac.
BuffMcBigHuge

4

Per me, ha funzionato dopo

brew doctor

I comandi di modifica dell'autorizzazione hanno provocato un altro errore

chown: /usr/local: Operation not permitted


3

C'è uno script killer su github che corregge i permessi nelle directory / usr / local e brew in modo che siano accessibili a chiunque sia membro del gruppo 'admin'.

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

Questa è una soluzione migliore della risposta scelta, dal momento che se si indirizzano le directory / usr / local / ___ a $ USER, si interrompono tutti gli altri utenti admin di homebrew su quella macchina.

Ecco il coraggio dello script nel momento in cui ho pubblicato questo:

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

2

Su MacOS Mojave, non avevo neanche l'autorizzazione per chownla cartella / usr / local ( sudo chown -R "$USER":admin /usr/local).

sudo chown -R "$USER":admin /usr/local/*ha funzionato per me, tuttavia, modificando le autorizzazioni di tutto ciò che è dentro della cartella locale.

Spero che questo possa aiutare gli altri con lo stesso problema.


1

In realtà è davvero semplice, esegui questo comando: brew doctor

E ti dirà cosa fare, per risolvere i problemi di autorizzazione, ad esempio nel mio caso:

Questo era il problema:

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

E questa era la soluzione:

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

1
cd /usr/local && sudo chown -R $(whoami) bin etc include lib sbin share var opt Cellar Frameworks

1

Nel mio caso, ho problemi a rimuovere e reinstallare SaltStack.

Dopo l'esecuzione:

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

Ho notato che il proprietario del gruppo era "personale". (A proposito, sto eseguendo macOS Mojave versione 10.14.3.) Il gruppo del personale potrebbe essere correlato alla mia configurazione sul posto di lavoro, ma non lo so davvero. Indipendentemente da ciò, ho preservato il gruppo per impedirmi di andare oltre.

Ho quindi eseguito:

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

Successivamente, sono stato in grado di rimuoverlo con successo con questo comando (non come root):

brew uninstall --force salt

0

Se non hai l'ultimo Homebrew: in passato ho "risolto" costringendo Homebrew a funzionare come root, cosa che poteva essere fatta cambiando la proprietà degli eseguibili Homebrew in root. Ad un certo punto, hanno rimosso questa funzione.

E so che daranno molti avvertimenti dicendo che non dovrebbe funzionare come root, ma andiamo, altrimenti non funzionerà correttamente.


0

Ho provato tutto su questa pagina, ho finito per usare questa soluzione:

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

La mia situazione era simile all'OP, tuttavia il mio problema era stato causato in particolare dall'esecuzione di sudo con brew cask e dal fatto che la mia password non era corretta. Dopo questo, sono stato bloccato con autorizzazioni che impediscono l'installazione.


0

Per risolvere gli errori per le autorizzazioni Brew durante l'esecuzione della cartella

brew prune

Questo risolverà i problemi e non dobbiamo chown nessuna directory.


1
questo non funziona più, devi farlo orabrew cleanup --prune-prefix
Sliq

0

Sono su Catalina e ho riscontrato questo errore:

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

Avevo solo bisogno di chown la Homebrewdirectory

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

0

Ho usato questi due comandi e ho salvato il mio problema

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

-5

prova anche a eseguire questo comando

sudo chmod + t / tmp

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.