Permissões de homebrew e vários usuários que precisam atualizar a atualização


79

Estou usando o Homebrew para gerenciar instalações de pacotes no Lion (Lion Server, na verdade, mas isso não deve importar) .

O Homebrew foi instalado sob um usuário. Agora, um usuário diferente gostaria de adicionar um pacote e o Homebrew não está feliz:

$ brew update
fatal: Unable to create '/usr/local/.git/index.lock': Permission denied
Error: Failure while executing: git checkout -q master

Isso é considerado ruim? Eu pensei que uma das vantagens de usar /usr/local/para suas instalações era que você não precisa sudo. Mas claramente o fazemos.

Todos os usuários que precisariam modificar o Homebrew são membros do grupo de administradores . Então, eu poderia, chmod -R g+w /usr/local/mas com medo de que isso funcione ou crie problemas de segurança?!?

Conselhos?

$ ls -al /usr/local/.git/
total 432
drwxr-xr-x  14 ladmin  admin     476 Feb 24 11:48 .
drwxrwxr-x  14 root    admin     476 Feb  9 15:27 ..
-rw-r--r--   1 ladmin  admin      94 Feb 24 11:48 FETCH_HEAD
-rw-r--r--   1 ladmin  admin      23 Feb 24 11:48 HEAD
-rw-r--r--   1 ladmin  admin      41 Feb  9 15:28 ORIG_HEAD
drwxr-xr-x   2 ladmin  admin      68 Feb  9 15:27 branches
-rw-r--r--   1 ladmin  admin     218 Feb  9 15:27 config
-rw-r--r--   1 ladmin  admin      73 Feb  9 15:27 description
drwxr-xr-x  12 ladmin  admin     408 Feb  9 15:27 hooks
-rw-r--r--   1 ladmin  admin  200272 Feb 24 11:48 index
drwxr-xr-x   3 ladmin  admin     102 Feb  9 15:27 info
drwxr-xr-x   4 ladmin  admin     136 Feb  9 15:27 logs
drwxr-xr-x   4 ladmin  admin     136 Feb  9 15:27 objects
drwxr-xr-x   5 ladmin  admin     170 Feb  9 15:27 refs

Respostas:


100

Isso é considerado ruim? Eu pensei que uma das vantagens de usar / usr / local / para suas instalações era que você não precisa do sudo. Mas claramente o fazemos.

O Homebrew, por padrão, configura-se para acesso de usuário único a /usr/local. Portanto, você precisa abrir as permissões na árvore de diretórios para que seja administrado por mais de uma pessoa.

As pessoas não precisam executar o sudo aqui para administrar o homebrew. Você só precisa alterar algumas permissões. Desde que você já possui:

Todos os usuários que precisariam modificar o Homebrew são membros do grupo de administradores.

Você precisa fazer mais duas coisas:

  1. Verifique se tudo abaixo /usr/localpertence ao grupo admin; e
  2. Certifique-se de que qualquer pessoa do grupo adminpossa escrever sobre qualquer item abaixo /usr/local.

Nesse caso, as alterações a serem feitas são:

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

E qualquer usuário do admingrupo deve poder gerenciar a instalação do homebrew na máquina. Se você precisar adicionar um usuário ao grupo de administradores, isso poderá ser realizado da seguinte maneira:

 dseditgroup -o edit -a <username> -t user admin

(esse usuário precisará fazer login novamente para obter os privilégios concedidos).

Para garantir a sanidade da máquina, considere criar seu próprio fork do Homebrew e fazer com que o repositório git do homebrew local aponte para o fork local. Isso permite personalizar o Homebrew para o seu ambiente e controlar as versões dos pacotes que as pessoas podem instalar com o brewcomando Com várias pessoas fazendo instalações, você pode encontrar problemas de versão ou problemas de dependência.


1
Eu tenho o mesmo problema e alterei a propriedade e as permissões do grupo, conforme sugerido. brew doctorainda reclama que, por exemplo, /usr/local/includenão é gravável, embora eu possa verificar manualmente se posso gravar em um arquivo aqui (por exemplo, usando echo "hello" > /usr/local/include/testfile). Eu sou membro do grupo de administradores. Alguma idéia para depuração?
mgd

