今作っているアプリがライブラリなども使っていなくて、特に意識しなかったんだけど
最近OSを EL CAPITAN にアップデートしました
ついでに、ライブラリ使おうと思って、cocoaPodsを入れてみた。
その時にrootlessではまったのでメモ
CocoaPodsとは?
iosアプリのライブラリ管理ツールです。
npmやjspmやらそんな位置づけですね。
rootlessとは?
[管理者権限を持つユーザー(rootなど)であっても、Appleが定める特定の重要なファイルにはアクセス出来ない]
EL CAPITAN で導入されたセキュリティ強化によるものだそうです。
対象ディレクトリは以下のコマンドで確認できます。
$cat /System/Library/Sandbox/rootless.conf
上記対象ディレクトリに書き込みを行おうとすると
”Operation not permitted"
メッセージが出てきて実行できませんでした。
cocoaPodsのインストール
通常の手順通り、以下のコマンドを実行しました。
sudo gem update --system
sudo gem install cocoapods
sudo gem update --system
を実行した段階で早速
”Operation not permitted"のメッセージが出てました
rootlessの無効化
権限変更などの手法もあるかもしれませんが、
あまり設定を変えると思わぬとこに影響しそうなので
以下の手順を試しました。
- rootless無効化
- cocoaPodsインストール
- rootless有効化
無効化する手法を調べたところ2パターンあるそうです。
- コマンドで対応
- リカバリーモードでrootlessを無効設定にする
コマンドで対応
簡単そうだったので、まずこちらを試してみました。
$sudo nvram boot-args=“rootless=0”
上記コマンドの後、PC再起動
そのあと状態を $csrutil status
で確認したところ
System Integrity Protection status: enabled (Custom Configuration).
のままだったので、この方法だと自分の環境ではうまくいきませんでした。
リカバリーモードでrootlessを無効設定にする
ちょっと手順はめんどくさいですが以下の手順を試します。
-
command + R
を押しながらマシンを再起動 -
OS X ユーティリティ画面が表示される
- TimeMachine バックアップから復元
- OS X を再インストール
- ヘルプ情報をオンラインで取得
- ディスク・・・
とか出てきて、ちょっと緊張しますが、落ち着いて次の作業を
- ツールバーから[ユーティリティ] - [ターミナル]でターミナルを起動
-
$csrutil disable
Succesfully ・・・が表示される - ターミナルを閉じ、通常モードで再起動
PCが上がってきたら、ターミナルで以下を確認する
$csrutil status System Integrity Protection status: disabled (Custom Configuration).
これでrootlessが無効になっているハズ
再度cocoapodsのインストールを開始
$sudo gem update --system
'sudo gem install cocoapods
正常にインストールできました。
リカバリーモードでrootlessを有効設定にする
必要な設定を、終えたのでrootlessの設定を有効化します
無効化設定と同じ手順で $csrutil disable
を $csrutil enable
にするだけ
再起動したら,ターミナルから
$csrutil status System Integrity Protection status: enabled (Custom Configuration).
になっている事を確認しておきましょう。
まとめ
今回の対応はEl Capitanから発生するものなので、
もしOS アップデートをまだしていなければ、アップデート前にインストールしておく方が
楽だと思います。()brewとかも多分エラーになると思うので)
思わぬところで時間使ってしまったので、ガンプラ制作が少し遅れそうです(ToT)