CentOS 5.5 编译OpenJDK6

1.软件及环境准备
  • macOS 10.14.1 (18B75)
  • vmware fusion 8
  • CentOS-5.5-i386-bin-DVD.iso
  • openjdk-6-src-b27-26_oct_2012.tar.gz (openJDK6源码)
  • jdk-6u45-linux-i586.bin (Bootstrap JDK)
  • 本次编译使用的所有软件百度网盘链接:https://pan.baidu.com/s/1iXa4fFQy12KikX3NOIOYKQ 密码:jdks

如果是windows系统,可以自行安装虚拟机。之所以选择CentOS 5.5的原因是该版本的内核可以编译OpenJDK6。本例编译采用的操作系统、jdk、Eclipse等均为32位。下载文件并拷贝至虚拟机,以下是我的存放目录,仅供大家参考。

# 存放软件
/home/liyanchao/soft
# 存放openjdk以及编译后的代码
/home/liyanchao/openjdk
2.安装CentOS5.5及修改yum源
  • 安装虚拟机并安装CentOS5.5,本例提供的CentOS是带图形界面的,安装完之后默认分辨率很低,可以通过下图调整为合适的分辨率即可
    CentOS 5.5 编译OpenJDK6_第1张图片
  • 修改yum源

CentOS5.5下yum源基本都已经不能用了,这里需要修改系统默认的yum源位置。

# 切换到root用户
su root
# 新建并编辑CentOS-Base.repo文件
vi /etc/yum.repos.d/CentOS-Base.repo
# 清除已有yum源
yum clean all 

将下面的内容粘贴到CentOS-Base.repo中

# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client.  You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the 
# remarked out baseurl= line instead.
#
#

[base]
name=CentOS-$releasever - Base
baseurl=http://vault.centos.org/5.5/os/i386/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
#released updates 
[updates]
name=CentOS-$releasever - Updates
baseurl=http://vault.centos.org/5.5/updates/i386/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
#packages used/produced in the build but not released
[addons]
name=CentOS-$releasever - Addons
baseurl=http://vault.centos.org/5.5/addons/i386/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
baseurl=http://vault.centos.org/5.5/extras/i386/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
baseurl=http://vault.centos.org/5.5/centosplus/i386/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
#contrib - packages by Centos Users
[contrib]
name=CentOS-$releasever - Contrib
baseurl=http://vault.centos.org/5.5/contrib/i386/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

如果执行了yum clean all之后还是无法使用yum源的话,可以重启一下系统。

3.安装编译需要的软件
  • 通过yum源安装
# gcc
yum install gcc gcc-c++
# alsa
yum install alsa-lib alsa-lib-devel 
# cups
yum install cups-devel
# libXi
yum install libXi libXi-devel
# motif
yum install openmotif
yum install openmotif-devel
# ant-nodeps
yum install ant-nodeps
# libXtst
yum install libXtst
yum install libXtst-devel
  • 解压安装其他软件
  1. freetype — 解压并编译
tar -xvf freetype-2.3.12.tar.gz
cd freetype-2.3.12
./configure && make && make install
  1. ant — 解压完即可
tar -xvf apache-ant-1.8.2-bin.tar.gz
4.编译之前的环境变量配置
  • 环境变量配置
    CentOS5.5默认自带JDK1.4,无需卸载,它不影响接下来的编译。接下来解压openjdk-6-src-b27-26_oct_2012.tar.gz和jdk-6u45-linux-i586.bin(解压sh文件命令:sh jdk-6u45-linux-i586.bin),然后配置编译环境变量。
# 编辑profile文件并加入下面的配置
vi /etc/profile
# 刷新环境变量
source profile
export LANG=C
# 解决编译过程中无法文件无法下载问题
export ALT_DROPS_DIR=/home/liyanchao/openjdk/drop
export ARCH_DATA_MODEL=32
export ALLOW_DOWNLOADS=true
# Bootstrap JDK目录(要替换成自己本机的目录)
export ALT_BOOTDIR=/home/liyanchao/soft/jdk1.6.0_45
# ant目录(要替换成自己本机的目录)
export ANT_HOME=/home/liyanchao/soft/apache-ant-1.8.2
# freetype2头文件安装目录,一般无需替换
export ALT_FREETYPE_HEADERS_PATH=/usr/local/include/freetype2 
#freetype2 lib目录,一般无需替换
export ALT_FREETYPE_LIB_PATH=/usr/local/lib 
# openJDK编译后的存放目录
export ALT_OUTPUTDIR=/home/liyanchao/openjdk/build
# 清除本机已有的java环境变量配置
unset JAVA_HOME
unset CLASSPATH

接下来的编译过程会遇到各种各样的问题,这里先提前解决了,毕竟大家都希望编译一次通过。

  • 十年问题 time is more than 10 years from present: 1136059200000问题
    切入openjdk目录,打开jdk/src/share/classes/java/util/CurrencyData.properties文件
修改108行为
AZ=AZM;2015-12-31-20-00-00;AZN
修改377行为
MZ=MZM;2016-06-30-22-00-00;MZN
修改439行为
RO=ROL;2015-06-30-21-00-00;RON
修改525行为
TR=TRL;2014-12-31-22-00-00;TRY
修改551行为
VE=VEB;2018-01-01-04-00-00;VEF
  • 权限问题 cannot restore segment prot after reloc: Permission denied
# 打开config文件
vi /etc/selinux/config 
# 修改第6行为
ELINUX=disabled
  • 无法下载包问题 Redirection detected from https to http. Protocol switch unsafe, not allowed

网盘里提供了jdk6-jaf-b20.zip、jdk6-jaxp-b20.zip、jdk6-jaxws-b20.zip三个文件即为了解决该问题。将这三个文件复制到/home/liyanchao/openjdk/drop目录下。

5.编译

在开始编译之前,需要重启一下系统。然后切换到openjdk目录下,执行:

# 编译前检查
make sanity

如果检查通过(输出Sanity check passed)的话,再执行:

make all

需要等待一段时间,大概20到30分钟。编译成功后大家可以:

cd /home/liyanchao/openjdk/build/j2sdk-image/bin
./java -version

如果看到

openjdk version "1.6.0-internal"
OpenJDK Runtime Environment (build 1.6.0-internal-root_14_nov_2018_03_56-b00)
OpenJDK Client VM (build 20.0-b12, mixed mode)

那么编译就成功了。j2sdk-image可以作为一个完整的jdk使用了,接下来要编译hotspot的源码,并在Eclipse中调试hotspot源码。

下一篇CentOS 5.5 编译HotSpot并在Eclipse中调试

你可能感兴趣的:(日常随笔)