2
Esta solução funcionou para mim, mas não trata do cache local do Homebrew. Sugiro também a execução:chmod -R g+w /Library/Caches/Homebrew
Drew Dara-Abrams


2
Parece que o Homebrew agora fez a transição do cache para o diretório do usuário atual. Acabei de ver: ==> Migrando / Biblioteca / Caches / Homebrew para /Users/bluechain.admin/Library/Caches/Homebrew ... ao fazer uma atualização de distribuição. Se eu estiver interpretando isso corretamente, isso significa que não precisamos mais nos preocupar em ter um diretório de cache gravável globalmente para o Homebrew.
Endareth 23/08/19

Para usuários do High Sierra com esse problema, agora você precisa usar isso: em sudo chown -R $(whoami) $(brew --prefix)/*vez dos comandos acima. Entendi a partir daqui
Jeff Kranenburg

7

Você pode habilitar permissões de homebrew para mais de um usuário por meio do grupo de administradores ou de qualquer outro grupo de usuários. Aqui está uma receita ligeiramente expandida para configurar isso:

O grupo precisa administrar o diretório de instalação local do homebrew. Portanto, atribua / usr / local ao grupo de administradores (ou seu grupo preferido) e ative as permissões de gravação do grupo:

chgrp -R admin /usr/local
chmod -R g+w /usr/local

O grupo também precisa de permissões para o cache local de fórmulas e arquivos de origem do homebrew em / Library / Caches / Homebrew :

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

Se você se deparar com outros problemas de permissões semelhantes ao usar o homebrew de várias contas, observe o caminho incorreto e considere tentar a mesma abordagem.

Leif Hanack tem blogou uma solução semelhante , onde ele cria e configura um grupo de usuários dedicados cerveja para o efeito.

--Atualização 20/08/2015

Recentemente, usei essa resposta novamente para configurar uma conta de convidado com acesso ao homebrew. Para usar o Cask da segunda conta de administrador, também tive que executar os seguintes comandos:

chgrp -R admin /opt/homebrew-cask
chmod -R g+w /opt/homebrew-cask

4

Eu só ia comentar a resposta aceita (mas ainda não tenho a reputação disso).

Como usuário do Caskroom.io , eu também recomendaria adicionar:

sudo chown -R admin /opt/homebrew-cask
sudo chmod -R g+w /opt/homebrew-cask
sudo chmod -R g+w  /Library/Caches/Homebrew/

desde que o cask, uma extensão extremamente útil para o homebrew, coloca todos os seus arquivos em /opt/homebrew-cask


1
Por /optque eu acho que você quer dizer /usr/local? Como /optnão existe nas instalações recentes do OS X, mesmo após a instalação do homebrew.
forquare 17/08/15

Em junho de 2016, o Homebrew-Cask (uma extensão de fermentação) moveu o local padrão da pasta Caskroom para /usr/local(ou com mais precisão $(brew --prefix)) de, /opt/homebrew-caskportanto, essa resposta agora é discutível, mas era válida quando foi escrita. Consulte Mover o local padrão do depósito
zen

1

Você precisa dar permissão para o caminho. execute isso na linha de comando e você estará bem. Funcionou para mim:

sudo chown -R $ USER / usr / local


0

Eu votaria na definição da permissão do grupo - e para mim parece que é justamente para isso que existe e não deve criar um problema de segurança.

  • Não use sudo.

O sudo é perigoso e você instalou o TextMate.app sem o sudo de qualquer maneira.

O Homebrew foi projetado para funcionar sem o uso do sudo. Você pode optar por usá-lo, mas é altamente recomendável não fazê-lo. Se você usou o sudo e se deparou com um bug, é provável que seja a causa. Por favor, não envie um relatório de erro, a menos que você possa reproduzi-lo após reinstalar o Homebrew a partir do zero sem usar o sudo.


Então, seu conselho seria sudo chmod -R g+w /usr/local/?
Meltemi

Sim, mas você pode solicitar uma segunda opinião usando um destes: IRC (irc: //irc.freenode.net/#machomebrew); Lista de discussão (homebrew@librelist.com); Twitter ( twitter.com/machomebrew )
iolsmit
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.