Как установить Amazon Corretto в Ubuntu Linux?

Как мы можем установить Amazon Corretto в ОС Ubuntu.

3 ответа

При предварительном просмотре Ubuntu не поддерживается. Дистрибутив для Ubuntu будет доступен на GA, который запланирован на первый квартал 2019 года. См. Этот блог AWS

По большей части я смог проверить исходные коды Corretto и собрать их после того, как сделал два патча. Обратите внимание, что это, очевидно, не поддерживается Amazon. Если вы хотите поддерживаемый дистрибутив, подождите, пока он выйдет вместе с релизом GA. Это должно быть очевидно, но я узнал лучше, чем делать предположения здесь: не пробуйте это или что-то подобное в производственной или совместно используемой системе.

OTOH, если вы любите экспериментировать и ломать вещи, читайте дальше!

1. Проверьте исходное дерево Corretto.

git clone git@github.com:corretto/corretto-8.git

2. Примените патчи.

Я столкнулся с двумя ошибками компиляции (вероятно, из-за разных версий компилятора в Amazon Linux 2 против Ubuntu 18.04.1 LTS).

% patch -p1
diff --git a/src/hotspot/src/share/vm/code/dependencies.cpp b/src/hotspot/src/share/vm/code/dependencies.cpp
index c284160e..c4c8e9b4 100644
--- a/src/hotspot/src/share/vm/code/dependencies.cpp
+++ b/src/hotspot/src/share/vm/code/dependencies.cpp
@@ -525,7 +525,7 @@ void Dependencies::write_dependency_to(xmlStream* xtty,
         xtty->object("x", arg.metadata_value());
       }
     } else {
-      char xn[10]; sprintf(xn, "x%d", j);
+      char xn[12]; sprintf(xn, "x%d", j);
       if (arg.is_oop()) {
         xtty->object(xn, arg.oop_value());
       } else {
diff --git a/src/hotspot/src/share/vm/runtime/fprofiler.cpp b/src/hotspot/src/share/vm/runtime/fprofiler.cpp
index 58cb6e89..89aa0cd8 100644
--- a/src/hotspot/src/share/vm/runtime/fprofiler.cpp
+++ b/src/hotspot/src/share/vm/runtime/fprofiler.cpp
@@ -635,7 +635,7 @@ class vmNode : public ProfilerNode {
   const char *name()    const { return _name; }
   bool is_compiled()    const { return true; }

-  bool vm_match(const char* name) const { return strcmp(name, _name) == 0; }
+  bool vm_match(const char* name) const { return name == NULL ? false : strcmp(name, _name) == 0; }

   Method* method()          { return NULL; }

Затем нажмите Ctrl+D дважды. Тебе следует увидеть:

patching file src/hotspot/src/share/vm/code/dependencies.cpp
patching file src/hotspot/src/share/vm/runtime/fprofiler.cpp

3. Установите зависимости.

Это может быть чем-то вроде игры в кошки-мышки. В моем случае у меня было все необходимое, кроме libcups2-dev и libasound2-dev.

apt install -y libcups2-dev libasound2-dev

Шаг настройки (следующий) был удивительно ясен о том, что, по его мнению, не хватало.

4. Настроить

Настройте исходное дерево:

cd src
./configure

Если все пойдет хорошо, последние строки скажут что-то вроде:

A new configuration has been successfully created in
/home/dacut/projects/corretto-8/src/build/linux-x86_64-normal-server-release
using default settings.

Configuration summary:
* Debug level:    release
* JDK variant:    normal
* JVM variants:   server
* OpenJDK target: OS: linux, CPU architecture: x86, address length: 64

Tools summary:
* Boot JDK:       openjdk version "1.8.0_181" OpenJDK Runtime Environment (build 1.8.0_181-8u181-b13-1ubuntu0.18.04.1-b13) OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)  (at /usr/lib/jvm/java-8-openjdk-amd64)
* Toolchain:      gcc (GNU Compiler Collection)
* C Compiler:     Version 7.3.0 (at /usr/bin/gcc)
* C++ Compiler:   Version 7.3.0 (at /usr/bin/g++)

Build performance summary:
* Cores to use:   7
* Memory limit:   15757 MB

Если бы это было так, продолжай!

Если нет, вы увидите сообщение об ошибке. В моем случае они были весьма полезны:

configure: error: Could not find cups! You might be able to fix this by running 'sudo apt-get install libcups2-dev'. 
configure exiting with result code 1

configure: error: Could not find alsa! You might be able to fix this by running 'sudo apt-get install libasound2-dev'. 
configure exiting with result code 1

Установите то, что он советует (шаг 3), затем повторите попытку. Это может занять несколько итераций, поскольку вы получаете только одно сообщение за один запуск конфигурации.

5. Скомпилируйте

Бежать make, Если все пойдет хорошо, в конце вы увидите что-то вроде следующего:

## Finished jdk (build time 00:02:07)

----- Build times -------
Start 2018-11-24 13:30:24
End   2018-11-24 13:35:36
00:00:19 corba
00:02:18 hotspot
00:00:12 jaxp
00:00:16 jaxws
00:02:07 jdk
00:00:00 langtools
00:05:12 TOTAL
-------------------------
Finished building OpenJDK for target 'default'

Если нет... ну, теперь вы глубоко в экспериментальной части.

6. Установите

sudo make install

Теперь у вас будет встроенный Corretto /usr/local/jvm/openjdk-1.8.0-internal,

Отказ от ответственности: хотя я работаю в AWS, это чисто мои личные эксперименты, и я говорю только за себя. Эти шаги не санкционированы и не одобрены Amazon или командой Corretto. Действовать с осторожностью!

Был выпущен Amazon Corretto preview2, включающий пакеты для систем на основе Debian:

https://docs.aws.amazon.com/corretto/latest/corretto-8-ug/downloads-list.html

Есть немного более простой способ, который полагается на перевод пакета rpm в пакет deb, но вы можете потерять некоторые проверки зависимостей. Инструмент называется инопланетянином.

apt-get install alien -y

На сегодняшний день 2018-11-27 загрузите обороты JRE и JDK из amazon. Обороты JDK зависят от устанавливаемой JRE

> rpm -qpR java-1.8.0-amazon-corretto-devel-1.8.0_192.b12-1.amzn2.x86_64.rpm
...
java-1.8.0-amazon-corretto(x86-64) = 1:1.8.0_192.b12-1.amzn2
...

Затем установите оба пакета способом debian:

dpkg --install /java-*amd64.deb

Затем свяжите исполняемые файлы (выберите JRE или JDK), приведенные выше команды ожидают, что PATH переменная окружения содержит /usr/local/bin:

ln -s /usr/lib/jvm/java-*-amazon-corretto.x86_64/bin/* /usr/local/bin/ #JDK
ln -s /usr/lib/jvm/java-*-amazon-corretto.x86_64/jre/bin/* /usr/local/bin/ #JRE

Это должно произойти, если вам не нужно ничего особенного или если целевая ОС уже установила нужные зависимости. Но если нет, например, цель - это изображение контейнера, то все будет немного неприятнее, если вы правильно сделаете это, благодаря тому, как Debian работает с Java.

Также убедитесь, что у целевой ОС есть правильный glibc с ldd --version,

CA сертификаты

Первое, что вам может понадобиться - это сертификаты центрального органа - например, если код должен подключаться к сайтам https - поскольку он поставляется не с выпуском java, а с частью ОС. В противном случае вы, скорее всего, увидите всплывающее исключение, указывающее, что либо cacerts файл не найден, пуст или не имеет необходимых сертификатов.

javax.net.ssl.SSLException: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty

В RPM и сгенерированном deb cacerts файл связан с /etc/pki/java/cacerts который является каким-то обычным путем в Centos или Amazon Linux, этот файл уже находится в образе док-станции Centos по умолчанию, но в Debian или Ubuntu его нет. И вам, вероятно, придется установить ca-certificates-java который установит ca-certificates зависимость, но среди других также openjdk-8-jre-headless который затем связан через alternatives и используется по умолчанию.

apt-get install ca-certificates-java -y

Это установит небольшую Java-программу (/etc/ca-certificates/update.d/jks-keystore) который добавит каждый ca-certificate к недавно созданному хранилищу ключей JKS под названием /etc/ssl/certs/java/cacerts, Конечно, скрипт оболочки, запускающий эту java-программу, знает только о jdk, поставляемом Debian...

Если вы удалите ca-certificates-java и удалите ненужные зависимости, убедитесь, что этот файл /etc/ssl/certs/java/cacerts резервное копирование, чтобы вы могли восстановить его.

Тогда вам нужно будет заменить JRE cacerts ссылка на новый файл, например

ln -sf /etc/ssl/certs/java/cacerts /usr/lib/jvm/java-1.8.0-amazon-corretto.x86_64/jre/lib/security/cacerts

Работа с изображениями

Если JVM должна работать с изображениями, например, генерировать изображения с текстом и т. Д. JVM, вероятно, могут потребоваться дополнительные библиотеки. Мне нужно было установить libfontconfig1,

apt-get install libfontconfig1 -y

Так что это в основном методом проб и ошибок. Если нужно иметь все, можно проверить зависимости rpm. Так как именно JRE объявляет наиболее вероятный интерес, чтобы увидеть, если что-то отсутствует.

rpm -qpR java-1.8.0-amazon-corretto-1.8.0_192.b12-1.amzn2.x86_64.rpm

В этом списке перечислены библиотеки в самой JRE (например, libnio.so), но некоторые другие могут быть полезны для проверки как ldconfig -p | grep libzв зависимости от настроек может потребоваться быть суперпользователем для запуска ldconfig,

Другие вопросы по тегам