Automatyczna instalacja Java (z cichą opcją)

104

Próbuję zainstalować Javę przez apt-get.

Znalazłem ten PPA Instalatorów Java , jednak kiedy dodam repozytorium, zaktualizuję, a następnie wydam polecenie apt-get install -y, instalator java przejmie kontrolę i wyświetli się opcja konfiguracji.

Mam nadzieję, że będę mógł go zainstalować bez interwencji lub naciskania klawiatur, ponieważ tworzę skrypty kompilacji i wdrażania dla moich instancji EC2, które automatycznie instalują wszystkie oznaczone pakiety, których potrzebuje.

Czy są jakieś inne opcje?

Layke
źródło

Odpowiedzi:

147

Jeśli OpenJDK / OpenJRE działa dla ciebie dobrze, zalecam użycie tego pakietu zamiast sugerowanego przez @SAM. Jednak niektóre oprogramowanie naprawdę wymaga JDK / JRE Oracle. Ta odpowiedź brzmi: jak wyciszyć pytanie licencyjne za pomocą pakietu Oracle z PPA.

Po pierwsze, rozpoznajmy, że zadane pytanie jest funkcją pakietu, stworzoną przez programistę.

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

Jak wskazał @Nate w swojej odpowiedzi, powinna istnieć cicha opcja. I jest. Zrób to przed zainstalowaniem:

$ 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

To ustawia wartość klucza debconf na true, ale także oznacza go jako widziany przez użytkownika. Teraz to pytanie nie powinno się pojawić!

Jak to znalazłem?

W źródle pakietu wyśledziłem to w oracle-java7-installer.preinstpliku:

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

Wygląda na to, że używa wartości debconf dla klucza, shared/accepted-oracle-license-v1-1aby sprawdzić, czy użytkownik już zaakceptował licencję. Jeśli tak, skrypt zakończy działanie z wdziękiem i pozwoli na kontynuowanie instalacji bez zadawania pytania. Powinniśmy teraz powiedzieć debconfowi, że już akceptujesz licencję Oracle 1.1.

Więcej informacji można znaleźć na stronie podręcznika debconf-set-selections, ale to jest przykład twojego problemu i działa podobnie w przypadku innych pakietów. Jakie inne klucze masz w swoim systemie w bazie danych debconf? Zainstaluj debconf-utilsi zrób

$ sudo debconf-get-selections

Następnie grep, aby uzyskać więcej kluczy, które musisz ustawić w automatycznej instalacji. Jest to o wiele bardziej elastyczne niż używanie -yz, apt-getponieważ daje możliwość ustawienia innych niż domyślne ustawień dla czasów instalacji.

gertvdijk
źródło
9
Fantastyczna odpowiedź. :)
Layke,
3
Świetna odpowiedź. Działa również ze skryptu powłoki.
Derek
3
Działa również dla Java 8 .
jameshfisher
Nie są potrzebne cudzysłowy dla echa poleceń akceptacji licencji?
David,
1
@David Nie w tym przypadku; jeśli je dodasz, wynik echobędzie dokładnie taki sam.
gertvdijk
55

Cicha instalacja Java 6/7/8/9 przy użyciu PPA zespołu 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

Odpowiedź @gertvdijk nie działała ze mną na Ubuntu 14.04 i 14.10

Rahul Thakur
źródło
1
działa świetnie 16.04
pneumatyka
To już nie działa
Ahmed Mostafa,
@AhmedMostafa Czy możesz powiadomić innych, gdzie próbowałeś tego.
Rahul Thakur,
1
Działa oracle-java9-installerteż dla .
Kohányi Róbert
1
działa idealnie z obrazem opartym na Google / Cloud-SDK
Xin Meng
13

Odpowiedź na @gertvdijk to opis w oryginalnym poście na blogu o PPA webupd8.

Aktualizacja 2: instalator wymaga teraz zaakceptowania licencji Oracle przed rozpoczęciem instalacji. Jest to wymagane tylko raz. Jeśli z jakiegoś powodu potrzebujesz zautomatyzowanej instalacji, możesz uruchomić następującą komendę, aby automatycznie zaakceptować licencję Oracle:

sudo echo oracle-java7-installer shared/accepted-oracle-license-v1-1 select true | \
sudo /usr/bin/debconf-set-selections
Hosam Aly
źródło
Oto linia magii, której potrzebowałem do mojej cichej instalacji Oracle Java - dzięki @Hosam
Phantomwhale
Nie ma za co @ Phantomwhale
Hosam Aly
Czy się mylę, czy w twojej odpowiedzi jest brakująca / dodatkowa postać?
David,
11

Za pomocą dokera ubuntu16.04LTS zweryfikowałem następujące zdanie.

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
źródło
Próbowałem i nie działa.
Ahmed Mostafa,
Potwierdzono pracę dla mnie w docker-ce 18.05 na Kubuntu 18.04: D instalacja w i386/ubuntu:18.04kontenerze.
BeepDog
2

W przypadku cichej instalacji Java można wypróbować open-jdk:

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

Wypróbuj również, aby uzyskać więcej pakietów / rozszerzeń open-jdk ...

sudo apt-cache search openjdk

Sam
źródło
To rozwiązanie działało świetnie. sudo apt-get install -y openjdk-7-jdk
Layke
0

To jest fragment pliku Docker, którego użyłem do pomyślnego zbudowania obrazu dokera opartego na Debianie:

( Odniesienie )

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
źródło