EDITAR: El problema ahora se ha solucionado en Homebrew:
Si aún experimenta el problema, actualice Homebrew así:
brew update
Si quieres saber cuál fue el problema, he mantenido mi respuesta original a continuación.
Ignorar el problema de permisos por ahora
Estoy experimentando exactamente el mismo problema y, en mi opinión, el problema está en brew doctor
en lugar de en tu y mi instalación.
Creo que deberías ignorar el problema en lugar de cambiar la propiedad de /usr/local
. Alternativamente, puede corregir su script local brew doctor
hasta que se lance una solución. Vea abajo.
No considero correcto hacer que /usr/local
sea propiedad de un usuario específico. Tengo más de un usuario administrador en esta máquina. Debe dejar a /usr/local
propiedad de root:admin
como propietario y grupo.
Mi investigación
Al igual que para ti, tengo un /usr/local
que mi usuario puede escribir perfectamente, que también es miembro del grupo admin
:
$ 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 de escritura:
$ 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 sobre el código brew doctor
me llevó a la conclusión de que el uso de la función ruby Pathname.writable?
está causando el problema. Considera esta sesión interactiva de Ruby:
$ irb
>> require 'pathname'
=> true
>> Pathname('/usr/local').writable?
=> false
La función Pathname.writable?
dice que /usr/local
no se puede escribir aunque sabemos que lo es.
En lugar de utilizar Pathname.writable_real?
, se obtiene el resultado correcto: dice que el directorio es de escritura:
>> Pathname('/usr/local').writable_real?
=> true
Esto debería ser arreglado 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 here y aquí ):
¿se puede escribir? (nombre_archivo) → verdadero o falso: Devuelve verdadero si el archivo nombrado se puede escribir con el ID de usuario efectivo de este proceso.
writable_real? (file_name) → verdadero o falso: Devuelve verdadero si el archivo nombrado se puede escribir con el ID de usuario real de este proceso.