Как установить 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
,