#!/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 }