我们如何在 Ubuntu 操作系统中安装 Amazon Corretto。
4 回答
在 Preview 中不支持 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 工作,但这纯粹是我个人的实验,我只代表我自己。亚马逊或 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 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/cacerts
Centos 或 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 可能需要额外的库。我需要安装libfontconfig1
和libx11-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
。