我们以龙蜥8.8系统的java17为例,来熟悉下流程:
今天新安装完一台龙蜥(Anolis Os)8.8系统,发现竟然默认带java17。难道是镜像自带的,查询官网发现并非如此。那它是来自于哪里呢?
java -version
openjdk version "17.0.5" 2022-10-18 LTS
Alibaba Dragonwell 17.0.5.0.5.8 GA
那这个java17是怎么安装的呢?输入命令查询:
rpm -qf `which java`
#输出java-17-alibaba-dragonwell-headless-17.0.5.0.5.8-1.an8.x86_64
排查是否是脚本安装:没有任何输出,说明也不是命令行安装的
yum history list java-17-alibaba-dragonwell-headless
于是查看装机ks文件,发现只安装了一些group:
- @base
- @Development tools
- @Security Tools
查看是否有包含java包:也没有找到
dnf groupinfo "Development tools"|grep java
dnf groupinfo "Security Tools"|grep java
查询rpm依赖:竟然输出no package requires java-17-alibaba-dragonwell-headless,简直天雷滚滚了。
rpm -q --whatrequires java-17-alibaba-dragonwell-headless
no package requires java-17-alibaba-dragonwell-headless
还是没有找到明确的依赖关系,最后上大招:检查所有已安装的软件包,看看是否有某个包依赖 Java:果然发现了一个可以包jna-5.6.0-6.an8.x86_64
for pkg in $(rpm -qa); do
if rpm -qR $pkg | grep -q "java"; then
echo "$pkg depends on Java"
fi
done
最后终于真相大白:查看group包,在development tools中发现了jna,也就是安装jna时它依赖了java-17-alibaba-dragonwell-headless-17.0.5.0.5.8-1.an8.x86_64,于是就把java17给安装了。
dnf group info "development tools"|grep jna