Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

【Bug】Byzer all in one 在无java环境下启动失败,没有使用到默认的 jdk #1820

Closed
ZhengshuaiPENG opened this issue Aug 18, 2022 · 3 comments

Comments

@ZhengshuaiPENG
Copy link
Contributor

如图
8DWCFVru5R

新安装的环境,没有java 依赖,byzer-all-in-one 无法自动获取到内置的 java

@ZhengshuaiPENG
Copy link
Contributor Author

Bug RootCause

在执行 $BYZER_HOME/bin/byzer.sh start 时,会先通过 bin/header.sh 来进行系统中 java 的获取,在原有获取 java 逻辑中,会通过 /bin/get-properties.sh 来拿到 byzer.properites.override 中定义的 byzer.server.mode 来定义分支逻辑。但是 /bin/get-properties.sh 这个脚本就需要使用 java。 所以当系统中没有安装 java 的情况下,这里就陷入了一个互相依赖的状态,导致无法获取到 byzer-all-in-one 的内置 jdk。

另外在 /bin/get-properties.sh 以及 header.shisValidJavaVersion() 函数中调用 java 的时候,不是调用脚本自动寻找到的 java,而是直接调用了 java 命令,所以当 bash 里无法直接执行 java 时,这两个功能会break

@ZhengshuaiPENG
Copy link
Contributor Author

Fix Design

  1. 将 java 的获取逻辑提前,然后export $JAVA_HOME & $JAVA 两个变量
  2. 在后续脚本逻辑中任意地方需要调用 java 命令的地方,使用 $JAVA 变量声明的 java 进行替代
  3. 获取 java 的逻辑根据 MAC 和 Linux 两个环境进行分支处理:
    • 优先尝试获取系统变量中的 $JAVA_HOME, 找到 $JAVA_HOME/bin/java, 将其赋值给 $JAVA 变量
    • 如果系统环境变量没有声明 $JAVA_HOME, 则尝试使用 java 命令,然后自动找出 $JAVA_HOME 以及$JAVA_HOME/bin/java, 并将$JAVA_HOME/bin/java赋值给 $JAVA 变量
    • 如果上述两条路径都无法找到 java, 则尝试寻找 ${BYZER_HOME}/jdk8, 使用内置的 jdk
    • 最后上述都无法找到 java,则报错退出

@ZhengshuaiPENG
Copy link
Contributor Author

ZhengshuaiPENG commented Aug 18, 2022

Test Evidence

环境准备

  • 新安装的 CentOS 7.9 minimal, 通过 yum 安装 net-tools (因为脚本中会使用到 ifconfig 命令),不安装 java
    image

  • 安装 Byzer 2.3.2, 下载 byzer 2.3.2 all in one, 解压至根目录
    image

至此环境准备完毕

测试流程

1. case 1: 直接启动 byzer 引擎
期待结果: 引擎顺利启动,由于系统没有安装 java, 所以使用的应该是内置 jdk8

image

**2. case 2: 将 jdk 安装至/opt/jdk8/ 目录,并 export JAVA_HOME=/opt/jdk8, 重启 byzer 引擎** 期待结果: 引擎顺利启动,由于系统声明了环境变量, 所以使用的应该是 /opt/jdk8`
image

3. export 一个错误的java home,重启 byzer 引擎
期待结果:启动失败,并报错 java home 不正确

image

4. 不设置 JAVA_HOME, 将 java 通过软连接的方式,将添加到环境可执行的位置 /usr/local/bin,重启 byzer 引擎
期待结果:启动成功,并能真实的找到 java home

image

allwefantasy pushed a commit that referenced this issue Aug 18, 2022
* #1820, fix java found in bootstrap script

* minor fix

* minor fix

* minor fix pr comment
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant