我正在尝试通过apt-get安装Java。
我找到了该Java安装程序的PPA,但是,当我添加存储库,更新并发出apt-get install -y命令时,java的安装程序将接管并弹出配置选项。
我希望能够在没有任何干预或按下键盘的情况下进行安装,因为我正在为我的EC2实例创建构建和部署脚本,该脚本将自动安装它所需的所有带标签的软件包。
还有其他选择吗?
我正在尝试通过apt-get安装Java。
我找到了该Java安装程序的PPA,但是,当我添加存储库,更新并发出apt-get install -y命令时,java的安装程序将接管并弹出配置选项。
我希望能够在没有任何干预或按下键盘的情况下进行安装,因为我正在为我的EC2实例创建构建和部署脚本,该脚本将自动安装它所需的所有带标签的软件包。
还有其他选择吗?
Answers:
如果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获取更多您需要在自动安装中设置的密钥。这比使用-y
with 更灵活,apt-get
因为它使您有机会在安装时间设置默认设置以外的其他设置。
echo
将完全相同。
使用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
@gertvdijk答案不适用于Ubuntu 14.04和14.10
oracle-java9-installer
太。
支持@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
我使用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
i386/ubuntu:18.04
容器中。
对于静默的 Java安装,您可以尝试open-jdk:
须藤apt-get install -y openjdk-7-jdk
也可以尝试此操作以获得更多open-jdk软件包/扩展...
sudo apt-cache搜索openjdk
Oracle Java不再位于Ubuntu存储库中。 http://www.omgubuntu.co.uk/2011/12/java-to-be-removed-from-ubuntu-uninstalled-from-user-machines
这是如何安装Java JDK。如何安装Oracle Java JDK 7?
应该有一个静默选项。
这是我用来成功构建基于Debian的Docker映像的Dockerfile的摘录:
(参考)
RUN apt-get update \
&& apt-get upgrade \
&& apt-get install -y gnupg
RUN echo "deb http://ppa.launchpad.net/webupd8team/java/ubuntu xenial main" | tee /etc/apt/sources.list.d/webupd8team-java.list
RUN echo "deb-src http://ppa.launchpad.net/webupd8team/java/ubuntu xenial main" | tee -a /etc/apt/sources.list.d/webupd8team-java.list
RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys EEA14886
RUN apt-get update
RUN echo "oracle-java8-installer shared/accepted-oracle-license-v1-1 select true" | sudo debconf-set-selections
RUN apt-get install -y oracle-java8-installer \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* \
&& R CMD javareconf