EDIT : Le problème est maintenant corrigé dans Homebrew :
Si le problème persiste, mettez à jour Homebrew comme suit :
brew update
Si vous voulez savoir quel était le problème, j'ai conservé ma réponse originale ci-dessous.
Ignorer la question des permissions pour l'instant
Je rencontre exactement le même problème et, à mon avis, le problème se situe dans brew doctor
plutôt que dans votre et mon installation.
Je pense que vous devriez ignorer la question plutôt que de changer la propriété de /usr/local
. Alternativement, vous pouvez fixer votre brew doctor
script jusqu'à ce qu'un correctif soit publié. Voir ci-dessous.
Je ne considère pas qu'il soit correct de faire /usr/local
appartenant à un utilisateur spécifique. J'ai plus d'un utilisateur administrateur sur cette machine. Vous devez laisser /usr/local
détenu par root:admin
en tant que propriétaire et groupe.
Mon enquête
Comme pour vous, j'ai un /usr/local
qui est parfaitement accessible en écriture par mon utilisateur qui est aussi un membre de la admin
groupe :
$ 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
Testons que le répertoire est vraiment accessible en écriture :
$ 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
Une enquête plus approfondie sur le brew doctor
m'a conduit à la conclusion que l'utilisation de la fonction ruby Pathname.writable?
est à l'origine du problème. Considérez cette session interactive Ruby :
$ irb
>> require 'pathname'
=> true
>> Pathname('/usr/local').writable?
=> false
Fonction Pathname.writable?
dit /usr/local
n'est pas accessible en écriture même si nous savons qu'il l'est.
Utilisation de Pathname.writable_real?
à la place donne le résultat correct - il dit que le répertoire est accessible en écriture :
>> Pathname('/usr/local').writable_real?
=> true
Cela devrait être corrigé dans /usr/local/Library/Homebrew/cmd/doctor.rb
. Vous pouvez le corriger dans votre propre installation en attendant un correctif.
La différence entre les deux fonctions est la suivante (d'après la documentation Ruby) ici y ici ) :
writable ?(nom_fichier) vrai ou faux : Retourne vrai si le fichier nommé est accessible en écriture par l'utilisateur effectif de ce processus.
writable_real ?(nom_de_fichier) true or false : Retourne vrai si le fichier nommé est accessible en écriture par l'utilisateur réel de ce processus.