Homebrew: impossibile eseguire il collegamento simbolico, / usr / local / bin non è scrivibile [chiuso]


361

Durante l'installazione tig, HomeBrewvengono visualizzati i seguenti problemi durante l'installazione di una dipendenza:

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

3
Questo non appartiene a stackowerflow.com, piuttosto a superuser.com o askdifferent.com
Ondra Žižka

Risposte:


582

Dopo la risposta di Alex sono stato in grado di risolvere questo problema; sembra che questo sia un problema non specifico dei pacchetti installati ma delle autorizzazioni delle homebrewcartelle.

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

Per alcuni pacchetti, potrebbe anche essere necessario eseguire questa operazione /usr/local/shareo /usr/local/opt:

sudo chown -R `whoami`:admin /usr/local/share
sudo chown -R `whoami`:admin /usr/local/opt

25
Riscoprire tutto / usr / local / bin per l'uso corrente non crea problemi al sistema o ad altri utenti?
Don Giulio,

10
sudo chown -R Whoami non :admin /usr/local/binsarebbe equivalente al comando nella risposta, senza la necessità di sostituirlo yourusenamecon il tuo vero nome utente?
Jason Swett,

5
Ho dovuto anche chown usr/local/optricorsivamente. Ha funzionato dopo.
atripes

