Homebrew: No se pudo vincular, / usr / local / bin no se puede escribir [cerrado]

361

Durante la instalación tig, HomeBrewmuestra los siguientes problemas al instalar una dependencia:

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
fuente
3
Esto no pertenece a stackowerflow.com, sino a superuser.com o askdifferent.com
Ondra Žižka

Respuestas:

582

Después de la respuesta de Alex pude resolver este problema; Parece que se trata de un problema no específico de los paquetes que se instalan, sino de los permisos de las homebrewcarpetas.

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

Para algunos paquetes, también puede necesitar hacer esto /usr/local/shareo /usr/local/opt:

sudo chown -R `whoami`:admin /usr/local/share
sudo chown -R `whoami`:admin /usr/local/opt
Jikku Jose
fuente
25
¿Reconocer todo / usr / local / bin para el uso actual no causa problemas al sistema ni a otros usuarios?
Don Giulio
10
¿No sería sudo chown -R whoami :admin /usr/local/binequivalente al comando en la respuesta, sin la necesidad de reemplazarlo yourusenamecon su nombre de usuario real?
Jason Swett
55
También tuve que vestirme usr/local/optrecursivamente. Funcionó después de eso.
atripes
55
En mi Mac (10.9.5) de los permisos /usr/local/bin(y amigos) parecen revertir a drwxr-xr-x+y root wheeltodos los días. Debo volver a configurar los permisos cada vez que quiera brew install. ¿Asumo que el sistema operativo está restableciendo los permisos para protegerme? ¿Cómo puedo hacer que pare? (Lo he intentado chflags uchg …pero eso evita que se instale brew)
Quinn Comendant
1
Agregué mi cuenta al grupo "rueda". Esto me permite "sudo chmod -R g + w / usr / local"; esto permite a los miembros del grupo "wheel" escribir en las carpetas. Parece más seguro que cambiar el propietario de estas carpetas confidenciales a una cuenta menos segura que la raíz.
Michael Krebs
220

En lugar de ejecutar cualquier comando en particular, recomendaría ejecutar brew doctory tomar en serio todas las advertencias. Puede haber otros problemas en los que se quede atascado y que no se puedan capturar en esta pregunta.

Además, a medida que brew se actualiza con el tiempo, determinados comandos pueden o no seguir siendo válidos. brew doctor, sin embargo, se asegurará de que tenga una solución de problemas actualizada.

zakishaheen
fuente
99
No puedo creer que tu respuesta sea menos popular. Ciertamente es más prudente que las conjeturas expresadas anteriormente.
Robert de Fairfax
34
brew doctorno solucionará el problema, solo le informará al respecto, y cuando sigue el consejo del médico, brew dice que no puede hacerlo. Eso no es una solución
Keith Tyler
8
Quizás alguien lo mejoró. Ahora brew doctor sugiere que ejecute un cmd similar a la respuesta más popular, y después de hacerlo, el enlace simbólico funciona. Estoy en una Mac, así que veremos cuánto dura. :-)
Joshua Richardson
2
Esto fue muy útil gracias. Se corrigieron algunos otros directorios especiales para ignorar la sugerencia anterior que se perdió.
SwimBikeRun
66
¡Brew Doctor proporcionó el problema EXACTO y también proporcionó la solución manual!
netrox
74

Las otras respuestas son correctas, hasta donde llegan, pero no responden por qué este problema podría estar ocurriendo y cómo abordar esa causa raíz.

Porque

Hay dos causas posibles para este problema:

  1. La instalación de homebrew se realizó con un usuario diferente al que está utilizando actualmente. Homebrew espera que solo el usuario que lo instaló originalmente quiera usarlo.
  2. Instaló algún software que escribe en / usr / local sin usar brew. Esta es la causa brew doctorsugiere, si lo ejecutas.

Solución

Homebrew multiusuario

Si tiene varias cuentas de usuario y desea que más de una de ellas pueda usar brew, debe ejecutar algunos pasos, de lo contrario, tendrá que cambiar constantemente la propiedad de la estructura de archivos de Homebrew cada vez que cambie de usuario, Y esa no es una gran idea.

Las instrucciones detalladas se pueden encontrar en línea , pero la respuesta rápida es esta:

  1. Crea un grupo llamado brew:

    1. Preferencias de sistema abierto
    2. Haga clic en cuentas
    3. Haga clic en "+" (desbloquee primero si es necesario)
    4. En Nueva cuenta, seleccione Grupo
    5. entrar cerveza
    6. Haz clic en Crear grupo
  2. Seleccione el grupo de preparación y agregue las cuentas de usuario que desea utilizar.
  3. cambiar la propiedad del grupo de carpetas / usr / local: sudo chgrp -R brew /usr/local
  4. cambie los permisos para agregar escritura a / usr / local como grupo: sudo chmod -R g+w /usr/local
  5. cambiar el grupo de directorio de caché homebrew: sudo chgrp -R brew /Library/Caches/Homebrew
  6. cambiar los permisos del directorio de caché homebrew: sudo chmod -R g+w /Library/Caches/Homebrew

