Homebrew: Não foi possível conectar o link simbólico, / usr / local / bin não é gravável [fechado]

361

Durante a instalação tig, HomeBrewestá exibindo os seguintes problemas ao instalar uma dependência:

Error: The `brew link` step did not complete successfully
The formula built, but is not symlinked into /usr/local
Could not symlink bin/a2x
/usr/local/bin is not writable.

You can try again using:
  brew link asciidoc
Jikku Jose
fonte
3
Esta não pertence a stackowerflow.com, em vez superuser.com ou askdifferent.com
Ondra Žižka

Respostas:

582

Após a resposta de Alex, consegui resolver esse problema; Parece que esse é um problema não específico dos pacotes que estão sendo instalados, mas das permissões das homebrewpastas.

sudo chown -R `whoami`:admin /usr/local/bin

Para alguns pacotes, você também pode fazer isso em /usr/local/shareou /usr/local/opt:

sudo chown -R `whoami`:admin /usr/local/share
sudo chown -R `whoami`:admin /usr/local/opt
Jikku Jose
fonte
25
A reinicialização de todos / usr / local / bin para o uso atual não causa problemas ao sistema ou a outros usuários?
Don Giulio
10
sudo chown -R Whoami não :admin /usr/local/binseria equivalente ao comando na resposta, sem a necessidade de substituir yourusenamepor seu nome de usuário real?
21715 Jason Swett
5
Eu também tive que chorar usr/local/optrecursivamente. Funcionou depois disso.
Atripes
5
No meu mac (10.9.5), as permissões de /usr/local/bin(e amigos) parecem reverter para drwxr-xr-x+e root wheeltodos os dias. Devo reconfigurar as permissões sempre que eu quiser brew install. Presumo que o sistema operacional está redefinindo permissões permanentes para me proteger? Como posso fazer isso parar? (Eu tentei chflags uchg …, mas que impede preparar a instalação.)
Quinn Comendant
11
Adicionei minha conta ao grupo "roda". Isso me permite "sudo chmod -R g + w / usr / local" - isso permite que os membros do grupo "wheel" escrevam nas pastas. Parece mais seguro do que alterar o proprietário dessas pastas confidenciais para uma conta menos segura que a raiz.
Michael Krebs
220

Em vez de executar qualquer comando específico, eu recomendaria executar brew doctore levar todos os avisos a sério. Pode haver outros problemas nos quais você não consegue capturar nesta pergunta.

Além disso, à medida que a distribuição é atualizada com o tempo, comandos específicos podem ou não permanecer válidos. brew doctor, no entanto, garantirá que você atualize a solução de problemas.

zakishaheen
fonte
9
Não acredito que sua resposta seja menos popular. É certamente mais prudente do que as suposições expressas acima.
Robert de Fairfax
34
brew doctornão vai resolver o problema, ele apenas informa sobre o problema e, quando você segue o conselho do médico, o brew diz que não pode fazê-lo. Isso não é uma solução
Keith Tyler
8
Talvez alguém tenha melhorado. Agora, o médico de fermentação sugere que eu execute um cmd semelhante à resposta mais popular e, depois disso, o link simbólico de fermentação funciona. Eu estou em um Mac, então vamos ver quanto tempo dura. :-)
Joshua Richardson
2
Isso foi muito útil, obrigado. Corrigidos alguns outros diretórios especiais para mostrar a sugestão acima perdida.
SwimBikeRun
6
o brew doctor forneceu o problema EXATO e também a solução manual!
Netrox
74

As outras respostas estão corretas, na medida em que avançam, mas não respondem por que esse problema pode estar ocorrendo e como solucionar essa causa raiz.

Causa

Existem duas causas possíveis para esse problema:

  1. A instalação do homebrew foi realizada com um usuário diferente daquele que você está usando no momento. O Homebrew espera que apenas o usuário que o instalou originalmente queira usá-lo.
  2. Você instalou algum software que grava em / usr / local sem usar o brew. Essa é a causa brew doctorsugerida, se você a executar.

Solução

Homebrew multiusuário

Se você possui várias contas de usuário e deseja que mais de uma delas possa usar o brew, é necessário executar algumas etapas; caso contrário, será necessário alterar constantemente a propriedade da estrutura de arquivos do Homebrew sempre que mudar de usuário, e isso não é uma ótima ideia.

Instruções detalhadas podem ser encontradas online , mas a resposta rápida é a seguinte:

  1. Crie um grupo chamado brew:

    1. Abra as preferências do sistema
    2. Clique em Contas
    3. Clique no botão "+" (desbloqueie primeiro, se necessário)
    4. Em Nova conta, selecione Grupo
    5. entrar em fermentação
    6. Clique em Criar grupo
  2. Selecione o grupo de distribuição e adicione as contas de usuário que você deseja usar.
  3. altere a propriedade do grupo de pastas / usr / local: sudo chgrp -R brew /usr/local
  4. altere as permissões para adicionar gravação em / usr / local como grupo: sudo chmod -R g+w /usr/local
  5. altere o grupo de diretórios de cache do homebrew: sudo chgrp -R brew /Library/Caches/Homebrew
  6. altere as permissões do diretório de cache do homebrew: sudo chmod -R g+w /Library/Caches/Homebrew

