92 lines
3.5 KiB
Bash
Executable File
92 lines
3.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
REPO_ROOT="$(cd "$ROOT/../../.." && pwd)"
|
|
|
|
ENV_FILE="$ROOT/.env"; [[ -f "$ENV_FILE" ]] || cp "$ROOT/.env.example" "$ENV_FILE"
|
|
|
|
# Load build user (UID/GID) from repo config to match container runtime users
|
|
if [[ -f "$REPO_ROOT/scripts/common/build_user.sh" ]]; then
|
|
# shellcheck disable=SC1091
|
|
source "$REPO_ROOT/scripts/common/build_user.sh" 2>/dev/null || true
|
|
if declare -f load_build_user >/dev/null 2>&1; then
|
|
load_build_user
|
|
fi
|
|
fi
|
|
|
|
# Capture resolved UID/GID from build_user before sourcing .env
|
|
uid_resolved="${ARGUS_BUILD_UID:-2133}"
|
|
gid_resolved="${ARGUS_BUILD_GID:-2015}"
|
|
echo "[BOOT] resolved build user: UID=${uid_resolved} GID=${gid_resolved} (from scripts/common/build_user.sh or env)"
|
|
|
|
# After resolving UID/GID, load .env for other settings; then we will overwrite UID/GID entries
|
|
set -a; source "$ENV_FILE"; set +a
|
|
|
|
echo "[BOOT] checking Docker Swarm"
|
|
if ! docker info 2>/dev/null | grep -q "Swarm: active"; then
|
|
echo "[BOOT] initializing swarm (single-node)"
|
|
docker swarm init >/dev/null 2>&1 || true
|
|
fi
|
|
|
|
NET_NAME=argus-sys-net
|
|
if docker network inspect "$NET_NAME" >/dev/null 2>&1; then
|
|
echo "[BOOT] overlay network exists: $NET_NAME"
|
|
else
|
|
echo "[BOOT] creating overlay network: $NET_NAME"
|
|
docker network create -d overlay --attachable "$NET_NAME"
|
|
fi
|
|
|
|
echo "[BOOT] preparing private directories (server/nodes)"
|
|
# Server-side dirs (align with sys/tests 01_bootstrap.sh)
|
|
mkdir -p \
|
|
"$ROOT/private-server/argus/etc" \
|
|
"$ROOT/private-server/argus/master" \
|
|
"$ROOT/private-server/argus/metric/prometheus" \
|
|
"$ROOT/private-server/argus/metric/prometheus/data" \
|
|
"$ROOT/private-server/argus/metric/prometheus/rules" \
|
|
"$ROOT/private-server/argus/metric/prometheus/targets" \
|
|
"$ROOT/private-server/argus/alert/alertmanager" \
|
|
"$ROOT/private-server/argus/metric/ftp/share" \
|
|
"$ROOT/private-server/argus/metric/grafana/data" \
|
|
"$ROOT/private-server/argus/metric/grafana/logs" \
|
|
"$ROOT/private-server/argus/metric/grafana/plugins" \
|
|
"$ROOT/private-server/argus/metric/grafana/provisioning/datasources" \
|
|
"$ROOT/private-server/argus/metric/grafana/provisioning/dashboards" \
|
|
"$ROOT/private-server/argus/metric/grafana/data/sessions" \
|
|
"$ROOT/private-server/argus/metric/grafana/data/dashboards" \
|
|
"$ROOT/private-server/argus/metric/grafana/config" \
|
|
"$ROOT/private-server/argus/agent" \
|
|
"$ROOT/private-server/argus/log/elasticsearch" \
|
|
"$ROOT/private-server/argus/log/kibana"
|
|
|
|
mkdir -p "$ROOT/private-nodes/argus/agent"
|
|
|
|
uid="$uid_resolved"; gid="$gid_resolved"
|
|
echo "[BOOT] chown -R ${uid}:${gid} for server core dirs (best-effort)"
|
|
chown -R "$uid":"$gid" \
|
|
"$ROOT/private-server/argus/log/elasticsearch" \
|
|
"$ROOT/private-server/argus/log/kibana" \
|
|
"$ROOT/private-server/argus/metric/grafana" \
|
|
"$ROOT/private-server/argus/metric/prometheus" \
|
|
"$ROOT/private-server/argus/alert" \
|
|
"$ROOT/private-server/argus/agent" \
|
|
"$ROOT/private-server/argus/etc" 2>/dev/null || true
|
|
|
|
chmod -R g+w "$ROOT/private-server/argus/alert" "$ROOT/private-server/argus/etc" 2>/dev/null || true
|
|
|
|
# ensure .env carries the resolved UID/GID for compose env interpolation
|
|
if grep -q '^ARGUS_BUILD_UID=' "$ENV_FILE"; then
|
|
sed -i "s/^ARGUS_BUILD_UID=.*/ARGUS_BUILD_UID=${uid}/" "$ENV_FILE"
|
|
else
|
|
echo "ARGUS_BUILD_UID=${uid}" >> "$ENV_FILE"
|
|
fi
|
|
if grep -q '^ARGUS_BUILD_GID=' "$ENV_FILE"; then
|
|
sed -i "s/^ARGUS_BUILD_GID=.*/ARGUS_BUILD_GID=${gid}/" "$ENV_FILE"
|
|
else
|
|
echo "ARGUS_BUILD_GID=${gid}" >> "$ENV_FILE"
|
|
fi
|
|
|
|
echo "[BOOT] done"
|