自动安装 Java(使用静默选项)

Lay*_*yke 104 java

我正在尝试通过 apt-get 安装 Java。

我找到了 Java Installers 的这个PPA,但是,当我添加存储库、更新然后发出 apt-get install -y 命令时,java 安装程序接管并弹出一个配置选项。

我希望能够在没有任何干预或按下键盘的情况下安装它,因为我正在为我的 EC2 实例创建构建和部署脚本,这将自动安装它需要的所有标记包。

还有其他选择吗?

ger*_*ijk 147

如果 OpenJDK/OpenJRE 适合您,我建议您按照 @SAM 的建议使用该软件包。但是,有些软件确实需要 Oracle 的 JDK/JRE。这个答案是如何使用来自 PPA 的 Oracle 包解决许可证问题。

首先,让我们认识到所提出的问题是由开发人员创建的包的一个特性

oracle-java7-installer (7u7-0~webupd8~4) maverick; urgency=medium

  * removed cookie file use or else the PPA stays disabled
  * request the user to accept the Oracle license before installation
 -- Alin Andrei <webupd8@gmail.com>   Tue, 04 Sep 2012 14:18:29 +0200
Run Code Online (Sandbox Code Playgroud)

正如@Nate 在他的回答中指出的那样,应该有一个沉默的选择。有。在安装之前执行此操作:

$ echo debconf shared/accepted-oracle-license-v1-1 select true | \
  sudo debconf-set-selections
$ echo debconf shared/accepted-oracle-license-v1-1 seen true | \
  sudo debconf-set-selections
Run Code Online (Sandbox Code Playgroud)

这会将 debconf 键的值设置为 true,但也将其标记为用户可见。现在这个问题不应该出现!

我是怎么找到这个的?

在包的源代码中,我在oracle-java7-installer.preinst文件中找到了它:

license=oracle-license-v1-1

# snip

db_get shared/accepted-$license
if [ "$RET" = "true" ]; then
    echo "$license license has already been accepted" >&2
    exit 0
fi
Run Code Online (Sandbox Code Playgroud)

显然,它使用 debconf 的密钥值shared/accepted-oracle-license-v1-1来检查用户是否已经接受了许可证。如果是,脚本将正常退出并允许安装继续而不问您问题。我们现在应该告诉 debconf 您已经接受了 Oracle 许可 1.1。

请参阅debconf-set-selections有关更多详细信息的联机帮助页,但这是针对您的问题的示例,对于其他软件包的工作方式类似。在 debconf 的数据库中,您的系统上还有哪些其他键?安装debconf-utils并执行

$ sudo debconf-get-selections
Run Code Online (Sandbox Code Playgroud)

然后 grep 获取您需要在自动安装中设置的更多密钥。这比使用-ywith更灵活,apt-get因为它使您有机会在安装时间设置默认设置以外的设置。

  • [也适用于 Java 8](http://trac.lliurex.net/pandora/browser/oracle-java8-installer/trunk/debian/oracle-java8-installer.preinst?rev=7911)。 (3认同)

Rah*_*kur 55

使用WebUpd8 团队的 PPA静默安装 Java 6/7/8/9

sudo apt-get install -y python-software-properties debconf-utils
sudo add-apt-repository -y ppa:webupd8team/java
sudo apt-get update
echo "oracle-java8-installer shared/accepted-oracle-license-v1-1 select true" | sudo debconf-set-selections
sudo apt-get install -y oracle-java8-installer
Run Code Online (Sandbox Code Playgroud)

@gertvdijk 的答案在 Ubuntu 14.04 和 14.10 上对我不起作用


Hos*_*Aly 13

支持@gertvdijk答案是关于 webupd8 的 PPA的原始博客文章中的描述。

更新 2:安装程序现在要求您在安装开始前接受 Oracle 许可。这仅需要一次。如果由于某种原因需要自动安装,可以运行以下命令自动接受 Oracle 许可:

sudo echo oracle-java7-installer shared/accepted-oracle-license-v1-1 select true | \
sudo /usr/bin/debconf-set-selections
Run Code Online (Sandbox Code Playgroud)


小智 11

我使用 docker ubuntu16.04LTS 验证了以下句子对我有用。

RUN apt-get install -y software-properties-common
RUN add-apt-repository ppa:webupd8team/java && apt-get update

RUN echo "oracle-java8-installer shared/accepted-oracle-license-v1-1 select true" | debconf-set-selections
RUN echo "oracle-java8-installer shared/accepted-oracle-license-v1-1 seen true" | debconf-set-selections

RUN apt-get install -y oracle-java8-installer
Run Code Online (Sandbox Code Playgroud)