【发布时间】:2019-07-14 22:37:11
【问题描述】:
由于安全问题,Debian 似乎不再支持 openjdk-8-jdk。为 Debian 10 (Buster) 安装 openjdk-8-jdk 的最简单方法是什么?
【问题讨论】:
-
可能是adoptopenjdk.net。
由于安全问题,Debian 似乎不再支持 openjdk-8-jdk。为 Debian 10 (Buster) 安装 openjdk-8-jdk 的最简单方法是什么?
【问题讨论】:
或者,您可以使用采用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
【讨论】:
python:3.7-buster Docker 镜像中安装openjdk-8 你必须添加命令mkdir -p /usr/share/man/man1/
警告:这个答案表明不支持和危险的混合 Debian 发行版。遵循您自担风险的建议,因为它可能会破坏 升级中的系统,如中所述 http://wiki.debian.org/DontBreakDebian#Don.27t_make_a_FrankenDebian
在Search package directories 中搜索openjdk-8-jdk。可以看到两个结果:
选择拉伸存储库
滚动到下载 openjdk-8-jdk 部分并选择您的架构。例如amd64
现在您可以看到镜像列表以及如何通过 apt 安装软件包的说明:
您应该可以通过添加一行来使用列出的任何镜像 到你的 /etc/apt/sources.list 像这样:
deb http://security.debian.org/debian-security 拉伸/更新 main
安装软件源管理器
apt-get update
apt-get install software-properties-common
使用 openjdk-8-jdk 添加镜像
apt-add-repository 'deb http://security.debian.org/debian-security stretch/updates main'
apt-get update
安装openjdk 8
apt-get install openjdk-8-jdk
注意:您可以使用上述步骤找到官方的 Debian 镜像以及您要安装的任何其他软件包
【讨论】:
您可以搜索 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)。
【讨论】:
APT::Default-Release "stable"; 背后有善意,使用它也不允许使用apt install openjdk-8-jdk 完成JDK 8 安装。
openjdk-8-jdk 在stretch 存储库中可用。见my answer
这是我用来在 Bitbucket 的 Pipelines Docker 映像 NodeJS 10.16.2 上安装 OpenJDK 8 的脚本。 但是现在看到这个docker镜像是基于Stretch...
#!/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
【讨论】:
我需要安装一个 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 用户,而不仅仅是一个。
【讨论】:
安装 JDK8 最简单的方法是使用SDKMAN。
$ curl -s "https://get.sdkman.io" | bash
$ source "$HOME/.sdkman/bin/sdkman-init.sh"
$ sdk install java 8.0.275.hs-adpt
【讨论】:
基于上述一些答案,这是我在运行 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
【讨论】:
我发现,主要是在使用具有特定 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 中的特定命名文件夹,或者如果您要手动启动它,则可以将其解压缩到您的主目录,并根据需要通过更新符号链接或直接运行它们来单独使用它们。
【讨论】:
我从 Jessie 迁移到 Buster,发现不太旧的遗留代码无法在 JDK11 上编译和运行。
我设法从我的 Jessie 发行版中复制了所有 java8 文件夹,重新设计了链接,并将其设置为 Eclipse 上的新 JDK。到目前为止有效。
【讨论】:
我发现在 debian buster 上下载 java 8 的最简单方法是使用命令 su apt-get install openjdk-8-jdk
【讨论】: