系统版本:Red Hat Enterprise Linux AS release 4
Linux内核:2.6.9-89.ELlargesmp
今天需要在服务器上跑一段java程序,在本地将程序打名为count.jar的可执行包以后上传到服务器上。然后用 java -jar count.jar运行之,结果竟然出现错误,错误的大致意思是不支持 -jar 参数。我去,这是什么版本的java啊,竟然不支持运行jar。运行 java -version 查之,得到版本是1.4....1.4...好古老的版本。为了我的程序大计,决定将其升级。
1. 运行 sudo rpm -qa |grep java 得到系统安装了 java-1.4.2-gcj-compat-1.4.2.0-27jpp 和 gcc-java-3.4.6-11。第一个是我们要卸载的java包。
2. 运行 sudo rpm -e java-1.4.2-gcj-compat-1.4.2.0-27jpp 卸载系统自带软件包。
3. 去Java官网下载 jdk-7u3-linux-x64.rpm 并上传至服务器。
4. 运行 sudo rpm -i jdk-7u3-linux-x64.rpm 命令安装jdk1.7。结果出错,错误信息显示为:/lib64/tls/libc.so.6: version `GLIBC_2.4' not found (required by /usr/java/jdk1.7.0_03/bin/unpack200)。看来可能是glibc的版本不够高,利用 sudo rpm -qa |grep glibc 命令查询之,得知系统安装的是2.3版本。由于glibc是一个底层的lib库,许多软件都依赖于词库,所以不建议直接升级该库。我选择了安装旧版本的java。
5. 去java官网下载 jdk-6u31-linux-x64-rpm.bin ,传至服务器。
6. 运行 sudo chmod +x jdk-6u31-linux-x64-rpm.bin 使其变为可运行程序。
7. 运行 sudo ./jdk-6u31-linux-x64-rpm.bin 命令安装jdk1.6。结果出错,错误提示为:package jdk-1.7.0_03-fcs (which is newer than jdk-1.6.0_31-fcs) is already installed file /etc/init.d/jexec from install of jdk-1.6.0_31-fcs conflicts with file from package jdk-1.7.0_03-fcs。看来虽然刚才1.7没有安装成功,但是已经有些文件释放到了系统中,导致1.6版本未安装成功。
8. 依据上边的错误分析,jdk1.7的包名应该是jdk-1.7.0_03-fcs(利用rpm -qa 命令查不到该软件包)。运行 sudo rpm -e jdk-1.7.0_03-fcs 命令删除jdk1.7的残余文件。
9. 再次运行 sudo ./jdk-6u31-linux-x64-rpm.bin 命令。这次安装成功。
分析整个过程,有以下要点要注意:
1. 注意安装过程中的提示信息。
2. 一般报告需要什么的错误都是由于某些lib包版本过旧导致的,这时候一般的选择是升级依赖包或者选择旧版本。
上边的过程在centOS上也通过了测试是可以的。所谓的以rpm.bin结尾的包名,一般是可执行文件,运行之,会自动释放rpm包并安装,安装目录为/usr/java/,并且环境变量已经配置好了,无需再去配置/etc/profile。一般Linux发行版本中安装的jdk都是OpenJDK,版本一般都比较陈旧。