Erros de instalação no Homebrew


112

Tentando instalar o rvm e o ruby ​​1.9.2

Já instalei o homebrew e o git, mas não consegui obter atualizações completas porque continuava recebendo erros de permissão. Snow Leopard reinstalado e permissões reparadas.

Agora isso acontece ...

$ brew install wget

Erro: Não é possível gravar em / usr / local / Cellar


stackoverflow.com/questions/4804169/… deve ser marcado como uma resposta aceita - temo que os visitantes que não virem que esta pergunta não foi respondida, irão prosseguir
dmo

Respostas:


274

sudo chown -R $USER /usr/local

Você terá que se responsabilizar pelo /usr/local/uso dessa linha ali mesmo. Eu tive que fazer isso sozinho depois de usar o one-liner do ruby ​​no topo dos documentos oficiais para instalar o Homebrew. Caiu como uma luva para mim. Deve ser a única vez que você precisará sudocom o Homebrew.

Não tenho certeza se a frase de rubi faz isso. Se sim, então algo mais em meu sistema assumiu o controle /usr/localdesde então.

Edit : Eu perdi isso completamente, mas @samvermette não (veja as respostas à minha resposta): se você executar este comando acima e tiver algo instalado via homebrew que requer permissões de usuário especiais, como mysql, certifique-se de devolver essas permissões (como o comando acima dá propriedade recursiva a tudo dentro /usr/localde você ( $USER). No caso do mysql, é ...

sudo chown -RL mysql:mysql /usr/local/mysql/data


16
Observe : este comando irá remover a propriedade de / usr / local / mysql / data do mysqlusuário. No meu caso, isso impediu o mysql de inicializar. Corrija isso com:sudo chown -RL mysql:mysql /usr/local/mysql/data
samvermette

24
Evitei o problema do mysql usando sudo chown -R $USER /usr/local/Cellarcomo /usr/local/já tinha as permissões corretas para mim
Parker

1
Infelizmente, os usuários vêm e vão ... talvez um dia Ibrahim volte e marque isso. Talvez. (Provavelmente não.)
Ben Kreeger,

4
Eu não gosto dessa resposta. Ele assume que apenas um usuário usa o sistema e que deve ser proprietário de tudo / usr / local, apesar de a questão ser apenas sobre homebrew. O brew não funciona com sistemas multiusuário? É uma resposta desleixada, mesmo que funcione. Além disso, não explica como um usuário pode ter encontrado essa situação. Dica - instalei o HomeBrew usando as instruções canônicas e, em seguida, restaurei de um backup do TimeMachine (para outra máquina). Suspeito que foi essa restauração que alterou a propriedade do arquivo.
Jason R. Coombs de

1
Eu concordo com @ JasonR.Coombs; as pessoas não deveriam usar essa solução desleixada sem entender as ramificações práticas e de segurança. Qualquer software em / usr / local pode agora ser sobrescrito por qualquer coisa em execução sob seu usuário, abrindo uma brecha de segurança. É perfeitamente possível que você estrague algo mais (além do MySQL) executando cegamente o primeiro comando chown, após o qual será tarde demais para identificar e consertar tudo o que você possa ter estragado.
roubo de

41

Tive esse problema depois de fazer upgrade para o Mavericks, e esta página foi o principal resultado da pesquisa ao pesquisar a mensagem de erro no Google. Continuei pesquisando e encontrei esta resposta em stack overflow.com . Colocado de forma concisa, é:

sudo chmod a+w /usr/local/Cellar

Isso corrigiu o problema para mim e, como só altera as permissões para o caminho específico mencionado na mensagem de erro, parecia improvável que tivesse efeitos colaterais negativos com outras instalações.

Estou colocando esta resposta aqui para qualquer pessoa que possa encontrar esta página primeiro como eu. No entanto, o crédito deve ir para jdi .


2
Isso é considerado inseguro, já que todos podem escrever para / usr / local / Cellar?
David Welch

Essa resposta falha para pacotes que requerem acesso a outras pastas (como /usr/local/bin).
Jason R. Coombs de

11

Você pode permitir apenas que usuários administradores escrevam em /usr/local/?

chgrp -R admin /usr/local
chmod -R g+w /usr/local
chgrp -R admin /Library/Caches/Homebrew
chmod -R g+w /Library/Caches/Homebrew

Desde que cada usuário que pertença ao grupo Admin, poderá instalar novas dependências.


Parece uma solução melhor para máquinas com vários administradores (embora meu diretório / usr / local / lib também precise do g + x para que o aspell funcione).
James Snook

1
Para evitar o erro 'O "link de preparação" não foi concluído com êxito', você também pode aplicar o que está neste tópico , a saber sudo chgrp -R admin /usr/local/DDDD+ sudo chmod -R g+w /usr/local/DDDDonde DDDD é bin , compartilhar , Biblioteca / LinkedKegs , opt
superk

1
Thnx para a resposta, eu tive que usar "sudo", então se este comando não funcionar, tente
prefixá-



1

Eu sugiro garantir que o usuário atual seja um membro do grupo que possui / usr / local. Eu acredito que por padrão, esse grupo é wheel. Para se tornar um membro desse grupo:

$ sudo dscl . append /Groups/wheel GroupMembership $USER

Embora pareça um martelo deselegante, ele tem o efeito pretendido - permitindo o acesso a itens /usr/localque são destinados apenas para uso (leitura / gravação) por membros elevados. Esta abordagem tem vantagens em relação à outra anterior porque tira vantagem das associações de grupo, permitindo que vários usuários (autorizados) no sistema usem homebrew.


0

Como você instalou o Homebrew? Suas instruções oficiais de instalação incluem a execução de um script ruby. Isso deve cuidar dos problemas de permissão para você.

Se você não quiser executar um script, há uma seção dessa página chamada "Instalando em / usr / local para desenvolvedores" que explica a mudança nas permissões necessárias para o diretório / usr / local.


Usei um script e ele foi instalado, mas ainda tinha problemas de atualização. Migrei os dados do usuário para um novo laptop. Tive que fazer algumas soluções alternativas no github b / c o script não funcionou no início.
Ibrahim

-3

EDIT : Como mencionado nos comentários, é uma má ideia usar o sudo com homebrew, então não use a seguinte resposta!


Você também pode evitar esse erro se executar o comando com sudo:

$ sudo brew install wget

Mas tome cuidado ao usar sudoporque você pode cometer muitos erros.


Essa abordagem falha com as versões mais recentes do homebrew que não permitem a chamada como root (via sudo).
Jason R. Coombs de
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.