【MS、Ubuntu追記】現時点でJava17をaptでインストールできるJavaディストリビューションをまとめ(Liberica JDK・Amazon Corretto・SapMachine)

Posted by 雅楽斎 on Friday, September 24, 2021

TOC

まさかの本命不在

詳細はEclipse Adoptiumの項に記載していますが、Adoptiumは今の所aptでインストールできないため、慌てて今の時点でaptで管理できるJava17を探しました。

初稿執筆時点ではリリースされていなかったMicrosoft Build of OpenJDKとUbuntuの21.10以外へのリリースが現在はされているため、該当箇所は追記を行っています。

【追記】Ubuntu配布→18.04LTS、20.04LTS、21.04、21.10へリリース済

Ubuntuの標準リポジトリでインストール可能なJava17は初稿執筆時は21.10のみ17+35がリリース済み、21.04は17-ea、20.04と18.04は未リリースでしたが、現在はそれぞれにJava17がリリースされています。

# apt-get install openjdk-17-jdk
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了        
状態情報を読み取っています... 完了        
以下の追加パッケージがインストールされます:
  openjdk-17-jdk-headless openjdk-17-jre openjdk-17-jre-headless
提案パッケージ:
  openjdk-17-demo openjdk-17-source visualvm fonts-ipafont-gothic
  fonts-ipafont-mincho fonts-wqy-microhei | fonts-wqy-zenhei
以下のパッケージが新たにインストールされます:
  openjdk-17-jdk openjdk-17-jdk-headless openjdk-17-jre
  openjdk-17-jre-headless
アップグレード: 0 個、新規インストール: 4 個、削除: 0 個、保留: 2 個。
274 MB のアーカイブを取得する必要があります。
この操作後に追加で 444 MB のディスク容量が消費されます。
続行しますか? [Y/n] 

現在Ubuntu 21.04に配布されているJava17のバージョン情報は以下の通りです。

$ /usr/lib/jvm/java-17-openjdk-amd64/bin/java -version
openjdk version "17" 2021-09-14
OpenJDK Runtime Environment (build 17+35-Ubuntu-121.04)
OpenJDK 64-Bit Server VM (build 17+35-Ubuntu-121.04, mixed mode, sharing)

現在は18.04、20.04、21.04向けにもJava17としてGAになった17+35が配布されています。

18.04向けにインストール(WSL1でやったらインストールでSEGVる)

$ apt-cache policy openjdk-17-jdk
openjdk-17-jdk:
  Installed: (none)
  Candidate: 17+35-1~18.04
  Version table:
     17+35-1~18.04 500
        500 http://archive.ubuntu.com/ubuntu bionic-updates/universe amd64 Packages

18.04向けの確認を手元のWSL1でやろうとしたところインストールでsegvるというしょうもない状況に陥ったのでワークアラウンドと共に記録を残します。

# apt-get install openjdk-17-jdk
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
  adwaita-icon-theme gtk-update-icon-cache hicolor-icon-theme
  humanity-icon-theme libgail-common libgail18 libgtk2.0-0 libgtk2.0-bin
  libgtk2.0-common openjdk-17-jdk-headless openjdk-17-jre
  openjdk-17-jre-headless ubuntu-mono
Suggested packages:
  gvfs openjdk-17-demo openjdk-17-source visualvm libnss-mdns
  fonts-ipafont-gothic fonts-ipafont-mincho fonts-wqy-microhei
  | fonts-wqy-zenhei fonts-indic
The following NEW packages will be installed:
  adwaita-icon-theme gtk-update-icon-cache hicolor-icon-theme
  humanity-icon-theme libgail-common libgail18 libgtk2.0-0 libgtk2.0-bin
  libgtk2.0-common openjdk-17-jdk openjdk-17-jdk-headless openjdk-17-jre
  openjdk-17-jre-headless ubuntu-mono
0 upgraded, 14 newly installed, 0 to remove and 0 not upgraded.
Need to get 290 MB of archives.
After this operation, 481 MB of additional disk space will be used.

