How to install openjdk-8-jdk on Debian 10 (Buster)?
Asked Answered
Y

11

105

It seems Debian does not support openjdk-8-jdk anymore due to a security issue. What is the easiest way to install openjdk-8-jdk for Debian 10 (Buster)?

Yeargain answered 14/7, 2019 at 22:37 Comment(3)
Probably adoptopenjdk.net.Kebab
superuser.com/questions/1460420/openjdk-8-for-debian-10Distaste
Please read this post itzgeek.com/how-tos/linux/debian/…Epistasis
M
157

Alternatively, you can use adoptopenjdk repository:

wget -qO - https://adoptopenjdk.jfrog.io/adoptopenjdk/api/gpg/key/public | sudo apt-key add -

sudo add-apt-repository --yes https://adoptopenjdk.jfrog.io/adoptopenjdk/deb/

sudo apt-get update && sudo apt-get install adoptopenjdk-8-hotspot

https://adoptopenjdk.net/installation.html

Megara answered 21/12, 2019 at 13:36 Comment(12)
This is the only solution that seems to work for me, given the present state of Debian's unstable version of opensdk-8.Encrata
better answer, simple and practical.Rozalin
Unbelievable how much googling and scrolling was required to get here. This is the only worthy answer.Quinsy
Some installations will fail to install if they don't find Oracle's openjdk-8-jdk. Here is a simple virtual package that "provides" the missing package through AdoptOpenJDK: gitlab.com/b8kich/adopt-openjdk-8-jdk/-/blob/master/… After installing adoptopenjdk-8-hotspot download the .deb file and install using dpkg -i adopt-openjdk-8-jdk_0.1_all.debKamasutra
If you install openjdk-8 in python:3.7-buster Docker image you have to add command mkdir -p /usr/share/man/man1/Shammer
After following the posts instructions, the JAVA_HOME var is /usr/lib/jvm/adoptopenjdk-8-hotspot-amd64/jre/, for anyone looking...Phaedra
for those who gets error on second command "add-apt-repository: command not found" try this extra step after first sudo apt-get install software-properties-commonOdisodium
true, after so much googling, these 3 commands and this sudo apt-get install software-properties-common installed openjdk1.8Baines
For minimal installs without install software-properties-common, manually add the repo to sources.list.d with echo "deb https://adoptopenjdk.jfrog.io/adoptopenjdk/deb/ buster main" | sudo tee /etc/apt/sources.list.d/adoptopenjdk.list (where buster is the codename for debian-10, replace as needed from the list at adoptopenjdk.jfrog.io/adoptopenjdk/deb/dists)Ultraism
"AdoptOpenJDK is no longer supported and it is recommended that all users move to Eclipse Temurin"Maffei
Unfortunately neither AdoptOpenJDK nor Eclipse Temurin supports a 32bit version of openjdk 8.Unlimber
2022 update: installation documentation is now hereFractostratus
T
80

WARNING: this answer suggest unsupported and dangerous mixing of Debian releases. Follow the advice on your own risk, as it can break the system on upgrades, as explained in http://wiki.debian.org/DontBreakDebian#Don.27t_make_a_FrankenDebian

Package mirror search steps:

  1. In the Search package directories search for openjdk-8-jdk. You can see two results:

  2. Choose stretch repository

  3. Scroll to the Download openjdk-8-jdk section and choose your architecture. For example amd64

  4. Now you can see mirrors list and instructions how to install the package via apt:

    You should be able to use any of the listed mirrors by adding a line to your /etc/apt/sources.list like this:

    deb http://security.debian.org/debian-security stretch/updates main

Installation steps:

  1. Install software source manager

    apt-get update
    apt-get install software-properties-common
    
  2. Add mirror with openjdk-8-jdk

    apt-add-repository 'deb http://security.debian.org/debian-security stretch/updates main'
    apt-get update
    
  3. Install openjdk 8

    apt-get install openjdk-8-jdk
    

Note: You can use steps above to find an official Debian mirror with any other package you want to install

