Instalando o Java automaticamente (com opção silenciosa)

104

Estou tentando instalar o Java através do apt-get.

Eu encontrei esse PPA de instaladores Java , no entanto, quando adiciono o repositório, atualizo e emito o comando apt-get install -y, o instalador do java assume o controle e abre uma opção de configuração.

Espero poder instalá-lo sem nenhuma intervenção ou pressionamento de teclados, pois estou criando scripts de compilação e implantação para minhas instâncias do EC2, que instalam automaticamente todos os pacotes marcados necessários.

Existem outras opções?

Layke
fonte

Respostas:

147

Se o OpenJDK / OpenJRE funcionar bem, recomendamos o uso desse pacote, conforme sugerido pelo @SAM. No entanto, alguns softwares realmente requerem o JDK / JRE da Oracle. Esta resposta é como silenciar a questão da licença com o pacote Oracle do PPA.

Primeiro, vamos reconhecer que a pergunta é um recurso do pacote, criado pelo desenvolvedor.

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

Como @Nate indicou em sua resposta, deve haver uma opção silenciosa. E aqui está. Faça isso antes de instalá-lo:

$ 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

Isso define o valor da chave debconf como true, mas também a marca como vista pelo usuário. Agora esta pergunta não deve aparecer!

Como eu encontrei isso?

Na fonte do pacote, localizei isso no oracle-java7-installer.preinstarquivo:

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

Aparentemente, ele usa o valor do debconf para a chave shared/accepted-oracle-license-v1-1para verificar se o usuário já aceitou a licença. Se for, o script será encerrado normalmente e permitirá que a instalação continue sem fazer a pergunta. Agora devemos dizer ao debconf que você já aceita a Licença do Oracle 1.1.

Consulte a página de manual debconf-set-selectionssobre mais detalhes, mas este é o exemplo do seu problema e funciona de maneira semelhante para outros pacotes. Quais outras chaves você possui no seu sistema no banco de dados do debconf? Instale debconf-utilse faça

$ sudo debconf-get-selections

Então, grep para obter mais chaves que você precisa definir na sua instalação automatizada. Esta é a maneira mais flexível do que usar -ycom apt-getque lhe dá a oportunidade de definir diferente de configurações padrão no tempo de instalação.

gertvdijk
fonte
9
Resposta fantástica. :)
Layke 19/09/12
3
Resposta incrível. Também funciona a partir de um script de shell.
Derek #
3
Também funciona para Java 8 .
Jameshfisher 5/05
Não são necessárias aspas para o eco dos comandos de aceitação de licença?
David David
1
@ David Não neste caso; se você os adicionasse, a saída de echoseria exatamente a mesma.
gertvdijk
55

Instalação silenciosa do Java 6/7/8/9 usando o PPA da equipe WebUpd8

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

A resposta @gertvdijk não funcionou comigo no Ubuntu 14.04 e 14.10

Rahul Thakur
fonte
1
funciona muito bem em 16.04
pneumatics
Isso não está mais funcionando
Ahmed Mostafa
@AhmedMostafa Você pode informar aos outros onde você tentou isso.
Rahul Thakur
1
Funciona para oracle-java9-installertambém.
Kohányi Róbert
1
este trabalho perfeito da imagem com base google / cloud-sdk com
Xin Meng
13

A resposta @gertvdijk de suporte é a descrição na postagem original do blog sobre o PPA do webupd8.

Atualização 2: o instalador agora exige que você aceite a licença do Oracle antes do início da instalação. Isso é necessário apenas uma vez. Se, por algum motivo, você precisar que a instalação seja automatizada, você poderá executar o seguinte comando para aceitar automaticamente a licença do Oracle:

sudo echo oracle-java7-installer shared/accepted-oracle-license-v1-1 select true | \
sudo /usr/bin/debconf-set-selections
Hosam Aly
fonte
Essa é a linha de mágica que eu precisava para a minha instalação silenciosa do Oracle Java - obrigado @Hosam
Phantomwhale
Você é bem-vindo @Phantomwhale
Hosam Aly
Estou enganado, ou há um caractere "" "ausente / extra em sua resposta?
David David
11

Eu verifiquei a seguinte frase trabalhando para mim usando o 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
keniee van
fonte
Eu tentei e não está funcionando.
Ahmed Mostafa
Confirmado o trabalho para mim no docker-ce 18.05 no Kubuntu 18.04: D instalando em um i386/ubuntu:18.04contêiner.
BeepDog
2

Para uma instalação silenciosa em java, você pode tentar o open-jdk:

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

Tente também isso para mais pacotes / extensões open-jdk ...

pesquisa de apt-cache do sudo openjdk

Sam
fonte
Esta solução funcionou muito bem. sudo apt-get install -y openjdk-7-jdk
Layke
0

Este é um trecho do Dockerfile que eu usei para criar com êxito uma imagem de janela de encaixe baseada no Debian:

( Referência )

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
SteoG5972
fonte