(snip)

Setting up openjdk-17-jdk:amd64 (17+35-1~18.04) ...
Processing triggers for libc-bin (2.27-3ubuntu1.4) ...
Aborted (core dumped)
/sbin/ldconfig.real: Can't stat /usr/local/lib/x86_64-linux-gnu: No such file or directory
/sbin/ldconfig.real: Path `/lib/x86_64-linux-gnu' given more than once
/sbin/ldconfig.real: Path `/usr/lib/x86_64-linux-gnu' given more than once
/usr/lib/x86_64-linux-gnu/libfakeroot:
        libfakeroot-0.so -> libfakeroot-tcp.so
/usr/lib/wsl/lib:
/usr/local/lib:
/lib/x86_64-linux-gnu:
Aborted (core dumped)
dpkg: error processing package libc-bin (--configure):
 installed libc-bin package post-installation script subprocess returned error exit status 134
Processing triggers for man-db (2.8.3-2ubuntu0.1) ...
Processing triggers for mime-support (3.60ubuntu1) ...
Errors were encountered while processing:
 libc-bin
E: Sub-process /usr/bin/dpkg returned an error code (1)

話としては/usr/local/lib/x86_64-linux-gnuが存在しない(statできない)ということみたいです。

WSLにissueとして上がっていたので、ワークアラウンドを実行します。なんでこれで直るのかはまるでよくわからないんですが。

libc-bin update error · Issue #4760 · microsoft/WSL

Please use the following bug reporting template to help produce issues which are actionable and reproducible, including all command-line steps necessary to induce the failure condition. Please fill...
# dpkg --remove --force-remove-reinstreq --force-remove-essential --force-depends libc-bin
# dpkg --purge --force-remove-reinstreq --force-remove-essential --force-depends libc-bin
# mv /var/lib/dpkg/info/libc6\:amd64.* /tmp/
# apt install -f libc-bin
# mv /tmp/libc6\:amd64.* /var/lib/dpkg/info/
$ /usr/lib/jvm/java-17-openjdk-amd64/bin/java -version
openjdk version "17" 2021-09-14
OpenJDK Runtime Environment (build 17+35-Ubuntu-118.04)
OpenJDK 64-Bit Server VM (build 17+35-Ubuntu-118.04, mixed mode, sharing)

20.04向けにインストール

$ apt-cache policy openjdk-17-jdk
openjdk-17-jdk:
  Installed: (none)
  Candidate: 17+35-1~20.04
  Version table:
     17+35-1~20.04 500
        500 http://archive.ubuntu.com/ubuntu focal-updates/universe amd64 Packages
# apt-get install openjdk-17-jdk
$ /usr/lib/jvm/java-17-openjdk-amd64/bin/java -version
openjdk version "17" 2021-09-14
OpenJDK Runtime Environment (build 17+35-Ubuntu-120.04)
OpenJDK 64-Bit Server VM (build 17+35-Ubuntu-120.04, mixed mode, sharing)

ということで、ここからはUbuntu付属のJavaではないJava17を見ていきます。弊blogでは以前aptでインストールできるJDKとしてEclipse Adoptium、Microsoft Build of OpenJDK、Liberica JDKを紹介していますので、Java16時点の情報として参考にしていただければと思います。

UbuntuでaptでインストールできるJDK3種のセットアップ(Ubuntu標準/Eclipse Adoptium(AdoptOpenJDK)/Microsoft Build of OpenJDK/Liberica JDK)

Eclipse Adoptium→HotSpot(Eclipse Temurin)、OpenJ9(Semeru Runtime)ともに現時点ではaptでのインストール不可

Eclipse Adoptiumについては大きな変更がありました。

Installation | Adoptium

