如何在Ubuntu Linux中安装Amazon Corretto?

6

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


1
你不能使用Docker吗?(https://docs.aws.amazon.com/de_de/corretto/latest/corretto-8-ug/docker-install.html) - rob
4个回答

5
在预览版中,不支持Ubuntu。该发行版将在计划于2019年第一季度的GA版本中提供。请参阅此AWS博客

这并没有回答问题。一旦您拥有足够的声望,您就可以评论任何帖子;相反,提供不需要询问者澄清的答案。- 来自审核 - Sagar Zala
2
@SagarZala “它还没有可用”,即使这不是被问者想要的答案,也是一个答案。 - arnt
@arnt,然而,在我看来,这更适合作为一条评论。 - Clijsters
1
@Clijsters 可能更适合作为评论,但我认为它也足够作为答案。毕竟,它是完整和正确的(直到GA发布),这就是答案应该具备的特点。 - arnt

4

4
大部分情况下,我能够检查Corretto源代码并在进行两个补丁后进行构建。请注意,这显然不受亚马逊的支持。如果您想要受支持的发行版,请等待GA版本发布。这应该是显而易见的,但我已经知道不要做出任何假设:不要在生产或共享系统上尝试此类操作。
另一方面,如果您喜欢尝试和破坏事物,请继续阅读!
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

现在您将在/usr/local/jvm/openjdk-1.8.0-internal中拥有Corretto版本。

免责声明:虽然我在AWS工作,但这纯属于我个人的实验,我只代表自己。这些步骤既不得到亚马逊或Corretto团队的认可也没有他们的支持。请谨慎操作!


3

有一种更简单的方法,它依赖于将rpm软件包转换为deb软件包的翻译,但您可能会失去某些依赖关系检查。该工具名为alien

apt-get install alien -y

截至2018年11月27日,从Amazon下载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-certificates。
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添加到一个新创建的JKS密钥库中,名为/etc/ssl/certs/java/cacerts。当然,启动此Java程序的shell脚本只知道Debian提供的JDK...
如果您删除了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 需要处理图片,比如生成带有文本的图片等,可能需要额外的库。我需要安装 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),但有些其他库也可能很有用,比如ldconfig -p | grep libz,具体情况需要检查一下,如果需要运行ldconfig,可能需要成为超级用户。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接