问题
I have uninstalled and installed Homebrew 3 times now because it seems to never allow me to install anything as it denies me permissions at the end of most installations.
As an example I will post this libjpeg download scenario that I\'m currently facing.
I try to install libjpeg and get:
$ 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\' results in
Error: Permission denied - /usr/local/opt/jpeg
Here is what my brew doctor reads
$ 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
This permission issue has been making it impossible to use brew on anything and I would really appreciate any suggestions.
回答1:
I was able to solve the problem by using chown
on the folder:
sudo chown -R "$USER":admin /usr/local
Also you'll (most probably) have to do the same on /Library/Caches/Homebrew
:
sudo chown -R "$USER":admin /Library/Caches/Homebrew
Apparently I had used sudo
before in a way that altered my folder permission on /usr/local
,
from here on forward all installations with brew have proven to be successful.
This answer comes courtesy of gitHub's homebrew issue tracker
回答2:
New command for users on macOS High Sierra as it is not possible to chown
on /usr/local
:
sudo chown -R $(whoami) $(brew --prefix)/*
reference: Can't chown /usr/local in High Sierra
回答3:
As a first option to whomever lands here like I did, follow whatever this suggests you to do:
brew doctor
It's the safest path, and amongst other things, it suggested me to:
sudo chown -R $(whoami) /usr/local
which solved that permissions issue.
The OP did just that but apparently didn't get the above suggestion; you might, and it's always better to start there, and only then look for non trivial solutions if it didn't help.
回答4:
If you're on OSX High Sierra, /usr/local
can no longer be chown
'd. You can use:
sudo chown -R $(whoami) $(brew --prefix)/*
回答5:
I had this issue ..
A working solution is to change ownership of /usr/local
to current user instead of root
by:
sudo chown -R $(whoami):admin /usr/local
But really this is not a proper way. Mainly if your machine is a server or multiple-user.
My suggestion is to change the ownership as above and do whatever you want to implement with Brew .. ( update, install ... etc ) then reset ownership back to root as:
sudo chown -R root:admin /usr/local
Thats would solve the issue and keep ownership set in proper set.
回答6:
I did not have the /usr/local/Frameworks
folder, so this fixed it for me
sudo mkdir -p /usr/local/Frameworks
sudo chown -R $(whoami) /usr/local/Frameworks
The first line creates a new Frameworks folder for homebrew (brew) to use. The second line gives that folder your current user permissions, which are sufficient.
I have OSX High Sierra
回答7:
Command from top-voted answer not work for me.
It got output:
chown: /usr/{my_username}dmin: illegal user name
This command works fine (group for /usr/local was admin
already):
sudo chown -R $USER /usr/local
回答8:
If you would like a slightly more targeted approach than the blanket chown -R
, you may find this fix-homebrew script useful:
#!/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.
Instead of doing a chmod
to your user, it gives the admin
group (to which you presumably belong) write access to the specific directories in /usr/local
that homebrew uses. It also tells you exactly what it intends to do before doing it.
回答9:
I didn't want to muck around with folder permissions yet so I did the following:
brew doctor
brew upgrade
brew cleanup
I was then able to continue installing my other brew formula successfully.
回答10:
In my case the /usr/local/Frameworks didn't even exist, so I did:
sudo mkdir /usr/local/Frameworks
sudo chown -R $(whoami) /usr/local/Frameworks
And then everything worked as expected.
回答11:
This solved the issue fore me.
sudo chown -R "$USER":admin /Users/$USER/Library/Caches/Homebrew
sudo chown -R "$USER":admin /usr/local
回答12:
I resolved my issue with these commands:
sudo mkdir /usr/local/Cellar
sudo mkdir /usr/local/opt
sudo chown -R $(whoami) /usr/local/Cellar
sudo chown -R $(whoami) /usr/local/opt
回答13:
All of these suggestions may work. In the latest version of brew doctor, better suggestions were made though.
Firstly - fix the mess you have probably already made of /usr/local
by running this in the command line:
sudo chown -R root:wheel /usr/local
Then take ownership of the paths that should be specifically for this user:
sudo chown -R $(whoami) /usr/local/lib /usr/local/sbin /usr/local/var /usr/local/Frameworks /usr/local/lib/pkgconfig /usr/local/share/locale
All of this information is available if you run sudo brew update
and then read all of the warnings and errors you will run into...
回答14:
For a multiuser Mac, this worked for me:
sudo chown -R $(whoami):admin $(brew --prefix)/*
回答15:
For me, it worked after
brew doctor
Change permission commands resulted in another error
chown: /usr/local: Operation not permitted
回答16:
There's a killer script on github that fixes perms on /usr/local and brew directories to be accessible by anyone who is a member of the 'admin' group.
https://gist.github.com/jaibeee/9a4ea6aa9d428bc77925
This is a better solution than the chosen answer, since if you chown the /usr/local/___ directories to $USER, then you break any other admin users of homebrew on that machine.
Here are the guts of the script at the time I posted this:
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
回答17:
Actually it's really simple, execute this command:
brew doctor
And it will tell you what to do, to fix permission issues, for example in my case:
This was the problem:
Warning: The following directories are not writable by your user:
/usr/local/share/man/man5
/usr/local/share/man/man7
And this was the solution:
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
回答18:
cd /usr/local && sudo chown -R $(whoami) bin etc include lib sbin share var opt Cellar Frameworks
回答19:
In my case, I has having problems removing and reinstalling SaltStack.
After running:
ls -lah /usr/local/Cellar/salt/
I noticed that the group owner was "staff". (BTW, I'm running macOS Mojave version 10.14.3.) The staff group could be related to my workplace configuration, but I don't really know. Regardless, I preserved the group to prevent myself from breaking anything further.
I then ran:
sudo chown -R "$USER":staff /usr/local/Cellar/salt/
After that, I was successfully able to remove it with this command (not as root):
brew uninstall --force salt
回答20:
On MacOS Mojave, I did not have permission to chown
the /usr/local folder either (sudo chown -R "$USER":admin /usr/local
).
sudo chown -R "$USER":admin /usr/local/*
did work for me however, altering the permissions of everything within the local folder.
Hopefully this will help others with the same issue.
回答21:
If you don't have the latest Homebrew: I "fixed" this in the past by forcing Homebrew to run as root, which could only be done by changing the ownership of the Homebrew executables to root. At some point, they removed this feature.
And I know they'll give lots of warnings saying it shouldn't run as root, but c'mon, it doesn't work properly otherwise.
回答22:
I tried everything on this page, I ended up using this solution:
brew uninstall --force brew-cask; brew untap $tap_name; brew update; brew cleanup; brew cask cleanup;
My situation was similar to the OP, however my issue was specifically caused by running sudo with brew cask, and then getting my password incorrect. After this, I was stuck with permissions preventing the installation.
回答23:
To resolve errors for Brew permissions on folder run
brew prune
This will resolve the issues & we don't have to chown any directories.
回答24:
try also executing this command
sudo chmod +t /tmp
来源:https://stackoverflow.com/questions/16432071/how-to-fix-homebrew-permissions