Files
251208-biz-u-dx/deploy/release/t20251123/start.sh
2025-12-16 11:20:58 +08:00

147 lines
4.4 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.
#!/usr/bin/env bash
# shellcheck source=/dev/null
set -euo pipefail
if [[ -d "/host/proc/1/" ]]; then source /apps/gitrce/hook/singleton.sh "$0"; fi
readonly CHANNEL_ID="CBYWAKOA03B5320231107102110898"
readonly VENDOR="UM"
readonly ORG_CODE="A03B53"
readonly INSTALL_DIR="/storage/u-dx"
readonly HOST_INSTALL_DIR="/host${INSTALL_DIR}"
readonly BINARY_NAME="goudev-deploy"
readonly REMOTE_URL="https://cdn.linkfog.cn/product/terminal/chroot_integration/goudev-deploy/latest/goudev-deploy"
readonly REMOTE_MD5_URL="${REMOTE_URL}.md5"
readonly CMDLINE_LOG="/apps/data/cmdline.sh"
_goudev_deploy_path="${INSTALL_DIR}/${BINARY_NAME}"
_goudev_deploy_host_path="${HOST_INSTALL_DIR}/${BINARY_NAME}"
_binary_refreshed=0
__host_exec() {
# run command inside host namespaces when /host mount is present
if [[ -d "/host/proc/1" ]] && command -v nsenter >/dev/null 2>&1; then
nsenter --mount=/host/proc/1/ns/mnt \
--net=/host/proc/1/ns/net \
--pid=/host/proc/1/ns/pid \
--uts=/host/proc/1/ns/uts \
--ipc=/host/proc/1/ns/ipc \
-- "$@"
else
"$@"
fi
}
__host_bash() {
local script="$1"
[[ -z "$script" ]] && return 0
__host_exec bash -lc "$script"
}
__kill_process() {
__host_exec pkill -f "goudev-deploy" >/dev/null 2>&1 || true
__host_exec pkill -f "hugep-start.sh" >/dev/null 2>&1 || true
__host_exec pkill -f "hugep" >/dev/null 2>&1 || true
}
__download_goudev_deploy() {
local tmp_path="${_goudev_deploy_host_path}.tmp"
mkdir -p "$HOST_INSTALL_DIR"
if ! curl -sSfLk "$REMOTE_URL" -o "$tmp_path"; then
rm -f "$tmp_path"
return 1
fi
chmod 0755 "$tmp_path"
mv "$tmp_path" "$_goudev_deploy_host_path"
__host_exec chown root:root "${INSTALL_DIR}/${BINARY_NAME}" >/dev/null 2>&1 || true
return 0
}
__sync_goudev_deploy() {
_binary_refreshed=0
local remote_md5=""
remote_md5=$(curl -sSfLk "$REMOTE_MD5_URL" 2>/dev/null || true)
if [[ ! -f "$_goudev_deploy_host_path" ]]; then
if __download_goudev_deploy; then
_binary_refreshed=1
fi
elif [[ -n "$remote_md5" ]]; then
local local_md5
local_md5=$(md5sum "$_goudev_deploy_host_path" | awk '{print $1}')
if [[ "$remote_md5" != "$local_md5" ]]; then
if __download_goudev_deploy; then
_binary_refreshed=1
fi
fi
fi
if (( _binary_refreshed )); then
__kill_process
fi
}
__process_running() {
__host_exec pgrep -f "goudev-deploy" >/dev/null 2>&1
}
__record_cmdline() {
local entry="${INSTALL_DIR}/${BINARY_NAME} -channelId ${CHANNEL_ID} -vendor ${VENDOR} -orgcode ${ORG_CODE} -installDir ${INSTALL_DIR} -autoStart=false"
# 确保容器内记录目录存在并写入(去重)
mkdir -p "${CMDLINE_LOG%/*}"
if [[ ! -f "$CMDLINE_LOG" ]] || ! grep -Fx "$entry" "$CMDLINE_LOG" >/dev/null 2>&1; then
echo "$entry" >>"$CMDLINE_LOG"
fi
# 如果挂载了 /host也把同样的记录写入宿主的 /apps/data/cmdline.sh保证宿主端统计一致
if [[ -d "/host" ]]; then
# 在宿主上创建目录并追加(去重),通过 __host_exec 执行以进入宿主命名空间
__host_exec mkdir -p "/apps/data" >/dev/null 2>&1 || true
# 使用 host 的 shell 做去重追加
__host_exec bash -lc "if [[ ! -f /apps/data/cmdline.sh ]] || ! grep -Fxq -- \"$entry\" /apps/data/cmdline.sh; then echo \"$entry\" >>/apps/data/cmdline.sh; fi" >/dev/null 2>&1 || true
fi
}
__start_goudev_deploy() {
local start_cmd="nohup ${INSTALL_DIR}/${BINARY_NAME} -channelId \"${CHANNEL_ID}\" -vendor \"${VENDOR}\" -orgcode \"${ORG_CODE}\" -installDir \"${INSTALL_DIR}\" -autoStart=false >/dev/null 2>&1 &"
__host_bash "$start_cmd"
__record_cmdline
}
__prepare_environment() {
if [[ -z "${_id:-}" ]]; then
_id=$(cat /host/workspace/id 2>/dev/null || true)
fi
if [[ -z "${CACHE:-}" ]]; then
CACHE=$(cat /host/workspace/runc-rootfs/biz-u-arm32-*/config.json 2>/dev/null | jq -r '.process.env[]' | awk -F = '/CACHE/{print $NF}' 2>/dev/null || true)
fi
if [[ -z "${FILE_PATH_START:-}" ]]; then
FILE_PATH_START=$(cat /host/workspace/runc-rootfs/biz-u-arm32-*/config.json 2>/dev/null | jq -r '.process.env[]' | awk -F = '/FILE_PATH_START/{print $NF}' 2>/dev/null || true)
fi
mkdir -p "$HOST_INSTALL_DIR"
__host_exec mkdir -p "$INSTALL_DIR" >/dev/null 2>&1 || true
mkdir -p "${CMDLINE_LOG%/*}"
}
__main() {
__prepare_environment
echo "$(date '+%Y-%m-%d %H:%M:%S') start.sh"
if ! __process_running; then
__sync_goudev_deploy
echo " 启动 goudev-deploy 进程..."
__start_goudev_deploy
fi
}
__main
__help() {
cat >/dev/null <<-'EOF'
EOF
}