¿Cómo arreglar los permisos de homebrew?

601

He desinstalado e instalado Homebrew 3 veces ahora porque parece que nunca me permite instalar nada, ya que me niega los permisos al final de la mayoría de las instalaciones.

Como ejemplo, publicaré este escenario de descarga de libjpeg que estoy enfrentando actualmente.

Intento instalar libjpeg y obtener:

$ brew install libjpeg
==> Downloading https://downloads.sf.net/project/machomebrew/Bottles/jpeg-8d.mountain_lion.bottle.1.tar.gz
Already downloaded: /Library/Caches/Homebrew/jpeg-8d.mountain_lion.bottle.1.tar.gz
==> Pouring jpeg-8d.mountain_lion.bottle.1.tar.gz
Warning: Could not link jpeg. Unlinking...
Error: The brew link step did not complete successfully
The formula built, but is not symlinked into /usr/local
You can try again using `brew link jpeg'
Error: Permission denied - /usr/local/opt/jpeg

'brew link jpeg' da como resultado

Error: Permission denied - /usr/local/opt/jpeg

Esto es lo que lee mi doctor cervecero

$ brew doctor
Warning: "config" scripts exist outside your system or Homebrew directories.
./configure scripts often look for *-config scripts to determine if
software packages are installed, and what additional flags to use when
compiling and linking.

Having additional scripts in your path can confuse software installed via
Homebrew if the config script overrides a system or Homebrew provided
script of the same name. We found the following "config" scripts:

/Library/Frameworks/Python.framework/Versions/2.7/bin/python-config
/Library/Frameworks/Python.framework/Versions/2.7/bin/python2-config
/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7-config
Warning: You have unlinked kegs in your Cellar
Leaving kegs unlinked can lead to build-trouble and cause brews that depend on
those kegs to fail to run properly once built. Run brew link on these:

jpeg

Este problema de permiso ha hecho que sea imposible usar brew en cualquier cosa y agradecería cualquier sugerencia.

Saturnino
fuente

Respuestas:

955

Pude resolver el problema usando chownen la carpeta:

sudo chown -R "$USER":admin /usr/local

Además, (muy probablemente) tendrá que hacer lo mismo en /Library/Caches/Homebrew:

sudo chown -R "$USER":admin /Library/Caches/Homebrew

Aparentemente lo había usado sudoantes de una manera que alteró el permiso de mi carpeta /usr/local, de aquí en adelante todas las instalaciones con brew han demostrado ser exitosas.

Esta respuesta viene por cortesía del rastreador de problemas homebrew de gitHub

Saturnino
fuente
14
Gracias por esto. También necesitaba correr sudo chown -R $USER:admin /Library/Caches/Homebrewpara deshacerme de mis problemas de permisos.
alexpls
64
Cambiar la propiedad de / usr / local a un usuario específico no es una solución. Es un truco terrible y una solución alternativa si tiene un solo sistema de usuario. Pero entonces es mejor que solo aparezca -R / $ USER: $ USER
fijiaaron
17
@fijiaaron Entonces, ¿cuál sería una mejor solución?
julio
47
chowning / usr / local: solución completamente loca. Esperemos que esto no sea realmente la línea de la fiesta.
John Clements
15
Para aquellos que se quejan de que esta solución arruinará los sistemas multiusuario (@fijiaaron, @JohnClements, @hmijail, @Alex), esto es exactamente por qué se invirtieron los permisos de grupo. En macOS, el admingrupo es cada usuario administrador (que es cada usuario de la cuenta de usuario macOS que puede sudo, entre otras cosas), por lo que al ejecutar chown -R …:adminjunto con chmod -R g+w /usr/local(como lo sugiere @AndreaDeGaetano), no hará nada mal aquí y no tendrá ningún problema con otros usuarios también usan /usr/local/ brew.
Slipp D. Thompson
479

Nuevo comando para los usuarios en MacOS alta sierra, ya que no es posible chownen /usr/local:

bash/zsh:

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

fish:

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

Referencia: No se puede usar / usr / local en High Sierra

andrewwong97
fuente
Sí, @Jeffpowrs Tengo el mismo problema en macOS 10.13.2
andrewwong97
44
Utilicé la concha de pescado y tuve que usar lo siguiente: sudo chown -R (whoami) (brew --prefix)/*
Tarellel
2
Relacionado Para lo que estaba tratando de hacer, tuve que hacerlo sudo mkdir /usr/local/Frameworks, seguido del comando chown como aparece en esta respuesta.
Dan Burton el
1
Gracias. Esto salvó el día.
Aashutosh Rathi
2
DIOS TE BENDIGA, Hno.
Mendigo dos Bytes
285

Como primera opción para quien aterriza aquí como lo hice yo, sigue lo que sea que esto te sugiera que hagas:

brew doctor

Es el camino más seguro y, entre otras cosas, me sugirió que:

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

que resolvió ese problema de permisos.

El OP hizo exactamente eso, pero aparentemente no recibió la sugerencia anterior; es posible, y siempre es mejor comenzar allí, y solo entonces buscar soluciones no triviales si no ayudó.

Nycen
fuente
44
Confirmado, esto soluciona cualquier problema que pueda tener con los permisos a partir del 05/2017
Anton Babushkin
3
También puedo confirmar que esto resuelve cualquier problema de permisos y luego pude actualizar mi versión de nodo con facilidad - 06/06/2018 - Gracias
Richlewis
2
brew doctor no encontrará todos los problemas. El problema que tenía era / usr / local / Frameworks no existía y al crearlo y establecer la propiedad en eso lo solucioné. Brew no se dio cuenta de eso como un problema.
Joe W
2
Obtengo chown: /usr/local: Operation not permittedno funciona a partir del 5 de julio de 2019
tavalendo
1
La sugerencia con el médico es quizás una de las mejores sugerencias aquí, porque soluciona (o ayuda a solucionar) diferentes problemas en cualquier momento.
Ecth
82

Si está en OSX High Sierra, /usr/localya no puede ser chown'd. Puedes usar:

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

Ricardo
fuente
Gracias. ¡Me salvó!
Matthias
3
Descubrí que $ (brew --prefix) solo me dio / usr / local, que High Sierra insistió en que no podía cambiar los permisos a ... pero desde brew quería permisos a "/ usr / local / Frameworks" en mi instancia , Pude usar "$ (brew --prefix) / Frameworks" en su lugar, y "brew link python @ 2" funcionó bien para mí después de eso.
alpheus
Todos los usuarios de Mac con múltiples usuarios, ¡utilízalo!
Erik Nguyen
Gracias por OSX High Sierra, y aparentemente ya no podemos usar el / user / local como en las versiones anteriores de MAC OSX. ¡Esto funcionó para mí!
Jose Mhlanga
29

No tenía la /usr/local/Frameworkscarpeta, así que esto me la arregló

sudo mkdir -p /usr/local/Frameworks
sudo chown -R $(whoami) /usr/local/Frameworks

La primera línea crea una nueva carpeta de Frameworks para homebrew (brew) para usar. La segunda línea otorga a esa carpeta sus permisos de usuario actuales, que son suficientes.

Los comandos utilizados son los siguientes:

mkdir - crea directorios [ -p no hay error si existe, crea directorios principales según sea necesario]

chown - cambiar el propietario y el grupo del archivo [ -R operar en archivos y directorios de forma recursiva]

whoami - imprimir ID de usuario efectivo

Tengo OSX High Sierra

Karl Johan Vallner
fuente
27

Tuve este problema. Una solución de trabajo es cambiar la propiedad del /usr/local usuario actual en lugar de root:

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

Pero realmente esta no es una forma adecuada. Principalmente si su máquina es un servidor o usuario múltiple.

Mi sugerencia es cambiar la propiedad como se indicó anteriormente y hacer lo que quiera implementar con Brew ... (actualizar, instalar ... etc.) y luego restablecer la propiedad nuevamente a la raíz como:

  sudo chown -R root:admin /usr/local

Eso resolvería el problema y mantendría la propiedad establecida en el conjunto adecuado.

Maher Abuthraa
fuente
44
hmm .. y cuando tenemos "operación no permitida" para chown?
Ewoks
@Ewoks, ¿eso es en MacOs?
Maher Abuthraa
1
Sí, Sierra High: S
Ewoks
compruebe este stackoverflow.com/a/32661637/2267723 ..también este stackoverflow.com/a/38435256/2267723
Maher Abuthraa
15

El comando de la respuesta más votada no funciona para mí.

Tiene salida:

chown: / usr / {my_username} dmin: nombre de usuario ilegal

Este comando funciona bien (el grupo para / usr / local adminya estaba ):

sudo chown -R $USER /usr/local
skywinder
fuente
55
Agregue algunas citassudo chown -R "$USER":admin /usr/local
orkoden
2
@skywinder Tu respuesta funcionó para mí. No tuve que usar comillas en $ USER.
Anna S
sudo chown -R "$ USER": admin / usr / local donde reemplaza $ USER con su nombre.
lft93ryt
esto resultó enError: Running Homebrew as root is extremely dangerous and no longer supported. As Homebrew does not drop privileges on installation you would be giving all build scripts full access to your system.
thesummersign
3
chown: /usr/local: Operation not permitted
Krishnadas PC
13

Todavía no quería perder el tiempo con los permisos de carpeta, así que hice lo siguiente:

brew doctor
brew upgrade
brew cleanup

Luego pude continuar instalando mi otra fórmula de preparación con éxito.

Anthony To
fuente
1
Esto funcionó bien para mis problemas. Ya me había SUDOed permisos. \
Komsomol
12

Si desea un enfoque ligeramente más específico que la manta chown -R, puede encontrar útil estefix-homebrew script:

#!/bin/sh

[ -e `which brew` ] || {
    echo Homebrew doesn\'t appear to be installed.
    exit -1
}

BREW_ROOT="`dirname $(dirname $(which brew))`"
BREW_GROUP=admin
BREW_DIRS=".git bin sbin Library Cellar share etc lib opt CONTRIBUTING.md README.md SUPPORTERS.md"

echo "This script will recursively update the group on the following paths"
echo "to the '${BREW_GROUP}' group and make them group writable:"
echo ""

for dir in $BREW_DIRS ; do {
    [ -e "$BREW_ROOT/$dir" ] && echo "    $BREW_ROOT/$dir "
} ; done

echo ""
echo "It will also stash (and clean) any changes that are currently in the homebrew repo, so that you have a fresh blank-slate."
echo ""

read -p 'Press any key to continue or CTRL-C to abort.'

echo "You may be asked below for your login password."
echo ""

# Non-recursively update the root brew path.
echo Updating "$BREW_ROOT" . . .
sudo chgrp "$BREW_GROUP" "$BREW_ROOT"
sudo chmod g+w "$BREW_ROOT"

# Recursively update the other paths.
for dir in $BREW_DIRS ; do {
    [ -e "$BREW_ROOT/$dir" ] && (
        echo Recursively updating "$BREW_ROOT/$dir" . . .
        sudo chmod -R g+w "$BREW_ROOT/$dir"
        sudo chgrp -R "$BREW_GROUP" "$BREW_ROOT/$dir"
    )
} ; done

# Non-distructively move any git crud out of the way
echo Stashing changes in "$BREW_ROOT" . . .
cd $BREW_ROOT
git add .
git stash
git clean -d -f Library

echo Finished.

En lugar de hacerle un chmoda su usuario, le da al admingrupo (al que presumiblemente pertenece) acceso de escritura a los directorios específicos /usr/localque utiliza homebrew. También le dice exactamente lo que pretende hacer antes de hacerlo.

darco
fuente
1
Tenga en cuenta que algunas de las rutas parecen haber cambiado un poco, por lo que es posible que tenga que cambiar y modificar algunos directorios más, pero aún así prefiero esto sobre todo lo conocido a su enfoque de usuario.
ashirley
8

En mi caso, el / usr / local / Frameworks ni siquiera existía, así que sí:

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

Y luego todo funcionó como se esperaba.

Helen Vasconcelos
fuente
1
Esto solucionó mi problema y no fue detectado como un problema por brew doctor.
Joe W
7

Esto resolvió el problema para mí.

sudo chown -R "$USER":admin /Users/$USER/Library/Caches/Homebrew
sudo chown -R "$USER":admin /usr/local
Fardin
fuente
2
Esto resuelve este problema, pero deshacería este paso después de vincular con éxito. Solo por razones de seguridad.
ora-600
7

Resolví mi problema con estos comandos:

sudo mkdir /usr/local/Cellar
sudo mkdir /usr/local/opt
sudo chown -R $(whoami) /usr/local/Cellar
sudo chown -R $(whoami) /usr/local/opt
hardc0der
fuente
1
¡Gracias! Eso es lo único que ayudó. ¡ Mac OS 10.13.4En mi caso, tuve que crear sudo mkdir /usr/local/Frameworks y sudo chown -R $(whoami) /usr/local/Frameworkspoder vincular python!
A1m
6

Para una Mac multiusuario, esto funcionó para mí:

sudo chown -R $(whoami):admin $(brew --prefix)/*
Juan José Ramírez
fuente
5

Todas estas sugerencias pueden funcionar. Sin embargo, en la última versión de brew doctor, se hicieron mejores sugerencias.

En primer lugar, corrija el desorden que probablemente ya haya hecho /usr/localejecutando esto en la línea de comando:

sudo chown -R root:wheel /usr/local

Luego tome posesión de las rutas que deberían ser específicamente para este usuario:

sudo chown -R $(whoami) /usr/local/lib /usr/local/sbin /usr/local/var /usr/local/Frameworks /usr/local/lib/pkgconfig /usr/local/share/locale

Toda esta información está disponible si ejecuta sudo brew updatey luego lee todas las advertencias y errores con los que se encontrará ...

Max Dercum
fuente
Establecer la propiedad de todo en / usr / local en root: wheel es peligroso e innecesario La ruta relevante es / usr / local / Cellar
ben26941 el
1
no es necesario que toque esos permisos, a menos que haya ... digamos que ya se apropió de ellos para su usuario de desarrollo, o en el caso de que brew ya los haya destrozado porque hizo una instalación con sudo. Brew Self recomienda esta solución en ese caso, que creo que es mucho menos peligroso que dejar atrás el desorden de sudo.
Max Dercum
1
¿Podría proporcionar un enlace a la recomendación de preparación entonces?
ben26941
1
La mejor respuesta. Funcionó después de que hice una migración desde otra Mac.
BuffMcBigHuge
4

Para mí funcionó después

brew doctor

Cambiar los comandos de permiso dio como resultado otro error

chown: /usr/local: Operation not permitted

Krishnadas PC
fuente
3

Hay un script asesino en github que corrige los permisos en / usr / local y los directorios brew para que sea accesible para cualquier persona que sea miembro del grupo 'admin'.

https://gist.github.com/jaibeee/9a4ea6aa9d428bc77925

Esta es una mejor solución que la respuesta elegida, ya que si asigna los directorios / usr / local / ___ a $ USER, interrumpe a cualquier otro usuario administrador de homebrew en esa máquina.

Aquí están las entrañas del guión en el momento en que publiqué esto:

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

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

chgrp -R admin /opt/homebrew-cask
chmod -R g+w /opt/homebrew-cask
El proletariado
fuente
2

En MacOS Mojave, tampoco tenía permiso para chownla carpeta / usr / local ( sudo chown -R "$USER":admin /usr/local).

sudo chown -R "$USER":admin /usr/local/*Sin embargo, funcionó para mí, alterando los permisos de todo dentro de la carpeta local.

Esperemos que esto ayude a otros con el mismo problema.

paddotk
fuente
1

En realidad es muy simple, ejecuta este comando: brew doctor

Y le dirá qué hacer, para solucionar problemas de permisos, por ejemplo en mi caso:

Este fue el problema:

Warning: The following directories are not writable by your user:
/usr/local/share/man/man5
/usr/local/share/man/man7

Y esta fue la solución:

You should change the ownership of these directories to your user.
  sudo chown -R $(whoami) /usr/local/share/man/man5 /usr/local/share/man/man7
Arsalan Mehmood
fuente
1
cd /usr/local && sudo chown -R $(whoami) bin etc include lib sbin share var opt Cellar Frameworks
Gupta Girish
fuente
1

En mi caso, tengo problemas para eliminar y reinstalar SaltStack.

Despues de correr:

ls -lah /usr/local/Cellar/salt/

Me di cuenta de que el dueño del grupo era "personal". (Por cierto, estoy ejecutando macOS Mojave versión 10.14.3.) El grupo de personal podría estar relacionado con la configuración de mi lugar de trabajo, pero realmente no lo sé. De todos modos, conservé al grupo para evitar romper más.

Entonces corrí:

sudo chown -R "$USER":staff /usr/local/Cellar/salt/

Después de eso, pude eliminarlo con éxito con este comando (no como root):

brew uninstall --force salt
devinbost
fuente
0

Si no tiene la última versión de Homebrew: "solucioné" esto en el pasado forzando a Homebrew a ejecutarse como root, lo que solo podría hacerse cambiando la propiedad de los ejecutables de Homebrew a root. En algún momento, eliminaron esta característica.

Y sé que darán muchas advertencias diciendo que no debería ejecutarse como root, pero vamos, de lo contrario no funciona correctamente.

sudo
fuente
0

Intenté todo en esta página, terminé usando esta solución:

brew uninstall --force brew-cask; brew untap $tap_name; brew update; brew cleanup; brew cask cleanup;

Mi situación era similar a la OP, sin embargo, mi problema fue causado específicamente por ejecutar sudo con brew cask y luego obtener mi contraseña incorrecta. Después de esto, me quedé atascado con los permisos que impiden la instalación.

Alpha G33k
fuente
0

Para resolver errores de permisos de Brew en la carpeta ejecute

brew prune

Esto resolverá los problemas y no tenemos que crear ningún directorio.

Catto
fuente
1
esto ya no funciona, tienes que hacerlo ahorabrew cleanup --prune-prefix
Sliq
0

Estoy en Catalina y recibí este error:

touch: /usr/local/Homebrew/.git/FETCH_HEAD: Permission denied
touch: /usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask/.git/FETCH_HEAD: Permission denied
fatal: Unable to create '/usr/local/Homebrew/.git/index.lock': Permission denied
fatal: Unable to create '/usr/local/Homebrew/.git/index.lock': Permission denied

Solo necesito chown el Homebrewdirectorio

sudo chown -R "$USER":admin /usr/local/Homebrew
Bilal
fuente
0

Usé estos dos comandos y guardé mi problema

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

sudo chown -R $(whoami) /usr/local/etc/bash_completion.d /usr/local/lib/python3.7/site-packages /usr/local/share/aclocal /usr/local/share/locale /usr/local/share/man/man7 /usr/local/share/man/man8 /usr/local/share/zsh /usr/local/share/zsh/site-functions /usr/local/var/homebrew/locks
Marco Aprea
fuente
-5

intente también ejecutar este comando

sudo chmod + t / tmp

bashar
fuente