Como corrigir permissões de homebrew?

601

Eu desinstalei e instalei o Homebrew 3 vezes agora, porque parece que nunca me permite instalar nada, pois me nega permissões no final da maioria das instalações.

Como exemplo, vou postar este cenário de download libjpeg que estou enfrentando atualmente.

Eu tento instalar o libjpeg e obtenho:

$ 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

resulta em "link brew jpeg" em

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

Aqui está o que meu médico de cerveja lê

$ 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

Esse problema de permissão tornou impossível o uso de cerveja em qualquer coisa e eu realmente aprecio qualquer sugestão.

Saturnino
fonte

Respostas:

955

Consegui resolver o problema usando chowna pasta:

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

Além disso, você (provavelmente) terá que fazer o mesmo em /Library/Caches/Homebrew:

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

Aparentemente, eu tinha usado sudoantes de uma maneira que alterou a permissão da minha pasta /usr/local, daqui em diante todas as instalações com brew provaram ser bem-sucedidas.

Esta resposta vem como cortesia do rastreador de edições homebrew do gitHub

Saturnino
fonte
14
Obrigado por isso. Eu também precisava correr sudo chown -R $USER:admin /Library/Caches/Homebrewpara me livrar dos meus problemas de permissão.
211114 alexpls
64
alterar a propriedade de / usr / local para um usuário específico não é uma solução. É um truque terrível e uma solução alternativa se você tiver um sistema de usuário único. Mas então você pode muito bem chown -R / $ USER: $ USUÁRIO
fijiaaron
17
@fijiaaron Então, qual seria uma solução melhor?
21515 julil
47
chowning / usr / local: solução completamente insana. Caramente esperando que isso não seja realmente a linha do partido.
John Clements
15
Para aqueles que reclamam que esta solução atrapalhará os sistemas multiusuário (@fijiaaron, @JohnClements, @hmijail, @Alex) - é exatamente por isso que as permissões de grupo foram invertidas. No macOS, o admingrupo é todo usuário administrador (que é todo usuário da conta do usuário do macOS que pode sudo, entre outras coisas). Portanto, executando chown -R …:adminjunto chmod -R g+w /usr/local(conforme sugerido por @AndreaDeGaetano), você não fará nada de errado aqui e não terá problemas com outros usuários também usam /usr/local/ brew.
Slip D. Thompson
479

Novo comando para usuários no macOS High Sierra, pois não é possível chownativar /usr/local:

bash/zsh:

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

fish:

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

Referência: Não é possível chown / usr / local em High Sierra

