373
votes

Brew doctor says:

Warning: /usr/local/include isn't writable. This can happen if you "sudo make install" software that isn't managed by Homebrew.

If a brew tries to write a header file to this directory, the install will fail during the link step.

You should probably chown /usr/local/include

I've tried different commands to solve this but I'm still stuck here.

I'm running homebrew on 10.8.2

19
I got a similar error for "/usr/local/lib" in Homebrew 0.9.4 that was also resolved with the solution below.JeremiahLee

19 Answers

734
votes

Take ownership of it and everything in it.

Mac OS High Sierra or newer: (ty to Kirk in the comments below)

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

Previous versions of macos:

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

Then do another

$ brew doctor
118
votes

What worked for me was too

sudo chmod g+w /usr/local
sudo chgrp staff /usr/local
39
votes

What worked for me was

$ sudo chown -R yourname:admin /usr/local/bin
37
votes

The only one that worked for me on El Capitan was:

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

If you are on High Sierra and experiencing this issue, follow the steps below (Note: /usr/local cannot be chown'd in High Sierra):

sudo mkdir /usr/local/include
sudo chown -R $(whoami) $(brew --prefix)/*

Then try linking with brew link. I was experiencing similar issue and none of the solutions above worked for High Sierra. Hope this helps someone.

22
votes

For High Sierra:

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

Then, try your brew commands.

Issue #3285

12
votes

You can alias the command to fix this problem in your .bash_profile and run it every time you encounter it:

At the end of the file ~/.bash_profile, add:

alias fix_brew='sudo chown -R $USER /usr/local/'

And now inside your terminal you can run:

$ fix_brew
12
votes

This worked for me on macOS 10.12

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

I had the problem updating homebrew with the following error:

/usr/local is not writable. You should change the ownership
and permissions of /usr/local back to your user account:
  sudo chown -R $(whoami) /usr/local
8
votes

For some it's going to be:

sudo chown -R JonJames:admin /usr/local/lib

where "lib" is used as opposed to "bin" or "include" or "whatever else"

The Homebrew Warning "should" explain what specifically is not writable and then give you a command syntax for follow, however you will need to use the ":" as opposed to what the Warning mentions which is actually not correct syntax??

7
votes

Work for me

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

$ cd /usr/local/Library && git stash && git clean -d -f
5
votes

Same error on MacOS 10.13

/usr/local/include and /usr/local/ /usr/lib were not created. I manually created and brew link finally worked.

3
votes

You need to create /usr/local/include and /usr/local/lib if they don't exists:

$ sudo mkdir -p /usr/local/include
$ sudo chown -R $USER:admin /usr/local/include
3
votes

What Worked for me, while having I have more than 1 user on my computer.

Using terminal:

  • Running brew doctor
    • Seeing multiple /usr/local/... isn't writable error's
  • Disabling Mac's System Integrity Protection: https://apple.stackexchange.com/a/208481/55628
  • Run the following
  • sudo chown -R $(whoami) /usr/local/*
  • brew doctor && brew upgrade && brew doctor

Running Macbook Pro OSX High Sierra (version 10.13.3.)

EDIT 1:

FYI - Please be Advised this causes an issue with running MySQL on your MAC.

To be able to start my local server, I had to run:

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

After you run this you can start your local MySQL Server.

3
votes
sudo mkdir -p /usr/local/include /usr/local/lib /usr/local/sbin

sudo chown -R $(whoami) /usr/local/include /usr/local/lib /usr/local/sbin

This will create all required directories and give it the correct ownership.

After running these commands check with: brew doctor

This works for Mojave.

2
votes

You need to get control of entire /usr/local to do that you need to do a recursive chown under /usr/local

sudo chown -R YOUR_USERNAME:admin /usr/local/

2
votes

I just want to echo sam9046's modest comment as an alternative and potentially much easier solution that worked in my case: uninstall and install homebrew again from scratch. No sudo commands required.

You can also browse/modify the uninstall script from that link above if you need to ensure it won't affect your previously installed packages. In my case this was just my home machine so I just started over.

2
votes

First you need to create the directory:

sudo mkdir /usr/local/include

Second:

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

I have had this happen in my organization after all our users were bound to active directory (effectively changing the UID from 50x to ######).

Now it is simply a case of changing the ownership of all files where were owned by x to y.

Where 501 is my old numeric user id which is still associated with all the homebrew files.

The old user id can be found using ll /usr/local/Cellar

Now update the ownership sudo find /usr/local -user 501 -exec chown -h $USER {} \;

This way we avoid changing the ownership on files which are not controlled by homebrew or belong to some other system user.

1
votes

Go into the /bin directory and type:

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