Błędy instalacji w Homebrew

112

Próba zainstalowania rvm i ruby ​​1.9.2

Zainstalowałem już homebrew i git, ale nie mogłem uzyskać pełnych aktualizacji, ponieważ ciągle otrzymywałem błędy dotyczące uprawnień. Ponowna instalacja systemu Snow Leopard i naprawione uprawnienia.

Teraz to się dzieje ...

$ brew zainstaluj wget

Błąd: nie można pisać do / usr / local / Cellar

Ibrahim
źródło
stackoverflow.com/questions/4804169/… należy oznaczyć jako zaakceptowaną odpowiedź - obawiam się, że odwiedzający, którzy nie widzą, że na to pytanie nie ma odpowiedzi, przejdą dalej
dmo

Odpowiedzi:

274

sudo chown -R $USER /usr/local

Będziesz musiał przyznać sobie prawo własności do /usr/local/używania tej linii właśnie tam. Musiałem to zrobić sam po użyciu rubinowej jednowierszowej strony u góry oficjalnej dokumentacji, aby zainstalować Homebrew. U mnie zadziałało jak urok. To powinien być jedyny raz, kiedy będziesz potrzebować sudoHomebrew.

Nie jestem pewien, czy robi to rubinowa jedna linijka. Jeśli tak, wtedy coś innego w moim systemie przejęło kontrolę /usr/local.

