Como resolver erros de permissão no OS X Lion após a instalação do Homebrew

9

Acabei de atualizar o Snow Leopard para o Lion e estou tentando instalar o Homebrew. No entanto, após a instalação, eu executo de brew doctoracordo com as instruções de instalação e vejo uma série de erros indicando que os diretórios / usr / local não são graváveis. Por exemplo:

Error: /usr/local/share isn't writable.
This can happen if you "sudo make install" software that isn't managed
by Homebrew.

If a brew tries to write a file to this directory, the install will
fail during the link step.

You should probably `chown` /usr/local/share

Eu os recebo para vários diretórios:

You should probably `chown` /usr/local/include

You should probably `chown` /usr/local/share

You should probably `chown` /usr/local/share/man

Não consigo descobrir por que esse erro está chegando, pois parece que faço parte do grupo Unix que possui permissões de gravação para esses diretórios:

Mini:~ felciano$ ls -ld /usr/local/share
drwxrwxr-x  4 root  admin  136 May 13 15:53 /usr/local/share
Mini:~ felciano$ whoami
felciano
Mini:~ felciano$ dscl . -read /Groups/admin GroupMembership
GroupMembership: root felciano
Mini:~ felciano$

o que estou perdendo?

Ramon
fonte
Por que você não mostra esses diretórios em seu nome de usuário, conforme sugerido? Eles não devem pertencer à "raiz" de qualquer maneira. Para vários usuários, você também pode alterar as permissões do grupo: apple.stackexchange.com/q/42127/14994
iolsmit
@iolsmit: Eu tenho exatamente o mesmo problema. No entanto, não vejo por que /usr/localdeveria pertencer a mim quando esta máquina possui vários usuários administrativos. Além disso, é possível escrever para os locais que brew doctorestão reclamando. Alguma outra ideia?
mgd 23/06

Respostas:

7

EDIT: O problema agora está corrigido no Homebrew:

Se o problema persistir, atualize o Homebrew da seguinte forma:

brew update

Se você quiser saber qual era o problema, guardei minha resposta original abaixo.


Ignore o problema de permissão por enquanto

Estou enfrentando exatamente o mesmo problema e, na minha opinião, o problema está em brew doctorvez de na sua instalação e na minha.

Eu acho que você deve ignorar o problema, em vez de mudar a propriedade /usr/local. Como alternativa, você pode corrigir o brew doctorscript local até que uma correção seja lançada. Ver abaixo.

Não considero correto /usr/localpertencer a um usuário específico. Eu tenho mais de um usuário administrador nesta máquina. Você deve deixar /usr/localpertencer a root:admincomo proprietário e grupo.

Minha investigação

Como para você, eu tenho um /usr/localque é perfeitamente gravável pelo meu usuário, que também é membro do admingrupo:

$ ls -ld /usr/local/
drwxrwxr-x  14 root  admin  476 22 Jun 23:33 /usr/local/
$ whoami
mgd
$ dscl . -read /Groups/admin GroupMembership
GroupMembership: root mgd rgd

Vamos testar se o dir é realmente gravável:

$ ls -l /usr/local/newfile
ls: /usr/local/newfile: No such file or directory
$ touch /usr/local/newfile
$ ls -l /usr/local/newfile
-rw-r--r--  1 mgd  admin  0 23 Jun 14:52 /usr/local/newfile

Uma investigação mais aprofundada sobre o brew doctorcódigo levou-me à conclusão de que o uso da função ruby Pathname.writable?está causando o problema. Considere esta sessão interativa do Ruby:

$ irb
>> require 'pathname'
=> true
>> Pathname('/usr/local').writable?
=> false

A função Pathname.writable?diz que /usr/localnão é gravável, mesmo sabendo que é.

Usar, ao Pathname.writable_real?contrário, fornece o resultado correto - ele diz que o dir é gravável:

>> Pathname('/usr/local').writable_real?
=> true

Isso deve ser corrigido /usr/local/Library/Homebrew/cmd/doctor.rb. Você pode corrigi-lo em sua própria instalação enquanto aguarda uma correção.

A diferença entre as duas funções é (de acordo com os documentos Ruby aqui e aqui ):

gravável? (nome_do_arquivo) → verdadeiro ou falso: Retorna verdadeiro se o arquivo nomeado for gravável pelo ID do usuário efetivo desse processo.

writable_real? (nome_do_arquivo) → verdadeiro ou falso: Retorna verdadeiro se o arquivo nomeado for gravável pelo ID do usuário real desse processo.

mgd
fonte
Polegares para investigação e esclarecimento de mgd ... está no local! Parece que um problema semelhante foi levantado no github.com cerca de um ano atrás, mas nunca foi (adequadamente?) Resolvido, pelo menos não usando writable_real?... talvez seja hora de uma solicitação de recebimento?!? :-)
pvandenberk
0

Eu acredito que você só precisa disso:

brew update

Então tente brew doctornovamente.

Você ainda pode receber erros sobre quaisquer dependências que não estiver usando (Java no meu caso), o que está correto. Se você tiver as Ferramentas de Linha de Comando do Xcode instaladas em vez da instalação completa do Xcode, também receberá uma mensagem de erro informando que possui um caminho inválido, mas, na mensagem, você também lerá que não há caminho válido se estiver apenas usando as ferramentas de linha de comando do Xcode, tudo bem também.

Para benefício de outras pessoas: lembre-se de que você precisa estar logado como administrador ao fazer isso para que funcione.

Phil M
fonte
0

Segui uma combinação das sugestões de iolsmit e Phil M: coloquei esses diretórios em meu nome de usuário e depois corri brew updatenovamente, seguido por brew doctor. Isso eliminou todas as mensagens de erro e as instalações de distribuição agora parecem funcionar bem. Obrigado a ambos!

Ramon
fonte
0

Polegares para cima para investigação e esclarecimento de @ mgd ... está no local!

Parece que um problema semelhante foi levantado no github.com cerca de um ano atrás, mas nunca foi (adequadamente?) Resolvido, pelo menos não usando writable_real?... talvez seja hora de uma solicitação de recebimento?!? :-)

pvandenberk
fonte