Homebrew: Nie można dowiązać symbolicznie, / usr / local / bin nie jest zapisywalny [zamknięty]

361

Podczas instalacji tig, HomeBrewwyświetla następujące problemy podczas instalacji zależność:

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
źródło
3
To nie należy do stackowerflow.com, a raczej superuser.com lub askdifferent.com
Ondra Žižka

Odpowiedzi:

582

Po odpowiedzi Alexa mogłem rozwiązać ten problem; wydaje się, że jest to problem niezwiązany z instalowanymi pakietami, ale dotyczy uprawnień homebrewfolderów.

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

W przypadku niektórych pakietów może być konieczne wykonanie tej czynności /usr/local/sharelub /usr/local/opt:

sudo chown -R `whoami`:admin /usr/local/share
sudo chown -R `whoami`:admin /usr/local/opt
Jikku Jose
źródło
25
Czy ponowne połączenie wszystkich / usr / local / bin z bieżącym użyciem nie powoduje żadnych problemów dla systemu lub innych użytkowników?
Don Giulio
10
Czy sudo chown -R whoami nie :admin /usr/local/binbyłoby równoznaczne z poleceniem w odpowiedzi, bez konieczności zastąpienia yourusenamerzeczywistą nazwą użytkownika?
Jason Swett
5
Musiałem też zrezygnować usr/local/optrekursywnie. Po tym zadziałało.
atripes
5
Na moim komputerze Mac (10.9.5) uprawnienia /usr/local/bin(i znajomych) wydają się przywracane do drwxr-xr-x+i root wheelkażdego dnia. Muszę ponownie konfigurować perms za każdym razem, gdy chcę brew install. Zakładam, że system operacyjny resetuje perms, aby mnie chronić? Jak mogę to zatrzymać? (Próbowałem, chflags uchg …ale to uniemożliwia instalację naparu).
Quinn Comendant
1
Dodałem moje konto do grupy „koło”. To pozwala mi na „sudo chmod -R g + w / usr / local” - pozwala to członkom „koła” grupy pisać w folderach. Wydaje się bezpieczniejsze niż zmiana właściciela tych poufnych folderów na mniej bezpieczne konto niż root.
Michael Krebs,
220

Zamiast uruchamiać jakieś konkretne polecenie, zaleciłbym uruchomienie brew doctori poważne potraktowanie wszystkich ostrzeżeń. Mogą występować inne problemy, w które utkniesz, a które mogą nie zostać uwzględnione w tym pytaniu.

Ponadto, gdy napar jest aktualizowany z czasem, niektóre polecenia mogą, ale nie muszą, pozostać ważne. brew doctorzapewni jednak bieżące rozwiązywanie problemów.

zakishaheen
źródło
9
Nie mogę uwierzyć, że twoja odpowiedź jest mniej popularna. Jest to z pewnością bardziej rozważne niż zgadywanie wyrażone powyżej.
Robert z Fairfax
34
brew doctornie rozwiąże problemu, powie ci tylko o tym, a kiedy skorzystasz z porady lekarza, brew mówi, że nie może tego zrobić. To nie jest rozwiązanie
Keith Tyler
8
Może ktoś to poprawił. Teraz lekarz parzenia sugeruje uruchomienie podobnego polecenia cmd do najpopularniejszej odpowiedzi, a po wykonaniu tej czynności dowiązanie symboliczne działa. Jestem na komputerze Mac, więc zobaczymy, jak długo to potrwa. :-)
Joshua Richardson
2
To było bardzo przydatne dzięki. Naprawiono niektóre inne katalogi specjalne, które pokazywały brakującą powyższą sugestię.
SwimBikeRun
6
lekarz parzenia podał DOKŁADNY problem i podał również ręczne rozwiązanie!
netrox 10.07.18
74

Pozostałe odpowiedzi są poprawne, o ile się posuwają, ale nie odpowiadają, dlaczego ten problem może wystąpić i jak rozwiązać ten pierwotny problem.

