Instalar Java automáticamente (con opción silenciosa)

104

Estoy tratando de instalar Java a través de apt-get.

Encontré este PPA de instaladores Java , sin embargo, cuando agrego el repositorio, actualizo y luego emito el comando apt-get install -y, el instalador para java se hace cargo y aparece una opción de configuración.

Espero poder instalarlo sin ninguna intervención o pulsación de teclados ya que estoy creando scripts de compilación e implementación para mis instancias EC2 que instalarán automáticamente todos los paquetes etiquetados que necesita.

¿Hay alguna otra opción?

Layke
fuente

Respuestas:

147

Si OpenJDK / OpenJRE funciona bien para usted, le recomiendo usar ese paquete en su lugar como lo sugiere @SAM. Sin embargo, algunos programas realmente requieren JDK / JRE de Oracle. Esta respuesta es cómo silenciar la pregunta de licencia con el paquete de Oracle del PPA.

Primero, reconozcamos que la pregunta que se hace es una característica del paquete, creada por el desarrollador.

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 indicó en su respuesta, debería haber una opción silenciosa. Y ahí está. Haga esto antes de instalarlo:

$ 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

Esto establece el valor de la clave debconf en verdadero, pero también lo marca como lo ve el usuario. ¡Ahora esta pregunta no debería aparecer!

¿Cómo encontré esto?

En la fuente del paquete, rastreé esto en el oracle-java7-installer.preinstarchivo:

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, utiliza el valor de debconf para la clave shared/accepted-oracle-license-v1-1para verificar si el usuario ya ha aceptado la licencia. Si es así, el script se cerrará correctamente y permitirá que la instalación continúe sin hacerle la pregunta. Ahora deberíamos decirle a debconf que ya acepta la Licencia Oracle 1.1.

Consulte la página de manual de debconf-set-selectionsmás detalles, pero este es el ejemplo de su problema y funciona de manera similar para otros paquetes. ¿Qué otras claves tiene en su sistema en la base de datos de debconf? Instalar debconf-utilsy hacer

$ sudo debconf-get-selections

Luego, busque más claves que necesita configurar en su instalación automatizada. Esto es mucho más flexible que usar -ycon, apt-getya que le da la oportunidad de establecer configuraciones distintas de las predeterminadas en los tiempos de instalación.

gertvdijk
fuente
¿No se necesitan citas para el eco de los comandos de aceptación de licencia?
David
1
@David No para este caso; si los agregara, la salida de echosería exactamente la misma.
gertvdijk
55

Instalación silenciosa de Java 6/7/8/9 usando el PPA del equipo 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

La respuesta de @gertvdijk no funcionó conmigo en Ubuntu 14.04 y 14.10

Rahul Thakur
fuente
1
funciona muy bien el 16.04
neumática
Esto ya no funciona
Ahmed Mostafa
@AhmedMostafa ¿Puedes decirles a otros dónde intentaste esto?
Rahul Thakur
1
Funciona para oracle-java9-installertambién.
Kohányi Róbert
1
este trabajo es perfecto con la imagen basada en google / cloud-sdk
Xin Meng
13

La respuesta de @gertvdijk es la descripción en la publicación original del blog sobre el PPA de webupd8.

Actualización 2: el instalador ahora requiere que acepte la licencia de Oracle antes de que comience la instalación. Esto solo se requiere una vez. Si por alguna razón necesita que la instalación sea automatizada, puede ejecutar el siguiente comando para aceptar automáticamente la licencia de Oracle:

sudo echo oracle-java7-installer shared/accepted-oracle-license-v1-1 select true | \
sudo /usr/bin/debconf-set-selections
Hosam Aly
fuente
Esa es la línea de magia que necesitaba para mi instalación silenciosa de Oracle Java - gracias @Hosam
Phantomwhale
De nada @Phantomwhale
Hosam Aly
¿Me equivoco o falta un carácter "" "extra en su respuesta?
David
11

Verifiqué que la siguiente oración funcione para mí usando 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
fuente
Lo intenté y no funciona.
Ahmed Mostafa
Se confirmó que trabajaba para mí en docker-ce 18.05 en Kubuntu 18.04: D instalando en un i386/ubuntu:18.04contenedor.
BeepDog
2

Para una instalación silenciosa de Java, puede probar open-jdk:

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

También intente esto para más paquetes / extensiones open-jdk ...

sudo apt-cache search openjdk

Sam
fuente
Esta solución funcionó muy bien. sudo apt-get install -y openjdk-7-jdk
Layke
0

Este es un extracto del Dockerfile que he usado para construir con éxito una imagen de Docker basada en Debian:

( Referencia )

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
fuente