Edited at

参考メモ/CentOS7 の OpenJDK パッケージの構成メモ

お仕事では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-utilstzdata-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

ファイルリスト:

/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年の新し目のわかりやすい解説資料:

Red Hat によるOpenJDKのサポートライフサイクル:

Oracle によるJava SEのサポートライフサイクル

ちなみに、Red Hat でもOracle Java SEをパッケージングしたリポジトリを用意してるらしく、多分RHNなど有償サブスクリプション系に入れば、使えるのかな?





  1. 2018-10-03 : 指摘により再確認して最新の情報に更新