Homebrew de usuário único

Se você não está tentando usar mais de um usuário com o Homebrew, a solução fornecida pelas outras respostas, com base nas sugestões de, brew doctorprovavelmente é suficiente:

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

sudo chown -R $(whoami) /Library/Caches/Homebrew

Verificação

Após estes passos, brew doctordeve reportar o sucesso por qualquer usuário na bebida grupo, supondo que você tenha desconectado e volta para aplicar as novas adesões do grupo (se você foi a rota multiusuário). Se você acabou de corrigir as coisas para o homebrew de usuário único, não será necessário fazer logoff e logon novamente, pois nenhuma das associações do seu grupo foi alterada.

triturador de pedras
fonte
2
Obrigado! Eu provavelmente deveria ler mais sobre grupos de usuários unix. Sou totalmente ignorante sobre como funciona para digerir o raciocínio bem o suficiente. Mas parece muito sensato, obrigado pelo ponteiro!
Jikku Jose
11
os grupos unix são mais simples do que você imagina - todos os arquivos têm permissões de leitura, gravação e execução disponíveis para o 'usuário' e o 'grupo' que possui esse arquivo e para 'outros'. Se você definir o grupo que possui um arquivo ou pasta e adicionar permissões de gravação ao 'grupo' dessa pasta, qualquer usuário desse grupo poderá gravar na pasta. Realmente não há mais do que isso. não é tão complexo quanto as permissões no Windows.
Stonecrusher
11
Portanto, é uma maneira fácil de agrupar o sistema de permissões de um conjunto de arquivos em um grupo, para que vários usuários possam ser adicionados com facilidade para aplicar todas essas permissões de uma só vez?
Jikku Jose
2
Isso corrigiu meus problemas no link de fermentação, obrigado.
Keith Tyler
Ainda me parece um pouco perigoso ter um diretório sensível como o /usr/local/bingrupo-gravável, esp. em um ambiente multiusuário. Essa é realmente a forma "oficial" de fermentação?
Corwin.amber
67

Para quem está procurando /usr/local/sbinnão é um erro gravável:

ATUALIZAÇÃO: Pode ser /usr/local/someOtherFolderNamepor exemplo /usr/local/include. Você só precisa criar essa pasta com:

  • sudo mkdir someOtherFolderName

Primeiro crie a sbinpasta, observe que isso requer sudoprivilégios

  • cd /usr/local

  • sudo mkdir sbin

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

  • brew link yourPackageName

gokcand
fonte
6
Isso funcionou para mim
robin
Eu também precisei adicionar o diretório ao meu ~ / .bash_profile:PATH=$PATH:/usr/local/sbin
Julien
Após horas de pesquisa, essa é a única coisa que funcionou para mim. Estou na High Sierra.
ItsJoeTurner
34

Encontrei para minha configuração específica os seguintes comandos funcionaram

brew doctor

E então isso me mostrou onde estavam meus erros, e esse comando um pouco diferente do comentário acima.

sudo chown -R $(whoami) /usr/local/opt
kinnth
fonte
2
Obrigado pela sugestão óbvia. Eu costumo esquecerbrew doctor
Antony
11
Isso resolveu o problema aqui
khaosdoctor
brew doctoré bom.
precisa saber é o seguinte
trabalhou como um encanto, graças
hexley
15

Encontrei o mesmo problema, podemos resolver em três etapas: -

Passo 1

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

Passo 2

brew doctor

etapa 3

brew prune

Se você ainda tiver algum problema de conexão, digamos mysql, basta escrever

brew link mysql

Isso vai funcionar.

Harry_pb
fonte
11
trabalhou para mim para rabbitmq
Omar
Qual é o objetivo do 'Passo 1'?
Conrad C
11
fermentar médico polegares para cima! Não fez poda de cerveja, mas instalou outros pacotes ausentes e funcionou para o mongodb.
Chenlu 18/10/19
A chamada 'podar cerveja' está desativada. Use 'limpeza de cerveja'.
hanumanDev
12

Para aqueles que enfrentam esse problema (concedidos quatro anos após a publicação desta postagem) enquanto executavam o Mac OS High Sierra - as etapas descritas aqui resolveram o problema para mim. Essencialmente, apenas descreve a desinstalação e reinstalação do brew.

