お仕事ではOracleがリリースしてるJava SEを使うんですが、Red HatやCentOSで提供されてるOpenJDKのパッケージ構成ってどうなってるんだろう?と思って、CentOS7でちょっと見てみたので、簡単にメモしておきます。
CentOS7 で使えるOpenJDKパッケージ一覧
環境:64bit CentOS7
$ cat /etc/centos-release
CentOS Linux release 7.2.1511 (Core)
※epelリポジトリ導入済み
yum search java
から適当にsortして抜き出した一覧:
java-1.6.0-openjdk-demo.x86_64 : OpenJDK Demos
java-1.6.0-openjdk-devel.x86_64 : OpenJDK Development Environment
java-1.6.0-openjdk-javadoc.x86_64 : OpenJDK API Documentation
java-1.6.0-openjdk-src.x86_64 : OpenJDK Source Bundle
java-1.6.0-openjdk.x86_64 : OpenJDK Runtime Environment
java-1.7.0-openjdk-accessibility.x86_64 : OpenJDK accessibility connector
java-1.7.0-openjdk-demo.x86_64 : OpenJDK Demos
java-1.7.0-openjdk-devel.x86_64 : OpenJDK Development Environment
java-1.7.0-openjdk-headless.x86_64 : The OpenJDK runtime environment without
java-1.7.0-openjdk-javadoc.noarch : OpenJDK API Documentation
java-1.7.0-openjdk-src.x86_64 : OpenJDK Source Bundle
java-1.7.0-openjdk.x86_64 : OpenJDK Runtime Environment
java-1.8.0-openjdk-accessibility-debug.x86_64 : OpenJDK accessibility connector
java-1.8.0-openjdk-accessibility.x86_64 : OpenJDK accessibility connector
java-1.8.0-openjdk-demo-debug.x86_64 : OpenJDK Demos with full debug on
java-1.8.0-openjdk-demo.x86_64 : OpenJDK Demos
java-1.8.0-openjdk-devel-debug.x86_64 : OpenJDK Development Environment with
java-1.8.0-openjdk-devel.x86_64 : OpenJDK Development Environment
java-1.8.0-openjdk-headless-debug.x86_64 : OpenJDK Runtime Environment with full
java-1.8.0-openjdk-headless.x86_64 : OpenJDK Runtime Environment
java-1.8.0-openjdk-javadoc-debug.noarch : OpenJDK API Documentation for packages
java-1.8.0-openjdk-javadoc.noarch : OpenJDK API Documentation
java-1.8.0-openjdk-src-debug.x86_64 : OpenJDK Source Bundle for packages with
java-1.8.0-openjdk-src.x86_64 : OpenJDK Source Bundle
java-1.8.0-openjdk-debug.x86_64 : OpenJDK Runtime Environment with full debug on
java-1.8.0-openjdk.x86_64 : OpenJDK Runtime Environment
感想:
- OpenJDK 6, 7, 8 とパッケージが用意されてて、用途によって分かれてる。
- OpenJDK 8 になると、
-debug
あり・なしでさらに分かれてる。
インストールと、各パッケージの簡単な調査メモ
$ sudo yum install \
java-1.8.0-openjdk \
java-1.8.0-openjdk-javadoc \
java-1.8.0-openjdk-src \
java-1.8.0-openjdk-headless \
java-1.8.0-openjdk-devel \
java-1.8.0-openjdk-demo \
java-1.8.0-openjdk-accessibility
...
Installing:
java-1.8.0-openjdk x86_64
java-1.8.0-openjdk-accessibility x86_64
java-1.8.0-openjdk-demo x86_64
java-1.8.0-openjdk-devel x86_64
java-1.8.0-openjdk-headless x86_64
java-1.8.0-openjdk-javadoc noarch
java-1.8.0-openjdk-src x86_64
Installing for dependencies:
giflib x86_64
java-atk-wrapper x86_64
javapackages-tools noarch
lksctp-tools x86_64
python-javapackages noarch
python-lxml x86_64
ttmkfdir x86_64
tzdata-java noarch
xorg-x11-font-utils x86_64
xorg-x11-fonts-Type1 noarch
以下、各パッケージについて rpm -qilR --scripts パッケージ名
した結果から内容について簡単にメモ。
java-1.8.0-openjdk
- OpenJDKの実行環境を入れるためのパッケージだが、このパッケージ自身は policytool とAWTやサウンド系のsoファイル、あとはデスクトップ環境用の設定・アイコンファイルしか入っていない。
- 依存関係で
java-1.8.0-openjdk-headless
を必要としており、後述の通りこちらがJava VM本体。
ファイルリスト:
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.71-2.b15.el7_2.x86_64/jre/bin/policytool
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.71-2.b15.el7_2.x86_64/jre/lib/amd64/libawt_xawt.so
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.71-2.b15.el7_2.x86_64/jre/lib/amd64/libjawt.so
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.71-2.b15.el7_2.x86_64/jre/lib/amd64/libjsoundalsa.so
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.71-2.b15.el7_2.x86_64/jre/lib/amd64/libsplashscreen.so
/usr/share/applications/java-1.8.0-openjdk-1.8.0.71-2.b15.el7_2.x86_64-policytool.desktop
/usr/share/icons/hicolor/16x16/apps/java-1.8.0.png
/usr/share/icons/hicolor/24x24/apps/java-1.8.0.png
/usr/share/icons/hicolor/32x32/apps/java-1.8.0.png
/usr/share/icons/hicolor/48x48/apps/java-1.8.0.png
java-1.8.0-openjdk-headless
-
$JAVA_HOME/jre/(bin|lib)/
以下のファイルを提供する、Java実行環境の本体パッケージ。 -
rpm -q --scripts
で見てみると、alternativesコマンドなど、結構複雑なことしてる。 -
jpackage-utils
やtzdata-java
パッケージに依存してる。
主なファイルリスト:
-
/usr/lib/jvm-exports/
以下のディレクトリとjarファイル -
/usr/lib/jvm-private/
以下のディレクトリとjarファイル -
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.71-2.b15.el7_2.x86_64/jre/bin
以下の実行ファイル -
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.71-2.b15.el7_2.x86_64/jre/lib
以下のライブラリや設定ファイル - manページ
java-1.8.0-openjdk-devel
- javacなどJavaで開発するためのコマンドやライブラリ・ヘッダーファイル。
主なファイルリスト:
-
/usr/lib/jvm-exports/
以下のディレクトリとjarファイル -
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.71-2.b15.el7_2.x86_64/(bin|include|lib)
以下の実行ファイル・ライブラリ・ヘッダーファイル - manページ
- stap用ファイル
java-1.8.0-openjdk-javadoc
- Java8 の JavaDoc。英語。ネットが使えるならOracle公式の日本語ドキュメント見れば良いので、入れなくても良い。
- Oracleの日本語ドキュメント:
- https://docs.oracle.com/javase/jp/8/
- https://docs.oracle.com/javase/jp/8/docs/api/
ファイルリスト:
/usr/share/doc/java-1.8.0-openjdk-javadoc-1.8.0.71
/usr/share/doc/java-1.8.0-openjdk-javadoc-1.8.0.71/LICENSE
/usr/share/javadoc/java-1.8.0-openjdk-1.8.0.71-2.b15.el7_2
...
java-1.8.0-openjdk-accessibility
- JavaのAWTアプリケーションでアクセシビリティサポートを追加する。AWTアプリでアクセシビリティ気にしなければ入れなくて良い。
- 依存関係で
java-atk-wrapper
を必要としている。
ファイルリスト:
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.71-2.b15.el7_2.x86_64/jre/lib/accessibility.properties
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.71-2.b15.el7_2.x86_64/jre/lib/amd64/libatk-wrapper.so
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.71-2.b15.el7_2.x86_64/jre/lib/ext/java-atk-wrapper.jar
java-1.8.0-openjdk-demo
- Javaのデモ・サンプルコードなど。
ファイルリストは省略
java-1.8.0-openjdk-src
- Java クラスライブラリのソースコード。
ファイルリスト:
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.71-2.b15.el7_2.x86_64/src.zip
/usr/share/doc/java-1.8.0-openjdk-src-1.8.0.71
/usr/share/doc/java-1.8.0-openjdk-src-1.8.0.71/README.src
その他の依存パッケージについて
java-1.8.0-openjdk-xxx
パッケージをインストールすると、依存関係で一緒に入ってくるパッケージの中でも、特にJavaに強く関連するものについて簡単にメモ。
- javapackages-tools
- Javaのパッケージングに使うスクリプトやマクロを提供
- python-javapackages
- Javaのパッケージングで使うPythonライブラリ
- tzdata-java
- Javaランタイム用のタイムゾーン情報ファイル。
-
/usr/share/javazi/
ディレクトリ以下にタイムゾーン情報がファイルで保存される。
まとめ : ざっくりとしたディレクトリ・ファイル構成
- Java本体系:
-
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.71-2.b15.el7_2.x86_64
-
JAVA_HOME
相当, JDK/JREの実行ファイル・ライブラリなど。
-
-
/usr/lib/jvm-(common|exports|private)/
- 関連ライブラリのjar
-
-
alternatives
関係- 異なるメジャーバージョンを同時に入れた場合、
alternatives
コマンドで/usr/bin
以下のコマンドなどをシンボリックリンクで切り替え、デフォルトで使用するバージョンを設定できるように構成されてます。 -
/etc/alternatives/
- java, jar, javac, jstat など主要コマンドや jre, java_sdk など主要ディレクトリがシンボリックリンクで管理されてる。
- 異なるメジャーバージョンを同時に入れた場合、
- javapackages-toolsパッケージ系
- なぜか
/etc/java
というそれっぽいディレクトリ作って、java.conf
など置いている。
- なぜか
おまけ : Red Hat によるOpenJDK / OracleによるJava SEのサポートライフサイクル
そもそものOpenJDK/Oracle Java SEの違いについて、2015年の新し目のわかりやすい解説資料:
- OpenJDKは使い物になるか?OpenJDKの実際と今後 (NTTデータ オープンソースDAY 2015 Autumn 講演資料)
- http://www.slideshare.net/hadoopxnttdata/openjdk-nttdata-oss-day-2015-autumn
Red Hat によるOpenJDKのサポートライフサイクル:
- Red Hat Enterprise Linux のサポートポリシーについてよく利用されるナレッジ - Red Hat Customer Portal
- https://access.redhat.com/ja/node/1520083
- →
- OpenJDK Life Cycle and Support Policy - Red Hat Customer Portal
- https://access.redhat.com/articles/1299013
- End of Production Support は、OpenJDK 8 が
2020年10月2023年6月 1までとなってる。Oracleの無償サポート期間より長い。
Oracle によるJava SEのサポートライフサイクル
- Oracle Java SE サポート・ロードマップ
- http://www.oracle.com/technetwork/jp/java/eol-135779-ja.html
- Java 8は 2014年3月に利用開始で、Java 9が未定のうちは、2017年9月に公式サポート終了。
- Oracle Java SEサービスに移行すれば延長できるっぽい。
ちなみに、Red Hat でもOracle Java SEをパッケージングしたリポジトリを用意してるらしく、多分RHNなど有償サブスクリプション系に入れば、使えるのかな?
- Where are Oracle/Sun/IBM Java packages located? - Red Hat Customer Portal
- https://access.redhat.com/solutions/732883
-
2018-10-03 : 指摘により再確認して最新の情報に更新 ↩