当前位置: 首页>>技术问答>>正文


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

,

问题描述

我试图通过apt-get安装Java。

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

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

还有其他的选择吗?

最佳解决思路

如果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 

正如@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

这会将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 

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

有关更多详细信息,请参阅debconf-set-selections的联机帮助页面,但这是您问题的示例,并且与其他程序包类似。在debconf的数据库中,你的系统还有其他什么键?安装debconf-utils并执行

$ sudo debconf-get-selections

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

次佳解决思路

使用WebUpd8 team’s 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

@gertvdijk答案在Ubuntu 14.04& 14.10

第三种解决思路

支持@gertvdijk answeroriginal blog post中关于webupd8的PPA的描述。

Update 2: the installer now requires you accept the Oracle license before the installation begins. This is only required once. If for some reason you need the installation to be automated, you can run the following command to automatically accept the Oracle license:

sudo echo oracle-java7-installer shared/accepted-oracle-license-v1-1 select true | \ sudo /usr/bin/debconf-set-selections 

第四种思路

我使用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

第五种思路

对于无提示安装Java,您可以尝试open-jdk:

sudo apt-get install -y openjdk-7-jdk

也可以试试更多open-jdk软件包/扩展……

sudo apt-cache search openjdk

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/690.html,未经允许,请勿转载。