Cómo resolver errores de permisos en OS X Lion después de la instalación de Homebrew

Acabo de actualizar de Snow Leopard a Lion y estoy tratando de instalar Homebrew. Sin embargo, después de la instalación, ejecuto brew doctorlas instrucciones de instalación y veo una serie de errores que indican que los directorios /usr/local no se pueden escribir. Por ejemplo:

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

Obtengo estos para un montón de directorios:

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

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

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

No puedo entender por qué aparece este error, ya que parece que soy parte del grupo de Unix que tiene permisos de escritura en estos directorios:

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$

¿Qué me estoy perdiendo?

¿Por qué no "chown" estos directorios a su nombre de usuario, como se sugiere? No deberían pertenecer a la "raíz" de todos modos. Para varios usuarios, también puede cambiar los permisos del grupo: apple.stackexchange.com/q/42127/14994
@iolsmit: Tengo exactamente el mismo problema. Sin embargo, no veo por qué /usr/localdebería pertenecerme a cuando esta máquina tiene múltiples usuarios administradores. Además, me es posible escribir a los lugares de los que brew doctorse queja. ¿Alguna otra idea?

Respuestas (4)

EDITAR: El problema ahora está solucionado en Homebrew:

Si aún experimenta el problema, actualice Homebrew de esta manera:

brew update

Si desea saber cuál fue el problema, he guardado mi respuesta original a continuación.


Ignora el problema del permiso por ahora

Estoy experimentando exactamente el mismo problema y, en mi opinión, el problema está en brew doctorlugar de en su instalación y en la mía.

Creo que debería ignorar el problema en lugar de cambiar la propiedad de /usr/local. Alternativamente, puede corregir su secuencia de brew doctorcomandos local hasta que se publique una corrección. Vea abajo.

No considero correcto hacer /usr/localpropiedad de un usuario específico. Tengo más de un usuario administrador en esta máquina. Debe dejar /usr/localPropiedad de root:admincomo propietario y grupo.

mi investigacion

Al igual que para usted, tengo una /usr/localque mi usuario puede escribir perfectamente, que también es miembro del 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

Probemos que el directorio es realmente escribible:

$ 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

Una mayor investigación del brew doctorcódigo me llevó a la conclusión de que el uso de la función Ruby Pathname.writable?está causando el problema. Considere esta sesión interactiva de Ruby:

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

La función Pathname.writable?dice /usr/localque no se puede escribir aunque sabemos que sí.

Usar Pathname.writable_real?en su lugar da el resultado correcto: dice que se puede escribir en el directorio:

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

Esto debería arreglarse en /usr/local/Library/Homebrew/cmd/doctor.rb. Puede arreglarlo en su propia instalación mientras espera una solución.

La diferencia entre las dos funciones es (según los documentos de Ruby aquí y aquí ):

writable?(nombre_de_archivo) → verdadero o falso: Devuelve verdadero si el identificador de usuario efectivo de este proceso puede escribir en el archivo nombrado.

writable_real?(file_name) → verdadero o falso: Devuelve verdadero si el identificador de usuario real de este proceso puede escribir en el archivo nombrado.

Pulgares arriba para la investigación y aclaración de mgd... ¡es perfecto! Parece que se planteó un problema similar en github.com hace aproximadamente un año, pero nunca se resolvió (¿correctamente?) , al menos no mediante el uso de writable_real?... ¿quizás es hora de una solicitud de extracción? :-)

Creo que solo necesitas esto:

brew update

Luego inténtalo de brew doctornuevo.

Es posible que aún obtenga errores sobre las dependencias que no está usando (Java en mi caso), lo cual está bien. Si tiene instaladas las Herramientas de línea de comandos para Xcode en lugar de la instalación completa de Xcode, también recibirá un mensaje de error que indica que tiene una ruta no válida, pero justo en el mensaje también leerá que no hay una ruta válida si está simplemente usando las herramientas de línea de comandos para Xcode, así que también está bien.

Para el beneficio de los demás: tenga en cuenta que debe iniciar sesión como administrador al hacer esto para que funcione.

Seguí una combinación de las sugerencias de iolsmit y Phil M: mezclé estos directorios con mi nombre de usuario, luego corrí brew updatede nuevo seguido de brew doctor. Esto eliminó todos los mensajes de error y las instalaciones de preparación ahora parecen funcionar bien. ¡Gracias a los dos!

Pulgares arriba para la investigación y aclaración de @mgd... ¡es perfecto!

Parece que se planteó un problema similar en github.com hace aproximadamente un año, pero nunca se resolvió (¿correctamente?) , al menos no mediante el uso de writable_real?... ¿quizás es hora de una solicitud de extracción? :-)