何らかの理由で”/usr/local”ディレクトリが無かった場合El CapitanでHomebrewを利用するにはどうすればいいのかという問題についてまとめました。詳細は以下から。
本日リリースされたOS X 10.11 El Capitanですが、El CapitanにはAppleの新しいシステム保護機能 “Rootless”が実装されています。Rootlessは例えrootユーザーであっても/usr, /System, /bin, /sbinにアクセスを許可しないため、「もし、何らかの理由でパッケージマネージャHomebrewで利用する/usr/localが消えた場合、El CapitanでHomebrewを利用するにはどうしたらいいのか?」という話題がHacker Newsで話題になっています。
El Capitan and Homebrew http://t.co/chSTIbEXMo (cmts http://t.co/Emv3D0Lofm)
このケースは既に何人かの開発者の方[1, 2]によって指摘されており、HomebrewのGitHubにはDominyk Tillerさんが”El Capitan & Homebrew”と題したトラブルシューティングが公開されているので、これを元にいくつかのケースをまとめてみました。
El Capitanをクリーンインストール
MacにEl Capitanをクリーンインストールした方は何の問題もありません、Rootlessのため/usrディレクトリにアクセスすることは出来ませんが、インストーラーが”/usr/local”ディレクトリを作成しているので、以下の様にCommand Line Developer ToolsさえインストールすればHomebrewのインストールが行えます。
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
/usr/localが存在する場合
/usr/localが存在し、パーミッションがおかしいだけの場合はsudo chownでオーナーを変更すれば、こちらも問題なくHomebrewが利用できるはずです。
sudo chown $(whoami):admin /usr/local && sudo chown -R $(whoami):admin /usr/local
/usr/localがない
このケースが一番厄介で、上でも述べたようにRootlessが/usr/localディレクトリの作成を許してくれません。そこで一度Macをリカバリーモードで起動し、RootlessをOFFにして”/usr/local”を作成、その後Rootlessを再度ONにするという手順が必要になります。
- Macの電源を切り、[Command + R]キーを押した状態でMacをリカバリーモードで起動
- ユーティリティメニューからターミナルを起動し”csrutil disable”と打ち込んでRootlessをOFFに
- ターミナルおよびOS Xユーティリティを終了し再起動
- 通常の状態でMacが起動したら以下のコマンドを入力し”/usr/local”を作成
- “/usr/local”の作成が確認できたら、再度[Command + R]キーを押した状態でMacをリカバリーモードで起動
- ユーティリティメニューからターミナルを起動し”csrutil enable”と打ち込んでRootlessをONに
- 最後にまたMacへもどって、通常の手順でHomebrewをインストールします
sudo mkdir /usr/local && sudo chflags norestricted /usr/local && sudo chown $(whoami):admin /usr/local && sudo chown -R $(whoami):admin /usr/local
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
多少面倒ですが、Homebrewを利用する方なら問題ないと思いますので、もし/usr/localが無い状態でアップデートしてしまった場合は以上の方法およびGitHubを参考にしてみてください。
関連リンク:
コメント
今、brewで色々インストールしてるけど、/usr/local/が消えるとTimeMachineでも復旧できなさそうで厄介だな・・・
リカバリーモードでRootlessを無効にする方法は覚えておいて損はないね。