Debian 11で E: Unable to locate package openjdk-21-jdk が出た時の確実な対処法
はじめに
MendixアプリケーションのオンプレミスサーバーにJava 21を入れようとして、以下エラーが出たことはないか。
$ sudo apt install openjdk-21-jdk
E: Unable to locate package openjdk-21-jdk
「aptで入らないなら他の方法は?」と調べると、Ubuntu向けPPAの情報ばかりヒットして大変だった、忘れないよう備忘録としてまとめる。
この記事では temurin-21-jdkを使う方法ではなくjdk.java.net から OpenJDK のtarballを直接ダウンロードして手動インストールする方法 を解説します。
直面したエラー
Debian 11 (Bullseye) の環境でJava 21のインストールを試みると、以下のエラーが発生します。
$ sudo apt install openjdk-21-jdk
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
E: Unable to locate package openjdk-21-jdk
openjdk-17-jdk は問題なくインストールできるのに、21だけが見つからない状況。
根本原因:Debian 11の標準リポジトリはJava 17止まり
Debianの各バージョンが標準でサポートするJavaのバージョンは以下のとおり。
| Debianバージョン | コードネーム | サポートするOpenJDK |
|---|---|---|
| Debian 10 | Buster | Java 11, 13 |
| Debian 11 | Bullseye | Java 11, 17 |
| Debian 12 | Bookworm | Java 17, 21 |
つまり Debian 11の標準リポジトリにはJava 21が存在しません。
apt search openjdk で確認すると openjdk-17-jdk は存在するが openjdk-21-jdk はリストに出てきません。
$ apt search openjdk 2>/dev/null | grep openjdk
openjdk-11-jdk/stable 11.0.xx ...
openjdk-17-jdk/stable 17.0.xx ...
# openjdk-21-jdk は存在しない
解決策:jdk.java.net から直接ダウンロードして手動インストールする
aptで入らない場合は、jdk.java.net/archive/ からOpenJDKのtarballを wget で直接ダウンロードして展開する方法が確実だ。
このサイトはOpenJDKのリファレンス実装を配布しており、GPLライセンスで自由に利用可能だ。
ステップ 1:wget でtarballをダウンロードする
cd /tmp
wget https://download.java.net/java/GA/jdk21/fd2272bbf8e04c3dbaee13770090416c/35/GPL/openjdk-21_linux-x64_bin.tar.gz
ダウンロードURLの探し方
https://jdk.java.net/archive/ にアクセスし、
目的のバージョン(例:Java 21)の「Linux / x64」行にある.tar.gzのリンクURLをコピーして使用することができる。
ダウンロードが完了したら、正しく取得できているか確認する。
ls -lh /tmp/openjdk-21_linux-x64_bin.tar.gz
# -rw-r--r-- 1 user user 189M ... ← 100MB超あれば正常
ステップ 2:展開先ディレクトリを作成して展開する
# インストール先として /opt/java を使用とする(慣習的な配置場所)
sudo mkdir -p /opt/java
# tarballを展開
sudo tar -xzf /tmp/openjdk-21_linux-x64_bin.tar.gz -C /opt/java/
# 展開結果を確認
ls /opt/java/
# jdk-21 ← このディレクトリが作成される
ステップ 3:シンボリックリンクを作成する
将来バージョンが上がったときも、シンボリックリンクを張り替えるだけでパスを変えずに済む。
sudo ln -s /opt/java/jdk-21 /opt/java/java21
# 確認
ls -la /opt/java/
# lrwxrwxrwx java21 -> jdk-21
ステップ 4:環境変数 JAVA_HOME とPATHを設定する
sudo vi /etc/environment
以下の内容を追加・編集する。
JAVA_HOME="/opt/java/java21"
PATH="/opt/java/java21/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
設定を反映を行う。
source /etc/environment
ステップ 5:インストールの確認
$ java -version
openjdk version "21" 2023-09-19
OpenJDK Runtime Environment (build 21+35-2513)
OpenJDK 64-Bit Server VM (build 21+35-2513, mixed mode, sharing)
$ echo $JAVA_HOME
/opt/java/java21
まとめ
| ポイント | 内容 |
|---|---|
| 原因 | Debian 11の標準リポジトリにはJava 21が含まれない |
| ダウンロード元 | jdk.java.net/archive/(GPLライセンスのOpenJDKリファレンス実装) |
| 手順 |
wget でtarballを取得 → /opt/java/ 以下に展開 |
| 環境変数 |
JAVA_HOME と PATH を /etc/environment に設定する |