EDIT: il problema è ora risolto in Homebrew:
Se il problema persiste, aggiorna Homebrew in questo modo:
brew update
Se vuoi sapere qual è il problema, ho mantenuto la mia risposta originale di seguito.
Ignora il problema permisson per ora
Sto riscontrando lo stesso identico problema e, a mio parere, il problema è in brew doctor
piuttosto che nella tua e nella mia installazione.
Penso che dovresti ignorare il problema piuttosto che modificare la proprietà di /usr/local
. In alternativa, puoi correggere lo script brew doctor
locale fino a quando non viene rilasciata una correzione. Vedi sotto.
Non ritengo corretto rendere /usr/local
di proprietà di un utente specifico. Ho più di un utente amministratore su questa macchina. Devi lasciare /usr/local
di proprietà di root:admin
come proprietario e gruppo.
La mia indagine
Come per te, ho un /usr/local
perfettamente scrivibile dal mio utente che è anche membro del gruppo 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
Proviamo che la directory è veramente scrivibile:
$ 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
Ulteriori indagini sul codice brew doctor
mi hanno portato alla conclusione che l'uso della funzione di ruby Pathname.writable?
sta causando il problema. Considera questa sessione interattiva di Ruby:
$ irb
>> require 'pathname'
=> true
>> Pathname('/usr/local').writable?
=> false
Funzione Pathname.writable?
dice /usr/local
non è scrivibile anche se sappiamo che lo è.
L'utilizzo di Pathname.writable_real?
invece dà il risultato corretto - dice che la directory è scrivibile:
>> Pathname('/usr/local').writable_real?
=> true
Questo dovrebbe essere corretto in /usr/local/Library/Homebrew/cmd/doctor.rb
. Puoi aggiustarlo nella tua installazione mentre aspetti una correzione.
La differenza tra le due funzioni è (secondo i documenti di Ruby qui e qui ):
scrivibile? (file_name) → vero o falso: restituisce true se il file nominato è scrivibile dall'ID utente effettivo di questo processo.
writable_real? (file_name) → true o false: Restituisce true se il file denominato è scrivibile dall'ID utente reale di questo processo.