https://medium.com/@mrkdsgn/brew-error-on-macos-high-sierra-check-you-have-permission-to-write-to-usr-local-e8bd1c6a22d4

Depois de executar essas etapas, brew link funcionou como um encanto!

Eron Salling
fonte
Achei isso funcionou para mim (sem o comando inicial dump): github.com/Homebrew/brew/issues/3285#issuecomment-334976806
vr_driver
Obrigado! Tentei a resposta principal de Harry, sem sorte - tentei isso e funcionou como um encanto!
31418 Joe
Trabalhou para mim, obrigado!
zen
9

Para mim, a solução era correr brew update.

Então, faça isso primeiro.

Isso pode ser uma prática normal para pessoas familiarizadas com o homebrew, mas eu não sou uma dessas pessoas.

Editar: descobri que precisava atualizar executando, brew doctorconforme sugerido pela resposta de @ kinnth para essa mesma pergunta.

Um fluxo de trabalho de solução de problemas geral pode ser assim: 1. execute brew update 2. se isso não ajudar a executar brew doctore siga suas instruções 3. se isso não ajudar a verificar o estouro da pilha

FragmentalStew
fonte
11
Isso corrigiu tudo para mim e vale a pena fazer antes de qualquer outra coisa.
Rob Evans
Tudo médico bebida faz é de salientar que eu tenho barris unliked em minha adega ... de modo que não faz nada para emissão correção de OP
AlxVallejo
@AlxVallejo Foi o que fiz para resolver um problema que tive quando estava recebendo um erro quase idêntico ao OP. A mensagem que você recebeu do Brew Doctor me parece uma questão diferente. O fluxo de trabalho de "1. execute a atualização do brew 2. se isso não ajudar a executar o brew doctor e siga suas instruções 3. se isso não ajudar a verificar o estouro da pilha" provavelmente ainda se aplica.
FragmentalStew
6

Ao fazer o nó de link de fabricação Além disso, também tenho os seguintes problemas:

Erro: não foi possível escrever o link simbólico / node / usr / local / include não é gravável.

Vinculando /usr/local/Cellar/node/9.3.0 ... Erro: permissão negada @ dir_s_mkdir - / usr / local / lib

Para resolver o problema acima, vá para / usr / local / e verifique a disponibilidade das pastas 'include' e 'lib', se essas pastas não estiverem disponíveis, apenas crie-as manualmente.

E execute o nó de instalação de fermentação novamente

Wasantha Wijayaratna
fonte
5

Isso ocorre porque o usuário atual não tem permissão para escrever nesse caminho. Portanto, para alterar as permissões de r / w (leitura / gravação), você pode usar o 1. terminal ou a janela gráfica "Get Info".

1. Usando o Terminal

Google como usar os comandos chmod / chown (alterar modo / alterar proprietário) do terminal

2. Usando 'Get Info' gráfico

Você pode clicar com o botão direito do mouse na pasta / arquivo do qual deseja alterar as permissões e abrir Obter informações, que mostrará uma janela como abaixo, na parte inferior da qual você pode alterar facilmente as permissões de r / w: insira a descrição da imagem aqui

Lembre-se de alterar a permissão novamente para "somente leitura" após o trabalho temporário, se possível

Hasaan Ali
fonte
use o brew doctor - ele identificará corretamente as pastas (do sistema) que precisam ser corrigidas.
Johndpope 23/05
2

Meu problema foi

Error: Could not symlink share/man/man7/ABORT.7
/usr/local/share/man/man7 is not writable.

chownnão ajudou, mas segui os brew doctorconselhos de execução e esse aviso me ajudou:

Warning: Broken symlinks were found. Remove them with `brew prune`:
/usr/local/share/man/man3/* 

Afinal brew prunefuncionou bem!

Pavel Druzhinin
fonte
Ótimo. Funciona para mim.
Bagusflyer
1

Para aqueles que não são familiares:

sudo chown -R YOUR_COMPUTER_USER_NAME PATH_OF_FILE
Justin
fonte
0

Se você for para a pasta no localizador, clique com o botão direito do mouse e selecione "Obter informações", vá para a seção "Compartilhamento e permissões" da pasta e permita "Leitura e gravação" para "todos"

É isso que faço para fazer com que os links simbólicos passem com esse erro. O brew também parece redefinir as permissões na pasta também como se você não tivesse alterado nada

Carl Lippert
fonte
0

Se você já possui um diretório /usr/localpara o pacote que está instalando, tente excluir esse diretório.

No meu caso, eu havia instalado o pacote que estava tentando instalar sem usar o brew e depois o desinstalado. Havia um diretório /usr/local/<my_package>/remanescente daquela instalação anterior. Excluí esta pasta ( sudo rm -rf /usr/local/<my_package>/) e depois disso a etapa do link de preparação foi bem-sucedida.

Samuel Peter
fonte