This is an automated email from the ASF dual-hosted git repository.

liuhaopeng pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/bigtop-manager.git


The following commit(s) were added to refs/heads/main by this push:
     new 310a0775 BIGTOP-4458: Auto find java bin when start server/agent (#239)
310a0775 is described below

commit 310a07759cebe2cddb1fd65690f7392fefd91772
Author: Zhiguo Wu <[email protected]>
AuthorDate: Wed Jul 9 20:39:55 2025 +0800

    BIGTOP-4458: Auto find java bin when start server/agent (#239)
---
 bigtop-manager-agent/src/main/resources/bin/env.sh | 45 +++++++++++++++++++++
 .../src/main/resources/bin/start.sh                |  2 +-
 .../bigtop/manager/server/aop/AuditAspect.java     |  5 ++-
 .../server/service/impl/HostServiceImpl.java       | 13 ++++--
 .../src/main/resources/bin/env.sh                  | 47 +++++++++++++++++++++-
 .../src/main/resources/bin/start.sh                |  2 +-
 dev-support/docker/containers/build.sh             |  4 +-
 7 files changed, 107 insertions(+), 11 deletions(-)

diff --git a/bigtop-manager-agent/src/main/resources/bin/env.sh 
b/bigtop-manager-agent/src/main/resources/bin/env.sh
index d544f755..882b68eb 100755
--- a/bigtop-manager-agent/src/main/resources/bin/env.sh
+++ b/bigtop-manager-agent/src/main/resources/bin/env.sh
@@ -18,4 +18,49 @@
 # under the License.
 #
 
+set -e
+
+JAVA_SEARCH_DIRS=(
+  "/usr/local/java*"
+  "/usr/lib/jvm/java-*"
+  "/usr/java/jdk*"
+  "/opt/java*"
+  "/opt/jdk*"
+  "/usr/lib/jvm/*"
+)
+
+# Find a suitable Java (version >= 17)
+find_java() {
+  if [ -n "$JAVA_HOME" ] && [ -x "$JAVA_HOME/bin/java" ]; then
+    JAVA_CANDIDATES=("$JAVA_HOME/bin/java")
+  else
+    JAVA_CANDIDATES=()
+    JAVA_PATH=$(command -v java 2>/dev/null || true)
+    [ -n "$JAVA_PATH" ] && JAVA_CANDIDATES+=("$JAVA_PATH")
+
+    for pattern in "${JAVA_SEARCH_DIRS[@]}"; do
+      for dir in $(compgen -G "$pattern" 2>/dev/null); do
+        # Check privileges, make sure the script won't exit
+        [ -x "$dir/bin/java" ] 2>/dev/null || true
+        [ -x "$dir/bin/java" ] && JAVA_CANDIDATES+=("$dir/bin/java")
+      done
+    done
+  fi
+
+  for JAVA_CMD in "${JAVA_CANDIDATES[@]}"; do
+    VERSION_STR=$("$JAVA_CMD" -version 2>&1 | awk -F '"' '/version/ {print 
$2}')
+    MAJOR_VERSION=$(echo "$VERSION_STR" | awk -F. '{if ($1 == "1") print $2; 
else print $1}')
+    if [ "$MAJOR_VERSION" -ge 17 ]; then
+      export JAVA_CMD
+      return 0
+    fi
+  done
+
+  echo "Error: Java 17 or higher is required. No suitable java found." >&2
+  exit 1
+}
+
+find_java
+
 export JAVA_OPTS=""
+export JAVA_CMD
diff --git a/bigtop-manager-agent/src/main/resources/bin/start.sh 
b/bigtop-manager-agent/src/main/resources/bin/start.sh
index 87c78672..e871f190 100755
--- a/bigtop-manager-agent/src/main/resources/bin/start.sh
+++ b/bigtop-manager-agent/src/main/resources/bin/start.sh
@@ -62,6 +62,6 @@ fi
 
 cd $BIGTOP_MANAGER_HOME
 
-$JAVA_HOME/bin/java $JAVA_OPTS \
+$JAVA_CMD $JAVA_OPTS \
   -cp "${BIGTOP_MANAGER_HOME}/conf":"${BIGTOP_MANAGER_HOME}/libs/*" \
   org.apache.bigtop.manager.agent.AgentApplication
diff --git 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/aop/AuditAspect.java
 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/aop/AuditAspect.java
index 08331833..db7437ef 100644
--- 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/aop/AuditAspect.java
+++ 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/aop/AuditAspect.java
@@ -18,7 +18,6 @@
  */
 package org.apache.bigtop.manager.server.aop;
 
-import org.apache.bigtop.manager.common.utils.JsonUtils;
 import org.apache.bigtop.manager.dao.po.AuditLogPO;
 import org.apache.bigtop.manager.dao.repository.AuditLogDao;
 import org.apache.bigtop.manager.server.holder.SessionUserHolder;
@@ -82,7 +81,9 @@ public class AuditAspect {
             auditLogPO.setTagDesc(apiDesc);
             auditLogPO.setOperationSummary(operationSummary);
             auditLogPO.setOperationDesc(operationDesc);
-            auditLogPO.setArgs(JsonUtils.writeAsString(joinPoint.getArgs()));
+
+            // Temporary disable since params of command api sometimes are too 
long
+            // 
auditLogPO.setArgs(JsonUtils.writeAsString(joinPoint.getArgs()));
 
             log.debug("auditLog: {}", auditLogPO);
             log.debug("request method:{}.{}", 
joinPoint.getSignature().getDeclaringTypeName(), methodName);
diff --git 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/HostServiceImpl.java
 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/HostServiceImpl.java
index 8927c2c1..1ec32399 100644
--- 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/HostServiceImpl.java
+++ 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/service/impl/HostServiceImpl.java
@@ -274,10 +274,14 @@ public class HostServiceImpl implements HostService {
         try {
             String script = ProjectPathUtils.getServerScriptPath() + 
File.separator + "setup-agent.sh";
             String content = Files.readString(Path.of(script));
-            command = "cat << 'EOF' > ./setup-agent.sh\n"
-                    + content
-                    + "\nEOF\n"
-                    + "chmod +x ./setup-agent.sh && ./setup-agent.sh " + path 
+ " " + repoUrl + " " + grpcPort;
+            command = "cat << 'EOF' > ./setup-agent.sh\n" + content + 
"\nEOF\n" + "chmod +x ./setup-agent.sh";
+            ShellResult result = execCommandOnRemoteHost(hostDTO, hostname, 
command);
+            if (result.getExitCode() != MessageConstants.SUCCESS_CODE) {
+                log.error("Unable to write agent script, hostname: {}, msg: 
{}", hostname, result);
+                installedStatusVO.setStatus(InstalledStatusEnum.FAILED);
+                installedStatusVO.setMessage(result.getErrMsg());
+                return;
+            }
         } catch (IOException e) {
             log.error("Unable to write agent script, hostname: {}, msg: {}", 
hostname, e.getMessage());
             installedStatusVO.setStatus(InstalledStatusEnum.FAILED);
@@ -285,6 +289,7 @@ public class HostServiceImpl implements HostService {
             return;
         }
 
+        command = "./setup-agent.sh " + path + " " + repoUrl + " " + grpcPort;
         ShellResult result = execCommandOnRemoteHost(hostDTO, hostname, 
command);
         if (result.getExitCode() != MessageConstants.SUCCESS_CODE) {
             log.error("Unable to setup agent, hostname: {}, msg: {}", 
hostname, result);
diff --git a/bigtop-manager-server/src/main/resources/bin/env.sh 
b/bigtop-manager-server/src/main/resources/bin/env.sh
index 5533b6bc..882b68eb 100755
--- a/bigtop-manager-server/src/main/resources/bin/env.sh
+++ b/bigtop-manager-server/src/main/resources/bin/env.sh
@@ -1,3 +1,4 @@
+#!/bin/bash
 #
 # Licensed to the Apache Software Foundation (ASF) under one
 # or more contributor license agreements.  See the NOTICE file
@@ -17,5 +18,49 @@
 # under the License.
 #
 
+set -e
 
-export JAVA_OPTS=""
\ No newline at end of file
+JAVA_SEARCH_DIRS=(
+  "/usr/local/java*"
+  "/usr/lib/jvm/java-*"
+  "/usr/java/jdk*"
+  "/opt/java*"
+  "/opt/jdk*"
+  "/usr/lib/jvm/*"
+)
+
+# Find a suitable Java (version >= 17)
+find_java() {
+  if [ -n "$JAVA_HOME" ] && [ -x "$JAVA_HOME/bin/java" ]; then
+    JAVA_CANDIDATES=("$JAVA_HOME/bin/java")
+  else
+    JAVA_CANDIDATES=()
+    JAVA_PATH=$(command -v java 2>/dev/null || true)
+    [ -n "$JAVA_PATH" ] && JAVA_CANDIDATES+=("$JAVA_PATH")
+
+    for pattern in "${JAVA_SEARCH_DIRS[@]}"; do
+      for dir in $(compgen -G "$pattern" 2>/dev/null); do
+        # Check privileges, make sure the script won't exit
+        [ -x "$dir/bin/java" ] 2>/dev/null || true
+        [ -x "$dir/bin/java" ] && JAVA_CANDIDATES+=("$dir/bin/java")
+      done
+    done
+  fi
+
+  for JAVA_CMD in "${JAVA_CANDIDATES[@]}"; do
+    VERSION_STR=$("$JAVA_CMD" -version 2>&1 | awk -F '"' '/version/ {print 
$2}')
+    MAJOR_VERSION=$(echo "$VERSION_STR" | awk -F. '{if ($1 == "1") print $2; 
else print $1}')
+    if [ "$MAJOR_VERSION" -ge 17 ]; then
+      export JAVA_CMD
+      return 0
+    fi
+  done
+
+  echo "Error: Java 17 or higher is required. No suitable java found." >&2
+  exit 1
+}
+
+find_java
+
+export JAVA_OPTS=""
+export JAVA_CMD
diff --git a/bigtop-manager-server/src/main/resources/bin/start.sh 
b/bigtop-manager-server/src/main/resources/bin/start.sh
index 9e79c8f9..3603a94f 100755
--- a/bigtop-manager-server/src/main/resources/bin/start.sh
+++ b/bigtop-manager-server/src/main/resources/bin/start.sh
@@ -60,6 +60,6 @@ fi
 
 cd $BIGTOP_MANAGER_HOME
 
-$JAVA_HOME/bin/java $JAVA_OPTS \
+$JAVA_CMD $JAVA_OPTS \
   -cp "${BIGTOP_MANAGER_HOME}/conf":"${BIGTOP_MANAGER_HOME}/libs/*" \
   org.apache.bigtop.manager.server.ServerApplication
diff --git a/dev-support/docker/containers/build.sh 
b/dev-support/docker/containers/build.sh
index c512141c..3abc352a 100755
--- a/dev-support/docker/containers/build.sh
+++ b/dev-support/docker/containers/build.sh
@@ -197,8 +197,8 @@ while [ $# -gt 0 ]; do
           echo "Requires a container number" 1>&2
           usage
         fi
-        if [ $2 -gt 10 ] || [ $2 -lt 3 ]; then
-          echo "NUM-INSTANCES should be between [3-10]" 1>&2
+        if [ $2 -gt 10 ] || [ $2 -lt 1 ]; then
+          echo "NUM-INSTANCES should be between [1-10]" 1>&2
           usage
         fi
         NUM_INSTANCES=$2

Reply via email to