#!/usr/bin/env bash set -euo pipefail # shellcheck source=common.sh source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/common.sh" PRIVATE_ROOT="" PRIVATE_CORE="$SYS_DEBUG_PRIVATE_CORE" PRIVATE_NODEA="$SYS_DEBUG_PRIVATE_NODEA" PRIVATE_NODEB="$SYS_DEBUG_PRIVATE_NODEB" TMP_DIR_VAL="$SYS_DEBUG_TMP_DIR" NETWORK_NAME="$SYS_DEBUG_NETWORK_NAME" NETWORK_SUBNET="$SYS_DEBUG_NETWORK_SUBNET" NETWORK_GATEWAY="$SYS_DEBUG_NETWORK_GATEWAY" PROJECT_NAME="$SYS_DEBUG_PROJECT_NAME" CONTAINER_PREFIX="$SYS_DEBUG_CONTAINER_PREFIX" NODEB_FIXED_IP=${SYS_DEBUG_NODEB_FIXED_IP:-172.30.0.200} usage() { cat <&2; exit 1; } PRIVATE_ROOT="$1" ;; --private-root=*) PRIVATE_ROOT="${1#*=}" ;; --private-core) shift; [[ $# -gt 0 ]] || { echo "--private-core requires value" >&2; exit 1; } PRIVATE_CORE="$1" ;; --private-core=*) PRIVATE_CORE="${1#*=}" ;; --private-nodea) shift; [[ $# -gt 0 ]] || { echo "--private-nodea requires value" >&2; exit 1; } PRIVATE_NODEA="$1" ;; --private-nodea=*) PRIVATE_NODEA="${1#*=}" ;; --private-nodeb) shift; [[ $# -gt 0 ]] || { echo "--private-nodeb requires value" >&2; exit 1; } PRIVATE_NODEB="$1" ;; --private-nodeb=*) PRIVATE_NODEB="${1#*=}" ;; --tmp-dir) shift; [[ $# -gt 0 ]] || { echo "--tmp-dir requires value" >&2; exit 1; } TMP_DIR_VAL="$1" ;; --tmp-dir=*) TMP_DIR_VAL="${1#*=}" ;; --network-name) shift; [[ $# -gt 0 ]] || { echo "--network-name requires value" >&2; exit 1; } NETWORK_NAME="$1" ;; --network-name=*) NETWORK_NAME="${1#*=}" ;; --network-subnet) shift; [[ $# -gt 0 ]] || { echo "--network-subnet requires value" >&2; exit 1; } NETWORK_SUBNET="$1" ;; --network-subnet=*) NETWORK_SUBNET="${1#*=}" ;; --network-gateway) shift; [[ $# -gt 0 ]] || { echo "--network-gateway requires value" >&2; exit 1; } NETWORK_GATEWAY="$1" ;; --network-gateway=*) NETWORK_GATEWAY="${1#*=}" ;; -h|--help) usage exit 0 ;; *) echo "Unknown argument: $1" >&2 usage >&2 exit 1 ;; esac shift done if [[ -n "$PRIVATE_ROOT" ]]; then PRIVATE_CORE="$PRIVATE_ROOT/private" PRIVATE_NODEA="$PRIVATE_ROOT/private-nodea" PRIVATE_NODEB="$PRIVATE_ROOT/private-nodeb" fi PRIVATE_CORE=$(abs_path "$PRIVATE_CORE") PRIVATE_NODEA=$(abs_path "$PRIVATE_NODEA") PRIVATE_NODEB=$(abs_path "$PRIVATE_NODEB") TMP_DIR_VAL=$(abs_path "$TMP_DIR_VAL") log "Preparing directories under $PRIVATE_CORE" mkdir -p \ "$PRIVATE_CORE/argus/etc" \ "$PRIVATE_CORE/argus/bind" \ "$PRIVATE_CORE/argus/master" \ "$PRIVATE_CORE/argus/metric/prometheus" \ "$PRIVATE_CORE/argus/log/elasticsearch" \ "$PRIVATE_CORE/argus/log/kibana" \ "$PRIVATE_NODEA/argus/agent/$HOST_A/health" \ "$PRIVATE_NODEB/argus/agent/$HOST_B/health" \ "$TMP_DIR_VAL" log "Aligning ownership for core directories" chown -R "${ARGUS_BUILD_UID}:${ARGUS_BUILD_GID}" \ "$PRIVATE_CORE/argus/log/elasticsearch" \ "$PRIVATE_CORE/argus/log/kibana" \ "$PRIVATE_CORE/argus/etc" 2>/dev/null || true log "Distributing update-dns.sh" BIND_UPDATE_SRC="$REPO_ROOT/src/bind/build/update-dns.sh" BIND_UPDATE_DEST="$PRIVATE_CORE/argus/etc/update-dns.sh" if [[ -f "$BIND_UPDATE_SRC" ]]; then cp "$BIND_UPDATE_SRC" "$BIND_UPDATE_DEST" chmod +x "$BIND_UPDATE_DEST" else echo "[WARN] Missing $BIND_UPDATE_SRC" >&2 fi require_docker ensure_image() { local image="$1" if ! docker image inspect "$image" >/dev/null 2>&1; then echo "[ERR] Missing image: $image. Run ./build/build_images.sh" >&2 exit 1 fi } log "Ensuring required images exist" ensure_image "${ES_IMAGE_TAG:-argus-elasticsearch:latest}" ensure_image "${KIBANA_IMAGE_TAG:-argus-kibana:latest}" ensure_image "${BIND_IMAGE_TAG:-argus-bind9:latest}" ensure_image "${MASTER_IMAGE_TAG:-argus-master:latest}" log "Building agent binary" pushd "$REPO_ROOT/src/agent" >/dev/null ./scripts/build_binary.sh popd >/dev/null AGENT_BIN="$REPO_ROOT/src/agent/dist/argus-agent" if [[ ! -x "$AGENT_BIN" ]]; then echo "[ERR] Agent binary not found at $AGENT_BIN" >&2 exit 1 fi echo "$AGENT_BIN" > "$TMP_DIR_VAL/agent_binary_path" log "Preparing environment file contents" tmp_env="$(mktemp)" cat > "$tmp_env" <