Edycja : Całkowicie to przegapiłem, ale @samvermette nie (zobacz odpowiedzi na moją odpowiedź): jeśli uruchomisz to polecenie powyżej i masz coś zainstalowanego przez homebrew, co wymaga specjalnych uprawnień użytkownika, na przykład mysql, upewnij się, że przywróciłeś te uprawnienia (jak powyższe polecenie zapewnia rekurencyjną własność wszystkiego, co jest w /usr/localtobie ( $USER). W przypadku mysql jest to…

sudo chown -RL mysql:mysql /usr/local/mysql/data

Ben Kreeger
źródło
16
Uwaga : to polecenie usunie własność / usr / local / mysql / data z mysqlużytkownika. W moim przypadku uniemożliwiło to uruchomienie mysql. Napraw to za pomocą:sudo chown -RL mysql:mysql /usr/local/mysql/data
samvermette
24
Uniknąłem problemu z mysql, używając, sudo chown -R $USER /usr/local/Cellarponieważ /usr/local/już miałem odpowiednie uprawnienia
Parker
1
Niestety, użytkownicy przychodzą i odchodzą… być może pewnego dnia Ibrahim wróci i zaznaczy to. Może. (Prawdopodobnie nie.)
Ben Kreeger
4
Nie podoba mi się ta odpowiedź. Zakłada, że ​​tylko jeden użytkownik kiedykolwiek korzysta z systemu i powinien posiadać wszystko / usr / local, mimo że pytanie dotyczy tylko homebrew. Czy napar nie działa z systemami wielu użytkowników? To niedbała odpowiedź, nawet jeśli działa. Ponadto nie wyjaśnia, w jaki sposób użytkownik mógł napotkać tę sytuację. Podpowiedź - zainstalowałem HomeBrew korzystając z kanonicznych instrukcji, a następnie przywróciłem z kopii zapasowej TimeMachine (na inny komputer). Podejrzewam, że to przywrócenie zmieniło własność pliku.
Jason R. Coombs
1
Zgadzam się z @ JasonR.Coombs; ludzie nie powinni używać tego niechlujnego rozwiązania bez zrozumienia konsekwencji praktycznych i bezpieczeństwa. Każde oprogramowanie w / usr / local może teraz zostać nadpisane przez wszystko, co działa pod twoim użytkownikiem, otwierając lukę w zabezpieczeniach. Jest całkowicie możliwe, że schrzanisz coś innego (oprócz MySQL), wykonując na ślepo pierwszą komendę chown, po czym będzie za późno na zidentyfikowanie i naprawienie wszystkiego, co mogłeś właśnie schrzanić.
okradł
41

Miałem ten problem po uaktualnieniu do Mavericks, a ta strona była pierwszym wynikiem wyszukiwania podczas wyszukiwania w Google komunikatu o błędzie. Kontynuowałem wyszukiwanie i znalazłem tę odpowiedź na przepełnieniu stosu.com . Mówiąc zwięźle, jest to:

sudo chmod a+w /usr/local/Cellar

To rozwiązało problem, a ponieważ zmieniało tylko uprawnienia do określonej ścieżki, o której mowa w komunikacie o błędzie, wydawało się mało prawdopodobne, aby miało negatywne skutki uboczne w przypadku innych instalacji.

Umieszczam tę odpowiedź tutaj dla każdego, kto może znaleźć tę stronę jako pierwszą, tak jak ja. Jednak kredyt powinien trafić do jdi .

Nathan
źródło
2
Czy jest to uważane za niepewne, ponieważ każdy może teraz pisać do / usr / local / Cellar?
David Welch,
Ta odpowiedź nie działa w przypadku pakietów, które wymagają dostępu do innych folderów (takich jak /usr/local/bin).
Jason R. Coombs
11

Możesz zezwolić tylko administratorom na pisanie do /usr/local/?

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

Od tego momentu każdy użytkownik należący do grupy Admin będzie mógł instalować nowe zależności.

swilgosz
źródło
Wygląda na lepsze rozwiązanie dla komputerów z wieloma administratorami (chociaż mój katalog / usr / local / lib wymagał również g + x, aby aspell działał).
James Snook
1
Aby uniknąć błędu „The brew link” nie zakończył się pomyślnie ”, możesz również zastosować to, co jest w tym wątku , a mianowicie sudo chgrp -R admin /usr/local/DDDD+ sudo chmod -R g+w /usr/local/DDDDgdzie DDDD to bin , share , Library / LinkedKegs , opt
superk
1
Dzięki za odpowiedź, musiałem użyć "sudo", więc jeśli to polecenie nie działa, spróbuj poprzedzić je sudo
MQoder
5

Na High Sierra potrzebujesz następującego polecenia, ponieważ chown nie będzie działać:

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

Połączyć:

https://github.com/Homebrew/brew/issues/3228

Metodij Zdravkin
źródło
2

odinstaluj i ponownie zainstaluj HomeBrew, który załatwi sprawę

Ricardo Marin
źródło
1

Proponuję upewnić się, że aktualny użytkownik jest członkiem grupy, która jest właścicielem / usr / local. Domyślam się, że ta grupa jest wheel. Aby stać się członkiem tej grupy:

$ sudo dscl . append /Groups/wheel GroupMembership $USER

Chociaż coś w rodzaju nieeleganckiego młotka, ma zamierzony skutek - umożliwia dostęp do przedmiotów, /usr/localktóre są przeznaczone tylko do użytku (odczytu / zapisu) przez członków z wyższym poziomem uprawnień . To podejście ma zalety drugiego z powyższych, ponieważ korzysta z członkostwa w grupach, umożliwiając wielu (autoryzowanym) użytkownikom systemu korzystanie z homebrew.

Jason R. Coombs
źródło
0

Jak zainstalowałeś Homebrew? Ich oficjalne instrukcje instalacji obejmują uruchomienie skryptu ruby. To powinno załatwić kwestie związane z pozwoleniami.

Jeśli nie chcesz uruchamiać skryptu, na tej stronie znajduje się sekcja „Instalowanie w / usr / local dla programistów”, która wyjaśnia zmiany w uprawnieniach wymaganych dla katalogu / usr / local.

jhuebsch
źródło
Użyłem skryptu i został on zainstalowany, ale nadal miał problemy z aktualizacją. Przeniosłem dane użytkownika na nowy laptop. Musiałem zrobić kilka obejść z github b / c, skrypt początkowo nie działał.
Ibrahim
-3

EDYCJA : Jak wspomniano w komentarzach, używanie sudo z homebrew jest złym pomysłem, więc nie używaj następującej odpowiedzi!


Możesz również zapobiec temu błędowi, jeśli wykonasz polecenie za pomocą sudo:

$ sudo brew install wget

Ale uważaj na używanie, sudoponieważ możesz popełnić wiele błędów.

Pascal
źródło
To podejście zawodzi w przypadku późnych wersji homebrew, które uniemożliwiają wywoływanie jako root (przez sudo).
Jason R. Coombs