Slackware

OpenJDK

ページ作成日 2020/6/20
ページ更新日 2022/11/12

公式サイト

Make it by yourself!

まずは、自分のホームディレクトリにソースファイルを落としましょう。


$ cd ~/Downloads
$ mkdir OpenJDK
$ cd OpenJDK
$ wget https://github.com/openjdk/jdk23u/archive/refs/tags/jdk-23.0.1-ga.tar.gz

アーカイブを展開します。


$ tar xvf jdk-23.0.1-ga.tar.gz
$ cd jdk23u-jdk-23.0.1-ga

ブートJDK

JDKを構築するには、既存のJDKが必要で、これは「ブートJDK」と呼ばれます。
JDKメジャーバージョンNを構築するためのブートJDKは、メジャーバージョンN-1のJDKである必要があります。
JDK 23を構築する場合、JDK 22がブートJDKとして適しています。

ただし、JDKは「自分自身を構築できる」べきであるため、最新のJDKソースコードからのビルドも許容されます。

N-1のルールに従う場合は、必ず最新の更新バージョンを用意してください。
例えば、JDK 8 GAは、全てのプラットフォームでJDK 9を構築できない場合があります。

リリースサイクルの早い段階では、N-1バージョンがまだリリースされていない場合があります。
その際、N-1バージョンが利用可能になるまで、推奨されるブートJDKはN-2バージョンになります。

configureスクリプトは、自動的に適切なブートJDKを探そうとしますが、多くのプラットフォームでは標準的なインストール場所がないため、このヒューリスティックは高い確率で失敗します。

それでは、ブートJDKとして使う、OpenJDKのバイナリをダウンロードします。
過去のバージョンのダウンロードは、ここからできます。
Archived OpenJDK GA Releases

OpenJDK 22のLinux用バイナリをダウンロードします。


wget https://download.java.net/java/GA/jdk22.0.2/c9ecb94cd31b495da20a27d4581645e8/9/GPL/openjdk-22.0.2_linux-x64_bin.tar.gz

これをブートJDKとして使うために展開します。


mkdir -p ~/boot-jdk
tar xvf openjdk-22.0.2_linux-x64_bin.tar.gz -C boot-jdk

configure

cdして、ソースコードディレクトリに移動します。


cd jdk23u-jdk-23.0.1-ga

configureします。


bash configure \
  --prefix=/usr \
  --with-extra-cflags="-O2" \
  --with-extra-cxxflags="-O2" \
  --with-harfbuzz=bundled \
  --with-zlib=bundled \
  --with-giflib=system \
  --with-lcms=system \
  --with-libjpeg=system \
  --with-libpng=system \
  --enable-unlimited-crypto \
  --with-boot-jdk=../boot-jdk/jdk-22.0.2

すると、以下のように出力されて、configureが成功して終わります。


A new configuration has been successfully created in
/home/takehora/Downloads/openjdk/jdk23u-jdk-23.0.1-ga/build/linux-x86_64-server-release
using configure arguments '--prefix=/usr --with-extra-cflags=-O2 --with-extra-cxxflags=-O2 --with-harfbuzz=bundled --with-zlib=bundled --with-giflib=system --with-lcms=system --with-libjpeg=system --with-libpng=system --enable-unlimited-crypto --with-boot-jdk=../boot-jdk/jdk-22.0.2'.

Configuration summary:
* Name:           linux-x86_64-server-release
* Debug level:    release
* HS debug level: product
* JVM variants:   server
* JVM features:   server: 'cds compiler1 compiler2 epsilongc g1gc jfr jni-check jvmci jvmti management parallelgc serialgc services shenandoahgc vm-structs zgc' 
* OpenJDK target: OS: linux, CPU architecture: x86, address length: 64
* Version string: 23.0.1-internal-adhoc.takehora.jdk23u-jdk-23.0.1-ga (23.0.1-internal)
* Source date:    1731405204 (2024-11-12T09:53:24Z)

Tools summary:
* Boot JDK:       openjdk version "22.0.2" 2024-07-16 OpenJDK Runtime Environment (build 22.0.2+9-70) OpenJDK 64-Bit Server VM (build 22.0.2+9-70, mixed mode, sharing) (at /home/takehora/Downloads/openjdk/boot-jdk/jdk-22.0.2)
* Toolchain:      gcc (GNU Compiler Collection)
* C Compiler:     Version 14.2.0 (at /usr/bin/gcc)
* C++ Compiler:   Version 14.2.0 (at /usr/bin/g++)