Usuario único Homebrew

Si no está intentando usar más de un usuario con Homebrew, entonces la solución provista por las otras respuestas, basada en las sugerencias de, brew doctorprobablemente sea suficiente:

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

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

Verificación

Después de estos pasos, brew doctordebe informar el éxito de cualquier usuario en el grupo de café , suponiendo que haya cerrado la sesión y vuelva a ingresar para aplicar las nuevas membresías del grupo (si siguió la ruta multiusuario). Si solo corrigió las cosas para homebrew de un solo usuario, no debería ser necesario cerrar sesión y volver a iniciarla, ya que ninguna de las membresías de su grupo ha cambiado.

trituradora de piedra
fuente
2
¡Gracias! Probablemente debería leer más sobre los grupos de usuarios de Unix. No tengo ni idea de cómo funciona para digerir el razonamiento lo suficientemente bien. Pero suena muy sensato, ¡gracias por el puntero!
Jikku Jose
1
los grupos de Unix son más simples de lo que podría suponerse: cada archivo tiene permisos de lectura, escritura y ejecución disponibles para el 'usuario' y 'grupo' que posee ese archivo, y para 'otros'. Si configura el grupo que posee un archivo o carpeta y agrega permisos de escritura al 'grupo' para esa carpeta, entonces cualquier usuario en ese grupo puede escribir en la carpeta. Realmente no hay más que eso. No es tan complejo como los permisos en Windows.
Stonecrusher
1
Entonces, ¿es una manera fácil de agrupar el sistema de permisos de un conjunto de archivos en un grupo para que se puedan agregar múltiples usuarios con facilidad para aplicar todos esos permisos de una sola vez?
Jikku Jose
2
Esto solucionó mis problemas de enlace de preparación, gracias.
Keith Tyler
Todavía me parece un poco peligroso tener un directorio sensible como el /usr/local/binde escritura grupal, especialmente. en un entorno multiusuario ¿Es esta realmente la forma de elaboración "oficial"?
corwin.amber
67

Para aquellos que están buscando /usr/local/sbinno hay error de escritura:

ACTUALIZACIÓN: podría ser, /usr/local/someOtherFolderNamepor ejemplo /usr/local/include. Solo necesita crear esa carpeta con:

  • sudo mkdir someOtherFolderName

Primero cree la sbincarpeta, tenga en cuenta que esto requiere sudoprivilegios

  • cd /usr/local

  • sudo mkdir sbin

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

  • brew link yourPackageName

Gokcand
fuente
66
Esto funcionó para mí
robin
También necesitaba agregar el directorio a mi ~ / .bash_profile:PATH=$PATH:/usr/local/sbin
Julien
Después de horas de búsqueda, esto es lo único que funcionó para mí. Estoy en High Sierra.
ItsJoeTurner
34

Encontré para mi configuración particular que los siguientes comandos funcionaron

brew doctor

Y luego eso me mostró dónde estaban mis errores, y luego este comando ligeramente diferente del comentario anterior.

sudo chown -R $(whoami) /usr/local/opt
kinnth
fuente
2
Gracias por la obvia sugerencia. Tiendo a olvidarbrew doctor
Antony
1
Esto resolvió el problema aquí
khaosdoctor
brew doctores bueno.
AechoLiu
funcionó de
maravilla
15

Encontré el mismo problema, podemos resolverlo en tres pasos:

Paso 1

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

Paso 2

brew doctor

Paso 3

brew prune

Si aún tiene algún problema de vinculación, digamos mysql, solo escriba

brew link mysql

Esto funcionará

Harry_pb
fuente
1
trabajó para mí para rabbitmq
Omar
¿Cuál es el propósito del 'Paso 1'?
Conrad C
1
brew doctor pulgares arriba! No preparó ciruela pasa, pero instalé otros paquetes faltantes y funcionó para mongodb.
Chenlu
Llamar a 'podar cerveza' está deshabilitado. Use 'limpieza de preparación' en su lugar.
hanumanDev
12

Para aquellos que se encuentran con este problema (otorgado 4 años después de que se realizó esta publicación) mientras ejecutaban Mac OS High Sierra, los pasos descritos aquí me resolvieron el problema. Esencialmente solo describe la desinstalación y reinstalación de brew.

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

