【问题标题】:How to install openjdk-8-jdk on Debian 10 (Buster)?如何在 Debian 10 (Buster) 上安装 openjdk-8-jdk?
【发布时间】:2019-07-14 22:37:11
【问题描述】:

由于安全问题,Debian 似乎不再支持 openjdk-8-jdk。为 Debian 10 (Buster) 安装 openjdk-8-jdk 的最简单方法是什么?

【问题讨论】:

标签: java java-8 debian


【解决方案1】:

或者,您可以使用采用openjdk存储库:

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

【讨论】:

  • 更好的答案,简单实用。
  • 令人难以置信的是需要多少谷歌搜索和滚动才能到达这里。这是唯一有价值的答案。
  • 如果你在python:3.7-buster Docker 镜像中安装openjdk-8 你必须添加命令mkdir -p /usr/share/man/man1/
  • 按照帖子说明操作后,JAVA_HOME var 为 /usr/lib/jvm/adoptopenjdk-8-hotspot-amd64/jre/,任何人都可以...
  • 对于那些在第二个命令“add-apt-repository: command not found”上出错的人,在第一个 sudo apt-get install software-properties-common 之后尝试这个额外的步骤
【解决方案2】:

警告:这个答案表明不支持和危险的混合 Debian 发行版。遵循您自担风险的建议,因为它可能会破坏 升级中的系统,如中所述 http://wiki.debian.org/DontBreakDebian#Don.27t_make_a_FrankenDebian

包镜像搜索步骤:

  1. Search package directories 中搜索openjdk-8-jdk。可以看到两个结果:

  2. 选择拉伸存储库

  3. 滚动到下载 openjdk-8-jdk 部分并选择您的架构。例如amd64

  4. 现在您可以看到镜像列表以及如何通过 apt 安装软件包的说明:

    您应该可以通过添加一行来使用列出的任何镜像 到你的 /etc/apt/sources.list 像这样:

    deb http://security.debian.org/debian-security 拉伸/更新 main

安装步骤:

  1. 安装软件源管理器

    apt-get update
    apt-get install software-properties-common
    
  2. 使用 openjdk-8-jdk 添加镜像

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

    apt-get install openjdk-8-jdk
    

注意:您可以使用上述步骤找到官方的 Debian 镜像以及您要安装的任何其他软件包

【讨论】:

  • 安装步骤真的很酷,运行顺利。谢谢。
  • 这是一个危险的建议,因为混合不同的 debian 版本的存储库可能会破坏 Debian 的安装。 wiki.debian.org/DontBreakDebian#Don.27t_make_a_FrankenDebian 这个答案比其他答案的危险性稍小,因为唯一可用的 jdk8 处于拉伸(oldstable)中,并且拉取随机版本的包的机会较小,但是将其作为通用解决方案呈现是误导和危险的。请考虑删除此答案。
  • 上述安装步骤运行良好。
  • 已确认,我在 Buster 10 上尝试过,但失败了,请勿尝试
【解决方案3】:

您可以搜索 Debian packages site 并找出 Debian 10 的 openjdk-8-jdk 软件包目前只能从不稳定 (sid) 存储库中获得。

首先,最好检查并保存已安装的 Java SDK/JRE 包的当前系统范围的符号链接(如果有):

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

然后检查是否可以使用当前配置安装此软件包:

apt-cache policy openjdk-8-jdk

如果不是,那么您需要将不稳定的存储库添加到源列表中。 负输出可能意味着您更喜欢使用稳定的存储库,并且通常不适合您从不稳定的存储库更新所有其他软件。 因此,在将不稳定的存储库添加到源列表之前,请确保将 APT::Default-Release 配置选项设置为 "stable"

grep -r Default-Release /etc/apt/

如果没有(默认情况下),则通过创建此文件按照that answer 中的建议进行设置:

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

APT::Default-Release "stable";

现在您已准备好将不稳定的存储库添加到源列表中。 在我更喜欢检查安装系统时我选择了哪个镜像之前。只需查看主要来源列表:

cat /etc/apt/sources.list

在我的例子中,输出显示mirror.yandex.ru 服务器被用作系统源。所以我对unstables使用相同的并添加这个文件:

/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

(我还有 90-debian-testing.list 用于测试存储库的文件。)

然后更新包列表:

apt update

并检查您的系统不会从不稳定的来源更新:

apt list --upgradable

并重新检查是否需要安装包:

apt-cache policy openjdk-8-jdk

安装包:

apt install openjdk-8-jdk