Eclipse Adoptium provides prebuilt OpenJDK binaries from a fully open source set of build scripts and infrastructure. Supported platforms include Linux, macOS, Windows, ARM, Solaris, and AIX.
  1. AdoptOpenJDKから配布サイトがAdoptiumへ変更
  2. Adoptiumとして配布するのはHotSpotベースのEclipse Temurinのみ(TCK上の制約により、OpenJ9ベースのSemeru RuntimeはIBMのサイトで配布)
  3. Eclipse TemurinはJava17リリース済みもaptでのインストールは今の所案内なし
  4. Semeru Runtimeは今の所Java17リリースなし(Java16のaptでのインストール案内なし)

なので、この記事の「aptでインストールするJava17」の対象外と相成りました。なんてこったい。

【追記】Microsoft Build of OpenJDK→Java17リリース済み、aptでインストール可能

Download the Microsoft Build of OpenJDK

Describes where to download the Microsoft Build of OpenJDK.

初稿執筆時点ではJava17はリリースされていませんでしたが、現在はリリース済みとなっています。

$ ubuntu_release=`lsb_release -rs`
$ wget https://packages.microsoft.com/config/ubuntu/${ubuntu_release}/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
$ sudo dpkg -i packages-microsoft-prod.deb
# apt-get install apt-transport-https
# apt-get update
# apt-get install msopenjdk-17
$ /usr/lib/jvm/msopenjdk-17-amd64/bin/java -version
openjdk version "17" 2021-09-14
OpenJDK Runtime Environment Microsoft-26987 (build 17+35)
OpenJDK 64-Bit Server VM Microsoft-26987 (build 17+35, mixed mode, sharing)

Liberica JDK→Java17リリース済み、aptでインストール可能

ということで必然的にお鉢が回ってきた感全開のBellSoftが提供するLiberica JDKですが、こちらめでたくJava17リリース済みかつaptでのインストールが可能です。

Liberica JDK 17+35 Install Guide

This document describes how to install Liberica JDK 17+35 on Windows, Linux distributions (Ubuntu, Debian, RHEL, Alpine), Apple macOS.

どちらかというとFull版だとOpenJFXを同梱しているので、JavaFXアプリを実行したい時に選ばれるJDK/JREというコンテキストで語られがちでしたが第一候補です。

というわけでインストールします。手順は以前ご紹介したものから変わっていません。Full版だとパッケージが大きい(更新のたびにダウンロードするサイズが大きい)ので、今回は通常版をインストールしています。

※apt-cacher-ngにキャッシュとして溜めたいのでhttpsではなくhttpとしてapt-lineを追加しています。

# wget -q -O - https://download.bell-sw.com/pki/GPG-KEY-bellsoft | apt-key add -
# echo "deb [arch=amd64] http://apt.bell-sw.com/ stable main" | tee /etc/apt/sources.list.d/bellsoft.list
# apt-get update
# apt-get install bellsoft-java17
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了        
状態情報を読み取っています... 完了        
以下のパッケージが新たにインストールされます:
  bellsoft-java17
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 2 個。
178 MB のアーカイブを取得する必要があります。
この操作後に追加で 0 B のディスク容量が消費されます。
$ /usr/lib/jvm/bellsoft-java17-amd64/bin/java -version
openjdk version "17" 2021-09-14 LTS
OpenJDK Runtime Environment (build 17+35-LTS)
OpenJDK 64-Bit Server VM (build 17+35-LTS, mixed mode, sharing)

Amazon Corretto→Java17リリース済み、AWS上で使うなら推奨

Ubuntu上で常用する目的ではあまりおすすめしませんが、AWS上で使うJavaとしてはメンテナンスをすると宣言しているのでダントツでおすすめのJDKです。

Amazon Corretto Installation Instructions for Debian-Based, RPM-Based and Alpine Linux Distributions - Amazon Corretto

※apt-cacher-ngにキャッシュとして溜めたいのでhttpsではなくhttpとしてapt-lineを追加しています。

