Files
enginex-ascend-910-vllm/csrc/scripts/package/common/sh/multi_version.inc
Sun Ruoxi 7f8a1b1f7a init v0.23.0
Signed-off-by: Sun Ruoxi <sunruoxi@4paradigm.com>
2026-08-27 15:11:51 +08:00

305 lines
9.6 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/sh
# -----------------------------------------------------------------------------------------------------------
# Copyright (c) 2025 Huawei Technologies Co., Ltd.
# This program is free software, you can redistribute it and/or modify it under the terms and conditions of
# CANN Open Software License Agreement Version 2.0 (the "License").
# Please refer to the License for details. You may not use this file except in compliance with the License.
# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
# INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
# See LICENSE in the root of the software repository for the full text of the License.
# -----------------------------------------------------------------------------------------------------------
# 多版本函数库
# 创建版本目录
create_version_dir() {
local install_path="$1"
local version_dir="$2"
local username="$3"
local usergroup="$4"
local install_for_all="$5"
local ret
if [ ! -d "${install_path}/${version_dir}" ]; then
make_dir "${install_path}/${version_dir}"
ret="$?" && [ $ret -ne 0 ] && return $ret
fi
# 约束版本号目录权限
change_mod "${install_path}/${version_dir}" "750" "${install_for_all}"
ret="$?" && [ $ret -ne 0 ] && return $ret
change_own "${install_path}/${version_dir}" "${username}:${usergroup}"
ret="$?" && [ $ret -ne 0 ] && return $ret
return 0
}
# 检查版本包安装结果
check_version_install() {
local install_path="$1"
local version_dir="$2"
local package="$3"
local version_info_path
get_package_version_info "version_info_path" "$install_path" "$version_dir" "$package"
if [ ! -f "$version_info_path" ]; then
comm_log "ERROR" "$version_info_path doesn't exist in check version install!"
return 1
fi
return 0
}
# 安装latest管理器
install_latest_manager() {
local var_path="$1"
shift 1
sh latest_manager/install.sh --install-path="$var_path" "$@"
}
# 卸载latest管理器
uninstall_latest_manager_for_upgrade() {
local var_path="$1"
${var_path}/manager/uninstall.sh --upgrade
}
# 升级latest管理器
upgrade_latest_manager() {
local var_path="$1"
local latest_version_info latest_manager_version local_manager_version
latest_version_info="$var_path/manager/version.info"
if [ -f "$latest_version_info" ]; then
get_version latest_manager_version "$latest_version_info"
get_version local_manager_version "latest_manager/version.info"
set_default "latest_manager_version" "$latest_manager_version" "0"
set_default "local_manager_version" "$local_manager_version" "0"
if [ "$latest_manager_version" -lt "$local_manager_version" ]; then
uninstall_latest_manager_for_upgrade "$var_path"
install_latest_manager "$var_path" "--upgrade"
fi
else
install_latest_manager "$var_path"
fi
}
get_install_for_all_param() {
local _outvar="$1"
local _install_for_all="$2"
local _result=""
if [ "$_install_for_all" = "y" ]; then
_result="--install-for-all"
fi
eval "${_outvar}=\"${_result}\""
}
get_docker_root_param() {
local _outvar="$1"
local _docker_root="$2"
local _result=""
if [ "$_docker_root" != "" ]; then
_result="--docker-root \\\"$_docker_root\\\""
fi
eval "${_outvar}=\"${_result}\""
}
# 通知latest管理器
notify_latest_manager() {
local var_path="$1"
local package="$2"
local version="$3"
local version_dir="$4"
local install_for_all="$5"
local docker_root="$6"
local ext_params="$7"
local operation="$8"
local ret package_dir install_for_all_param docker_root_param
if [ ! -f "$var_path/manager.sh" ]; then
return 1
fi
if [ "${USE_SHARE_INFO}" == "y" ]; then
ext_params="$ext_params --use-share-info"
fi
get_package_dir package_dir "$package"
get_install_for_all_param "install_for_all_param" "$install_for_all"
get_docker_root_param "docker_root_param" "$docker_root"
eval "\"$var_path/manager.sh\"" --version "\"$version\"" --version-dir "\"$version_dir\"" \
--package "\"$package\"" --package-dir "\"$package_dir\"" \
"$install_for_all_param" "$docker_root_param" "$ext_params" "$operation"
ret="$?" && [ $ret -ne 0 ] && return $ret
return 0
}
# 通知latest管理器安装完成
notify_latest_manager_installed() {
local local_manager_version
local ext_params
get_version local_manager_version "latest_manager/version.info"
set_default "local_manager_version" "$local_manager_version" "0"
if [ "$INCREMENT" = "y" ]; then
ext_params="--serial $local_manager_version --increment"
else
ext_params="--serial $local_manager_version"
fi
notify_latest_manager "$@" "$ext_params" "package_installed"
}
# 通知latest管理器创建软链
# 老版本全部卸载后latest回滚到新版本时会用老版本的install_common_parser.sh
# 调用新版本的--create-package-latest-softlink会走到这个流程。
notify_latest_manager_create_softlink() {
notify_latest_manager "$@" "" "package_create_softlink"
}
# 通知latest管理器删除软链
notify_latest_manager_remove_softlink() {
notify_latest_manager "$@" "" "package_remove_softlink"
}
# 通知latest管理器准备卸载
notify_latest_manager_pre_uninstall() {
notify_latest_manager "$@" "" "package_pre_uninstall"
}
# 通知latest管理器卸载完成
notify_latest_manager_uninstalled() {
local is_recreate_softlink="$1"
local recreate_softlink=""
local ret
shift 1
if [ "$is_recreate_softlink" = "y" ]; then
recreate_softlink="--recreate-softlink"
fi
notify_latest_manager "$@" "$recreate_softlink" "package_uninstalled"
ret="$?" && [ $ret -ne 0 ] && return $ret
return 0
}
# 多版本安装流程
multi_version_install() {
local install_type="$1"
local install_path="$2"
local filelist_path="$3"
local package="$4"
local feature_param="$5"
local version="$6"
local version_dir="$7"
local username="$8"
local usergroup="$9"
local setenv="${10}"
local is_upgrade="${11}"
local docker_root="${12}"
local custom_options="${13}"
local install_for_all="${14}"
local ret total_ret="0" pkg_running_version version_pair_arr last_version last_version_dir
create_version_dir "${install_path}" "${version_dir}" "${username}" "${usergroup}" "${install_for_all}"
ret="$?" && [ $ret -ne 0 ] && return $ret
version_install "${install_type}" "${install_path}" "${filelist_path}" "${package}" "${feature_param}" \
"${version_dir}" "${username}" "${usergroup}" "${setenv}" "${is_upgrade}" "${docker_root}" "${custom_options}"
ret="$?" && [ $ret -ne 0 ] && return $ret
check_version_install "$install_path" "$version_dir" "$package"
ret="$?" && [ $ret -ne 0 ] && return $ret
return ${total_ret}
}
# 删除latest下空目录
del_empty_dirs_in_latest() {
local install_type="$1"
local install_path="$2"
local latest_dir="$3"
local filelist_path="$4"
local feature_param="$5"
local ret
create_stash_mod "${install_path}/${latest_dir}"
ret="$?" && [ $ret -ne 0 ] && return $ret
foreach_filelist "filter_common_dirs" "reset_mod_dirs_with_stash_mod" "${install_type}" "${install_path}/${latest_dir}" "mkdir" \
"${filelist_path}" "${feature_param}" "no" "normal"
ret="$?" && [ $ret -ne 0 ] && return $ret
foreach_filelist "filter_common_dirs" "remove_install_dirs" "${install_type}" "${install_path}/${latest_dir}" "mkdir" \
"${filelist_path}" "${feature_param}" "reverse" "normal"
ret="$?" && [ $ret -ne 0 ] && return $ret
foreach_stashmod "restore_stash_mod" "${install_path}/${latest_dir}" "reverse"
ret="$?" && [ $ret -ne 0 ] && return $ret
remove_stash_mod "${install_path}/${latest_dir}"
ret="$?" && [ $ret -ne 0 ] && return $ret
return 0
}
# 多版本卸载流程
multi_version_uninstall() {
local install_type="$1"
local install_path="$2"
local filelist_path="$3"
local package="$4"
local feature_param="$5"
local version="$6"
local version_dir="$7"
local username="$8"
local usergroup="$9"
local docker_root="${10}"
local custom_options="${11}"
local is_recreate_softlink="${12}"
local tmp_root tmp_filelist_path
local ret total_ret=0 install_path_full="" is_running="" is_upgrade
local running_packages is_final_running="false"
check_param_not_empty "usergroup" "need set usergroup parameter in multi version uninstall!"
ret="$?" && [ ${ret} -ne 0 ] && return ${ret}
get_tmp_root "tmp_root"
tmp_filelist_path=$(mktemp "$tmp_root/filelist_XXXXXX" || exit 1)
cp -f "${filelist_path}" "${tmp_filelist_path}"
if [ $? -ne 0 ]; then
log "ERROR" "cp -f ${filelist_path} ${tmp_filelist_path} failed!"
exit 1
fi
del_tmp_filelist="rm -f \"${tmp_filelist_path}\""
version_uninstall "${install_type}" "${install_path}" "${filelist_path}" "${package}" "${feature_param}" \
"${version_dir}" "${username}" "${docker_root}" "${custom_options}"
if [ $? -ne 0 ]; then
eval "${del_tmp_filelist}"
return 1
fi
# 删除临时文件tmp_filelist_path
eval "${del_tmp_filelist}"
# 删除版本空目录
is_dir_empty "${install_path}/${version_dir}"
if [ $? -eq 0 ]; then
remove_dir_icp "${install_path}/${version_dir}"
ret="$?" && [ $ret -ne 0 ] && total_ret="1"
fi
return ${total_ret}
}