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

Modified on: Sat, 09 Jun 2018 00:23:23 +0800

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

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

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

还有其他选择吗?

作者:,Layke

最佳答案

如果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" &gt;&amp;2 exit 0 fi

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

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

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

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

作者:,gertvdijk

相关问答

添加新评论