10月1日に待望の正式版がリリースされた「OS X El Capitan」。システムの安全性を高めるために、地味ながら重要な機能「System Integrity Protection」(SIP)が導入されています。
SIP有効化では、rootユーザーも、/usr(ただし/usr/localは除外)、/System、/binといった、OSにとって重要なフォルダに書き込むことができず、不正なファイル改変を防ぐことが可能となっているのです。
一方、Macのパッケージシステム「Homebrew」は、デフォルトで/usr/localをインストール先として使っているため、一見SIPに無関係のようにも思えますが、いくつか注意しないといけない落とし穴が存在しています。
OS X El CapitanでHomebrewを使うための注意点が
「El Capitan & Homebrew」にて、まとめられています(Hacker News)。
1. /usr/localが存在する場合
OS X El Capitanをクリーンインストールあるいはアップグレードした後に、/usr/localが存在する場合、パーミッションを以下のコマンドで一般ユーザーが書き込めるように変更する必要があります。
sudo chown $(whoami):admin /usr/local && sudo chown -R $(whoami):admin /usr/local
これは簡単です。
2. /usr/localが存在しない場合
なんらかの理由で/usr/localが存在しない場合、かなり厄介です。SIPを一度無効にして/usr/localを作成後、パーミッションを変更し、またSIPを有効に戻す必要があります。
その手順は以下の通りです。
- Command+Rを押しながら起動しリカバリモードで起動
- ターミナルを開き「csrutil disable」を実行(SIPを無効化)
- 再起動
- ターミナルを開き以下のコマンドを実行
sudo mkdir /usr/local && sudo chflags norestricted /usr/local && sudo chown $(whoami):admin /usr/local && sudo chown -R $(whoami):admin /usr/local
- 再度Command+Rを押しながら起動しリカバリモードで起動
- ターミナルを開き「csrutil enable」を実行(SIPを有効化)
- 再起動すると/usr/localに書き込める状態になっているのでHomebrewを普通にインストール
まとめ
/usr/localが存在しさすれば、たいして面倒でないことがわかります(消してしまっても、対処不能というほどではないですが)。/usr/localはHomebrew以外も使うフォルダですので、アップグレード前に/usr/localを削除しないように注意したほうがよさそうです。