5
Sul mio Mac (10.9.5) i permessi di /usr/local/bin(e amici) sembrano per ripristinare drwxr-xr-x+e root wheeltutti i giorni. Devo riconfigurare i permanenti ogni volta che voglio brew install. Presumo che il sistema operativo stia ripristinando i permessi per proteggermi? Come posso farlo smettere? (Ho provato chflags uchg …ma ciò impedisce l'installazione di brew.)
Quinn Comendant l'

1
Ho aggiunto il mio account al gruppo "ruota". Questo mi permette di "sudo chmod -R g + w / usr / local" - questo permette ai membri del gruppo "wheel" di scrivere nelle cartelle. Sembra più sicuro che cambiare il proprietario di queste cartelle sensibili in un account meno sicuro rispetto a root.
Michael Krebs,

220

Invece di eseguire qualsiasi comando particolare, consiglierei di eseguire brew doctore prendere sul serio tutti gli avvisi. Potrebbero esserci altri problemi a cui sei bloccato che potrebbero non essere catturati in questa domanda.

Inoltre, poiché la birra viene aggiornata con il tempo, determinati comandi possono o meno rimanere validi. brew doctor, tuttavia, ti assicurerà di essere aggiornato sulla risoluzione dei problemi.


9
Non posso credere che la tua risposta sia meno popolare. È certamente più prudente delle ipotesi sopra espresse.
Robert of Fairfax,

34
brew doctornon risolverà il problema, te ne parlerà solo e quando prendi il consiglio del medico, brew dice che non può farlo. Questa non è una soluzione
Keith Tyler,

8
Forse qualcuno l'ha migliorato. Ora brew doctor mi suggerisce di eseguire un cmd simile alla risposta più popolare, e dopo aver fatto il link simbolico brew funziona. Sono su un mac, quindi vedremo quanto dura. :-)
Joshua Richardson,

2
Questo è stato molto utile grazie. Risolto il problema con alcune altre directory speciali per evitare il suggerimento di cui sopra.
SwimBike

6
brew doctor ha fornito il problema EXACT e ha fornito anche la soluzione manuale!
netrox,

74

Le altre risposte sono corrette, per quanto vanno, ma non rispondono al motivo per cui questo problema potrebbe verificarsi e come affrontare quella causa principale.

Causa

Esistono due possibili cause a questo problema:

  1. L'installazione homebrew è stata eseguita con un utente diverso da quello attualmente in uso. Homebrew si aspetta che solo l'utente che lo ha installato originariamente vorrebbe mai usarlo.
  2. Hai installato un software che scrive in / usr / local senza usare brew. Questa è la causa brew doctorsuggerisce, se lo esegui.

Soluzione

Homebrew multiutente

Se disponi di più account utente e desideri che più di uno di essi sia in grado di utilizzare brew, devi eseguire alcuni passaggi, altrimenti dovrai cambiare costantemente la proprietà della struttura del file Homebrew ogni volta che cambi utente, e non è una grande idea.

Le istruzioni dettagliate sono disponibili online , ma la risposta rapida è questa:

  1. Crea un gruppo chiamato brew:

    1. Apri le preferenze di sistema
    2. Fai clic su Account
    3. Fai clic su "+" (sblocca prima se necessario)
    4. In Nuovo account selezionare Gruppo
    5. inserire la birra
    6. Fai clic su Crea gruppo
  2. Seleziona il gruppo infusore e aggiungi gli account utente che desideri utilizzare ad esso.
  3. cambia la proprietà del gruppo di cartelle / usr / local: sudo chgrp -R brew /usr/local
  4. modificare le autorizzazioni per aggiungere scrivere a / usr / local come gruppo: sudo chmod -R g+w /usr/local
  5. cambia gruppo directory cache homebrew: sudo chgrp -R brew /Library/Caches/Homebrew
  6. modificare le autorizzazioni della directory della cache homebrew: sudo chmod -R g+w /Library/Caches/Homebrew

Homebrew utente singolo

Se non stai cercando di utilizzare più di un utente con Homebrew, brew doctorprobabilmente la soluzione fornita dalle altre risposte, basata sui suggerimenti di, è probabilmente sufficiente:

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

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

Verifica

Dopo questi passaggi, brew doctordovresti segnalare il successo di qualsiasi utente nel gruppo birra , supponendo che tu abbia effettuato il logout e di nuovo per applicare le nuove appartenenze al gruppo (se hai seguito il percorso multiutente). Se hai appena corretto le cose per l'homebrew per singolo utente, non è necessario disconnettersi e riconnettersi poiché nessuna delle appartenenze al gruppo è cambiata.


2
Grazie! Probabilmente dovrei leggere di più sui gruppi di utenti unix. Sono totalmente all'oscuro di come funzioni per digerire abbastanza bene il ragionamento. Ma sembra molto sensato, grazie per il puntatore!
Jikku Jose,

1
i gruppi unix sono più semplici di quanto si possa presumere: ogni file ha le autorizzazioni di lettura, scrittura ed esecuzione disponibili per "l'utente" e il "gruppo" che possiede quel file e per "altri". Se si imposta il gruppo che possiede un file o una cartella e si aggiungono le autorizzazioni di scrittura al "gruppo" per quella cartella, qualsiasi utente in quel gruppo può scrivere nella cartella. Non c'è davvero altro. non è così complesso come le autorizzazioni in Windows.
scalpellino

1
Quindi è un modo semplice per associare il sistema di autorizzazioni di una serie di file a un gruppo in modo che più utenti possano essere aggiunti facilmente per applicare tutte quelle autorizzazioni in una sola volta?
Jikku Jose,

2
Ciò ha risolto i miei problemi con il link della birra, grazie.
Keith Tyler,

Mi sembra ancora un po 'pericoloso avere una directory sensibile come /usr/local/binscrivibile in gruppo, esp. in un ambiente multiutente. È davvero questa la birra "ufficiale"?
corwin.amber,

67

Per coloro che stanno cercando /usr/local/sbinnon è un errore scrivibile:

AGGIORNAMENTO: Potrebbe essere /usr/local/someOtherFolderNamead es /usr/local/include. Devi solo creare quella cartella con:

  • sudo mkdir someOtherFolderName

Innanzitutto creare la sbincartella, si noti che ciò richiede sudoprivilegi

  • cd /usr/local

  • sudo mkdir sbin

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

  • brew link yourPackageName


6
Questo ha funzionato per me
Robin

Avevo anche bisogno di aggiungere la directory al mio ~ / .bash_profile:PATH=$PATH:/usr/local/sbin
Julien

Dopo ore di ricerche, questa è l'unica cosa che ha funzionato per me. Sono su High Sierra.
ItsJoeTurner,

34

Ho trovato per la mia configurazione particolare i seguenti comandi ha funzionato

brew doctor

E poi questo mi ha mostrato dove erano i miei errori, e quindi questo comando leggermente diverso dal commento sopra.

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

2
Grazie per l'evidente suggerimento. Tendo a dimenticarebrew doctor
Antony,

1
Questo ha risolto il problema qui
khaosdoctor,

brew doctorè buono.
AechoLiu,

ha funzionato come un incantesimo, grazie
hexley

15

Ho riscontrato lo stesso problema, possiamo risolvere in tre passaggi: -

Passo 1

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

Passo 2

brew doctor

Passaggio 3

brew prune

Se hai ancora problemi di collegamento, diciamo per mysql, basta scrivere

brew link mysql

Questo funzionerà.


1
ha lavorato per me per rabbitmq
Omar il

Qual è lo scopo del "Passaggio 1"?
Conrad C

1
birra dottore pollice in alto! Non ha preparato la prugna, ma ha installato altri pacchetti mancanti e ha funzionato per mongodb.
Chenlu,

La chiamata di "brew prune" è disabilitata. Utilizzare invece 'brew cleanup'.
hanumanDev

12

Per coloro che si imbattono in questo problema (concesso 4 anni dopo la pubblicazione di questo post) durante l'esecuzione di Mac OS High Sierra - i passaggi descritti qui hanno risolto il problema per me. Fondamentalmente delinea solo la disinstallazione e la reinstallazione di brew.

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

Dopo aver eseguito questi passaggi, ha brew link funzionato come un fascino!


Ho trovato che ha funzionato per me (senza il comando di dump iniziale): github.com/Homebrew/brew/issues/3285#issuecomment-334976806
vr_driver

Grazie! Ho provato la risposta migliore di Harry, senza fortuna - ho provato questo, e ha funzionato come un incantesimo!
Joe,

Ha funzionato per me, grazie!
Zen,

9

Per me la soluzione era quella di correre brew update.

Quindi, FARE QUESTO PRIMO.

Questa potrebbe essere una pratica normale per le persone che hanno familiarità con l'homebrew, ma io non sono una di quelle persone.

Modifica: ho scoperto che dovevo aggiornare eseguendo brew doctorcome suggerito dalla risposta di @ kinnth a questa stessa domanda.

Un flusso di lavoro generale per la risoluzione dei problemi potrebbe essere simile al seguente: 1. esegui brew update 2. se ciò non aiuta a funzionare brew doctore segui le sue indicazioni 3. se ciò non aiuta a controllare l'overflow dello stack


1
Ciò ha risolto tutto per me e vale la pena fare prima di ogni altra cosa.
Rob Evans,

Tutto il dottore della birra fa notare che ho barilotti non graditi nella mia cantina ... quindi non fa nulla per risolvere il problema di OP
AlxVallejo

@AlxVallejo Questo è quello che ho fatto per risolvere un problema che avevo quando stavo ricevendo un errore quasi identico a OP. Il messaggio che hai ricevuto da Brew Doctor mi sembra un problema diverso. Il flusso di lavoro di "1. esegui brew update 2. se ciò non aiuta a eseguire brew doctor e segui le sue indicazioni 3. se ciò non aiuta a controllare lo stack overflow" probabilmente si applica comunque.
FragmentalStew

6

Mentre facevo il nodo brew link Inoltre ho avuto anche i seguenti problemi:

Errore: Impossibile collegare simbolicamente include / node / usr / local / include non è scrivibile.

Collegamento /usr/local/Cellar/node/9.3.0 ... Errore: autorizzazione negata @ dir_s_mkdir - / usr / local / lib

Per risolvere quanto sopra basta andare su / usr / local / e verificare la disponibilità delle cartelle 'include' e 'lib', se quelle cartelle non sono disponibili basta crearle manualmente.

Ed eseguire BREW installare nodo di nuovo


5

Questo perché l'utente corrente non è autorizzato a scrivere in quel percorso. Pertanto, per modificare le autorizzazioni di lettura / scrittura (lettura / scrittura) è possibile utilizzare 1. terminale o 2. Finestra "Ottieni informazioni" grafica.

1. Utilizzo del terminale

Google come utilizzare i comandi chmod / chown (cambia modalità / cambia proprietario) dal terminale

2. Utilizzo grafico "Ottieni informazioni"

È possibile fare clic con il tasto destro del mouse sulla cartella / file di cui si desidera modificare le autorizzazioni, quindi aprire Ottieni informazioni che mostrerà una finestra come quella in basso in fondo alla quale è possibile modificare facilmente le autorizzazioni r / w: inserisci qui la descrizione dell'immagine

Ricorda di cambiare l'autorizzazione in "sola lettura" dopo il tuo lavoro temporaneo, se possibile


usa brew doctor: identificherà correttamente le cartelle (di sistema) che devono essere riparate.
johndpope,


2

Il mio problema era

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

chownnon ha aiutato, ma ho seguito i brew doctorconsigli per l' esecuzione e questo avviso mi ha aiutato:

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

Dopo brew prunetutto ha funzionato bene!


Grande. Per me va bene.
Bagusflyer,

1

Per quelli che non hanno familiarità:

sudo chown -R YOUR_COMPUTER_USER_NAME PATH_OF_FILE

0

Se vai alla cartella nel Finder, fai clic con il pulsante destro del mouse e seleziona "Ottieni informazioni", puoi andare alla sezione "Condivisione e autorizzazioni" per la cartella e consentire "Leggi e scrivi" a "tutti"

Questo è quello che faccio per far passare i symlink con questo errore. Inoltre brew sembra reimpostare le autorizzazioni sulla cartella anche come se non avessi modificato nulla


0

Se hai già una directory /usr/localper il pacchetto che stai installando, puoi provare a cancellare questa directory.

Nel mio caso avevo precedentemente installato il pacchetto che stavo cercando di installare senza usare brew, e poi lo avevo disinstallato. Era rimasta una directory /usr/local/<my_package>/dalla precedente installazione. Ho eliminato questa cartella ( sudo rm -rf /usr/local/<my_package>/) e successivamente il passaggio del collegamento brew ha avuto esito positivo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.