5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Debian10のslimイメージでJDKがインストールできないときにすること

Posted at

はじめに

DockerでDebian10-slimをベースイメージにするとJDK(Javaの開発キット)がインストールできなかったのでいろいろ調べました。

先に結論

JDKインストール前に mkdir -p /usr/share/man/man1 を実行する(参考スレッド)。

# これを先に行う
$mkdir -p /usr/share/man/man1

$apt install default-jdk

調べてみた

環境情報

開発環境やイメージ情報

開発機OS: macOS Big Sur 11.2
Docker: 20.10.2
ベースイメージ: debian:buster-slim
Debianバージョン: 10.8(buster)

まずはいつも通りインストールしてみる

が、見事に失敗。

# aptの更新
$apt -y update
$apt -y upgrade

# パッケージの検索
$apt search jdk
---検索結果---
...
default-jdk/stable 2:1.11-71 amd64
 Standard Java or Java compatible Development Kit
...
-------------

# インストール
$apt install default-jdk
---実行結果---
...
dpkg: dependency problems prevent configuration of default-jdk:
 default-jdk depends on default-jre (= 2:1.11-71); however:
  Package default-jre is not configured yet.
 default-jdk depends on default-jdk-headless (= 2:1.11-71); however:
  Package default-jdk-headless is not configured yet.
 default-jdk depends on openjdk-11-jdk; however:
  Package openjdk-11-jdk:amd64 is not configured yet.

dpkg: error processing package default-jdk (--configure):
 dependency problems - leaving unconfigured
Processing triggers for systemd (241-7~deb10u6) ...
Processing triggers for libc-bin (2.28-10) ...
Processing triggers for ca-certificates (20200601~deb10u2) ...
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...

done.
done.
Processing triggers for libgdk-pixbuf2.0-0:amd64 (2.38.1+dfsg-1) ...
Errors were encountered while processing:
 openjdk-11-jre-headless:amd64
 openjdk-11-jre:amd64
 openjdk-11-jdk-headless:amd64
 default-jre
 default-jdk-headless
 openjdk-11-jdk:amd64
 default-jdk
E: Sub-process /usr/bin/dpkg returned an error code (1)
----------

$java --version
bash: java: command not found

dependency problemsってのはわかったが、具体的に何がダメなのかがわからない。
ちなみに、openjdk-11-jdkをインストールしようとしても結果は同じ。

ひたすらググってみる

検索していると冒頭に紹介したスレッドにたどりつきました。

See: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=863199#23

I had the same issue and solved it using
mkdir -p /usr/share/man/man1
before installing openjdk-8-jre-headless

というわけで早速実行しますと、成功します!

$apt -y update
$apt -y upgrade

$mkdir -p /usr/share/man/man1

$apt install default-jdk
---実行結果---
...
Setting up default-jdk (2:1.11-71) ...
Processing triggers for systemd (241-7~deb10u6) ...
Processing triggers for libc-bin (2.28-10) ...
Processing triggers for ca-certificates (20200601~deb10u2) ...
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...

done.
done.
Processing triggers for libgdk-pixbuf2.0-0:amd64 (2.38.1+dfsg-1) ...
------------

$java --version
openjdk 11.0.9.1 2020-11-04
OpenJDK Runtime Environment (build 11.0.9.1+1-post-Debian-1deb10u2)
OpenJDK 64-Bit Server VM (build 11.0.9.1+1-post-Debian-1deb10u2, mixed mode, sharing)

軽く考察

man?

manはコマンドのレファレンスマニュアルを表示するためのコマンドです。

今回ベースイメージとしてdebian:buster-slimを使用したんですが、slimイメージはベースイメージの軽量化を目的としているため、このmanの整備がされていないとのこと(参考)。

# 一応 manのディレクトリはあるみたい・・・
# でも中身はない
$ls /usr/local/ | grep man
man
$ls /usr/local/man/
# 何もない

$ls /usr/share/ | grep man
man
$ls /usr/share/man/
# やっぱり何にもない

となると、manを入れてあげればいいのでは?となるのですが、インストールしてもやっぱり上手くいかない・・・。

$apt install man-db
$which man
/usr/bin/man # ちゃんとインストールされたっぽい

$apt install default-jdk
---実行結果---
dpkg: dependency problems prevent configuration of default-jdk:
 default-jdk depends on default-jre (= 2:1.11-71); however:
  Package default-jre is not configured yet.
 default-jdk depends on default-jdk-headless (= 2:1.11-71); however:
  Package default-jdk-headless is not configured yet.
 default-jdk depends on openjdk-11-jdk; however:
  Package openjdk-11-jdk:amd64 is not configured yet.

dpkg: error processing package default-jdk (--configure):
 dependency problems - leaving unconfigured
Processing triggers for systemd (241-7~deb10u6) ...
Processing triggers for man-db (2.8.5-2) ...
Processing triggers for libc-bin (2.28-10) ...
Processing triggers for ca-certificates (20200601~deb10u2) ...
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...

done.
done.
Processing triggers for libgdk-pixbuf2.0-0:amd64 (2.38.1+dfsg-1) ...
Errors were encountered while processing:
 openjdk-11-jre-headless:amd64
 openjdk-11-jre:amd64
 openjdk-11-jdk-headless:amd64
 default-jre
 default-jdk-headless
 openjdk-11-jdk:amd64
 default-jdk
E: Sub-process /usr/bin/dpkg returned an error code (1)
------------

$ls /usr/local/ | grep man
man
$ls /usr/local/man/
# 作成されてない

$ls /usr/share/ | grep man
man
$ls /usr/share/man/
# やっぱり作成されてない

ディレクトリを直接作成するだけで大丈夫なの?

検証しておりませんが、いくつかのプロジェクトの対応策としてもmkdir -p /usr/share/man/man1の対策がとられているので、おそらく大丈夫ではないかと考えてます。

balena-io-library/base-images
ekino/docker-buildbox
mozilla-platform-ops/relops-hardware-controller
geerlingguy/ansible-role-java

おわりに

解決策としてはあっさりしてますが、けっこう時間かかりました・・・(なかなかググってもでなかった)。
参考になればうれしいです。

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?