Przyczyna

Istnieją dwie możliwe przyczyny tego problemu:

  1. Instalacja Homebrew została wykonana z użytkownikiem innym niż ten, z którego obecnie korzystasz. Homebrew oczekuje, że tylko użytkownik, który go pierwotnie zainstalował, będzie chciał z niego skorzystać.
  2. Zainstalowałeś oprogramowanie, które pisze do / usr / local bez użycia brew. Jest to brew doctorsugerowana przyczyna , jeśli ją uruchomisz.

Rozwiązanie

Multiuser Homebrew

Jeśli masz wiele kont użytkowników i chcesz, aby więcej niż jedno z nich mogło korzystać z naparu, musisz wykonać kilka kroków, w przeciwnym razie będziesz musiał stale zmieniać własność struktury plików Homebrew przy każdej zmianie użytkownika, i to nie jest świetny pomysł.

Szczegółowe instrukcje można znaleźć w Internecie , ale szybka odpowiedź jest następująca:

  1. Utwórz grupę o nazwie napar:

    1. Otwórz preferencje systemowe
    2. Kliknij Konta
    3. Kliknij „+” (najpierw odblokuj, jeśli to konieczne)
    4. W obszarze Nowe konto wybierz Grupa
    5. wprowadź napar
    6. Kliknij Utwórz grupę
  2. Wybierz grupę zaparzania i dodaj do niej konta użytkowników, których chcesz używać.
  3. zmień własność grupy folderów / usr / local: sudo chgrp -R brew /usr/local
  4. zmień uprawnienia do dodawania zapisu do / usr / local jako grupy: sudo chmod -R g+w /usr/local
  5. zmień grupę katalogów homebrew cache: sudo chgrp -R brew /Library/Caches/Homebrew
  6. zmień uprawnienia do katalogu pamięci podręcznej homebrew: sudo chmod -R g+w /Library/Caches/Homebrew

Homebrew dla jednego użytkownika

Jeśli nie próbujesz używać więcej niż jednego użytkownika z Homebrew, to rozwiązanie dostarczone przez inne odpowiedzi, oparte na sugestiach brew doctorjest prawdopodobnie wystarczające:

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

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

Weryfikacja

Po wykonaniu tych kroków brew doctorpowinien zgłosić sukces każdego użytkownika w grupie zaparzania , zakładając, że wylogowałeś się i wróciłeś, aby zastosować nowe członkostwo w grupie (jeśli wybrałeś trasę dla wielu użytkowników). Jeśli właśnie poprawiłeś coś dla homebrew dla jednego użytkownika, wylogowanie i ponowne zalogowanie nie powinno być konieczne, ponieważ żadne członkostwo w grupie się nie zmieniło.

rozchodnik
źródło
2
Dzięki! Powinienem chyba przeczytać więcej o grupach użytkowników unix. Nie mam pojęcia, jak to działa, by wystarczająco dobrze przetrawić rozumowanie. Ale to brzmi bardzo rozsądnie, dzięki za wskaźnik!
Jikku Jose,
1
grupy uniksowe są prostsze, niż można się domyślać - każdy plik ma uprawnienia do odczytu, zapisu i wykonywania dostępne dla „użytkownika” i „grupy”, która jest właścicielem tego pliku, oraz dla „innych”. Jeśli ustawisz grupę, która jest właścicielem pliku lub folderu, i dodasz uprawnienia do zapisu do „grupy” dla tego folderu, wówczas każdy użytkownik w tej grupie może pisać do tego folderu. Naprawdę nie ma w tym nic więcej. nie tak skomplikowane jak uprawnienia w systemie Windows.
stonecrusher
1
Czy to łatwy sposób na przyporządkowanie systemu uprawnień zestawu plików do grupy, aby można było łatwo dodać wielu użytkowników i zastosować wszystkie te uprawnienia za jednym razem?
Jikku Jose,
2
To rozwiązało problemy z linkiem do parzenia, dziękuję.
Keith Tyler
Nadal wydaje mi się trochę niebezpieczny mieć wrażliwy katalog, taki jak /usr/local/binzapis grupowy, szczególnie. w środowisku wielu użytkowników. Czy to naprawdę „oficjalny” sposób parzenia?
corwin.amber
67

