Saturday, June 11, 2011

Mac OS X で Java のアップデート

背景

JPCERT/CC からの 注意喚起にて、Java SE のクリティカルパッチアップデートがあることを知る。Java SE 6 Update 26 にアップデートする必要があるようだ。


環境

現在の環境は、以下の通りです。

  • Mac OS X version 10.6.7


現状確認

JPCERT/CC によると、以下のページで Java のバージョンの確認が出来るようだ。

Java のバージョンの確認


実際に確認してみたところ、以下のページが表示された。



Mac をお使いの場合: お使いの Mac に最新バージョンの Java がインストールされているかどうかを確認するには、アップルメニューのソフトウェアアップデート機能を使用します。

とのことだが、ソフトウェアアップデート機能を使用しても何の更新も起こらない。

iTerm2 から以下のコマンドを入力すると、古いバージョン(1.6.0_24)のままであることが分かる。

$ java -version



対策

以下の自分のブログの記事を参考にして、"Java for 10.6 Update 5" をインストールした。

自分のための日記: Eclipse で rt.jar のソースを見る方法


インストールすると、/Library/Java/JavaVirtualMachines に 1.6.0_24-b07-334.jdk の他に 1.6.0_26-b03-377.jdk がインストールされていることが分かる。


ついでだから、上記の自分のブログを参考に、Eclipse で使う JRE を 1.6.0_26 の JRE に変更しておいた。


因みに、1.6.0_24-b07-334.jdk は必要なさそうというか、以下の記事を参考にすると「旧バージョンの Java は削除することを推奨する」とのことだったので削除した。

JDK および JRE 6 Update 26 が公開されています - 特に重要なセキュリティ欠陥・ウイルス情報


1.6.0_24-b07-334.jdk を削除するとどうでしょう。java -version とコマンドを入力すると、バージョンが 1.6.0_26 となっていることを確認することが出来ました。



感想

あれ?おかしくない?java コマンドは /usr/bin/java にあり、/usr/bin/java は /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java へのシムリンクになっている。

$ which java
/usr/bin/java
$ ls -l /usr/bin/java
(略)java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java

/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java の親フォルダが /Library/Java/JavaVirtualMachines/1.6.0_26-b03-377.jdk/Contents/Home/bin へのシムリンクになっているのかと思ったが、そうではないようだ。

「現状確認」でも確認したように、Mac の場合、「最新バージョンの Java がインストールされているかどうかを確認するには、アップルメニューのソフトウェアアップデート機能を使用」するしかないようなので、ソフトウェアアップデートによって Java を最新の状態にすることでデフォルトの Java が最新の状態になるのかと思っていた。しかし、開発版の Java を入れることで Java が最新になった。

自分でも何がなんだか分からない。

Mac OS X 上にある java コマンドを探すと

$ find / -name java -type f 2>/dev/null
/Library/Java/JavaVirtualMachines/1.6.0_26-b03-377.jdk/Contents/Home/bin/java
/System/Library/Frameworks/JavaVM.framework/Versions/A/Commands/java
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/java
/usr/share/file/magic/java

と表示される。それぞれのコマンドで java -version を実行してみた。

  1. /Library/Java/JavaVirtualMachines/1.6.0_26-b03-377.jdk/Contents/Home/bin/java
  2. /System/Library/Frameworks/JavaVM.framework/Versions/A/Commands/java
  3. /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/java
  4. /usr/share/file/magic/java
とする。
  1. java version "1.6.0_26"
  2. java version "1.6.0_26"
  3. java version "1.6.0_24"
  4. zsh: permission denied: /usr/share/file/magic/java
4. は、file コマンドが使う magicfile と呼ばれるデータベースのようだ。 【参考】 2005年4月 | 今日の一行 | column | OSS-Web

という訳で、システムにインストールされている Java で 1.6.0_26 のものは、

  • /Library/Java/JavaVirtualMachines/1.6.0_26-b03-377.jdk/Contents/Home/bin/java
  • /System/Library/Frameworks/JavaVM.framework/Versions/A/Commands/java

で、1.6.0_24 のものは、

  • /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/java

だった。

「アップルメニューのソフトウェアアップデート機能を使用」することで、/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/java のバージョンが 1.6.0_26 になるのではないか、と信じている。

No comments:

Post a Comment