簡體   English   中英

如何修復自制軟件權限?

[英]How to fix homebrew permissions?

我現在已經卸載並安裝了 Homebrew 3 次,因為它似乎永遠不允許我安裝任何東西,因為它在大多數安裝結束時拒絕我的權限。

作為示例,我將發布我目前面臨的這個 libjpeg 下載場景。

我嘗試安裝 libjpeg 並得到:

$ 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

'brew link jpeg' 結果

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

這是我的釀造醫生讀到的

$ 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

這個權限問題導致無法在任何東西上使用 brew,我真的很感激任何建議。

我能夠通過在文件夾上使用chown來解決問題:

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

此外,您(很可能)必須對/Library/Caches/Homebrew執行相同的操作:

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

顯然,我之前使用sudo的方式改變了我對/usr/local文件夾權限,從這里開始,所有使用 brew 的安裝都被證明是成功的。

這個答案來自gitHub 的自制問題跟蹤器

macOS High Sierra 上用戶的新命令,因為無法在/usr/local上執行chown

bash/zsh

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

fish

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

參考:無法在 High Sierra 中 chown /usr/local

作為像我一樣登陸這里的人的第一選擇,請遵循以下建議您做的事情:

brew doctor

這是最安全的路徑,除其他外,它建議我:

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

這解決了該權限問題。

OP 就是這樣做的,但顯然沒有得到上述建議; 你可能會,而且最好從那里開始,然后才在沒有幫助的情況下尋找非平凡的解決方案。

如果您使用的是 OSX High Sierra,則不能再chown /usr/local 您可以使用:

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

我沒有/usr/local/Frameworks文件夾,所以這為我修復了

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

第一行創建一個新的 Frameworks 文件夾,供自制程序 (brew) 使用。 第二行為該文件夾提供您當前的用戶權限,這已經足夠了。

使用的命令如下:

mkdir - 創建目錄 [ -p如果存在沒有錯誤,根據需要創建父目錄]

chown - 更改文件所有者和組 [ -R遞歸操作文件和目錄]

whoami - 打印有效用戶 ID

我有 OSX High Sierra

我遇到了這個問題..一個可行的解決方案是通過以下方式將/usr/local所有權更改為當前用戶而不是root

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

但實際上這不是一個正確的方法。 主要是如果您的機器是服務器或多用戶。

我的建議是如上所述更改所有權並執行任何您想使用 Brew 實現的操作 ..(更新、安裝...等),然后將所有權重置回 root 為:

  sudo chown -R root:admin /usr/local

那將解決問題並將所有權設置在適當的集合中。

這在 2022 年的 M1 Mac 和 Monterey 上對我有用

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

我還不想亂搞文件夾權限,所以我做了以下事情:

brew doctor
brew upgrade
brew cleanup

然后我就能夠成功地繼續安裝我的其他 brew 配方。

來自最高投票答案的命令對我不起作用。

它得到了輸出:

chown: /usr/{my_username}dmin: 非法用戶名

此命令工作正常(/usr/local 的組已經是admin ):

sudo chown -R $USER /usr/local

如果你想要一個比一攬子chown -R更有針對性的方法,你可能會發現這個fix-homebrew腳本很有用:

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

它不是對您的用戶執行chmod ,而是授予admin組(您可能屬於該組)對 homebrew 使用的/usr/local中特定目錄的寫訪問權限。 它還可以在執行之前准確地告訴您它打算做什么。

我用這些命令解決了我的問題:

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

在我的情況下, /usr/local/Frameworks 甚至不存在,所以我做了:

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

然后一切都按預期進行。

這解決了我的問題。

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

對於多用戶 Mac,這對我有用:

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

首先,對於 MacOS Catalina,不再允許更改 /usr/local 所有權的基本方法。 例如:

$ sudo chown -R "$USER":wheel /usr/local
Password:
chown: /usr/local: Operation not permitted
$ sudo chown -R "$USER" /usr/local
chown: /usr/local: Operation not permitted
$ sudo chown -R $(whoami) /usr/local
chown: /usr/local: Operation not permitted

因此,不能使用上面的流行答案。 其次,退一步說,如果主要關心的是安裝或升級 Homebrew,而不是想要更改 /usr/local 本身的權限,那么這可能是矯枉過正(就像拿大錘敲釘子一樣)更改 /usr/local 的權限。 它會影響您的整個機器,其他軟件也可能正在使用 /usr/local。 例如,我在 /usr/local 中有與 maven 和 mySQL 相關的文件。