Build performance summary:
* Build jobs:     12
* Memory limit:   64142 MB

ビルド

それでは、makeコマンドでビルドします。
結構時間が掛かるので、気長に待ちましょう。


make images

パッケージ用インストール

make installが無いため、手動でファイルをパッケージ作成用のディレクトリにコピーします。


mkdir -p /tmp/openjdk-23.0.1-ga/usr/lib64/java/
cp -a build/linux*/images/jdk/* /tmp/openjdk-23.0.1-ga/usr/lib64/java/

デモ関係は必要無いので削除します。


rm -rf /tmp/openjdk-23.0.1-ga/usr/lib64/java/demo

設定ファイルを/etcに入れて、シンボリックリンクを張ります。


mkdir -p /tmp/openjdk-23.0.1-ga/etc
mv /tmp/openjdk-23.0.1-ga/usr/lib64/java/conf /tmp/openjdk-23.0.1-ga/etc/openjdk
ln -s /etc/openjdk /tmp/openjdk-23.0.1-ga/usr/lib64/java/conf

各種設定ファイルをパッケージ作成用ディレクトリの/etcに移動します。


mv /tmp/openjdk-23.0.1-ga/etc/openjdk/logging.properties{,.new}
mv /tmp/openjdk-23.0.1-ga/etc/openjdk/net.properties{,.new}
mv /tmp/openjdk-23.0.1-ga/etc/openjdk/sound.properties{,.new}
mv /tmp/openjdk-23.0.1-ga/etc/openjdk/management/jmxremote.access{,.new}
mv /tmp/openjdk-23.0.1-ga/etc/openjdk/management/jmxremote.password.template{,.new}
mv /tmp/openjdk-23.0.1-ga/etc/openjdk/management/management.properties{,.new}
mv /tmp/openjdk-23.0.1-ga/etc/openjdk/security/policy/unlimited/default_local.policy{,.new}
mv /tmp/openjdk-23.0.1-ga/etc/openjdk/security/policy/unlimited/default_US_export.policy{,.new}
mv /tmp/openjdk-23.0.1-ga/etc/openjdk/security/policy/limited/default_local.policy{,.new}
mv /tmp/openjdk-23.0.1-ga/etc/openjdk/security/policy/limited/default_US_export.policy{,.new}
mv /tmp/openjdk-23.0.1-ga/etc/openjdk/security/policy/limited/exempt_local.policy{,.new}
mv /tmp/openjdk-23.0.1-ga/etc/openjdk/security/java.security{,.new}
mv /tmp/openjdk-23.0.1-ga/etc/openjdk/security/java.policy{,.new}

デバッグシンボルをダイナミックライブラリからストリップしますが、シンボルテーブルは残します。


find /tmp/openjdk-23.0.1-ga -name "*.so" -exec strip --strip-debug {} \;

Slackwareにインストールされているca-certificatesからcacertsファイルを生成します。
OpenJDKのソース内の "cacerts" は古くなっている可能性があるためです。
これには p11-kit の 'trust' プログラムが必要です。


rm -f /tmp/openjdk-23.0.1-ga/usr/lib64/java/lib/security/cacerts
trust extract --format=java-cacerts --filter=ca-anchors --purpose=server-auth /tmp/openjdk-23.0.1-ga/usr/lib64/java/lib/security/cacerts

javaというコマンドで動くようにシンボリックリンクを張ります。


ln -sf java /tmp/openjdk-23.0.1-ga/usr/lib64/java/

プロファイルスクリプトを追加します。 openjdk.shとopenjdk.cshを作成します。


mkdir -p /tmp/openjdk-23.0.1-ga/etc/profile.d
cat <<EOF > /tmp/openjdk-23.0.1-ga/etc/profile.d/openjdk.sh
export JAVA_HOME=/usr/lib64/java
export PATH=\$PATH:\$JAVA_HOME/bin
EOF

cat <<EOF > /tmp/openjdk-23.0.1-ga/etc/profile.d/openjdk.csh
setenv JAVA_HOME /usr/lib64/java
setenv PATH \${PATH}:\${JAVA_HOME}/bin
EOF

作成したスクリプトに実行権限を与えます。


chmod 755 /tmp/openjdk-23.0.1-ga/etc/profile.d/openjdk.sh
chmod 755 /tmp/openjdk-23.0.1-ga/etc/profile.d/openjdk.csh

メニューエントリとアイコンをパッケージに追加します。
まずディレクトリを作成します。


mkdir -p /tmp/openjdk-23.0.1-ga/usr/share/icons/hicolor/16x16/apps/
mkdir -p /tmp/openjdk-23.0.1-ga/usr/share/icons/hicolor/24x24/apps/
mkdir -p /tmp/openjdk-23.0.1-ga/usr/share/icons/hicolor/32x32/apps/
mkdir -p /tmp/openjdk-23.0.1-ga/usr/share/icons/hicolor/48x48/apps/

デスクトップ用アイコンの各種サイズをパッケージ作成ディレクトリにコピーしておきます。


cp src/java.desktop/unix/classes/sun/awt/X11/java-icon16.png /tmp/openjdk-23.0.1-ga/usr/share/icons/hicolor/16x16/apps/openjdk23.png
cp src/java.desktop/unix/classes/sun/awt/X11/java-icon24.png /tmp/openjdk-23.0.1-ga/usr/share/icons/hicolor/24x24/apps/openjdk23.png
cp src/java.desktop/unix/classes/sun/awt/X11/java-icon32.png /tmp/openjdk-23.0.1-ga/usr/share/icons/hicolor/32x32/apps/openjdk23.png
cp src/java.desktop/unix/classes/sun/awt/X11/java-icon48.png /tmp/openjdk-23.0.1-ga/usr/share/icons/hicolor/48x48/apps/openjdk23.png

デスクトップファイルを追加します。
まずディレクトリを作成します。


mkdir -p /tmp/openjdk-23.0.1-ga/usr/share/applications

デスクトップファイルを作成します。


vi /tmp/openjdk-23.0.1-ga/usr/share/applications/openjdk23-java.desktop

以下の内容を記述します。


[Desktop Entry]
Version=1.0
Name=OpenJDK Java
Comment=Run Java applications
Exec=/usr/lib64/java/bin/java %U
Terminal=false
Type=Application
Icon=openjdk23
Categories=Development;IDE;
MimeType=application/x-java-archive;application/java-archive;application/x-jar;

manのページをパッケージ作成のディレクトリに移動し、そこに対するシンボリックリンクを張ります。
openjdk22-23.0.1には日本語のja_manはありません。


mv /tmp/openjdk-23.0.1-ga/usr/lib64/java/man /tmp/openjdk-23.0.1-ga/usr
ln -s /usr/man /tmp/openjdk-23.0.1-ga/usr/lib64/java/

パッケージ作成

パッケージを作成します。


cd /tmp/openjdk-23.0.1-ga
sudo makepkg --linkadd y --chown y ../openjdk-23.0.1-ga-x86_64-1.txz

[中略]

Slackware package ../openjdk-23.0.1-ga-x86_64-1.txz created.

あとは、このパッケージのパーミッションを755に変更して、パッケージをインストールすればOK♪


cd ..
sudo chmod 755 openjdk-23.0.1-ga-x86_64-1.txz
sudo installpkg openjdk-23.0.1-ga-x86_64-1.txz

インストールした直後は、javaのコマンドはパスが通っていないため、/etc/profile.d/openjdk.sh を実行して下さい。
もしくは、システムを再起動すれば、そのファイルが自動で読み込まれるので、javaのコマンドがパスに登録されます。

こちらの作業手順に関しては、"Nothin' but Slackware"のopenjdk22 (22.0.2+9) for slackware64-current (15.0+)を参考にしました。
ありがとうございました。
そちらのサイトに、SlackBuildのスクリプトが公開されているので、面倒な方は、スクリプトでやってしまうのも手です。

しかし、以上のように手動で一度やってみると、多くの事が学べます。
スクリプトを読み解いてみて、手で動かしてやってみると、違う世界が見えてきますよ。
その後は、スクリプトで楽をすれば良いんです。