关于阿里云服务器Ubuntu系统安装jdk8中遇到的坑及解决方案
记录一下困扰了很多天、到处查资料最后终于成功安装的过程
关于阿里云服务器无法登录的问题
基本反馈是这样的:
如果你添加了ip之后仍然登不进去,有一种方法是直接从第三个选项进去登录之后修改文件
然后输入命令:
vim /etc/ssh/sshd_config
再在最底部修改PasswordAuthentication
的参数为yes
,输入:wq
之后输入命令(直接重启也行):
service sshd restart
安装旧版gcc
先安装一些基本的依赖:
sudo apt install build-essential libxrender-dev xorg-dev libasound2-dev libcups2-dev gawk zip libxtst-dev libxi-dev libxt-dev gobjc
接着我们先将JDK的编译环境配置好,首先是安装gcc和g++的4.8版本,但是最新的源没有这个版本了,我们先导入旧版软件源:
sudo vim /etc/apt/sources.list
在最下方添加旧版源地址并保存:
deb http://archive.ubuntu.com/ubuntu xenial main
deb http://archive.ubuntu.com/ubuntu xenial universe
接着更新一下apt源信息,并安装gcc和g++:
sudo apt update
sudo apt install gcc-4.8 g++-4.8
于是在这里就碰见问题了,他说找不到
E: Unable to locate package g++-4.8 E: Couldn't find any package by glob 'g++-4.8' E: Couldn't find any package by regex 'g++-4.8'
于是网上提供了两种方案
第一种解决了gcc的安装问题
sudo apt-get install gcc-4.8 g++-4.8
第二种,则解决了所有问题
wget http://mirrors.kernel.org/ubuntu/pool/universe/g/gcc-4.8/g++-4.8_4.8.5-4ubuntu8_amd64.deb
wget http://mirrors.kernel.org/ubuntu/pool/universe/g/gcc-4.8/libstdc++-4.8-dev_4.8.5-4ubuntu8_amd64.deb
wget http://mirrors.kernel.org/ubuntu/pool/universe/g/gcc-4.8/gcc-4.8-base_4.8.5-4ubuntu8_amd64.deb
wget http://mirrors.kernel.org/ubuntu/pool/universe/g/gcc-4.8/gcc-4.8_4.8.5-4ubuntu8_amd64.deb
wget http://mirrors.kernel.org/ubuntu/pool/universe/g/gcc-4.8/libgcc-4.8-dev_4.8.5-4ubuntu8_amd64.deb
wget http://mirrors.kernel.org/ubuntu/pool/universe/g/gcc-4.8/cpp-4.8_4.8.5-4ubuntu8_amd64.deb
wget http://mirrors.kernel.org/ubuntu/pool/universe/g/gcc-4.8/libasan0_4.8.5-4ubuntu8_amd64.deb
sudo apt install ./gcc-4.8_4.8.5-4ubuntu8_amd64.deb ./gcc-4.8-base_4.8.5-4ubuntu8_amd64.deb ./libstdc++-4.8-dev_4.8.5-4ubuntu8_amd64.deb ./cpp-4.8_4.8.5-4ubuntu8_amd64.deb ./libgcc-4.8-dev_4.8.5-4ubuntu8_amd64.deb ./libasan0_4.8.5-4ubuntu8_amd64.deb ./g++-4.8_4.8.5-4ubuntu8_amd64.deb
sudo apt update
sudo apt-get install gcc-4.8 g++-4.8
接着配置:
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 100
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 100
最后查看版本是否为4.8版本:
nagocoler@ubuntu-server:~$ gcc --version
gcc (Ubuntu 4.8.5-4ubuntu2) 4.8.5
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
nagocoler@ubuntu-server:~$ g++ --version
g++ (Ubuntu 4.8.5-4ubuntu2) 4.8.5
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
接着安装make 3.81版本,需要从官方下载:
wget https://ftp.gnu.org/gnu/make/make-3.81.tar.gz
下载好之后进行解压,并进入目录:
tar -zxvf make-3.81.tar.gz
cd make-3.81/
接着我们修改一下代码,打开glob/glob.c
文件:
...
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#define __alloca alloca <- 添加这一句
/* Enable GNU extensions
...
接着进行配置并完成编译和安装:
bash configure
sudo make install
安装完成后,将make已经变成3.81版本了:
nagocoler@ubuntu-server:~/make-3.81$ make -verison
GNU Make 3.81
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
安装jdk8源码
OpenJDK源码
于JDK中某些代码是Java编写的,所以我们还需要安装一个启动JDK,启动JDK可以是当前版本或低一版本,比如我们要编译JDK8的源码,那么就可以使用JDK7、JDK8作为启动JDK,对源码中的一些java文件进行编译。这里我们选择安装OpenJDK8作为启动JDK:
sudo apt install openjdk-8-jdk
这样,我们的系统环境就准备完成了,接着我们需要下载OpenJDK8的源码(已经放在网盘了)解压:
unzip jdk-jdk8-b120.zip
接着我们需要安装JetBrains Gateway在我们的服务器上导入项目,这里我们使用CLion后端,等待下载远程后端,这样我们的Linux服务器上虽然没有图形化界面,但是依然可以使用IDEA、CLion等工具,只是服务器上只有后端程序,而界面由我们电脑上的前端程序提供(目前此功能还在Beta阶段,暂不支持arm架构的Linux服务器)整个过程根据服务器配置决定可能需要5-20分钟。
完成之后,我们操作起来就很方便了,界面和IDEA其实差不多,我们打开终端,开始进行配置:
bash configure --with-debug-level=slowdebug --enable-debug-symbols ZIP_DEBUGINFO_FIELS=0
配置完成后:
Configuration summary:
* Debug level: slowdebug
* 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_312" OpenJDK Runtime Environment (build 1.8.0_312-8u312-b07-0ubuntu1~20.04-b07) OpenJDK 64-Bit Server VM (build 25.312-b07, mixed mode) (at /usr/lib/jvm/java-8-openjdk-amd64)
* C Compiler: gcc-4.8 (Ubuntu 4.8.5-4ubuntu2) version 4.8.5 (at /usr/bin/gcc-4.8)
* C++ Compiler: g++-4.8 (Ubuntu 4.8.5-4ubuntu2) version 4.8.5 (at /usr/bin/g++-4.8)
Build performance summary:
* Cores to use: 3
* Memory limit: 3824 MB
* ccache status: not installed (consider installing)
WARNING: The result of this configuration has overridden an older
configuration. You *should* run 'make clean' to make sure you get a
proper build. Failure to do so might result in strange build problems.
接着我们需要修改几个文件,不然一会会编译失败,首先是hotspot/make/linux/Makefile
文件:
原有的 SUPPORTED_OS_VERSION = 2.4% 2.5% 2.6% 3%
修改为 SUPPORTED_OS_VERSION = 2.4% 2.5% 2.6% 3% 4% 5%
接着是hotspot/make/linux/makefiles/gcc.make
文件:
原有的 WARNINGS_ARE_ERRORS = -Werror
修改为 #WARNINGS_ARE_ERRORS = -Werror
接着是nashorn/make/BuildNashorn.gmk
文件:
$(CP) -R -p $(NASHORN_OUTPUTDIR)/nashorn_classes/* $(@D)/
$(FIXPATH) $(JAVA) \
原有的 -cp "$(NASHORN_OUTPUTDIR)/nasgen_classes$(PATH_SEP)$(NASHORN_OUTPUTDIR)/nashorn_classes" \
修改为 -Xbootclasspath/p:"$(NASHORN_OUTPUTDIR)/nasgen_classes$(PATH_SEP)$(NASHORN_OUTPUTDIR)/nashorn_classes" \
jdk.nashorn.internal.tools.nasgen.Main $(@D) jdk.nashorn.internal.objects $(@D)
开始编译:
make all
这里又遇到了问题,在网上搜了半天总找不到正确答案
gmake[5]: *** [/root/jdk-jdk8-b120/hotspot/make/linux/makefiles/top.make:91: ad_stuff] Error 2
后来发现最主要应该是看前面的内容
sys/sysctl.h: No such file or directory #include <sys/sysctl.h>
后来在网上查了才知道是Ubuntu的版本已经取消了这个头文件,我的版本:
所以我们需要做的就是按照他所说的文件报错然后把该文件里的该头文件删掉
vim build/linux-x86_64-normal-server-slowdebug/jdk/objs/libnet/PlainSocketImpl.o
vim jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c
注释
// #include <sys/sysctl.h>
最后弄了两三天的东西终于好了