更精確的解決方案是按照Homebrew GitHub 站點上提供的安裝 Homebrew 的說明進行操作,即

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

它在 /usr/local 內安裝 Homebrew 而不改變 /usr/local 本身的所有權。 相反,Cellar、Caskroom、Frameworks、Homebrew 等安裝在 /usr/local 中。 在我看來,這似乎是一個更優雅、更精確的解決方案。

所有這些建議都可能奏效。 在最新版本的 brew doctor 中,雖然提出了更好的建議。

首先 - 通過在命令行中運行它來修復您可能已經對/usr/local造成的混亂:

sudo chown -R root:wheel /usr/local

然后獲得應該專門用於該用戶的路徑的所有權:

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

如果您運行sudo brew update然后閱讀您將遇到的所有警告和錯誤,則所有這些信息都可用...

對我來說,它在

brew doctor

更改權限命令導致另一個錯誤

chown: /usr/local: Operation not permitted

在 MacOS Mojave 上,我也無權chown /usr/local 文件夾( sudo chown -R "$USER":admin /usr/local )。

sudo chown -R "$USER":admin /usr/local/*做不過我的工作,改變了本地文件夾內的所有的權限。

希望這會幫助其他人解決同樣的問題。

其實很簡單,執行這個命令: brew doctor

它會告訴你該怎么做,解決權限問題,例如在我的情況下:

這就是問題所在:

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

這就是解決方案:

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

github 上有一個殺手級腳本,它修復了 /usr/local 和 brew 目錄上的 perms,以便“admin”組的任何成員都可以訪問。

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

這是比選擇的答案更好的解決方案,因為如果您將 /usr/local/___ 目錄 chown 給 $USER,那么您會破壞該機器上自制軟件的任何其他管理員用戶。

以下是我發布此腳本時的腳本內容:

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

我在 Catalina 上,但出現此錯誤:

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

我只需要 chown Homebrew目錄

sudo chown -R "$USER":admin /usr/local/Homebrew
cd /usr/local && sudo chown -R $(whoami) bin etc include lib sbin share var opt Cellar Frameworks

使用以下命令卸載 brew 並重新安裝,以確保與 brew github 的鏈接和對本地文件夾的相關權限正常工作:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install )"

這工作得很好。 沒有自己的權限,只需重新安裝 Homebrew 就可以了!

來源: https : //gist.github.com/irazasyed/7732946#gistcomment-2298740

如果你沒有最新的 Homebrew:我過去通過強制 Homebrew 以 root 身份運行來“修復”這個問題,這只能通過將 Homebrew 可執行文件的所有權更改為 root 來完成。 在某些時候,他們刪除了此功能。

而且我知道他們會發出很多警告,說它不應該以 root 身份運行,但是來吧,否則它就無法正常工作。

我嘗試了此頁面上的所有內容,最終使用了此解決方案:

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

我的情況與 OP 類似,但是我的問題是由使用 brew cask 運行 sudo 導致的,然后我的密碼不正確。 在此之后,我遇到了阻止安裝的權限。

解決文件夾運行的 Brew 權限錯誤

brew prune

這將解決問題,我們不必修改任何目錄。

就我而言,我在刪除和重新安裝 SaltStack 時遇到了問題。

運行后:

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

我注意到組所有者是“員工”。 (順便說一句,我運行的是 macOS Mojave 版本 10.14.3。)員工組可能與我的工作場所配置有關,但我真的不知道。 無論如何,我保留了該組以防止自己進一步破壞。

然后我跑了:

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

之后,我成功地使用此命令(不是以 root 身份)將其刪除:

brew uninstall --force salt

我使用了這兩個命令並保存了我的問題

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

如果您的 mac 上碰巧有多個帳戶,那么您當前的帳戶可能屬於不同的用戶組作為最初擁有/usr/local的主帳戶,這意味着上述解決方案都不起作用。

您可以通過嘗試ls -la /usr/local來檢查,並查看哪些用戶和組有權在目錄上寫入。 就我而言,它是root wheel 它可能是root admin

我通過使用以下命令將當前用戶添加到主帳戶具有的組來解決它。

sudo dseditgroup -o edit -a $(whoami) -t user admin
sudo dseditgroup -o edit -a $(whoami) -t user wheel

在那里之后它就像一個魅力。 希望它可以幫助那里的人。

這對我有用:

sudo chown -R "$USER":admin /usr/local/Cellar/*
brew cleanup

在 Mac M1 上sudo chown -R "$USER" "$(brew --prefix)/"

也嘗試執行此命令

須藤 chmod +t /tmp

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM