diff --git a/.github/workflows/build_package.yml b/.github/workflows/build_package.yml index de04b0e9..b06b7f7b 100644 --- a/.github/workflows/build_package.yml +++ b/.github/workflows/build_package.yml @@ -34,14 +34,7 @@ jobs: source activate obdiag pwd ls -lh - export RELEASE=`date +%Y%m%d%H%M` - sed -i 's/pip install -r requirements3.txt/curl https:\/\/bootstrap.pypa.io\/get-pip.py -o get-pip.py\n\ - python3 get-pip.py\n\ - pip3 install -r requirements3.txt/' ./rpm/oceanbase-diagnostic-tool.spec - python3 -m pip install --upgrade pip wheel - cat ./rpm/oceanbase-diagnostic-tool.spec - python3 --version - rpmbuild -bb ./rpm/oceanbase-diagnostic-tool.spec + bash dev_helper.sh pack - name: Find rpm run: | diff --git a/dependencies/bin/obstack_x86_64_7 b/dependencies/bin/obstack_x86_64_7 deleted file mode 100644 index 53a5e5f0..00000000 Binary files a/dependencies/bin/obstack_x86_64_7 and /dev/null differ diff --git a/dev_helper.sh b/dev_helper.sh index 91696818..29b37fd9 100755 --- a/dev_helper.sh +++ b/dev_helper.sh @@ -5,6 +5,7 @@ WORK_DIR=$(readlink -f "$(dirname ${BASH_SOURCE[0]})") build_rpm() { clean_old_rpm_data + download_obstack export RELEASE=`date +%Y%m%d%H%M` sed -i 's/pip install -r requirements3.txt/curl https:\/\/bootstrap.pypa.io\/get-pip.py -o get-pip.py\n\ python3 get-pip.py\n\ @@ -15,6 +16,37 @@ pip3 install -r requirements3.txt/' ./rpm/oceanbase-diagnostic-tool.spec find ~/rpmbuild -name oceanbase-diagnostic-tool-*.rpm } +download_obstack() { + echo "check obstack" + mkdir -p ./dependencies/bin + # download obstack + if [ -f ./dependencies/bin/obstack_aarch64 ]; then + echo "obstack_aarch64 exist, skip download" + return + else + echo "downland aarch64 obstack." + obutils_aarch64_url="https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/download-center/opensource/observer/v4.3.5_CE/oceanbase-ce-utils-4.3.5.0-100000202024123117.el7.aarch64.rpm" + wget ${obutils_aarch64_url} -O ./obutils.rpm + rpm2cpio obutils.rpm | cpio -idv + cp -f ./usr/bin/obstack ./dependencies/bin/obstack_aarch64 + rm -rf ./usr + rm -rf obutils.rpm + fi + if [ -f ./dependencies/bin/obstack_x86_64 ]; then + echo "obstack_x86_64 exist, skip download" + return + else + echo "downland x64 obstack." + obutils_x64_url="https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/download-center/opensource/observer/v4.3.5_CE/oceanbase-ce-utils-4.3.5.0-100000202024123117.el7.x86_64.rpm" + wget ${obutils_x64_url} -O ./obutils.rpm + rpm2cpio obutils.rpm | cpio -idv + cp -f ./usr/bin/obstack ./dependencies/bin/obstack_x86_64 + rm -rf ./usr + rm -rf obutils.rpm + fi +} + + clean_old_rpm_data() { rm -rf ./rpmbuild rm -rf ./build @@ -108,6 +140,7 @@ initialize_environment() { copy_file check_python_version install_requirements + download_obstack source ${WORK_DIR}/rpm/init_obdiag_cmd.sh @@ -124,6 +157,7 @@ show_help() { echo " clean - Clean result files" echo " init - Initialize dev environment" echo " format - Format code with black" + echo " download_obstack - Download obstack" } format_code() { @@ -150,6 +184,9 @@ case "$1" in format) format_code ;; + download_obstack) + download_obstack + ;; *) show_help ;; diff --git a/src/common/command.py b/src/common/command.py index 76edca2c..7e4da3e1 100644 --- a/src/common/command.py +++ b/src/common/command.py @@ -208,7 +208,7 @@ def is_support_arch(ssh_client): Determine if it is a supported operating system :return: """ - support_arch_list = ["i386", "i486", "i586", "alpha", "x86_64"] + support_arch_list = ["i386", "i486", "i586", "alpha", "x86_64", "aarch64"] cmd = "arch" try: arch_info = ssh_client.exec_cmd(cmd) diff --git a/src/common/constant.py b/src/common/constant.py index 0cce6a80..9eb5369f 100644 --- a/src/common/constant.py +++ b/src/common/constant.py @@ -42,8 +42,9 @@ def __setattr__(self, name, value): const.GATHER_LOG_TEMPORARY_DIR_DEFAULT = "/tmp" -const.OBSTACK2_DEFAULT_INSTALL_PATH = '/tmp/obstack_x86_64_7' -const.OBSTACK2_LOCAL_STORED_PATH = "./dependencies/bin/obstack_x86_64_7" +const.OBSTACK2_DEFAULT_INSTALL_PATH = '/tmp/obstack' +const.OBSTACK2_LOCAL_STORED_PATH_AARCH64 = "./dependencies/bin/obstack_aarch64" +const.OBSTACK2_LOCAL_STORED_PATH_X86_64 = "./dependencies/bin/obstack_x86_64" # 限制收集任务的并发线程数量 10 const.GATHER_THREADS_LIMIT = 10 diff --git a/src/handler/gather/gather_obstack2.py b/src/handler/gather/gather_obstack2.py index 29315bd0..754a645f 100644 --- a/src/handler/gather/gather_obstack2.py +++ b/src/handler/gather/gather_obstack2.py @@ -143,7 +143,16 @@ def __handle_from_node(self, local_stored_path, node): absPath = os.path.dirname(sys.executable) else: absPath = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(__file__)))) - obstack2_local_stored_full_path = os.path.join(absPath, const.OBSTACK2_LOCAL_STORED_PATH) + # check node is x86_64 or aarch64 + node_arch = ssh_client.exec_cmd("arch") + if node_arch == "aarch64": + obstack2_local_stored_full_path = os.path.join(absPath, const.OBSTACK2_LOCAL_STORED_PATH_AARCH64) + elif node_arch == "x86_64": + obstack2_local_stored_full_path = os.path.join(absPath, const.OBSTACK2_LOCAL_STORED_PATH_X86_64) + else: + self.stdio.warn("node:{1} arch {0} not support gather obstack. obdiag will try use x86 obstack".format(node_arch, ssh_client.get_name())) + obstack2_local_stored_full_path = os.path.join(absPath, const.OBSTACK2_LOCAL_STORED_PATH_X86_64) + upload_file(ssh_client, obstack2_local_stored_full_path, const.OBSTACK2_DEFAULT_INSTALL_PATH, self.context.stdio) self.stdio.verbose("Installation of obstack2 is completed and gather begins ...")