查看新的符号链接:

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

在他们身上浪费几秒钟(或继续man 1 update-alternatives)。

【讨论】:

  • 这(不再?)工作,因为不稳定版本是针对与稳定发行版冲突的 libc6 版本构建的。
  • 即使APT::Default-Release "stable"; 背后有善意,使用它也不允许使用apt install openjdk-8-jdk 完成JDK 8 安装。
  • 这个反模式通常被称为"FrankenDebian"。它会导致许多问题升级/安装问题
  • 现在openjdk-8-jdkstretch 存储库中可用。见my answer
【解决方案4】:

这是我用来在 Bitbucket 的 Pipelines Docker 映像 NodeJS 10.16.2 上安装 OpenJDK 8 的脚本。 但是现在看到这个docker镜像是基于Stretch...

它基于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

更新

情况发生了变化,版本升级了。这是适用于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

【讨论】:

    【解决方案5】:

    我需要安装一个 32 位版本,但据我所知,在采用 openjdk 时没有此版本。我在 java.com 的下载区找到了一个二进制文件的副本:

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

    我只需要 JRE(而不是 JDK,但两者的过程应该相同),而且由于它也仅供个人使用,所以 Oracle 二进制文件是可以的(他们在这方面有限制)。

    我下载了二进制文件并将其放在需要运行它的用户的主文件夹 (~/) 中,然后像这样解压缩它:

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

    然后通过将此行附加到 ~/.profile 将位置添加到将运行 Java 应用程序的用户路径:

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

    这对我来说效果很好,但毫无疑问有更好的方法来安装二进制文件。例如,它适用于所有 Unix 用户,而不仅仅是一个。

    【讨论】:

      【解决方案6】:

      安装 JDK8 最简单的方法是使用SDKMAN

      $ curl -s "https://get.sdkman.io" | bash
      $ source "$HOME/.sdkman/bin/sdkman-init.sh"
      $ sdk install java 8.0.275.hs-adpt
      

      【讨论】:

        【解决方案7】:

        基于上述一些答案,这是我在运行 node 12.x (node:12.6-buster-slim) 的 debian buster silm os 上的 shell 脚本中使用的内容

        这是在准备转移到 github 操作本地测试与 act,请注意不需要 sudo,因为此容器中的 ci 测试已经是 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
        

        【讨论】:

          【解决方案8】:

          我发现,主要是在使用具有特定 java 要求的已弃用 iDrac 控制台多年之后,最好安装多个版本的 JRE 或 JDK,因为您可以根据需要在它们之间进行选择,而不必担心其他依赖项或破坏您的包管理器。

          这实际上在 Debian 上非常简单,很可能在其他 linux 上,通过一起避开包管理器并手动安装您需要的任何版本。

          从 Oracle 档案库(您需要一个免费的 Oracle 帐户)下载所需的 jre/jdk 以获取所需的任何架构:https://www.oracle.com/java/technologies/downloads/archive/

          我从菜单中选择了“Java SE 8(8u211 及更高版本)”,并找到了 jre-8u271-linux-x64.tar.gz。

          从那里,将存档解压缩到运行 java 的用户可以访问的位置;通常我会解压到“/usr/local/lib/jre1.8.0_271/”。

          从这里你可以成功运行/usr/local/lib/jre1.8.0_271/bin/java,以及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)
          

          在我的大多数系统上,我已经安装了一些本机版本的 jre 打包版本,所以我的 /usr/bin/java 和 /usr/bin/javaws 通常是 /etc/alternatives/java /etc 的符号链接/alternatives/javaws,分别。

          要将系统切换到特定的 jre,只需更新相关符号链接以指向您选择的版本:

          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
          

          请注意,如果您需要 jre 7、11 和 17,您可以下载每个版本并将其解压缩到 /usr/local/lib 中的特定命名文件夹,或者如果您要手动启动它,则可以将其解压缩到您的主目录,并根据需要通过更新符号链接或直接运行它们来单独使用它们。

          【讨论】:

            【解决方案9】:

            我从 Jessie 迁移到 Buster,发现不太旧的遗留代码无法在 JDK11 上编译和运行。

            我设法从我的 Jessie 发行版中复制了所有 java8 文件夹,重新设计了链接,并将其设置为 Eclipse 上的新 JDK。到目前为止有效。

            【讨论】:

              【解决方案10】:

              我发现在 debian buster 上下载 java 8 的最简单方法是使用命令 su apt-get install openjdk-8-jdk

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2023-03-21
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2022-08-18
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多