# wget -O- https://apt.corretto.aws/corretto.key | apt-key add -
# add-apt-repository 'deb http://apt.corretto.aws stable main'
# apt-get install java-17-amazon-corretto-jdk
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了        
状態情報を読み取っています... 完了        
以下のパッケージが新たにインストールされます:
  java-17-amazon-corretto-jdk
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 1 個。
193 MB のアーカイブを取得する必要があります。
この操作後に追加で 333 MB のディスク容量が消費されます。
$ /usr/lib/jvm/java-17-amazon-corretto/bin/java -version
openjdk version "17" 2021-09-14 LTS
OpenJDK Runtime Environment Corretto-17.0.0.35.1 (build 17+35-LTS)
OpenJDK 64-Bit Server VM Corretto-17.0.0.35.1 (build 17+35-LTS, mixed mode, sharing)

SapMachine→Java17リリース済み、リリース早い

SAPはHANAのイメージが強く、プロダクトを使ったことが個人的になかったのですが、OpenJDKのフォークとしてSapMachineを公開しています。現在はPowerPC/AIXとs390向けポーティングを主導しているそうです。

ScoopのJavaのバケットを見ていましたが、Oracle JDK以外では最も早くJava17を公開していました。

Installation · SAP/SapMachine Wiki

An OpenJDK release maintained and supported by SAP - Installation · SAP/SapMachine Wiki
# apt-get install -y --no-install-recommends wget ca-certificates gnupg2
# export GNUPGHOME="$(mktemp -d)"
# wget -q -O - https://dist.sapmachine.io/debian/sapmachine.old.key | gpg --batch --import
gpg: keybox'/tmp/tmp.dIRzUAm4Da/pubring.kbx'が作成されました
gpg: /tmp/tmp.dIRzUAm4Da/trustdb.gpg: 信用データベースができました
gpg: 鍵C7EB4578740AEEA2: 公開鍵"jenkins"をインポートしました
gpg: 処理数の合計: 1
gpg:               インポート: 1
# gpg --batch --export --armor 'DA4C 00C1 BDB1 3763 8608 4E20 C7EB 4578 740A EEA2' > /etc/apt/trusted.gpg.d/sapmachine.old.gpg.asc
# wget -q -O - https://dist.sapmachine.io/debian/sapmachine.key | gpg --batch --import
gpg: 鍵62754C3B3ABCFE23: 公開鍵"SapMachine (https://sapmachine.io) <sapmachine@sap.com>"をインポートしました
gpg: 処理数の合計: 1
gpg:               インポート: 1
gpg: 究極的に信用する鍵が見つかりません
# gpg -a --export 62754C3B3ABCFE23 | apt-key add -
Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)).
OK
# gpg --batch --export --armor 'CACB 9FE0 9150 307D 1D22 D829 6275 4C3B 3ABC FE23' > /etc/apt/trusted.gpg.d/sap
# gpgconf --kill all && rm -rf "$GNUPGHOME"
# echo "deb http://dist.sapmachine.io/debian/amd64/ ./" > /etc/apt/sources.list.d/sapmachine.list
# apt-get update
# apt-get install sapmachine-17-jdk
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了        
状態情報を読み取っています... 完了        
以下のパッケージが新たにインストールされます:
  sapmachine-17-jdk
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 1 個。
164 MB のアーカイブを取得する必要があります。
この操作後に追加で 325 MB のディスク容量が消費されます。

手順通りやっていたつもりでしたが、最初に環境変数GNUPGHOMEを定義し忘れてよくわからないままapt-get updateしたら公開鍵を利用できないため、以下の署名は検証できませんでした: NO_PUBKEYエラーになっていたので、2回目のgpg --batch --export --armorの前にgpg -a --exportを実行したら通るようになりました(正解かどうかわからず…)

$ /usr/lib/jvm/sapmachine-17/bin/java -version
openjdk version "17" 2021-09-14 LTS
OpenJDK Runtime Environment SapMachine (build 17+35-LTS)
OpenJDK 64-Bit Server VM SapMachine (build 17+35-LTS, mixed mode, sharing)

まとめ

ということで、現時点でUbuntuでaptでインストールできる3種類のJava17をインストールしてみました。Liberica JDKはJRE相当のbellsoft-java17-runtimeも提供されていることから用途に合わせて選びやすく、個人的にはオススメです。

スポンサーリンク


comments powered by Disqus