Homebrew El Capitan

Apple released yesterday, September 30th, the new version of OS X called El Capitan. I upgraded today my both machines (iMac and MacBook Pro), and there is one issue with Homebrew, when it is installed on default location on /usr/local.

Homebrew el capitan

This is caused by a change in Apple's security features, called System Integrity Protection, or SIP for short. Basically SIP prevents you from writing to various system locations (e.g. /usr/local), even if you are root.

There is a workaround in Homebrew's docs, but I suggest not to run it as it is said there. This is because there may be some other files for non-Homebrew installed software, like something for F-Secure, and I really don't want to change the ownership of those files and directories.

Instead I did the following:

May need to upgrade XQuartz to latest version Related Articles. Homebrew; Install RVM on Mac; Troubleshooting.

  1. To see, if I was affected by this issue in the first place, I ran the command brew doctor which basically told, that yes, I was affected.
  2. As a next step, I changed the ownership of the directory /usr/local by running sudo chown $(whoami):admin /usr/local. Note! Not recursively with switch -R.
  3. Then I rerun brew doctor. In case of my elderly iMac, all was clear, and Homebrew was up and running again.
  4. In case of my MacBook Pro, I needed to run the same for directory /usr/local/share/man/man8 with sudo chown $(whoami):admin /usr/local/share/man/man8. After this, brew doctor gave all clear, and I was able to run Homebrew again.
Homebrew El Capitan
  1. I just upgraded to El Capitan, and when I tried updating brew I got the following error: $ brew update Error: The /usr/local directory is not writable. Even if this directory was writable when you installed Homebrew, other software may change permissions on this directory.
  2. It appears that El Capitan's new security system, 'System Integrity Protection', removes libdvdcss. After disabling SIP, simply reinstall libdvdcss and you're good to go. You might try moving it to /usr/local/lib instead. That's specifically not protected by SIP.
Capitan

By the way, this is probably necessary to do after every single OS X update in the future, see Apple's dev docs for more.1

Why /usr/local in the first place? Since it is the default location for Homebrew, and I did not know better several years ago. Read more from Hacker News.

Hope this helps, happy brewing!

El Capitan High School

  1. Update after the release of 10.11.1 on October 21st 2015: The update process did not change the directory permissions or ownership on /usr/local. Phew.