Triggerfish answered 19/5, 2020 at 22:55 Comment(7)
Installation steps are really cool and worked smoothly. Thanks.Skeptical
This is dangerous advice as mixing different debian versions' repositories can break Debian installation. wiki.debian.org/DontBreakDebian#Don.27t_make_a_FrankenDebian This answer is slightly less dangerous than the other answer, because the only available jdk8 is in stretch(oldstable) and has less chance of pulling random versions of packages, but presenting this as a generic solution is misleading and dangerous. Please consider removing this answer.Jaddo
Installation steps mentioned above has worked fine.Skeptical
Confirmed, I tried this on Buster 10 and it failed, dont try thisCurvature
While probably not the best way to install Java 8, it worked for me. At the end I just disabled the additional repository using apt edit-sourcesLapith
W: GPG error: security.debian.org stretch/updates InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY AA8E81B4331F7F50 NO_PUBKEY 112695A0E562B32ADuala
apt-get install software-properties-common prompts to enter geographic information during docker image creation. any idea how to avoid this?Jestinejesting
O
9

You can search the Debian packages site and find out the openjdk-8-jdk package for Debian 10 is only available from unstable (sid) repository currently.

At first it is good to check and save current system-wide symbolic links for already installed Java SDK/JRE packages if any:

ls -la /etc/alternatives | grep java > previous-java-alternatives.txt

Then check is this package can be installed with current configuration:

apt-cache policy openjdk-8-jdk

If no then you need to add unstable repository to the sources list. The negative output may imply that you prefer to use stable repositories and usually it isn't appropriate for you to update all other software from unstable repositories. So before adding unstable repository to the sources list make sure APT::Default-Release configuration option is set to "stable":

grep -r Default-Release /etc/apt/

If no (as by default) then set it as recommended in that answer by creating this file:

/etc/apt/apt.conf.d/99defaultrelease

APT::Default-Release "stable";

Now you're ready to add the unstable repository to the sources list. Before I prefer to check what mirror was selected by me when system was installed. Just look to main sources list:

cat /etc/apt/sources.list

In my case the output shows that mirror.yandex.ru server is used as system source. So I use the same for unstables and add this file:

/etc/apt/sources.list.d/91-debian-unstable.list

deb http://mirror.yandex.ru/debian/ unstable main
deb-src http://mirror.yandex.ru/debian/ unstable main

(I also have 90-debian-testing.list file for the testing repo.)

Then update package lists:

apt update

And check you system wont update from unstable sources:

apt list --upgradable

And recheck is required package can be installed:

apt-cache policy openjdk-8-jdk

Do install the package:

apt install openjdk-8-jdk

Look at new symbolic links:

ls -la /etc/alternatives | grep java-8

Just waste few seconds on them (or continue with man 1 update-alternatives).

Outreach answered 8/8, 2019 at 13:4 Comment(4)
This is (no longer?) working, due to the unstable version being built against a version of libc6 that conflicts with the stable distribution.Encrata
Even when there is a good intention behind APT::Default-Release "stable";, using it isn't allowing to complete the JDK 8 installation with apt install openjdk-8-jdk.Cheffetz
This AntiPattern is commonly referred to as "FrankenDebian". It leads to a number of issues upgrade / installation issuesKamasutra
Now openjdk-8-jdk is available in the stretch repository. See my answerTriggerfish
Q
3

This is my script which I use to install OpenJDK 8 on Bitbucket's Pipelines Docker image NodeJS 10.16.2. But now I see that this docker image is based on Stretch...

It is based on https://github.com/docker-library/openjdk/blob/89851f0abc3a83cfad5248102f379d6a0bd3951a/8-jdk/Dockerfile

#!/bin/bash
set -x #echo on
# based on https://github.com/docker-library/openjdk/blob/89851f0abc3a83cfad5248102f379d6a0bd3951a/8-jdk/Dockerfile

