web-dev-qa-db-fra.com

Comment réparer les permissions homebrew?

J'ai désinstallé et installé 3 fois Homebrew car il semble ne jamais me permettre d'installer quoi que ce soit, car il me refuse les autorisations à la fin de la plupart des installations.

Par exemple, je vais publier ce scénario de téléchargement libjpeg auquel je suis actuellement confronté.

J'essaie d'installer libjpeg et reçois:

$ brew install libjpeg
==> Downloading https://downloads.sf.net/project/machomebrew/Bottles/jpeg-8d.mountain_lion.bottle.1.tar.gz
Already downloaded: /Library/Caches/Homebrew/jpeg-8d.mountain_lion.bottle.1.tar.gz
==> Pouring jpeg-8d.mountain_lion.bottle.1.tar.gz
Warning: Could not link jpeg. Unlinking...
Error: The brew link step did not complete successfully
The formula built, but is not symlinked into /usr/local
You can try again using `brew link jpeg'
Error: Permission denied - /usr/local/opt/jpeg

'brassage lien jpeg' a pour résultat 

Error: Permission denied - /usr/local/opt/jpeg

Voici ce que lit mon médecin brasseur

$ brew doctor
Warning: "config" scripts exist outside your system or Homebrew directories.
./configure scripts often look for *-config scripts to determine if
software packages are installed, and what additional flags to use when
compiling and linking.

Having additional scripts in your path can confuse software installed via
Homebrew if the config script overrides a system or Homebrew provided
script of the same name. We found the following "config" scripts:

/Library/Frameworks/Python.framework/Versions/2.7/bin/python-config
/Library/Frameworks/Python.framework/Versions/2.7/bin/python2-config
/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7-config
Warning: You have unlinked kegs in your Cellar
Leaving kegs unlinked can lead to build-trouble and cause brews that depend on
those kegs to fail to run properly once built. Run brew link on these:

jpeg

Ce problème de permission a rendu impossible l'utilisation de la bière et j'apprécierais vraiment toutes les suggestions.

450
Saturnino

J'ai pu résoudre le problème en utilisant chown dans le dossier: 

Sudo chown -R "$USER":admin /usr/local

De plus, vous devrez (probablement) faire de même sur /Library/Caches/Homebrew:

Sudo chown -R "$USER":admin /Library/Caches/Homebrew

Apparemment, j'avais déjà utilisé Sudo d'une manière qui modifiait l'autorisation de mon dossier sur /usr/local,

Cette réponse est une gracieuseté de du traqueur de problèmes homebrew de gitHub

869
Saturnino

En tant que première option pour ceux qui atterrissent ici comme moi, suivez ce que cela vous suggère:

brew doctor

C'est le chemin le plus sûr et, entre autres choses, il m'a suggéré de:

Sudo chown -R $(whoami) /usr/local

qui a résolu ce problème d'autorisations.

C'est ce que le PO a fait, mais apparemment, il n'a pas eu la suggestion ci-dessus. vous pouvez, et il est toujours préférable de commencer par là, et ne cherchez ensuite que des solutions non triviales si cela ne vous aide pas.

213
Nycen

J'ai eu ce problème ... Une solution de travail consiste à changer la propriété de /usr/local en utilisateur actuel au lieu de root par:

  Sudo chown -R $(whoami):admin /usr/local

Mais vraiment ce n'est pas une bonne façon. Principalement si votre machine est un serveur ou plusieurs utilisateurs.

Ma suggestion est de changer la propriété comme ci-dessus et de faire ce que vous voulez implémenter avec Brew .. (mettre à jour, installer ... etc) puis réinitialiser la propriété à la racine en tant que:

  Sudo chown -R root:admin /usr/local

Cela résoudrait le problème tout en maintenant la propriété bien définie.

27
Maher Abuthraa

La commande de réponse ne votera pas pour moi.

Il a eu la sortie:

chown:/usr/{mon_nom_utilisateur} dmin: nom d'utilisateur illégal

Cette commande fonctionne bien (le groupe pour/usr/local était déjà admin):

Sudo chown -R $USER /usr/local
14
skywinder

Si vous souhaitez une approche légèrement plus ciblée que la couche chown -R, vous pouvez trouver this fix-homebrew script utile:

#!/bin/sh

[ -e `which brew` ] || {
    echo Homebrew doesn\'t appear to be installed.
    exit -1
}

BREW_ROOT="`dirname $(dirname $(which brew))`"
BREW_GROUP=admin
BREW_DIRS=".git bin sbin Library Cellar share etc lib opt CONTRIBUTING.md README.md SUPPORTERS.md"

echo "This script will recursively update the group on the following paths"
echo "to the '${BREW_GROUP}' group and make them group writable:"
echo ""

for dir in $BREW_DIRS ; do {
    [ -e "$BREW_ROOT/$dir" ] && echo "    $BREW_ROOT/$dir "
} ; done

echo ""
echo "It will also stash (and clean) any changes that are currently in the homebrew repo, so that you have a fresh blank-slate."
echo ""

read -p 'Press any key to continue or CTRL-C to abort.'

echo "You may be asked below for your login password."
echo ""

# Non-recursively update the root brew path.
echo Updating "$BREW_ROOT" . . .
Sudo chgrp "$BREW_GROUP" "$BREW_ROOT"
Sudo chmod g+w "$BREW_ROOT"

# Recursively update the other paths.
for dir in $BREW_DIRS ; do {
    [ -e "$BREW_ROOT/$dir" ] && (
        echo Recursively updating "$BREW_ROOT/$dir" . . .
        Sudo chmod -R g+w "$BREW_ROOT/$dir"
        Sudo chgrp -R "$BREW_GROUP" "$BREW_ROOT/$dir"
    )
} ; done

# Non-distructively move any git crud out of the way
echo Stashing changes in "$BREW_ROOT" . . .
cd $BREW_ROOT
git add .
git stash
git clean -d -f Library

echo Finished.

Au lieu de faire un chmod à votre utilisateur, il donne au groupe admin (auquel vous appartenez probablement) l'accès en écriture aux répertoires spécifiques dans /usr/local utilisés par homebrew. Il vous indique également exactement ce qu'il compte faire avant de le faire.

12
darco

Je ne voulais pas encore me fâcher avec les permissions de dossier, alors j'ai fait ce qui suit:

brew doctor
brew upgrade
brew cleanup 

J'ai ensuite pu continuer à installer mon autre formule de brassage avec succès.

10
Anthony To

Dans mon cas, le répertoire/usr/local/Frameworks n'existait même pas.

Sudo mkdir /usr/local/Frameworks
Sudo chown -R $(whoami) /usr/local/Frameworks

Et puis tout a fonctionné comme prévu.

8
Helen Vasconcelos

Cela a résolu le problème avant moi.

Sudo chown -R "$USER":admin /Users/$USER/Library/Caches/Homebrew
Sudo chown -R "$USER":admin /usr/local
7
Fardin

J'ai résolu mon problème avec ces commandes:

Sudo mkdir /usr/local/Cellar
Sudo mkdir /usr/local/opt
Sudo chown -R $(whoami) /usr/local/Cellar
Sudo chown -R $(whoami) /usr/local/opt
6
hardc0der

Je n'avais pas le dossier /user/local/Frameworks, donc cela a été corrigé pour moi

Sudo mkdir -p /usr/local/Frameworks
Sudo chown -R $(whoami) /usr/local/Frameworks

J'ai OSX High Sierra

6
Karl Johan Vallner

Toutes ces suggestions peuvent fonctionner. Dans la dernière version de brasser docteur, de meilleures suggestions ont été faites cependant.

Tout d'abord, corrigez le désordre que vous avez probablement déjà fait avec /usr/local en l'exécutant dans la ligne de commande:

Sudo chown -R root:wheel /usr/local

Puis prenez possession des chemins qui devraient être spécifiquement pour cet utilisateur:

Sudo chown -R $(whoami) /usr/local/lib /usr/local/sbin /usr/local/var /usr/local/Frameworks /usr/local/lib/pkgconfig /usr/local/share/locale

Toutes ces informations sont disponibles si vous exécutez Sudo brew update, puis lisez tous les avertissements et erreurs que vous rencontrerez ...

5
Max Dercum

Il y a un script tueur sur github qui corrige les permanentes sur les répertoires/usr/local et brasser pour qu'elles soient accessibles à tous les membres du groupe 'admin'. 

https://Gist.github.com/jaibeee/9a4ea6aa9d428bc77925

C'est une meilleure solution que la réponse choisie, car si vous chown les répertoires/usr/local/___ à $ USER, vous cassez tout autre utilisateur administrateur de homebrew sur cette machine.

Voici le courage du script au moment où j'ai posté ceci:

chgrp -R admin /usr/local
chmod -R g+w /usr/local

chgrp -R admin /Library/Caches/Homebrew
chmod -R g+w /Library/Caches/Homebrew

chgrp -R admin /opt/homebrew-cask
chmod -R g+w /opt/homebrew-cask
3
TheProletariat

Pour moi, cela a fonctionné après

brew doctor 

Les commandes de changement de permission ont généré une autre erreur

chown: /usr/local: Operation not permitted

2
Krishnadas PC

Dans mon cas, j'ai eu des problèmes pour supprimer et réinstaller SaltStack.

Après avoir couru:

ls -lah /usr/local/Cellar/salt/

J'ai remarqué que le propriétaire du groupe était "personnel". (En passant, j'utilise macOS Mojave version 10.14.3.) Le groupe d'employés pourrait être lié à la configuration de mon lieu de travail, mais je ne le sais pas vraiment. Quoi qu'il en soit, j'ai préservé le groupe pour m'empêcher de tout casser davantage.

J'ai ensuite couru:

Sudo chown -R "$USER":staff /usr/local/Cellar/salt/

Après cela, j'ai réussi à l'enlever avec cette commande (pas en tant que root):

brew uninstall --force salt
1
devinbost
cd /usr/local && Sudo chown -R $(whoami) bin etc include lib sbin share var opt Cellar Frameworks
1
Girish Gupta

En fait c'est très simple, exécutez cette commande: brew doctor

Et cela vous indiquera quoi faire pour résoudre les problèmes d'autorisation, par exemple dans mon cas: 

C'était le problème: 

Warning: The following directories are not writable by your user:
/usr/local/share/man/man5
/usr/local/share/man/man7

Et c'était la solution: 

You should change the ownership of these directories to your user.
  Sudo chown -R $(whoami) /usr/local/share/man/man5 /usr/local/share/man/man7
1
Arsalan Mehmood

Si vous ne possédez pas la dernière version de Homebrew: J'ai "corrigé" cela par le passé en forçant Homebrew à s'exécuter en tant que root, ce qui ne pouvait être fait qu'en modifiant le propriétaire des exécutables Homebrew en root. À un moment donné, ils ont supprimé cette fonctionnalité.

Et je sais qu'ils vont donner beaucoup d'avertissements disant que cela ne devrait pas fonctionner en tant que root, mais allez, ça ne fonctionne pas correctement autrement.

0
sudo

Pour un Mac multi-utilisateur, cela a fonctionné pour moi:

Sudo chown -R $(whoami):admin $(brew --prefix)/*
0

Sous MacOS Mojave, je n'avais pas l'autorisation de chown le dossier/usr/local non plus (Sudo chown -R "$USER":admin /usr/local).

Sudo chown -R "$USER":admin /usr/local/* a cependant fonctionné pour moi, modifiant les autorisations de tout au sein de le dossier local.

Espérons que cela aidera les autres avec le même problème.

0
poepje

J'ai tout essayé sur cette page, j'ai fini par utiliser cette solution: 

brew uninstall --force brew-cask; brew untap $tap_name; brew update; brew cleanup; brew cask cleanup;

Ma situation était similaire à celle de l'OP, mais mon problème était spécifiquement causé par l'utilisation de Sudo avec du breuvage, puis par l'obtention d'un mot de passe incorrect. Après cela, j'ai été bloqué avec des autorisations empêchant l'installation.

0
Alpha G33k

Pour résoudre les erreurs pour les autorisations Brew lors de l’exécution du dossier 

brew Prune

Cela résoudra les problèmes et nous n’aurons pas à renverser de répertoires. 

0
Catto