在执行sudo apt-get -y install oracle-java7-installer命令时,自动同意许可协议。

53

Ubuntu的Oracle Java软件包会交互式地询问许可协议。因此,每次我都需要点击“OK”和“yes”,但我希望能够自动化这个过程。我的解决方法如下:

sudo add-apt-repository -y ppa:webupd8team/java
sudo apt-get update
sudo apt-get -y install oracle-java7-installer 

有没有一种简单的方法来自动化协议过程而不使用expect?


由于您询问的是 Ubuntu/Debian 软件包管理器的使用,因此您的问题最好适用于 Ask UbuntuUnix & Linux Stack Exchange - zakinster
在askubuntu上:http://askubuntu.com/questions/190582/installing-java-automatically-with-silent-option - Ciro Santilli OurBigBook.com
5个回答

111

试一下这个:

sudo add-apt-repository -y ppa:webupd8team/java
sudo apt-get update
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
sudo apt-get -y install oracle-java7-installer 

在我的Debian 7.1上运行第三和第四个命令会有所帮助,因此我认为在Ubuntu上也可能有同样的帮助。


@KJTanaka:不用客气!如果这个解决方案对您有帮助,请考虑接受它作为解决方案;如果它并没有完全解决您的问题,请提出更多细节。谢谢。 - Maxym
其中一部分已在Ubuntu的add-apt-repositoryapt-getdebconf手册上有记录。您也可以使用命令行获取详细信息。 - Ashesh
一个小提示,许可证号码会随着时间的推移而改变,我不得不调整到 v1-3,未来它肯定会再次增加。 - quickshiftin

36
如果您正在使用Ansible进行自动化,您可能希望将以下内容放入您的playbook中:
tasks:

  - name: add java PPA
    apt_repository:
      repo: "ppa:webupd8team/java"

  - name: accept oracle license
    debconf:
      name: "oracle-java7-installer"
      question: "shared/accepted-oracle-license-v1-1"
      value: "true"
      vtype: "select"

  - name: install jdk
    apt:
      name: "oracle-java7-installer"

注意:在debconf中,value参数必须设置为"true",包括引号,如Roy Woodcomment所述。

3
它也适用于使用- name: accept oracle license debconf: name='oracle-java8-installer' question='shared/accepted-oracle-license-v1-1' value='true' vtype='select'的Oracle Java 8安装程序。 - DoRivard
5
请注意,在debconf值中使用引号非常重要!如果您在播放本书中只使用“value:true”,则debconf数据库中的值将被设置为“True”,并且静默安装将因“oracle-license-v1-1 license could not be presented”的常规警告而失败。您必须在播放本书中指定“value:'true'”以确保将debconf设置设置为“true”,这是Oracle安装程序正在寻找的确切字符串! - Roy Wood
我希望更多的系统配置问题可以用Ansible语法来回答 :D - jonatan

10

ppa:linuxuprising/java && oracle-java11-installer

如果有人使用Linux Uprising的Java 11安装程序,并且遇到此问题,请参阅以下链接:

  1. https://launchpad.net/~linuxuprising/+archive/ubuntu/java
  2. https://www.linuxuprising.com/2018/10/how-to-install-oracle-java-11-in-ubuntu.html

与其在答案中列出的命令不同,您需要使用以下命令:

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

这是我针对基于Ubuntu 18.04的容器的Docker设置:

RUN apt-get update && apt-install -y software-properties-common && \
    add-apt-repository -y ppa:linuxuprising/java && \
    apt-get update && \
    echo oracle-java11-installer shared/accepted-oracle-license-v1-2 select true | sudo /usr/bin/debconf-set-selections && \
    apt-get install -y oracle-java11-installer && \
    apt install oracle-java11-set-default

2
我可以确认这个答案也适用于Java 12。请注意,许可证名称与被接受的答案不同:v1-2而不是v1-1。 - Paul
现在它显示“'oracle-java11-installer'没有安装候选项”。 - Khaled AbuShqear
添加ppa linuxuprising/java 对我没有用,我使用了这个修复方法: echo "deb http://ppa.launchpad.net/linuxuprising/java/ubuntu bionic main" | sudo tee /etc/apt/sources.list.d/linuxuprising-java.list && apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 73C3DB2A - Khaled AbuShqear

3

如果您使用的是 Java 11,则可以使用以下代码:

add-apt-repository ppa:linuxuprising/java
echo debconf shared/accepted-oracle-license-v1-2 select true | debconf-set-selections
echo debconf shared/accepted-oracle-license-v1-2 seen true | debconf-set-selections
apt-get update && apt-get install -y oracle-java11-installer

这在 Docker 容器中完美运行。


1

就像其他答案一样,以下内容适用于JDK 17

accepted-oracle-license-v1-3 - 具体而言

echo oracle-java17-installer shared/accepted-oracle-license-v1-3 select true | sudo /usr/bin/debconf-set-selections

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接