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

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

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.


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.


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


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

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.


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!


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


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


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


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!


Ótimo. Funciona para mim.
— Bagusflyer

1

Para aqueles que não são familiares:

sudo chown -R YOUR_COMPUTER_USER_NAME PATH_OF_FILE

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


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.

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.