#!/usr/bin/env bash set -euo pipefail # ARM Client-CPU 安装脚本: # - 导入 ARM CPU node 镜像 # - 启动 compose 中的 metric-cpu-node 服务 ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" PKG_ROOT="$ROOT_DIR" ENV_FILE="$PKG_ROOT/compose/.env" COMPOSE_FILE="$PKG_ROOT/compose/docker-compose.yml" info(){ echo -e "\033[34m[INSTALL-ARM-CLIENT]\033[0m $*"; } err(){ echo -e "\033[31m[ERROR]\033[0m $*" >&2; } require(){ local ok=1; for c in "$@"; do command -v "$c" >/dev/null 2>&1 || { err "缺少依赖: $c"; ok=0; }; done; [[ $ok -eq 1 ]]; } require_compose(){ if docker compose version >/dev/null 2>&1; then return 0; fi if command -v docker-compose >/dev/null 2>&1 && docker-compose version >/dev/null 2>&1; then return 0; fi err "未检测到 Docker Compose,请安装 docker compose v2 或 docker-compose v1"; exit 1 } require docker require_compose [[ -f "$ENV_FILE" ]] || { err "缺少 compose/.env,请先运行 scripts/config.sh"; exit 1; } info "使用环境文件: $ENV_FILE" set -a; source "$ENV_FILE"; set +a # 导入 ARM CPU node 镜像 IMG_TGZ=$(ls -1 "$PKG_ROOT"/images/argus-sys-metric-test-node-arm64-*.tar.gz 2>/dev/null | head -1 || true) [[ -n "$IMG_TGZ" ]] || { err "找不到 ARM CPU node 镜像 tar.gz(argus-sys-metric-test-node-arm64-*.tar.gz)"; exit 1; } info "导入 ARM CPU node 镜像: $(basename "$IMG_TGZ")" tmp=$(mktemp); gunzip -c "$IMG_TGZ" > "$tmp"; docker load -i "$tmp" >/dev/null; rm -f "$tmp" # 确保 agent 挂载目录存在 mkdir -p "$PKG_ROOT/private/argus/agent" # 启动 compose PROJECT="${COMPOSE_PROJECT_NAME:-argus-client-arm}" info "启动 ARM CPU 节点 (docker compose -p $PROJECT up -d)" docker compose -p "$PROJECT" --env-file "$ENV_FILE" -f "$COMPOSE_FILE" up -d docker compose -p "$PROJECT" --env-file "$ENV_FILE" -f "$COMPOSE_FILE" ps info "ARM Client-CPU 安装完成。可通过 docker logs -f argus-metric-cpu-node 查看节点容器日志。"