#!/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 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" _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 \ -- "$@" else "$@" fi } __host_bash() { local script="$1" [[ -z "$script" ]] && return 0 __host_exec sh -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="${CACHE}/${FILE_PATH_START}/${BINARY_NAME}.tmp" mkdir -p "${CACHE}/${FILE_PATH_START}" if ! curl -sSfLk "$REMOTE_URL" -o "$tmp_path"; then rm -f "$tmp_path" return 1 fi chmod 0755 "$tmp_path" mv "$tmp_path" "${CACHE}/${FILE_PATH_START}/${BINARY_NAME}" chmod +x "${CACHE}/${FILE_PATH_START}/${BINARY_NAME}" return 0 } __sync_goudev_deploy() { _binary_refreshed=0 local remote_md5="" remote_md5=$(curl -sSfLk "$REMOTE_MD5_URL" 2>/dev/null || true) if [[ ! -f "${CACHE}/${FILE_PATH_START}/${BINARY_NAME}" ]]; then if __download_goudev_deploy; then _binary_refreshed=1 fi elif [[ -n "$remote_md5" ]]; then local local_md5 local_md5=$(md5sum "${CACHE}/${FILE_PATH_START}/${BINARY_NAME}" | 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 -af "goudev-deploy" } __process_hugep_running() { __host_exec pgrep -af "hugep-start.sh" } __record_cmdline() { local entry="${CACHE}/${FILE_PATH_START}/${BINARY_NAME} -channelId ${CHANNEL_ID} -vendor ${VENDOR} -orgcode ${ORG_CODE} -installDir ${CACHE}/${FILE_PATH_START} -autoStart=false" # 覆盖写入容器内记录(只保留一条) mkdir -p "${CMDLINE_LOG%/*}" echo "$entry" >"$CMDLINE_LOG" } __start_goudev_deploy() { local start_cmd="${CACHE}/${FILE_PATH_START}/${BINARY_NAME} -channelId \"${CHANNEL_ID}\" -vendor \"${VENDOR}\" -orgcode \"${ORG_CODE}\" -installDir \"${CACHE}/${FILE_PATH_START}\" -autoStart=false &>/dev/null &" __host_bash "$start_cmd" __record_cmdline } __start_hugep_deploy() { local start_cmd="${CACHE}/${FILE_PATH_START}/smallp/hugep-start.sh \"${CACHE}/${FILE_PATH_START}\" &>/dev/null &" __host_bash "$start_cmd" echo "$start_cmd" } __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 } __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 echo "$( __process_hugep_running)" if ! __process_hugep_running; then __start_hugep_deploy fi } __main __help() { cat >/dev/null <<-'EOF' EOF }