Después de ejecutar esos pasos, brew link funcionó como un encanto!

Eron Salling
fuente
Encontré que esto funcionó para mí (sin el comando de volcado inicial): github.com/Homebrew/brew/issues/3285#issuecomment-334976806
vr_driver
¡Gracias! Intenté la respuesta de Harry, no tuve suerte. ¡Intenté esto y funcionó de maravilla!
Joe
Trabajó para mí, gracias!
zen
9

Para mí la solución era correr brew update.

Entonces, HAGA ESTO PRIMERO.

Esta podría ser una práctica normal para personas familiarizadas con homebrew, pero no soy una de esas personas.

Editar: descubrí que necesitaba actualizar ejecutando brew doctorsegún lo sugerido por la respuesta de @ kinnth a esta misma pregunta.

Un flujo de trabajo de resolución de problemas general podría verse así: 1. ejecutar brew update 2. si eso no ayuda a ejecutar brew doctory seguir sus instrucciones 3. si eso no ayuda a verificar el desbordamiento de la pila

FragmentalStew
fuente
1
Esto me arregló todo y vale la pena hacerlo antes que nada.
Rob Evans el
Todo lo que hace brew doctor es señalar que no me han gustado los barriles en mi bodega ... así que eso no hace nada para solucionar el problema de OP
AlxVallejo
@AlxVallejo Esto es lo que hice para resolver un problema que tuve cuando recibí un error casi idéntico al OP. El mensaje que recibió de Brew Doctor me parece un tema diferente. El flujo de trabajo de "1. ejecutar brew update 2. si eso no ayuda a ejecutar brew doctor y seguir sus instrucciones 3. si eso no ayuda a verificar el desbordamiento de la pila" probablemente todavía se aplica.
FragmentalStew
6

Al hacer brew link node Además, también obtuve los siguientes problemas:

Error: No se pudo escribir el enlace simbólico include / node / usr / local / include no se puede escribir.

Vinculación /usr/local/Cellar/node/9.3.0 ... Error: Permiso denegado @ dir_s_mkdir - / usr / local / lib

Para resolver lo anterior simplemente vaya a / usr / local / y verifique la disponibilidad de las carpetas 'incluir' y 'lib', si esas carpetas no están disponibles, simplemente créelas manualmente.

Y ejecute brew install node nuevamente

Wasantha Wijayaratna
fuente
5

Esto se debe a que el usuario actual no tiene permiso para escribir en esa ruta. Entonces, para cambiar los permisos r / w (lectura / escritura) puede usar 1. terminal o 2. Ventana gráfica "Obtener información".

1. Usando Terminal

Google cómo usar los comandos chmod / chown (modo de cambio / cambio de propietario) desde la terminal

2. Usando el gráfico 'Obtener información'

Puede hacer clic con el botón derecho en la carpeta / archivo del que desea cambiar los permisos, luego abrir Obtener información que le mostrará una ventana como la siguiente en la parte inferior de la cual puede cambiar fácilmente los permisos de r / w: ingrese la descripción de la imagen aquí

Recuerde volver a cambiar el permiso a "solo lectura" después de su trabajo temporal, si es posible

Hasaan Ali
fuente
use brew doctor: identificará correctamente las carpetas (del sistema) que deben repararse.
johndpope
2

Mi problema fue

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

chownno ayudó, pero seguí los brew doctorconsejos y esta advertencia me ayudó:

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

Después de brew prunetodo funcionó bien!

Pavel Druzhinin
fuente
Excelente. Funciona para mi.
Bagusflyer
1

Para aquellos que no están familiarizados:

sudo chown -R YOUR_COMPUTER_USER_NAME PATH_OF_FILE
Justin
fuente
0

Si va a la carpeta en el buscador, haga clic derecho y seleccione "Obtener información", puede ir a la sección "Compartir y permisos" para la carpeta y permitir "Leer y escribir" a "todos"

Esto es lo que hago para que los enlaces simbólicos pasen con este error. También brew parece restablecer los permisos en la carpeta también como si no hubiera alterado nada

Carl Lippert
fuente
0

Si ya tiene un directorio /usr/localpara el paquete que está instalando, puede intentar eliminar este directorio.

En mi caso, había instalado previamente el paquete que estaba tratando de instalar sin usar brew, y luego lo desinstalé. Quedaba un directorio /usr/local/<my_package>/de esa instalación anterior. Eliminé esta carpeta ( sudo rm -rf /usr/local/<my_package>/) y después de eso el paso del enlace de preparación fue exitoso.

Samuel Peter
fuente