Dla tych, którzy szukają, /usr/local/sbinnie można zapisać błędu:

AKTUALIZACJA: Może to być /usr/local/someOtherFolderNamenp /usr/local/include. Musisz tylko utworzyć ten folder za pomocą:

  • sudo mkdir someOtherFolderName

Najpierw utwórz sbinfolder, pamiętaj, że wymaga to sudouprawnień

  • cd /usr/local

  • sudo mkdir sbin

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

  • brew link yourPackageName

gokcand
źródło
6
To zadziałało dla mnie
robin
Musiałem także dodać katalog do mojego ~ / .bash_profile:PATH=$PATH:/usr/local/sbin
Julien
Po wielu godzinach poszukiwań jest to jedyna rzecz, która działała dla mnie. Jestem w High Sierra.
ItsJoeTurner
34

Dla mojej konkretnej konfiguracji znalazłem następujące polecenia

brew doctor

A potem pokazało mi to, gdzie były moje błędy, a potem to nieco inne polecenie od powyższego komentarza.

sudo chown -R $(whoami) /usr/local/opt
kinnth
źródło
2
Dziękuję za oczywistą sugestię. Zazwyczaj zapominambrew doctor
Antony
1
To rozwiązało problem tutaj
khaosdoctor
brew doctorjest dobry.
AechoLiu,
działał jak urok, dzięki
hexley
15

Znalazłem ten sam problem, który możemy rozwiązać w trzech krokach:

Krok 1

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

Krok 2

brew doctor

Krok 3

brew prune

Jeśli nadal masz problem z łączeniem, powiedzmy mysql, po prostu napisz

brew link mysql

To zadziała.

Harry_pb
źródło
1
pracował dla mnie dla rabbitmq
Omar
Jaki jest cel „kroku 1”?
Conrad C
1
warzyć lekarza kciuki do góry! Nie robiłem parzenia suszonych śliwek, ale instalowałem inne brakujące pakiety i działało dla mongodb.
Chenlu
Wywołanie „śliwek browarniczych” jest wyłączone. Zamiast tego użyj „oczyszczania parzenia”.
hanumanDev
12

Dla osób napotykających ten problem (przyznanych 4 lata po opublikowaniu tego postu) podczas korzystania z systemu Mac OS High Sierra - kroki opisane tutaj rozwiązały dla mnie problem. Zasadniczo opisuje tylko odinstalowywanie i ponowne instalowanie naparu.

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

Po wykonaniu tych kroków brew link działało jak urok!

Eron Salling
źródło
Okazało się, że zadziałało to dla mnie (bez początkowego polecenia zrzutu): github.com/Homebrew/brew/issues/3285#issuecomment-334976806
vr_driver
Dziękuję Ci! Wypróbowałem najlepszą odpowiedź Harry'ego, bez powodzenia - wypróbowałem to i zadziałało jak urok!
Joe
Pracował dla mnie, dzięki!
zen
9

Dla mnie rozwiązaniem było uruchomienie brew update.

ZRÓB TO PIERWSZE.

To może być normalna praktyka dla osób zaznajomionych z homebrew, ale nie jestem jedną z tych osób.

Edycja: Odkryłem, że muszę zaktualizować, uruchamiając brew doctorzgodnie z sugestią @ kinnth na to samo pytanie.

Ogólny proces rozwiązywania problemów może wyglądać następująco: 1. uruchom brew update 2. jeśli to nie pomoże uruchomić brew doctori postępuj zgodnie z jego instrukcjami 3. jeśli to nie pomoże sprawdzić przepełnienia stosu

