我们如何在Ubuntu操作系统中安装Amazon Corretto。
% 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; }
patching file src/hotspot/src/share/vm/code/dependencies.cpp
patching file src/hotspot/src/share/vm/runtime/fprofiler.cpp
这可能需要一些试错。在我的情况下,我已经拥有了所需的一切,除了libcups2-dev和libasound2-dev。
apt install -y libcups2-dev libasound2-dev
配置步骤(下一步)非常清楚地说明了它认为缺少什么。
配置源代码树:
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
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'
sudo make install
现在您将在/usr/local/jvm/openjdk-1.8.0-internal
中拥有Corretto版本。
免责声明:虽然我在AWS工作,但这纯属于我个人的实验,我只代表自己。这些步骤既不得到亚马逊或Corretto团队的认可也没有他们的支持。请谨慎操作!
有一种更简单的方法,它依赖于将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
ldd --version
命令进行检查。cacerts
文件,为空或没有正确的ca-certificates。javax.net.ssl.SSLException: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
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
/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
以便恢复它。cacerts
链接替换为新文件,例如:ln -sf /etc/ssl/certs/java/cacerts /usr/lib/jvm/java-1.8.0-amazon-corretto.x86_64/jre/lib/security/cacerts
如果 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
),但有些其他库也可能很有用,比如ldconfig -p | grep libz
,具体情况需要检查一下,如果需要运行ldconfig
,可能需要成为超级用户。