LoginSignup
8
13

More than 5 years have passed since last update.

macOS に Java for OS X をインストールしてしまった場合の後始末

Last updated at Posted at 2017-01-26

macOS Sierra、OS X El Capitan に、Java for OS X を使用して、JDK6 をインストールしてしまった場合、きれいに削除するのが、なかなかに大変だったのでメモ。

環境

$ 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

解決

ここまで分かると、後の対処はそう難しくありません。
以下手順に従って操作します。

  1. Mac の再起動を開始して、起動前から +r を押し続けておきます。
  2. macOS ユーティリティが起動するのを確認します。
  3. メニューから、[ユーティリティ] > [ターミナル] を開きます。
  4. 開いたターミナルで、csrutil disable を入力して実行します。(このコマンドで SIP が無効化されます。)
  5. 実行を確認したら、今度は通常どおりに再起動します。
  6. 再起動後、再びターミナルを開き、対象のシンボリックリンクを unlink したり、リンク先のディレクトリを削除したりします。
  7. 削除後、切り替えたい 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
8
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
13