andrewwong97
fonte
Sim, @Jeffpowrs Estou tendo o mesmo problema no macOS 10.13.2
andrewwong97
4
Eu uso a casca do peixe e tive que usar o seguinte: sudo chown -R (whoami) (brew --prefix)/*
Tarellel
2
Relacionadamente. Para o que eu estava tentando fazer, eu tive que sudo mkdir /usr/local/Frameworks, seguido pelo comando chown, como aparece nesta resposta.
Dan Burton
1
Obrigado. Isso salvou o dia.
Aashutosh Rathi
2
DEUS ABENÇOE VOCÊ, BRO!
Mendigo dos Bytes
285

Como primeira opção para quem chega aqui como eu, siga o que isso sugere:

brew doctor

É o caminho mais seguro e, entre outras coisas, sugeriu que eu:

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

que resolveu esse problema de permissões.

O OP fez exatamente isso, mas aparentemente não recebeu a sugestão acima; você pode, e é sempre melhor começar por aí, e só então procurar soluções não triviais, se não ajudou.

Nycen
fonte
4
Confirmado que isso corrige qualquer problema que você possa ter com permissões a partir de 05/2017
Anton Babushkin
3
Também pode confirmar que isso resolve todos os problemas de permissão e foi capaz de, em seguida, atualizar a minha versão de nó com facilidade - 06/06/2018 - graças
Richlewis
2
O médico de fermentação não encontrará todos os problemas. O problema que eu tinha era / usr / local / Frameworks não existia, criando isso e definindo a propriedade sobre isso. a própria bebida não percebeu isso como um problema.
Joe W
2
Eu recebo chown: /usr/local: Operation not permittednão funciona a partir de 5 de julho de 2019
tavalendo
1
A dica com o médico é talvez uma das melhores dicas aqui, porque corrige (ou ajuda a corrigir) problemas diferentes a qualquer momento!
ecth 12/09/19
82

Se você estiver no OSX High Sierra, /usr/localnão será mais possível chown. Você pode usar:

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

Richard
fonte
Obrigado. Me salvou!
Matthias
3
Eu descobri que $ (brew --prefix) acabou de me dar / usr / local, que High Sierra insistiu que eu não poderia alterar as permissões para ... mas como o brew queria permissões para "/ usr / local / Frameworks" na minha instância , Pude usar "$ (brew --prefix) / Frameworks" e "brew link python @ 2" funcionou bem para mim depois disso.
alpheus
Todos os usuários de Mac com vários usuários, use isso!
Erik Nguyen
Obrigado, estou no OSX High Sierra e, aparentemente, não podemos mostrar o / user / local mais como nas versões anteriores do MAC OSX. Isso funcionou para mim!
Jose Mhlanga
29

Eu não tinha a /usr/local/Frameworkspasta, então isso a corrigiu para mim

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

A primeira linha cria uma nova pasta Frameworks para uso em homebrew (brew). A segunda linha fornece a essa pasta suas permissões de usuário atuais, que são suficientes.

Os comandos usados ​​são os seguintes:

mkdir - cria diretórios [ -p sem erro, se existir, cria diretórios pai conforme necessário]

chown - altera o proprietário e o grupo do arquivo [ -R opera em arquivos e diretórios recursivamente]

whoami - imprime o ID do usuário eficaz

Eu tenho o OSX High Sierra

Karl Johan Vallner
fonte
27

Eu tive esse problema. Uma solução funcional é alterar a propriedade do /usr/local usuário atual em vez de root:

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

Mas, na verdade, esse não é um caminho adequado. Principalmente se sua máquina for um servidor ou usuário múltiplo.

Minha sugestão é alterar a propriedade como acima e fazer o que você deseja implementar com o Brew .. (atualizar, instalar ... etc) e redefinir a propriedade de volta à raiz como:

  sudo chown -R root:admin /usr/local

Isso resolveria o problema e manteria a propriedade definida no conjunto adequado.

Maher Abuthraa
fonte
4
hmm .. e quando temos "operação não permitida" para chown?
Ewoks
@Ewoks é isso nos MacOs?
Maher Abuthraa
1
Sim, Sierra High: S
Ewoks
15

O comando da resposta mais votada não funciona para mim.

Tem saída:

chown: / usr / {my_username} dmin: nome de usuário ilegal

Este comando funciona bem (o grupo para / usr / local adminjá estava ):

sudo chown -R $USER /usr/local
skywinder
fonte
5
Adicione algumas citaçõessudo chown -R "$USER":admin /usr/local
orkoden
2
@skywinder Sua resposta funcionou para mim. Não foi necessário usar cotações em $ USER.
Anna S
sudo chown -R "$ USER": admin / usr / local onde você substitui $ USER pelo seu nome.
Lft93ryt 18/10
isso resultou emError: 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

Ainda não queria mexer nas permissões de pasta, então fiz o seguinte:

brew doctor
brew upgrade
brew cleanup

Pude continuar instalando minha outra fórmula de fermentação com sucesso.

Anthony To
fonte
1
Isso funcionou bem para os meus problemas. Eu já tinha me submetido a permissões. \
Komsomol
12

Se você deseja uma abordagem um pouco mais direcionada do que o cobertor chown -R, pode achar estefix-homebrew script útil:

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

Em vez de fazer um chmodpara o usuário, ele fornece ao admingrupo (ao qual você provavelmente pertence) o acesso de gravação aos diretórios específicos /usr/localusados ​​pelo homebrew. Também informa exatamente o que pretende fazer antes de fazê-lo.

darco
fonte
1
Observe que alguns dos caminhos parecem ter mudado um pouco, então você pode precisar chgrp e chmod mais alguns diretórios, mas eu ainda prefiro isso sobre tudo do que a abordagem do usuário!
ashirley
8

No meu caso, o / usr / local / Frameworks nem existia, então eu fiz:

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

E então tudo funcionou como esperado.

Helen Vasconcelos
fonte
1
Isso corrigiu o meu problema e não foi detectado como um problema pelo médico de fermentação.
Joe W
7

Isso resolveu o problema para mim.

sudo chown -R "$USER":admin /Users/$USER/Library/Caches/Homebrew
sudo chown -R "$USER":admin /usr/local
Fardin
fonte
2
Isso resolve esse problema, mas eu desfiz essa etapa depois de vincular com êxito. Só por razões de segurança.
precisa
7

Resolvi meu problema com estes comandos:

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
fonte
1
Obrigado! Essa é a única coisa que ajudou Mac OS 10.13.4No meu caso, eu tive que criar sudo mkdir /usr/local/Frameworks e sudo chown -R $(whoami) /usr/local/Frameworksser capaz de vincular python!
A1m
6

Para um Mac multiusuário, isso funcionou para mim:

sudo chown -R $(whoami):admin $(brew --prefix)/*
Juan José Ramírez
fonte
5

Todas essas sugestões podem funcionar. Na versão mais recente do brew doctor, foram feitas melhores sugestões.

Em primeiro lugar - corrija a bagunça que você provavelmente já fez /usr/localexecutando isso na linha de comando:

sudo chown -R root:wheel /usr/local

Em seguida, aproprie-se dos caminhos que devem ser especificamente para esse usuário:

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

Todas essas informações estão disponíveis se você executar sudo brew updatee, em seguida, ler todos os avisos e erros nos quais irá executar ...

Max Dercum
fonte
Definir a propriedade de tudo em / usr / local como root: wheel é perigoso e desnecessário. O caminho relevante é / usr / local / Cellar
ben26941 28/11
1
você não precisa tocar nessas permissões, a menos que tenha ... digamos que já foi em frente e se apoderou delas para o usuário de desenvolvimento - ou no caso em que o brew já as mutilou porque instalou com o sudo. O brew auto recomenda essa correção nesse caso - que eu acho muito menos perigoso do que deixar a bagunça do sudo para trás.
Max Dercum
1
Você poderia fornecer um link para a recomendação de preparação?
precisa saber é o seguinte
1
Melhor resposta. Funcionou depois que fiz uma migração de outro Mac.
BuffMcBigHuge 8/17/17
4

Para mim, funcionou depois

brew doctor

Os comandos de permissão de alteração resultaram em outro erro

chown: /usr/local: Operation not permitted

Krishnadas PC
fonte
3

Existe um script matador no github que corrige permissões nos diretórios / usr / local e brew para serem acessíveis por qualquer pessoa que seja membro do grupo 'admin'.

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

Esta é uma solução melhor que a resposta escolhida, pois se você converter os diretórios / usr / local / ___ para $ USER, poderá quebrar qualquer outro usuário administrador do homebrew nessa máquina.

Aqui estão as entranhas do script no momento em que publiquei isso:

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
O proletariado
fonte
2

No MacOS Mojave, eu também não tinha permissão para chowna pasta / usr / local ( sudo chown -R "$USER":admin /usr/local).

sudo chown -R "$USER":admin /usr/local/*funcionou para mim no entanto, alterando as permissões de tudo dentro da pasta local.

Espero que isso ajude outras pessoas com o mesmo problema.

paddotk
fonte
1

Na verdade, é realmente simples, execute este comando: brew doctor

E ele lhe dirá o que fazer, para corrigir problemas de permissão, por exemplo, no meu caso:

Este foi o problema:

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

E esta foi a solução:

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

No meu caso, estou com problemas para remover e reinstalar o SaltStack.

Depois de correr:

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

Notei que o proprietário do grupo era "equipe". (BTW, estou executando o macOS Mojave versão 10.14.3.) O grupo de funcionários pode estar relacionado à minha configuração do local de trabalho, mas eu realmente não sei. Independentemente disso, eu preservei o grupo para me impedir de quebrar mais alguma coisa.

Eu então corri:

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

Depois disso, consegui removê-lo com este comando (não como root):

brew uninstall --force salt
devinbost
fonte
0

Se você não possui o Homebrew mais recente: eu "consertei" isso no passado, forçando o Homebrew a ser executado como root, o que só poderia ser feito alterando a propriedade dos executáveis ​​do Homebrew para root. Em algum momento, eles removeram esse recurso.

E eu sei que eles vão dar muitos avisos dizendo que não deve ser executado como root, mas vamos lá, não funcionará corretamente de outra forma.

sudo
fonte
0

Eu tentei de tudo nesta página, acabei usando esta solução:

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

Minha situação era semelhante à do OP, no entanto, meu problema foi causado especificamente pela execução do sudo com o barril de fermentação e a obtenção incorreta da minha senha. Depois disso, fiquei com as permissões impedindo a instalação.

Alpha G33k
fonte
0

Para resolver erros nas permissões do Brew na pasta, execute

brew prune

Isso resolverá os problemas e não precisamos exibir nenhum diretório.

Catto
fonte
1
isso não funciona mais, você tem que fazer agorabrew cleanup --prune-prefix
SliQ
0

Estou na Catalina e recebi este erro:

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

Eu só precisava mostrar o Homebrewdiretório

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

Eu usei esses dois comandos e salvei meu 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
Marco Aprea
fonte
-5

tente também executar este comando

sudo chmod + t / tmp

bashar
fonte