macOS Sierra、OS X El Capitan に、Java for OS X を使用して、JDK6 をインストールしてしまった場合、きれいに削除するのが、なかなかに大変だったのでメモ。
環境
- macOS Sierra 10.12
- Java for OS X (これを削除する)
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.12
BuildVersion: 16A323
問題
「何が問題となるのか?」というと、Java for OS X をインストールした際に作成されるシンボリックリンクを変更 (ln -fs
, unlink
, rm
) できなくなってしまう。
問題のシンボリックリンクは以下。
$ ls -al /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
lrwxr-xr-x 1 root wheel 59 1 27 01:03 /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK -> /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents
これがなかなかに消えない。ln
コマンドは通ったように見えて変化せず、unlink
, rm
コマンドに至っては、Permission denied が返ってくる。
原因
調べてみたところ、OS X El Capitan
以降、実装された SIP (System Integrity Protecton) という機能による保護が働いていたのが原因のようでした。
stackexchange でも同じようなことで困っている人がいたので、とても参考になりました。=> delete-unnecessary-files-in-system-library-for-mac-os-x
解決
ここまで分かると、後の対処はそう難しくありません。
以下手順に従って操作します。
- Mac の再起動を開始して、起動前から
⌘
+r
を押し続けておきます。 - macOS ユーティリティが起動するのを確認します。
- メニューから、[ユーティリティ] > [ターミナル] を開きます。
- 開いたターミナルで、
csrutil disable
を入力して実行します。(このコマンドで SIP が無効化されます。) - 実行を確認したら、今度は通常どおりに再起動します。
- 再起動後、再びターミナルを開き、対象のシンボリックリンクを
unlink
したり、リンク先のディレクトリを削除したりします。 - 削除後、切り替えたい JDK のパスなどがあれば改めて、
/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
にシンボリックリンクを張ります。
以上で完了です。
すべての操作を終えたら、念のため再び macOS ユーティリティを起動して、csrutil enable
を実行して、SIP を有効化しておくことをオススメします。
JDK6 をインストールしたい場合
Homebrew でインストールしましょう。
以下コマンドで JDK6 をインストール可能です。
ただし、こちらの方法でも /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
が上書きされてしまう場合があるため、シンボリックリンクのパス確認と、張替えは準備しておいたほうがよいかもしれません。
$ brew cask install java6
$ ls /Library/Java/JavaVirtualMachines/
1.6.0.jdk/ jdk1.7.0_79.jdk/ jdk1.8.0_121.jdk/ jdk1.8.0_91.jdk/
$ ls -al /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
8 lrwxr-xr-x 1 root wheel 59 2 4 20:11 /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK -> /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents
$ sudo unlink \
> /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
$ sudo ln -s \
> /Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents \
> /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK