目录
1. 操作录像
Free12.2 安装Oracle JDK1.8
2. 操作记录
如无特殊说明,则本文所有操作均以root执行。如需安装openjdk可以参考《FreeBSD-12.2 网络基本设置视频教程》一文。
2.1 启用freebsd的linux兼容
kldload linux
kldload linux64
echo linux_enable="YES" >> /etc/rc.conf
查看结果是否正确
kldstat
下图为正确结果:
2.2. 修改ports源
sed -i ".bak" 's/SERVERNAME=portsnap.FreeBSD.org/SERVERNAME=portsnap.cn.FreeBSD.org/g' /etc/portsnap.conf
安装portsnap tree
portsnap fetch extract update
2.3. 下载jdk-8u241-linux-x64.tar.gz
下载地址:
https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html
下载完成后,上传jdk-8u241-linux-x64.tar.gz到虚拟机的/usr/ports/distfiles目录下
2.4. 执行安装
执行安装之前,先修改/usr/ports/Mk/bsd.sites.mk文件的内容,这个文件是下载linux依赖的地址,centos官方提供的地址要下到天荒地老,修改成阿里云的(删除或注释掉原有的url),修改完成后结果如下:
MASTER_SITE_CENTOS_LINUX+= \
https://mirrors.aliyun.com/centos-vault/%SUBDIR%/:DEFAULT,amd64,i386,SOURCE
.endif
然后执行安装:
cd /usr/ports/java/linux-oracle-jdk18
make install clean
PS:下载的过程中出现的安装提示,一路回车确认,同时如果出现断连,卡死的情况(很常见),果断CTRL+C中断(等要到天荒地老海枯石烂),重新再来,直到全部下载完成。
2.5. 最后的设置
现在安装完毕,但是会出现一个很恶心的错误,导致java无法正常运行,错误如下:
/usr/local/linux-oracle-jdk1.8.0/bin/java: error while loading shared libraries: libjli.so: cannot open shared object file: No such file or directory
我们继续搞定这个问题。首先来修改一下软连接:
mv /usr/local/bin/java /usr/local/bin/java.bak
mv /usr/local/bin/javac /usr/local/bin/javac.bak
mv /usr/local/bin/jar /usr/local/bin/jar.bak
ln -s /usr/local/linux-oracle-jdk1.8.0/bin/java /usr/local/bin/java
ln -s /usr/local/linux-oracle-jdk1.8.0/bin/javac /usr/local/bin/javac
ln -s /usr/local/linux-oracle-jdk1.8.0/bin/jar /usr/local/bin/jar
然后设置加载libjli.so库
cat >> /usr/local/libdata/ldconfig/jdk << EOF
/usr/local/linux-oracle-jdk1.8.0/lib/amd64/jli
EOF
init 6
如果这时候我们看到java已经可以正确执行了那么恭喜你,如果java还是不能正确执行,那么你就用ldconfig -m /usr/local/linux-oracle-jdk1.8.0/lib/amd64/jli/libjli.so命令看看报不报错,如果报错那就换openjdk用吧。我试验过多次,发现这个问题跟oracle-jdk、freebsd和freebsd模拟的linux(centos)这三者版本之间有很大关系,大多数情况下能用以上操作步骤解决掉(比如ldcofig -m命令不报错的情况下),真解决不了也找不到什么好办法。比如241版本的jdk可以解决,241以前可能会没有这个问题,222版本jdk解决不掉,freebsd32位好解决,freebsd64不好解决。一顿折腾下来,也不知道该说orcale的不是还是freebsd不行了。
最后的最后,很多次程序会引用环境变量中的JAVA_HOME,所以我们还是设置一下环境变量,vi打开~/.cshrc,最后添加三行(请注意,这里只设置了root的环境变量,其他用户的没管):
setenv JAVA_HOME /usr/local/linux-oracle-jdk1.8.0
setenv CLASSPATH .:$JAVA_HOME/lib/rt.jar:$JAVA_HOME/jre/lib/dt.jar
set path = ($JAVA_HOME/bin /sbin /bin /usr/sbin /usr/bin /usr/local/sbin /usr/local/bin)