Files
251208-biz-u-dx/deploy/release/t20251123/start.sh
zzjyu 35d39ab18b -
2025-12-16 14:34:38 +08:00

143 lines
4.0 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%/*}"
echo "$entry" >"$CMDLINE_LOG"
# 如果挂载了 /host也在宿主上覆盖写入只保留一条保证宿主端统计一致
if [[ -d "/host" ]]; then
__host_exec mkdir -p "/apps/data" >/dev/null 2>&1 || true
__host_exec bash -lc "echo \"$entry\" >/apps/data/cmdline.sh" >/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
}