Làm thế nào để sửa quyền homebrew?


601

Tôi đã gỡ cài đặt và cài đặt Homebrew 3 lần vì dường như nó không bao giờ cho phép tôi cài đặt bất cứ thứ gì vì nó từ chối quyền của tôi ở cuối hầu hết các cài đặt.

Để làm ví dụ tôi sẽ đăng kịch bản tải xuống libjpeg này mà tôi hiện đang phải đối mặt.

Tôi cố gắng cài đặt libjpeg và nhận:

$ 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

Kết quả 'ủ liên kết jpeg' trong

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

Đây là những gì bác sĩ bia của tôi đọc

$ 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

Vấn đề cấp phép này đã làm cho không thể sử dụng bia trên bất cứ thứ gì và tôi thực sự sẽ đánh giá cao bất kỳ đề xuất nào.

Câu trả lời:


955

Tôi đã có thể giải quyết vấn đề bằng cách sử dụng chowntrên thư mục:

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

Ngoài ra, bạn sẽ (hầu hết) có thể phải làm như vậy trên /Library/Caches/Homebrew:

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

Rõ ràng tôi đã sử dụng sudotrước đây theo cách thay đổi quyền thư mục của tôi /usr/local, từ đây trở đi tất cả các cài đặt với brew đã được chứng minh là thành công.

Câu trả lời này được cung cấp bởi công cụ theo dõi vấn đề homebrew của gitHub


14
Cám ơn vì cái này. Tôi cũng cần phải chạy sudo chown -R $USER:admin /Library/Caches/Homebrewđể thoát khỏi các vấn đề quyền của tôi.
alexpls

64
thay đổi quyền sở hữu / usr / local thành một người dùng cụ thể không phải là một giải pháp. Đó là một hack khủng khiếp và một cách giải quyết nếu bạn có một hệ thống người dùng. Nhưng sau đó, bạn cũng có thể vừa mới bắt đầu -R / $ USER: $ USER
fijiaaron

17
@fijiaaron Vậy đâu là giải pháp tốt hơn?
juil

47
chowning / usr / local: giải pháp hoàn toàn điên rồ. Trân trọng hy vọng đây không thực sự là dòng đảng.
John Clements

15
Đối với những người phàn nàn rằng giải pháp này sẽ gây rối cho các hệ thống nhiều người dùng (@fijiaaron, @JohnClements, @hmijail, @Alex) - đây chính xác là lý do tại sao quyền của nhóm bị đảo ngược. Trên macOS, adminnhóm là mọi người dùng quản trị viên (là mọi người dùng tài khoản người dùng macOS có thể sudo, trong số những người khác), do đó, bằng cách chạy chown -R …:admincùng với chmod -R g+w /usr/local(như được đề xuất bởi @AndreaDeGaetano), bạn sẽ không làm gì sai ở đây và không có vấn đề gì với những người dùng khác cũng đang sử dụng /usr/local/ brew.
Slipp D. Thompson

479

Lệnh mới cho người dùng trên macOS High Sierra vì không thể chownbật /usr/local:

bash/zsh:

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

fish:

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

Tham khảo: Không thể chown / usr / local ở High Sierra


Vâng @Jeffpowrs Tôi đang gặp vấn đề tương tự trong macOS 10.13.2
andrewwong97