FragmentalStew
źródło
1
To naprawiło dla mnie wszystko i jest warte zrobienia, zanim cokolwiek innego.
Rob Evans
Wszystko, co robi lekarz, wskazuje, że nie lubiłem beczek w mojej piwnicy ... więc to nie robi nic, aby rozwiązać problem OP
AlxVallejo
@AlxVallejo To właśnie zrobiłem, aby rozwiązać problem, który miałem, gdy otrzymałem prawie identyczny błąd jak OP. Wiadomość, którą otrzymałeś od Brew Doctor, brzmi dla mnie jak inny problem. Przepływ pracy „1. uruchom aktualizację naparu 2. jeśli to nie pomoże uruchomić naparku lekarza i postępuj zgodnie ze wskazówkami 3. jeśli to nie pomoże sprawdzić przepełnienia stosu” prawdopodobnie nadal obowiązuje.
FragmentalStew
6

Podczas robienia węzła link brew Dodatkowo dostałem również następujące problemy:

Błąd: Nie można zapisać dowiązania symbolicznego / node / usr / local / include.

Łączenie /usr/local/Cellar/node/9.3.0 ... Błąd: Odmowa dostępu @ dir_s_mkdir - / usr / local / lib

Aby rozwiązać powyższe, po prostu przejdź do / usr / local / i sprawdź dostępność folderów „include” i „lib”, jeśli te foldery nie są dostępne, po prostu utwórz je ręcznie.

I bieg piwny zainstalować węzeł ponownie

Wasantha Wijayaratna
źródło
5

Wynika to z faktu, że bieżący użytkownik nie może pisać w tej ścieżce. Tak więc, aby zmienić uprawnienia do odczytu / zapisu, możesz użyć 1. terminalu lub 2. Graficznego okna „Uzyskaj informacje”.

1. Korzystanie z terminala

Google, jak korzystać z poleceń chmod / chown (zmień tryb / zmień właściciela) z terminala

2. Korzystanie z graficznego „Uzyskaj informacje”

Możesz kliknąć prawym przyciskiem myszy folder / plik, którego uprawnienia chcesz zmienić, a następnie otworzyć Pobierz informacje, który pokaże Ci okno jak poniżej, u dołu którego możesz łatwo zmienić uprawnienia r / w: wprowadź opis zdjęcia tutaj

Pamiętaj, aby, jeśli to możliwe, zmienić zezwolenie z powrotem na „tylko do odczytu” po pracy tymczasowej

Hasaan Ali
źródło
użyj brow doctor - poprawnie zidentyfikuje foldery (systemowe), które wymagają naprawy.
johndpope
2

Mój problem był

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

chownnie pomogło, ale zastosowałem się do brew doctorporad i to ostrzeżenie pomogło mi:

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

W końcu brew prunewszystko działało dobrze!

Pavel Druzhinin
źródło
Świetny. Pracuje dla mnie.
Bagusflyer
1

Dla tych, którzy nie są zaznajomieni:

sudo chown -R YOUR_COMPUTER_USER_NAME PATH_OF_FILE
Justin
źródło
0

Jeśli przejdziesz do folderu w wyszukiwarce, kliknij prawym przyciskiem myszy i wybierz „Uzyskaj informacje”, możesz przejść do sekcji „Udostępnianie i uprawnienia” dla folderu i zezwolić na „Odczytywanie i zapisywanie” dla „wszystkich”

To właśnie robię, aby łącza symboliczne przechodziły z tym błędem. Również brew wydaje się resetować uprawnienia do folderu, tak jakbyś niczego nie zmienił

Carl Lippert
źródło
0

Jeśli masz już katalog /usr/localinstalowanego pakietu, możesz spróbować usunąć ten katalog.

W moim przypadku wcześniej zainstalowałem pakiet, który próbowałem zainstalować bez użycia naparu, a następnie go odinstalowałem. /usr/local/<my_package>/Pozostał katalog z poprzedniej instalacji. Usunąłem ten folder ( sudo rm -rf /usr/local/<my_package>/), a następnie krok łącza parzenia powiódł się.

Samuel Peter
źródło