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

9

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 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?

Ramon
fuente
¿Por qué no "agrega" estos directorios a su nombre de usuario, como se sugiere? No deberían pertenecer a "root" de todos modos. Para varios usuarios, también puede cambiar los permisos de grupo: apple.stackexchange.com/q/42127/14994
iolsmit
@iolsmit: tengo exactamente el mismo problema. Sin embargo, no veo por qué /usr/localdebería pertenecer a en su lugar cuando la máquina tiene múltiples usuarios administradores. Además, es posible para mí escribir en las ubicaciones de las que brew doctorse queja. ¿Alguna otra idea?
mgd

Respuestas:

7

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 mantenido mi respuesta original a continuación.


Ignora el problema de permisson por ahora

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

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

No considero correcto hacer que sea /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 ti, tengo un /usr/localusuario que puede escribir perfectamente y 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 grabable:

$ 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

La investigación adicional sobre el 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 sepamos que sí.

En su Pathname.writable_real?lugar, el uso da el resultado correcto: dice que el directorio se puede escribir:

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

Esto debería arreglarse /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í ):

escribible? (nombre_archivo) → verdadero o falso: Devuelve verdadero si el archivo nombrado es editable por la identificación de usuario efectiva de este proceso.

writable_real? (nombre_archivo) → verdadero o falso: Devuelve verdadero si el archivo nombrado es editable por el ID de usuario real de este proceso.

mgd
fuente
Pulgares para 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 writable_real?... ¿tal vez es hora de una solicitud de extracción? :-)
pvandenberk
0

Creo que solo necesitas esto:

brew update

Luego intente brew doctornuevamente.

Es posible que aún reciba errores sobre cualquier dependencia que no esté utilizando (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 dice que tiene una ruta no válida, pero justo en el mensaje también leerá que no hay una ruta válida si simplemente usando las Herramientas de línea de comandos para Xcode, así que también está bien.

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

Phil M
fuente
0

Seguí una combinación de las sugerencias de iolsmit y Phil M: elegí estos directorios a mi nombre de usuario, luego corrí brew updatenuevamente 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!

Ramon
fuente
0

Pulgares para 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 writable_real?... ¿tal vez es hora de una solicitud de extracción? :-)

pvandenberk
fuente