apt-get update && apt-get install -y --no-install-recommends \
  bzip2 \
  unzip \
  xz-utils &&
  rm -rf /var/lib/apt/lists/*

echo 'deb http://httpredir.debian.org/debian-security stretch/updates main' >/etc/apt/sources.list.d/jessie-backports.list

# Default to UTF-8 file.encoding
export LANG=C.UTF-8

# add a simple script that can auto-detect the appropriate JAVA_HOME value
# based on whether the JDK or only the JRE is installed
{ \
    echo '#!/bin/sh'; \
    echo 'set -e'; \
    echo; \
    echo 'dirname "$(dirname "$(readlink -f "$(which javac || which java)")")"'; \
} > /usr/local/bin/docker-java-home \
&& chmod +x /usr/local/bin/docker-java-home

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export JAVA_VERSION=8u252
export JAVA_DEBIAN_VERSION=8u252-b09-1~deb9u1

# see https://bugs.debian.org/775775
# and https://github.com/docker-library/java/issues/19#issuecomment-70546872
export CA_CERTIFICATES_JAVA_VERSION=20170929~deb9u3

set -x \
    && apt-get update \
    && apt-get install -y \
        openjdk-8-jdk="$JAVA_DEBIAN_VERSION" \
        ca-certificates-java="$CA_CERTIFICATES_JAVA_VERSION" \
    && rm -rf /var/lib/apt/lists/* \
    && [ "$JAVA_HOME" = "$(docker-java-home)" ]

# see CA_CERTIFICATES_JAVA_VERSION notes above
/var/lib/dpkg/info/ca-certificates-java.postinst configure

UPDATE

Things change, versions are upped. Here is the latest script which works for https://hub.docker.com/layers/node/library/node/10.16.2/images/sha256-8f420c033acee137f9e902092a04d371bdf1f839559cce60614c0d5905d20294?context=explore

#!/bin/bash
set -x #echo on
# based on https://github.com/docker-library/openjdk/blob/89851f0abc3a83cfad5248102f379d6a0bd3951a/8-jdk/Dockerfile

apt-get update && apt-get install -y --no-install-recommends \
  bzip2 \
  unzip \
  xz-utils &&
  rm -rf /var/lib/apt/lists/*

echo 'deb http://httpredir.debian.org/debian-security stretch/updates main' >/etc/apt/sources.list.d/jessie-backports.list

# Default to UTF-8 file.encoding
export LANG=C.UTF-8

# add a simple script that can auto-detect the appropriate JAVA_HOME value
# based on whether the JDK or only the JRE is installed
{ \
    echo '#!/bin/sh'; \
    echo 'set -e'; \
    echo; \
    echo 'dirname "$(dirname "$(readlink -f "$(which javac || which java)")")"'; \
} > /usr/local/bin/docker-java-home \
&& chmod +x /usr/local/bin/docker-java-home

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export JAVA_VERSION=8u265
export JAVA_DEBIAN_VERSION=8u265-b01-0+deb9u1

# see https://bugs.debian.org/775775
# and https://github.com/docker-library/java/issues/19#issuecomment-70546872
export CA_CERTIFICATES_JAVA_VERSION=20170929~deb9u3

set -x \
    && apt-get update \
    && apt-get install -y \
        openjdk-8-jdk="$JAVA_DEBIAN_VERSION" \
        ca-certificates-java="$CA_CERTIFICATES_JAVA_VERSION" \
    && rm -rf /var/lib/apt/lists/* \
    && [ "$JAVA_HOME" = "$(docker-java-home)" ]

# see CA_CERTIFICATES_JAVA_VERSION notes above
/var/lib/dpkg/info/ca-certificates-java.postinst configure
Quisling answered 3/6, 2020 at 13:46 Comment(0)
H
3

The easiest way to install JDK8 is using SDKMAN.

$ curl -s "https://get.sdkman.io" | bash
$ source "$HOME/.sdkman/bin/sdkman-init.sh"
$ sdk install java 8.0.275.hs-adpt
Hanes answered 24/11, 2020 at 19:25 Comment(0)
R
1

I needed to install a 32-bit version but this wasn't available at adoptopenjdk far as I could see. I tracked down a copy of a binary at java.com i their downloads area:

jre-8u241-linux-i586.tar.gz

All I needed was the JRE (rather than a JDK, but the process should be the same for either) and since it was also for a personal use only, the Oracle binary was OK (they have limitations in this regard).

I downloaded the binary and placed it in the home folder (~/) of the user that needed to run it and then unzipped it like so:

mkdir ~/java && cd ~/java && tar -xf jre-8u241-linux-i586.tar.gz

Then added the location to the path of the user that would run the Java application by appending this line to ~/.profile:

export PATH=$PATH:/home/youruserid/java/jre1.8.0_241/bin

This worked fine for my case but there are no doubt better ways to install a binary. For example so it is available for all Unix users rather than just one.

Rhianna answered 17/2, 2020 at 1:24 Comment(0)
E
0

Based one some of the above answers, this is what i used in my shell script on debian buster silm os running node 12.x (node:12.6-buster-slim)

This was in preparing to move to github actions local testing with act, do note that there is no need for sudo as ci testing in this container already is root.

apt-get update -qq
#software-properties-common not installed on slim
apt-get install software-properties-common -y -q
wget -qO - https://adoptopenjdk.jfrog.io/adoptopenjdk/api/gpg/key/public | apt-key add -
add-apt-repository --yes https://adoptopenjdk.jfrog.io/adoptopenjdk/deb/

apt-get update -qq
#man folder needs to be available for adoptopenjdk-8 to finish configuring
mkdir -p /usr/share/man/man1/
apt-get install adoptopenjdk-8-hotspot -y

#ensure openjdk-8-jdk is found for some installations, thanks b8kich for the virtual wrapper
curl https://gitlab.com/b8kich/adopt-openjdk-8-jdk/-/raw/master/adopt-openjdk-8-jdk_0.1_all.deb?inline=false -o adopt-openjdk-8-jdk_0.1_all.deb
dpkg -i adopt-openjdk-8-jdk_0.1_all.deb
Essequibo answered 22/1, 2021 at 3:49 Comment(0)
S
0

I've found, mainly after years of working with deprecated iDrac consoles which have particular java requirements, that installing multiple versions of the JRE or JDK is preferable as you can choose between them as necessary without worrying about other dependencies or breaking your package manager.

This is actually incredibly easy on Debian, and very probably other linux, by eschewing the package manager all together and manually installing whatever versions you need.

Download your desired jre/jdk from the Oracle archives (You will need a free Oracle account) here for whatever architecture you need: https://www.oracle.com/java/technologies/downloads/archive/

I selected "Java SE 8 (8u211 and later)" from the menu and snagged jre-8u271-linux-x64.tar.gz.

From there, extract the archive to a location accessible to the user who will be running java; Typically I'll extract to "/usr/local/lib/jre1.8.0_271/".

From here you can run /usr/local/lib/jre1.8.0_271/bin/java successfully, as well as javaws.

/usr/local/lib/jre1.8.0_271/bin# ./java -version
java version "1.8.0_271"
Java(TM) SE Runtime Environment (build 1.8.0_271-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.271-b09, mixed mode)

On most of my systems I already have some packaged version of jre installed that's native to the release, so my /usr/bin/java and /usr/bin/javaws typically are symlinks to /etc/alternatives/java /etc/alternatives/javaws, respectively.

To switch the system to a particular jre, just update the relevant symlinks to point to the version of your choice:

rm /usr/bin/java /usr/bin/javaws /usr/bin/jjs /usr/bin/jcontrol
for i in java javaws jjs jcontrol; do ln -s /usr/local/lib/jre1.8.0_271/bin/$i /usr/bin/$i; done

Note that if you need, per say, jre 7, 11 and 17 you can download and extract each version to a particular named folder in /usr/local/lib, or your home directory if you'll be launching it manually, and utilize each of them individually as needed by updating the symlinks or just running them directly.

Shamus answered 14/1, 2022 at 3:22 Comment(0)
U
0

I just faced a similar problem: I have on old HP-mini 210 netbook to be used as a "car logger" and it has to use java 8 32bit (required by the logger application).

I'm running a light distro based on Debian 10 (BunsenLabs Lithyum). After poking around the easyest way I found to install java 8 32bits was by using an openjdk 8 deb package published by OpenLogic (they have 32 or 64 bits): https://www.openlogic.com/openjdk-downloads

Just download and install (package manager). Worked 100% and now I have a super fast hp-mini "car logger".

Unlimber answered 23/8, 2022 at 22:52 Comment(0)
D
-1

I was migrating from Jessie to Buster, and found that not-so-old, legacy code would not compile and run on JDK11.

I managed to copy all java8 folders from my Jessie distribution, reworked the links, and set that as a new JDK on Eclipse. That works so far.

Deport answered 6/11, 2019 at 17:17 Comment(0)
Z
-7

the easiest way I have found to download java 8 on debian buster is to use the command su apt-get install openjdk-8-jdk

Zebu answered 8/12, 2019 at 2:47 Comment(1)
You should use sudo instead of su.Flump

© 2022 - 2024 — McMap. All rights reserved.