Автоматическая установка Java (с опцией Silent)

104

Я пытаюсь установить Java через apt-get.

Я нашел этот PPA для установщиков Java , однако, когда я добавляю репозиторий, обновляю и затем запускаю команду apt-get install -y, установщик java вступает во владение и выскакивает параметр конфигурации.

Я надеюсь, что смогу установить его без какого-либо вмешательства или нажатия клавиш, так как я создаю сценарии сборки и развертывания для своих экземпляров EC2, которые автоматически установят все необходимые пакеты с тегами.

Есть ли другие варианты?

Layke
источник

Ответы:

147

Если OpenJDK / OpenJRE работает для вас нормально, я рекомендую использовать этот пакет вместо этого, как предложено @SAM. Однако для некоторых программ действительно требуется Oracle JDK / JRE. Этот ответ заключается в том, как заставить замолчать вопрос о лицензии с пакетом Oracle от PPA.

Во-первых, давайте признаем, что заданный вопрос является особенностью пакета, созданного разработчиком.

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 License 1.1.

Пожалуйста, обратитесь к man-странице debconf-set-selectionsболее подробной информации, но это пример вашей проблемы и работает аналогично для других пакетов. Какие еще ключи есть в вашей системе в базе данных debconf? Установить debconf-utilsи сделать

$ sudo debconf-get-selections

Затем grep для дополнительных ключей, которые вам нужно установить в вашей автоматической установке. Это намного гибче, чем использование -yс, apt-getпоскольку дает вам возможность установить другие параметры, отличные от настроек по умолчанию во время установки.

gertvdijk
источник
Никаких кавычек не требуется для эха команд принятия лицензии?
Дэвид
1
@ Давид Не для этого случая; если вы добавите их, результат echoбудет точно таким же.
gertvdijk
55

Тихая установка Java 6/7/8/9 с использованием PPA команды 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

Ответ @gertvdijk не работал со мной в Ubuntu 14.04 и 14.10

Рахул Тхакур
источник
1
отлично работает на 16.04
пневматика
Это больше не работает
Ахмед Мостафа,
@AhmedMostafa Можете ли вы рассказать другим, где вы это попробовали.
Рахул Тхакур
1
Работает oracle-java9-installerтоже.
Коханьи Роберт
1
эта работа идеально подходит для изображений на основе Google / Cloud-SDK
Синь Мэн,
13

Ответом @gertvdijk является описание в оригинальном сообщении в блоге о PPA webupd8.

Обновление 2: установщик теперь требует, чтобы вы приняли лицензию Oracle до начала установки. Это требуется только один раз. Если по какой-либо причине вам требуется автоматизировать установку, вы можете запустить следующую команду, чтобы автоматически принять лицензию Oracle:

sudo echo oracle-java7-installer shared/accepted-oracle-license-v1-1 select true | \
sudo /usr/bin/debconf-set-selections
Хосам Али
источник
Это линия волшебства, которая мне понадобилась для моей тихой установки Oracle Java - спасибо @Hosam
Phantomwhale
Добро пожаловать @Phantomwhale
Хосам Али
Я ошибаюсь, или в вашем ответе отсутствует / лишний символ "` "?
Дэвид
11

Я проверил следующее предложение для меня, используя 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
Кени ван
источник
Я попробовал, и это не работает.
Ахмед Мостафа,
Подтвердил работу у меня на docker-ce 18.05 на Kubuntu 18.04: D установка в i386/ubuntu:18.04контейнер.
BeepDog
2

Для бесшумной Явы установки вы можете попробовать открыть-JDK:

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

Также попробуйте это для других пакетов / расширений open-jdk ...

sudo apt-cache search openjdk

Сэм
источник
Это решение отлично сработало. sudo apt-get install -y openjdk-7-jdk
Layke
0

Это отрывок из Dockerfile, который я использовал для успешного создания образа докера на основе Debian:

( Ссылка )

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
источник