OS X El Capitan で Homebrew を使う方法 (2016年6月更新)

OS X El Capitan では System Integrity Protection (SIP) (rootless とも呼ばれる) という機能が導入され, /usr/System といった重要なディレクトリへの書き込みを制限します. 通常 /usr/local にインストールされる Homebrew もこの影響を受けるため, これを回避する方法を紹介します.

2016/9 追記: macOS Sierra で Homebrew を使う方法

概要

対応方法は Homebrew の公式ドキュメント (削除済み) で紹介されています. Homebrew をデフォルトの /usr/local 以外にインストールしている場合は特に対応は必要ありません.

WWDC 2015 では /usr は SIP の対象になるが, /usr/local は開発者が使用できるようになっていると紹介されました. しかし, OS X をアップデートする度に /usr/local のパーミッションが root:wheel restricted になってしまうようで, アップデートの度に修正が必要です. ただし, El Capitan で Homebrew を利用するためにははじめに一度だけ /usr/local のパーミッションを修正する必要があります.

対応

/usr/local が既に存在する場合

Homebrew をすでにインストールしている場合はこちらに該当します. /usr/local のパーミッションを変更すれば OK です.

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

/usr/local が存在しない場合

OS X 10.11.1 に含まれる com.apple.pkg.SystemIntegrityProtectionConfig.14U2076 のアップデートによって SIP を無効化しなくても /usr/local のディレクトリを作成できるようになったようです. 以下のコマンドで /usr/local を作成して適切なパーミッションを設定します.

sudo mkdir /usr/local && sudo chflags norestricted /usr/local && sudo chown -R $(whoami):admin /usr/local

上記の方法がうまくいかない場合は, 以下の手順に従って一度 SIP を無効化して試してみて下さい.

SIP の無効化

OS X を終了し Command + R を押下しながら起動してリカバリーモードに入ります. csrutil disable を実行して SIP を無効化します.

パーミッションの設定

OS X を通常起動し, /usr/local の作成とパーミッションの設定を行います.

sudo mkdir /usr/local && sudo chflags norestricted /usr/local && sudo chown -R $(whoami):admin /usr/local

SIP の有効化

再度 OS X を終了し Command + R を押下しながら起動してリカバリーモードに入ります. csrutil enable を実行して SIP を有効化します.

更新履歴

  • 2016/3/20 最新の情報に更新
  • 2016/6/14 macOS Sierra について追記

参考

  • El Capitan & Homebrew (この記事は公式資料をもとに作成したものです. 削除済みのドキュメントのため古いコミットを参照しています. 公式資料のライセンスはこちらです.)