Java automatisch installieren (mit Silent Option)

104

Ich versuche Java über apt-get zu installieren.

Ich habe diese PPA von Java-Installationsprogrammen gefunden . Wenn ich jedoch das Repository hinzufüge, aktualisiere und dann den Befehl apt-get install -y ausführe, übernimmt das Installationsprogramm für Java und es wird eine Konfigurationsoption angezeigt.

Ich hoffe, dass ich es ohne Eingreifen oder Drücken von Tastaturen installieren kann, da ich für meine EC2-Instanzen Build- und Deploy-Skripte erstelle, die automatisch alle benötigten getaggten Pakete installieren.

Gibt es noch andere Möglichkeiten?

Layke
quelle

Antworten:

147

Wenn OpenJDK / OpenJRE für Sie gut funktioniert, empfehle ich die Verwendung dieses Pakets, wie von @SAM vorgeschlagen. Für manche Software ist jedoch das JDK / JRE von Oracle erforderlich. Mit dieser Antwort können Sie die Lizenzfrage mit dem Oracle-Paket aus der PPA ausschalten.

Lassen Sie uns zunächst erkennen, dass die gestellte Frage ein Feature des Pakets ist, das vom Entwickler erstellt wurde.

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

Wie @Nate in seiner Antwort angegeben hat, sollte es eine stille Option geben. Und da ist. Tun Sie dies, bevor Sie es installieren:

$ 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

Dies setzt den Wert des Schlüssels debconf auf true, markiert ihn aber auch als vom Benutzer gesehen. Nun sollte diese Frage nicht erscheinen!

Wie habe ich das gefunden?

In der Quelle des Pakets habe ich dies in der oracle-java7-installer.preinstDatei aufgespürt :

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

Anscheinend wird der Wert von debconf für den Schlüssel verwendet shared/accepted-oracle-license-v1-1, um zu überprüfen, ob der Benutzer die Lizenz bereits akzeptiert hat. Ist dies der Fall, wird das Skript ordnungsgemäß beendet und die Installation fortgesetzt, ohne dass Sie eine Frage stellen müssen. Wir sollten jetzt nur debconf mitteilen, dass Sie die Oracle License 1.1 bereits akzeptieren.

debconf-set-selectionsWeitere Informationen finden Sie in der Manpage von. Dies ist jedoch das Beispiel für Ihr Problem und funktioniert für andere Pakete ähnlich. Welche anderen Schlüssel haben Sie auf Ihrem System in der Datenbank von debconf? Installieren debconf-utilsund ausführen

$ sudo debconf-get-selections

Dann suchen Sie nach weiteren Schlüsseln, die Sie in Ihrer automatischen Installation festlegen müssen. Dies ist viel flexibler als die Verwendung -ymit, apt-getda Sie die Möglichkeit haben, andere als die Standardeinstellungen für die Installationszeiten festzulegen.

gertvdijk
quelle
9
Fantastische Antwort. :)
Layke
3
Geniale Antwort. Funktioniert auch über ein Shell-Skript.
Derek
Keine Anführungszeichen für das Echo der Lizenzannahmebefehle erforderlich?
David
1
@ David Nicht für diesen Fall; Wenn Sie sie hinzufügen würden, wäre die Ausgabe von echogenau gleich.
Gertvdijk
55

Automatische Installation von Java 6/7/8/9 mit dem PPA des WebUpd8-Teams

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 Antwort hat bei mir auf Ubuntu 14.04 & 14.10 nicht funktioniert

Rahul Thakur
quelle
1
funktioniert am 16.04
Pneumatik
Dies funktioniert nicht mehr
Ahmed Mostafa
@AhmedMostafa Können Sie anderen mitteilen, wo Sie dies versucht haben?
Rahul Thakur
1
Funktioniert auch für oracle-java9-installer.
Kohányi Róbert
1
Diese Arbeit perfekt mit Google / Cloud-SDK-basierten Bild
Xin Meng
13

Unterstützende Antwort von @gertvdijk ist die Beschreibung in dem ursprünglichen Blog-Beitrag über die PPA von webupd8.

Update 2: Das Installationsprogramm erfordert jetzt, dass Sie die Oracle-Lizenz akzeptieren, bevor die Installation beginnt. Dies ist nur einmal erforderlich. Wenn die Installation aus irgendeinem Grund automatisiert werden muss, können Sie den folgenden Befehl ausführen, um die Oracle-Lizenz automatisch zu akzeptieren:

sudo echo oracle-java7-installer shared/accepted-oracle-license-v1-1 select true | \
sudo /usr/bin/debconf-set-selections
Hosam Aly
quelle
Das ist die magische Linie, die ich für meine unbeaufsichtigte Installation von Oracle Java brauchte - danke @Hosam
Phantomwhale
Gern geschehen @Phantomwhale
Hosam Aly
Habe ich mich geirrt oder enthält Ihre Antwort ein fehlendes / zusätzliches "` "Zeichen?
David
11

Ich überprüfte die folgende Satzarbeit für mich, indem ich Docker ubuntu16.04LTS verwendete.

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
quelle
Ich habe es versucht und es funktioniert nicht.
Ahmed Mostafa
Bestätigt, für mich am Docker-ce 18.05 auf Kubuntu 18.04 zu arbeiten: D Installation in einem i386/ubuntu:18.04Container.
BeepDog
2

Für eine stille Java installieren Sie Open-JDK ausprobieren können:

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

Versuchen Sie dies auch für weitere open-jdk-Pakete / -Erweiterungen ...

sudo apt-cache search openjdk

Sam
quelle
Diese Lösung hat hervorragend funktioniert. sudo apt-get install -y openjdk-7-jdk
Layke
0

Dies ist ein Auszug aus der Docker-Datei, mit der ich erfolgreich ein Debian-basiertes Docker-Image erstellt habe:

( Referenz )

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
quelle