113 lines
3.2 KiB
Bash
Executable File
113 lines
3.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
set -euo pipefail
|
||
|
||
# Make ARM Client-CPU package (versioned CPU node image, compose, env, docs)
|
||
|
||
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
||
TEMPL_DIR="$ROOT_DIR/deployment_new/templates/client_arm"
|
||
ART_ROOT="$ROOT_DIR/deployment_new/artifact/client_arm"
|
||
|
||
COMMON_SH="$ROOT_DIR/deployment_new/build/common.sh"
|
||
. "$COMMON_SH"
|
||
|
||
usage(){ cat <<EOF
|
||
Build ARM Client-CPU Package (deployment_new)
|
||
|
||
Usage: $(basename "$0") --version YYYYMMDD [--image IMAGE[:TAG]]
|
||
|
||
Defaults:
|
||
image = argus-sys-metric-test-node-arm64:latest
|
||
|
||
Outputs: deployment_new/artifact/client_arm/<YYYYMMDD>/ and client_arm_YYYYMMDD.tar.gz
|
||
EOF
|
||
}
|
||
|
||
VERSION=""
|
||
IMAGE="argus-sys-metric-test-node-arm64:latest"
|
||
while [[ $# -gt 0 ]]; do
|
||
case "$1" in
|
||
--version) VERSION="$2"; shift 2;;
|
||
--image) IMAGE="$2"; shift 2;;
|
||
-h|--help) usage; exit 0;;
|
||
*) err "unknown arg: $1"; usage; exit 1;;
|
||
esac
|
||
done
|
||
if [[ -z "$VERSION" ]]; then VERSION="$(today_version)"; fi
|
||
|
||
require_cmd docker tar gzip
|
||
|
||
STAGE="$(mktemp -d)"; trap 'rm -rf "$STAGE"' EXIT
|
||
PKG_DIR="$ART_ROOT/$VERSION"
|
||
mkdir -p "$PKG_DIR" "$STAGE/images" "$STAGE/compose" "$STAGE/docs" "$STAGE/scripts" "$STAGE/private/argus"
|
||
|
||
# 1) Save CPU node image with version tag
|
||
if ! docker image inspect "$IMAGE" >/dev/null 2>&1; then
|
||
err "missing image: $IMAGE"; exit 1; fi
|
||
|
||
REPO="${IMAGE%%:*}"; TAG_VER="$REPO:$VERSION"
|
||
docker tag "$IMAGE" "$TAG_VER"
|
||
out_tar="$STAGE/images/${REPO//\//-}-$VERSION.tar"
|
||
docker save -o "$out_tar" "$TAG_VER"
|
||
gzip -f "$out_tar"
|
||
|
||
# 2) Compose + env template
|
||
cp "$TEMPL_DIR/compose/docker-compose.yml" "$STAGE/compose/docker-compose.yml"
|
||
ENV_EX="$STAGE/compose/.env.example"
|
||
cat >"$ENV_EX" <<EOF
|
||
# Generated by make_arm_client_package.sh
|
||
PKG_VERSION=$VERSION
|
||
|
||
NODE_CPU_IMAGE_TAG=${REPO}:${VERSION}
|
||
|
||
# Compose project name (isolation from server stack)
|
||
COMPOSE_PROJECT_NAME=argus-client-arm
|
||
|
||
# Required fields(ARM Client 默认通过 overlay alias 访问 master,可按需覆盖 MASTER_ENDPOINT)
|
||
MASTER_ENDPOINT=http://master.argus.com:3000
|
||
AGENT_ENV=
|
||
AGENT_USER=
|
||
AGENT_INSTANCE=
|
||
CPU_NODE_HOSTNAME=
|
||
|
||
# UID/GID for volume ownership
|
||
ARGUS_BUILD_UID=2133
|
||
ARGUS_BUILD_GID=2015
|
||
EOF
|
||
|
||
# 3) Docs
|
||
CLIENT_DOC_SRC="$TEMPL_DIR/docs"
|
||
if [[ -d "$CLIENT_DOC_SRC" ]]; then
|
||
copy_tree "$CLIENT_DOC_SRC" "$STAGE/docs"
|
||
fi
|
||
|
||
# 4) Scripts & private skeleton
|
||
SCRIPTS_SRC="$TEMPL_DIR/scripts"
|
||
if [[ -d "$SCRIPTS_SRC" ]]; then
|
||
copy_tree "$SCRIPTS_SRC" "$STAGE/scripts"
|
||
find "$STAGE/scripts" -type f -name '*.sh' -exec chmod +x {} + 2>/dev/null || true
|
||
fi
|
||
|
||
# x86 专用脚本:用于在 x86_64 主机上运行 ARM Client 包
|
||
SCRIPTS_X86_SRC="$TEMPL_DIR/scripts_for_x86"
|
||
if [[ -d "$SCRIPTS_X86_SRC" ]]; then
|
||
copy_tree "$SCRIPTS_X86_SRC" "$STAGE/scripts_for_x86"
|
||
find "$STAGE/scripts_for_x86" -type f -name '*.sh' -exec chmod +x {} + 2>/dev/null || true
|
||
fi
|
||
|
||
mkdir -p "$STAGE/private/argus/agent"
|
||
|
||
# 5) Manifest & checksums
|
||
gen_manifest "$STAGE" "$STAGE/manifest.txt"
|
||
checksum_dir "$STAGE" "$STAGE/checksums.txt"
|
||
|
||
# 6) Move to artifact dir and pack
|
||
mkdir -p "$PKG_DIR"
|
||
copy_tree "$STAGE" "$PKG_DIR"
|
||
|
||
OUT_TAR_DIR="$(dirname "$PKG_DIR")"
|
||
OUT_TAR="$OUT_TAR_DIR/client_arm_${VERSION}.tar.gz"
|
||
log "Creating tarball: $OUT_TAR"
|
||
(cd "$PKG_DIR/.." && tar -czf "$OUT_TAR" "$(basename "$PKG_DIR")")
|
||
log "Client-ARM package ready: $PKG_DIR"
|
||
echo "$OUT_TAR"
|