Homebrew: impossible de créer un lien symbolique, / usr / local / bin n'est pas accessible en écriture [fermé]

361

Lors de l'installation tig, HomeBrewaffiche les problèmes suivants lors de l'installation d'une dépendance:

Error: The `brew link` step did not complete successfully
The formula built, but is not symlinked into /usr/local
Could not symlink bin/a2x
/usr/local/bin is not writable.

You can try again using:
  brew link asciidoc
Jikku Jose
la source
3
Cela n'appartient pas à stackowerflow.com, mais plutôt à superuser.com ou askdifferent.com
Ondra Žižka

Réponses:

582

Suite à la réponse d'Alex, j'ai pu résoudre ce problème; semble que ce soit un problème non spécifique aux packages en cours d'installation mais des autorisations des homebrewdossiers.

sudo chown -R `whoami`:admin /usr/local/bin

Pour certains packages, vous devrez peut-être également effectuer cette opération /usr/local/shareou /usr/local/opt:

sudo chown -R `whoami`:admin /usr/local/share
sudo chown -R `whoami`:admin /usr/local/opt
Jikku Jose
la source
25
Est-ce que la réutilisation de tous / usr / local / bin dans l'utilisation actuelle ne pose aucun problème au système ou à d'autres utilisateurs?
Don Giulio
10
sudo chown -R Whoami ne serait-il pas :admin /usr/local/binéquivalent à la commande dans la réponse, sans qu'il soit nécessaire de le remplacer yourusenamepar votre nom d'utilisateur réel?
Jason Swett
5
Je devais aussi me récurer usr/local/opt. Cela a fonctionné après cela.
atripes
5
Sur mon Mac (10.9.5), les autorisations de /usr/local/bin(et de mes amis) semblent revenir à drwxr-xr-x+et root wheeltous les jours. Je dois reconfigurer les perms à chaque fois que je le souhaite brew install. Je suppose que le système d'exploitation réinitialise les perms pour me protéger? Comment puis-je l'arrêter? (J'ai essayé chflags uchg …mais cela empêche l'installation de l'infusion.)
Quinn Comendant
1
J'ai ajouté mon compte au groupe "roue". Cela me permet de "sudo chmod -R g + w / usr / local" - cela permet aux membres du groupe "wheel" d'écrire dans les dossiers. Semble plus sûr que de changer le propriétaire de ces dossiers sensibles en un compte moins sécurisé que root.
Michael Krebs
220

Plutôt que d'exécuter une commande particulière, je recommanderais d'exécuter brew doctoret de prendre tous les avertissements au sérieux. Il peut y avoir d'autres problèmes auxquels vous vous retrouvez qui ne peuvent pas être capturés dans cette question.

De plus, à mesure que l'infusion est mise à jour avec le temps, des commandes particulières peuvent ou non rester valides. brew doctor, cependant, vous garantira un dépannage à jour.

zakishaheen
la source
9
Je ne peux pas croire que votre réponse soit moins populaire. C'est certainement plus prudent que la supposition exprimée ci-dessus.
Robert de Fairfax
34
brew doctorne résoudra pas le problème, il ne fera que vous en parler, et lorsque vous suivez les conseils d'un médecin, Brew dit qu'il ne peut pas le faire. Ce n'est pas une solution
Keith Tyler
8
Peut-être que quelqu'un l'a amélioré. Maintenant, le docteur de brassage suggère que j'exécute un cmd similaire à la réponse la plus populaire, et après cela, le lien symbolique de brassage fonctionne. Je suis sur un Mac, nous verrons donc combien de temps cela dure. :-)
Joshua Richardson
2
C'était très utile merci. Correction de certains autres répertoires spéciaux pour manquer la suggestion ci-dessus.
SwimBikeRun
6
brew doctor a fourni le problème EXACT et a également fourni la solution manuelle!
netrox
74

Les autres réponses sont correctes, dans la mesure où elles vont, mais elles ne répondent pas pourquoi ce problème pourrait se produire et comment traiter cette cause racine.

Cause

Il existe deux causes possibles à ce problème:

  1. L'installation homebrew a été effectuée avec un utilisateur autre que celui que vous utilisez actuellement. Homebrew s'attend à ce que seul l'utilisateur qui l'a installé à l'origine souhaite jamais l'utiliser.
  2. Vous avez installé un logiciel qui écrit dans / usr / local sans utiliser brew. C'est la cause brew doctorsuggérée, si vous l'exécutez.

Solution

Multiuser Homebrew

Si vous avez plusieurs comptes d'utilisateurs et que vous souhaitez que plusieurs d'entre eux puissent utiliser brew, vous devez exécuter quelques étapes, sinon vous devrez constamment changer la propriété de la structure du fichier Homebrew chaque fois que vous changez d'utilisateur, et ce n'est pas une bonne idée.

Des instructions détaillées peuvent être trouvées en ligne , mais la réponse rapide est la suivante:

  1. Créez un groupe nommé brew:

    1. Ouvrir les préférences du système
    2. Cliquez sur Comptes
    3. Cliquez sur le "+" (déverrouillez d'abord si nécessaire)
    4. Sous Nouveau compte, sélectionnez Groupe
    5. entrez brew
    6. Cliquez sur Créer un groupe
  2. Sélectionnez le groupe d' infusion et ajoutez-y les comptes d'utilisateurs que vous souhaitez utiliser.
  3. changer la propriété du groupe de dossiers / usr / local: sudo chgrp -R brew /usr/local
  4. modifiez les autorisations pour ajouter une écriture à / usr / local en tant que groupe: sudo chmod -R g+w /usr/local
  5. changer le groupe de répertoires du cache homebrew: sudo chgrp -R brew /Library/Caches/Homebrew
  6. modifier les autorisations du répertoire de cache homebrew: sudo chmod -R g+w /Library/Caches/Homebrew

Homebrew mono-utilisateur

Si vous n'essayez pas d'utiliser plus d'un utilisateur avec Homebrew, la solution fournie par les autres réponses, basée sur les suggestions de, brew doctorest probablement suffisante:

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

sudo chown -R $(whoami) /Library/Caches/Homebrew

Vérification

Après ces étapes, vous devez brew doctorsignaler le succès de tout utilisateur du groupe de brassage , en supposant que vous vous êtes déconnecté et reconnecté pour appliquer les nouvelles appartenances au groupe (si vous avez choisi la route multi-utilisateur). Si vous venez de corriger des choses pour l'homebrew mono-utilisateur, la déconnexion et la reconnexion ne devraient pas être nécessaires car aucune des appartenances à votre groupe n'a changé.

Concasseur
la source
2
Merci! Je devrais probablement en savoir plus sur les groupes d'utilisateurs Unix. Je ne sais absolument pas comment cela fonctionne pour bien digérer le raisonnement. Mais cela semble très sensé, merci pour le pointeur!
Jikku Jose
1
Les groupes Unix sont plus simples que vous ne le pensez - chaque fichier a des autorisations de lecture, d'écriture et d'exécution disponibles pour «l'utilisateur» et le «groupe» propriétaire de ce fichier, et pour les «autres». Si vous définissez le groupe propriétaire d'un fichier ou d'un dossier et ajoutez des autorisations d'écriture au «groupe» pour ce dossier, tout utilisateur de ce groupe peut écrire dans le dossier. Il n'y a vraiment rien de plus que cela. pas aussi complexe que les autorisations dans les fenêtres.
tailleur de pierre
1
C'est donc un moyen facile d'associer le système d'autorisation d'un ensemble de fichiers à un groupe afin que plusieurs utilisateurs puissent être ajoutés facilement pour appliquer toutes ces autorisations en une seule fois?
Jikku Jose
2
Cela a résolu mes problèmes de lien de brassage, merci.
Keith Tyler
Me semble toujours un peu dangereux d'avoir un répertoire sensible tel que le /usr/local/bingroupe inscriptible, en particulier. dans un environnement multi-utilisateurs. Est-ce vraiment la manière "officielle" de brasser?
corwin.amber
67

Pour ceux qui recherchent ce /usr/local/sbinn'est pas une erreur d'écriture:

MISE À JOUR: Cela pourrait être /usr/local/someOtherFolderNamepar exemple /usr/local/include. Il vous suffit de créer ce dossier avec:

  • sudo mkdir someOtherFolderName

Créez d'abord le sbindossier, notez que cela nécessite des sudoprivilèges

  • cd /usr/local

  • sudo mkdir sbin

  • sudo chown -R $(whoami) $(brew --prefix)/*

  • brew link yourPackageName

gokcand
la source
6
Cela a fonctionné pour moi
Robin
J'ai également dû ajouter le répertoire à mon ~ / .bash_profile:PATH=$PATH:/usr/local/sbin
Julien
Après des heures de recherche, c'est la seule chose qui a fonctionné pour moi. Je suis sur High Sierra.
ItsJoeTurner
34

J'ai trouvé pour ma configuration particulière que les commandes suivantes fonctionnaient

brew doctor

Et puis cela m'a montré où étaient mes erreurs, puis cette commande légèrement différente du commentaire ci-dessus.

sudo chown -R $(whoami) /usr/local/opt
kinnth
la source
2
Merci pour la suggestion évidente. J'ai tendance à oublierbrew doctor
Antony
1
Cela a résolu le problème ici
khaosdoctor
brew doctorest bon.
AechoLiu
travaillé comme un charme, merci
hexley
15

J'ai trouvé le même problème, nous pouvons le résoudre en trois étapes: -

Étape 1

sudo chown -R $(whoami) $(brew --prefix)/*

Étape 2

brew doctor

Étape 3

brew prune

Si vous rencontrez toujours un problème de liaison, disons pour mysql, écrivez simplement

brew link mysql

Cela fonctionnera.

Harry_pb
la source
1
a travaillé pour moi pour rabbitmq
Omar
Quel est le but de «l'étape 1»?
Conrad C
1
brew doctor thumbs up! N'a pas fait de pruneau, mais a installé d'autres paquets manquants et cela a fonctionné pour mongodb.
Chenlu
L'appel de `` brew prune '' est désactivé. Utilisez plutôt le «nettoyage de l'infusion».
hanumanDev
12

Pour ceux qui rencontrent ce problème (accordé 4 ans après la publication de ce message) lors de l'exécution de Mac OS High Sierra - les étapes décrites ici ont résolu le problème pour moi. Décrit essentiellement la désinstallation et la réinstallation de l'infusion.

https://medium.com/@mrkdsgn/brew-error-on-macos-high-sierra-check-you-have-permission-to-write-to-usr-local-e8bd1c6a22d4

Après avoir exécuté ces étapes, a brew link fonctionné comme un charme!

Eron Salling
la source
J'ai trouvé que cela fonctionnait pour moi (sans la commande de vidage initiale): github.com/Homebrew/brew/issues/3285#issuecomment-334976806
vr_driver
Je vous remercie! J'ai essayé la meilleure réponse de Harry, pas de chance - j'ai essayé ça, et ça a fonctionné comme un charme!
Joe
A travaillé pour moi, merci!
zen
9

Pour moi, la solution était de courir brew update.

Alors, FAITES D'ABORD.

Cela pourrait être une pratique normale pour les personnes familières avec les homebrews, mais je ne suis pas de ces personnes.

Edit: j'ai découvert que je devais mettre à jour en exécutant brew doctorcomme suggéré par la réponse de @ kinnth à cette même question.

Un flux de travail de dépannage général pourrait ressembler à ceci: 1. exécuter brew update 2. si cela n'aide pas à s'exécuter brew doctoret suivre ses instructions 3. si cela n'aide pas à vérifier le débordement de la pile

FragmentalStew
la source
1
Cela a tout réglé pour moi et vaut bien la peine de le faire avant toute autre chose.
Rob Evans
Tout ce que fait le docteur de brassage est de souligner que j'ai des fûts non aimés dans ma cave ... donc cela ne résout rien au problème d'OP
AlxVallejo
@AlxVallejo C'est ce que j'ai fait pour résoudre un problème que j'avais lorsque je recevais une erreur presque identique à OP. Le message que vous avez reçu de Brew Doctor me semble être un problème différent. Le flux de travail de «1. exécuter la mise à jour de l'infusion 2. si cela n'aide pas à exécuter le docteur de l'infusion et suivre ses instructions 3. si cela n'aide pas à vérifier le débordement de la pile» s'applique probablement toujours.
FragmentalStew
6

En faisant un nœud de lien de brassage, j'ai également eu les problèmes suivants:

Erreur: le lien symbolique n'a pas pu inclure / node / usr / local / include n'est pas accessible en écriture.

Liaison /usr/local/Cellar/node/9.3.0 ... Erreur: autorisation refusée @ dir_s_mkdir - / usr / local / lib

Pour résoudre ce qui précède, allez dans / usr / local / et vérifiez la disponibilité des dossiers «include» et «lib», si ces dossiers ne sont pas disponibles, créez-les manuellement.

Et exécutez à nouveau le nœud d'installation de brew

Wasantha Wijayaratna
la source
5

En effet, l'utilisateur actuel n'est pas autorisé à écrire dans ce chemin. Ainsi, pour modifier les autorisations r / w (lecture / écriture), vous pouvez soit utiliser 1. terminal, soit 2. Fenêtre graphique "Get Info".

1. Utilisation du terminal

Google comment utiliser les commandes chmod / chown (changement de mode / changement de propriétaire) à partir du terminal

2. Utilisation graphique de «Get Info»

Vous pouvez cliquer avec le bouton droit sur le dossier / fichier dont vous souhaitez modifier les autorisations, puis ouvrir Obtenir des informations qui vous montrera une fenêtre comme ci-dessous au bas de laquelle vous pouvez facilement modifier les autorisations r / w: entrez la description de l'image ici

N'oubliez pas de modifier l'autorisation en "lecture seule" après votre travail temporaire, si possible

Hasaan Ali
la source
utilisez brew doctor - il identifiera correctement les dossiers (système) qui doivent être réparés.
johndpope
2

Mon problème était

Error: Could not symlink share/man/man7/ABORT.7
/usr/local/share/man/man7 is not writable.

chownn'a pas aidé, mais j'ai suivi les brew doctorconseils de course et cet avertissement m'a aidé:

Warning: Broken symlinks were found. Remove them with `brew prune`:
/usr/local/share/man/man3/* 

Après brew prunetout a bien fonctionné!

Pavel Druzhinin
la source
Génial. Travaille pour moi.
Bagusflyer
1

Pour ceux qui ne sont pas familiers:

sudo chown -R YOUR_COMPUTER_USER_NAME PATH_OF_FILE
Justin
la source
0

Si vous allez dans le dossier du Finder, faites un clic droit et sélectionnez "Obtenir des informations", vous pouvez aller dans la section "Partage et autorisations" pour le dossier et autoriser "Lecture et écriture" à "tout le monde"

C'est ce que je fais pour que les liens symboliques passent avec cette erreur. L'infusion semble également réinitialiser les autorisations sur le dossier également comme si vous n'aviez rien modifié

Carl Lippert
la source
0

Si vous avez déjà un répertoire /usr/localpour le package que vous installez, vous pouvez essayer de supprimer ce répertoire.

Dans mon cas, j'avais précédemment installé le package que j'essayais d'installer sans utiliser d'infusion, puis l'avais désinstallé. Il restait un répertoire /usr/local/<my_package>/de cette installation précédente. J'ai supprimé ce dossier ( sudo rm -rf /usr/local/<my_package>/) et après cela, l'étape de lien de brassage a réussi.

Samuel Peter
la source