4
Tôi sử dụng vỏ cá và phải sử dụng như sau: sudo chown -R (whoami) (brew --prefix)/*
Tarellel

2
Liên quan. Đối với những gì tôi đã cố gắng làm, tôi đã phải làm sudo mkdir /usr/local/Frameworkstheo, theo lệnh chown như xuất hiện trong câu trả lời này.
Dan Burton

1
Cảm ơn. Điều này tiết kiệm trong ngày.
Aashutosh Rathi

2
THIÊN CHÚA CHÚA BẠN, MÔI GIỚI!
Mendigo dos Byte

285

Là một lựa chọn đầu tiên cho bất kỳ ai đến đây như tôi đã làm, hãy làm theo bất cứ điều gì gợi ý bạn làm:

brew doctor

Đó là con đường an toàn nhất, và trong số những thứ khác, nó gợi ý cho tôi:

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

đã giải quyết vấn đề quyền đó.

OP đã làm điều đó nhưng dường như không nhận được gợi ý trên; bạn có thể, và luôn luôn tốt hơn để bắt đầu từ đó, và chỉ sau đó tìm kiếm các giải pháp không tầm thường nếu nó không giúp ích.


4
Xác nhận điều này khắc phục mọi sự cố mà bạn có thể gặp phải với quyền kể từ ngày 05/2017
Anton Babushkin

3
Cũng có thể xác nhận rằng điều này giải quyết mọi vấn đề về quyền và sau đó có thể nâng cấp phiên bản nút của tôi một cách dễ dàng - 06/06/2018 - Cảm ơn
Richlewis

2
bác sĩ bia sẽ không tìm thấy tất cả các vấn đề. Vấn đề mà tôi gặp phải là / usr / local / Framework không tồn tại và tạo ra điều đó và đặt quyền sở hữu trên đó đã khắc phục nó. bản thân bia đã không nhận thấy đó là một vấn đề.
Joe W

2
Tôi chown: /usr/local: Operation not permittedkhông làm việc kể từ ngày 5 tháng 7 năm 2019
tavalendo

1
Gợi ý với bác sĩ có thể là một trong những gợi ý tốt nhất ở đây, bởi vì nó khắc phục (hoặc giúp khắc phục) các vấn đề khác nhau bất cứ lúc nào!
ecth

82

Nếu bạn đang dùng OSX High Sierra, /usr/localkhông còn có thể là chown'd. Bạn có thể dùng:

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


Cảm ơn. Cứu tôi!
Matthias

3
Tôi thấy rằng $ (brew --prefix) chỉ cho tôi / usr / local, mà High Sierra khẳng định tôi không thể thay đổi quyền thành ... nhưng vì brew muốn có quyền "/ usr / local / Frameworks" trong ví dụ của tôi , Tôi đã có thể sử dụng "$ (brew --prefix) / Frameworks" và "brew link python @ 2" hoạt động tốt với tôi sau đó.
alpheus

Tất cả người dùng Mac có nhiều người dùng, hãy sử dụng cái này!
Erik Nguyễn

Cảm ơn tôi về OSX High Sierra và rõ ràng chúng tôi không thể truy cập / user / local nữa như trong các phiên bản trước của MAC OSX. Điều này làm việc cho tôi!
Jose Mhlanga

29

Tôi không có /usr/local/Frameworksthư mục, vì vậy điều này đã sửa nó cho tôi

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

Dòng đầu tiên tạo một thư mục Framework mới để homebrew (brew) sử dụng. Dòng thứ hai cung cấp cho thư mục đó quyền người dùng hiện tại của bạn, đủ.

Các lệnh được sử dụng như sau:

mkdir - tạo thư mục [ -p không có lỗi nếu có, tạo thư mục mẹ khi cần]

chown - thay đổi chủ sở hữu tệp và nhóm [ -R hoạt động trên các tệp và thư mục đệ quy]

whoami - in userid hiệu quả

Tôi có OSX High Sierra


27

Tôi đã có vấn đề này .. Một giải pháp hiệu quả là thay đổi quyền sở hữu đối /usr/local với người dùng hiện tại thay vì root:

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

Nhưng thực sự đây không phải là một cách thích hợp. Chủ yếu là nếu máy của bạn là một máy chủ hoặc nhiều người dùng.

Đề nghị của tôi là thay đổi quyền sở hữu như trên và làm bất cứ điều gì bạn muốn thực hiện với Brew .. (cập nhật, cài đặt ... vv) sau đó đặt lại quyền sở hữu trở lại root như:

  sudo chown -R root:admin /usr/local

Đó sẽ là giải quyết vấn đề và giữ quyền sở hữu được thiết lập đúng.


4
hmm .. và khi chúng tôi nhận được "hoạt động không được phép" cho chown?
Ewoks

@Ewoks là trên MacOs?
Maher Abuthraa

1
Vâng, Sierra High: S
Ewoks


15

Lệnh từ câu trả lời bình chọn hàng đầu không làm việc cho tôi.

Nó có đầu ra:

chown: / usr / {my_username} dmin: tên người dùng bất hợp pháp

Lệnh này hoạt động tốt (nhóm cho / usr / local đã admincó):

sudo chown -R $USER /usr/local

5
Thêm một số trích dẫnsudo chown -R "$USER":admin /usr/local
orkoden

2
@skywinder Câu trả lời của bạn đã làm việc cho tôi. Không phải sử dụng dấu ngoặc kép trên $ USER.
Anna S

sudo chown -R "$ USER": admin / usr / local nơi bạn thay thế $ USER bằng tên của bạn.
lft93ryt

điều này dẫn đếnError: Running Homebrew as root is extremely dangerous and no longer supported. As Homebrew does not drop privileges on installation you would be giving all build scripts full access to your system.
thesummersign

3
chown: /usr/local: Operation not permitted
Máy tính của Krishnadas

13

Tôi chưa muốn làm quen với quyền truy cập thư mục nên tôi đã làm như sau:

brew doctor
brew upgrade
brew cleanup

Sau đó tôi đã có thể tiếp tục cài đặt công thức pha chế khác của mình thành công.


1
Điều này làm việc tốt cho các vấn đề của tôi. Tôi đã tự cấp quyền cho mình. \
Komsomol

12

Nếu bạn muốn một cách tiếp cận được nhắm mục tiêu hơn một chút so với chăn chown -R, bạn có thể thấy tập lệnh nàyfix-homebrew hữu ích:

#!/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.

Thay vì thực hiện chmodvới người dùng của bạn, nó cung cấp cho adminnhóm (mà bạn có lẽ thuộc về) ghi quyền truy cập vào các thư mục cụ thể trong /usr/localđó sử dụng homebrew. Nó cũng cho bạn biết chính xác những gì nó dự định làm trước khi làm nó.


1
Lưu ý rằng một số đường dẫn dường như đã thay đổi một chút, do đó bạn có thể phải chgrp và chmod thêm một vài thư mục nhưng tôi vẫn thích điều này hơn mọi thứ trong cách tiếp cận người dùng của bạn!
ashirley

8

Trong trường hợp của tôi, / usr / local / Framework thậm chí không tồn tại, vì vậy tôi đã làm:

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

Và sau đó mọi thứ hoạt động như mong đợi.


1
Điều này đã khắc phục vấn đề của tôi và nó không được phát hiện là một vấn đề của bác sĩ bia.
Joe W

7

Điều này giải quyết vấn đề trước mắt tôi.

sudo chown -R "$USER":admin /Users/$USER/Library/Caches/Homebrew
sudo chown -R "$USER":admin /usr/local

2
Điều này giải quyết vấn đề này nhưng tôi sẽ hoàn tác bước này sau khi liên kết thành công. Chỉ vì lý do bảo mật.
ora-600

7

Tôi đã giải quyết vấn đề của mình bằng các lệnh này:

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

1
Cảm ơn! Đó là điều duy nhất có ích trong Mac OS 10.13.4trường hợp của tôi, tôi phải tạo ra sudo mkdir /usr/local/Frameworkssudo chown -R $(whoami) /usr/local/Frameworksđể có thể liên kết con trăn!
A1m

6

Đối với máy Mac nhiều người dùng, điều này hiệu quả với tôi:

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

5

Tất cả những gợi ý này có thể hoạt động. Trong phiên bản mới nhất của bác sĩ bia, mặc dù đề xuất tốt hơn đã được thực hiện.

Thứ nhất - sửa lỗi lộn xộn mà bạn có thể đã thực hiện /usr/localbằng cách chạy mã này trong dòng lệnh:

sudo chown -R root:wheel /usr/local

Sau đó, sở hữu các đường dẫn nên dành riêng cho người dùng này:

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

Tất cả thông tin này có sẵn nếu bạn chạy sudo brew updatevà sau đó đọc tất cả các cảnh báo và lỗi bạn sẽ gặp phải ...


Đặt quyền sở hữu mọi thứ trong / usr / local thành root: wheel là nguy hiểm và không cần thiết. Đường dẫn có liên quan là / usr / local / Cellar
ben26941

1
bạn không cần phải chạm vào các quyền đó, trừ khi bạn có .. nói đã đi trước và sở hữu chúng cho người dùng phát triển của bạn - hoặc trong trường hợp brew đã xử lý chúng vì nó đã cài đặt với sudo. brew tự đề nghị sửa lỗi này trong trường hợp đó - mà tôi nghĩ là ít nguy hiểm hơn nhiều so với việc để lại mớ hỗn độn phía sau.
Max Dercum

1
Bạn có thể cung cấp một liên kết đến các khuyến nghị bia sau đó?
ben26941

1
Câu trả lời tốt nhất. Nó hoạt động sau khi tôi thực hiện Di chuyển từ máy Mac khác.
BuffMcBigHuge

4

Đối với tôi, nó đã làm việc sau

brew doctor

Thay đổi lệnh cho phép dẫn đến một lỗi khác

chown: /usr/local: Operation not permitted


3

Có một tập lệnh giết người trên github để sửa các thư mục perm / on / local và brew có thể truy cập được bởi bất kỳ ai là thành viên của nhóm 'quản trị viên'.

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

Đây là một giải pháp tốt hơn câu trả lời đã chọn, vì nếu bạn chọn các thư mục / usr / local / ___ thành $ USER, thì bạn sẽ phá vỡ mọi người dùng quản trị viên khác của homebrew trên máy đó.

Dưới đây là sự can đảm của kịch bản tại thời điểm tôi đăng bài này:

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

2

Trên MacOS Mojave, tôi cũng không có quyền đối với chownthư mục / usr / local (sudo chown -R "$USER":admin /usr/local ).

sudo chown -R "$USER":admin /usr/local/*đã làm việc cho tôi tuy nhiên, thay đổi quyền của mọi thứ trong thư mục cục bộ.

Hy vọng điều này sẽ giúp những người khác có cùng vấn đề.


1

Trên thực tế nó rất đơn giản, thực hiện lệnh này: brew doctor

Và nó sẽ cho bạn biết phải làm gì, để khắc phục các sự cố về quyền, ví dụ như trong trường hợp của tôi:

Đây là vấn đề:

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

Và đây là giải pháp:

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
cd /usr/local && sudo chown -R $(whoami) bin etc include lib sbin share var opt Cellar Frameworks

1

Trong trường hợp của tôi, tôi gặp vấn đề khi gỡ bỏ và cài đặt lại SaltStack.

Sau khi chạy:

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

Tôi nhận thấy rằng chủ nhóm là "nhân viên". (BTW, tôi đang chạy macOS Mojave phiên bản 10.14.3.) Nhóm nhân viên có thể liên quan đến cấu hình nơi làm việc của tôi, nhưng tôi thực sự không biết. Bất kể, tôi bảo vệ nhóm để ngăn mình khỏi phá vỡ bất cứ điều gì hơn nữa.

Sau đó tôi chạy:

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

Sau đó, tôi đã có thể loại bỏ nó thành công bằng lệnh này (không phải là root):

brew uninstall --force salt

0

Nếu bạn không có Homebrew mới nhất: Tôi đã "sửa" điều này trong quá khứ bằng cách buộc Homebrew chạy bằng root, điều này chỉ có thể được thực hiện bằng cách thay đổi quyền sở hữu của các tệp thực thi Homebrew thành root. Tại một số điểm, họ đã loại bỏ tính năng này.

Và tôi biết họ sẽ đưa ra rất nhiều cảnh báo nói rằng nó không nên chạy bằng root, nhưng xin chào, nó không hoạt động bình thường.


0

Tôi đã thử mọi thứ trên trang này, cuối cùng tôi đã sử dụng giải pháp này:

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

Tình huống của tôi tương tự như OP, tuy nhiên vấn đề của tôi đặc biệt là do chạy sudo với thùng bia, và sau đó nhận được mật khẩu không chính xác. Sau này, tôi đã bị kẹt với quyền ngăn chặn cài đặt.


0

Để khắc phục lỗi cho quyền Bia khi chạy thư mục

brew prune

Điều này sẽ giải quyết các vấn đề & chúng tôi không phải truy cập bất kỳ thư mục nào.


1
việc này không còn hiệu quả nữa, bạn phải làm ngay bây giờbrew cleanup --prune-prefix
Sliq

0

Tôi đang ở Catalina và tôi đã gặp lỗi này:

touch: /usr/local/Homebrew/.git/FETCH_HEAD: Permission denied
touch: /usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask/.git/FETCH_HEAD: Permission denied
fatal: Unable to create '/usr/local/Homebrew/.git/index.lock': Permission denied
fatal: Unable to create '/usr/local/Homebrew/.git/index.lock': Permission denied

Tôi chỉ cần chown Homebrewthư mục

sudo chown -R "$USER":admin /usr/local/Homebrew

0

Tôi đã sử dụng hai lệnh này và lưu vấn đề của tôi

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

sudo chown -R $(whoami) /usr/local/etc/bash_completion.d /usr/local/lib/python3.7/site-packages /usr/local/share/aclocal /usr/local/share/locale /usr/local/share/man/man7 /usr/local/share/man/man8 /usr/local/share/zsh /usr/local/share/zsh/site-functions /usr/local/var/homebrew/locks

-5

thử cũng thực hiện lệnh này

sudo chmod + t / tmp

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.