6

我们如何在 Ubuntu 操作系统中安装 Amazon Corretto。

4

4 回答 4

5

在 Preview 中不支持 Ubuntu。Ubuntu 的发行版将在 GA 发布,计划于 2019 年第一季度发布。请参阅此AWS 博客

于 2018-11-16T00:15:16.967 回答
4

在大多数情况下,我可以查看 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 工作,但这纯粹是我个人的实验,我只代表我自己。亚马逊或 Corretto 团队既不批准也不认可这些步骤。谨慎行事!

于 2018-11-24T22:18:20.860 回答
4

Amazon Corretto preview2 已发布,其中包含适用于基于 Debian 的系统的软件包:

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

于 2019-01-15T21:38:21.240 回答
3

有一些更简单的方法是依赖 rpm 包到 deb 包的转换,但是您可能会丢失一些依赖项检查。这个工具叫做外星人

apt-get install alien -y

截至今天 2018 年 11 月 27 日,从亚马逊下载 JRE 和 JDK rpm。JDK rpm 取决于要安装的 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文件未找到、为空或没有正确的 ca 证书。

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/cacertsCentos 或 Amazon linux 上的某种常规路径,该文件已经存在于默认的 centos docker 映像中,但对于 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到一个新创建的名为/etc/ssl/certs/java/cacerts. 当然,启动这个 java 程序的 shell 脚本只知道 Debian 提供的 jdk ......

如果您删除ca-certificates-java和修剪不需要的依赖项,请确保/etc/ssl/certs/java/cacerts备份此文件以便您可以恢复它。

然后您需要将 JREcacerts链接替换为新文件,例如

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

处理图像

如果 JVM 必须处理图像,例如生成带有文本的图像等。JVM 可能需要额外的库。我需要安装libfontconfig1libx11-6.

apt-get install ttf-dejavu libfontconfig1 libx11-6 -y

所以这基本上是一个试验和错误。如果需要拥有一切,可以检查 rpm 依赖项。由于声明最多的是 JRE,因此很可能有兴趣查看是否缺少任何内容。

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

这列出了 JRE 本身中的库(如libnio.so),但其他一些可能有助于检查 like ldconfig -p | grep libz,具体取决于设置,可能需要成为超级用户才能运行ldconfig

于 2018-11-27T14:45:39.080 回答