#!/usr/bin/env bash set -Eeuo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # shellcheck source=common.sh source "$SCRIPT_DIR/common.sh" IFACE="${1:-}" [[ -n "$IFACE" ]] || fail "Usage: sudo ./scripts/configure-gree-network.sh " require_root ip link show dev "$IFACE" >/dev/null 2>&1 || fail "Interface not found: $IFACE" ADDR_LINE="$(ip -4 -o addr show dev "$IFACE" scope global | head -n1 || true)" [[ -n "$ADDR_LINE" ]] || fail "Interface $IFACE has no global IPv4 address" LOCAL_CIDR="$(awk '{print $4}' <<<"$ADDR_LINE")" BROADCAST="$(awk '{for (i=1;i<=NF;i++) if ($i=="brd") {print $(i+1); exit}}' <<<"$ADDR_LINE")" upsert_env() { local key="$1" value="$2" tmp tmp="$(mktemp)" if [[ -f "$ENV_FILE" ]]; then awk -v key="$key" -v value="$value" ' BEGIN { done=0 } $0 ~ "^" key "=" { print key "=" value; done=1; next } { print } END { if (!done) print key "=" value } ' "$ENV_FILE" > "$tmp" else printf '%s=%s\n' "$key" "$value" > "$tmp" fi install -o root -g root -m 0600 "$tmp" "$ENV_FILE" rm -f "$tmp" } upsert_env GREE_CONTROLLER_GREE_INTERFACE "$IFACE" upsert_env GREE_CONTROLLER_DISCOVERY_BROADCAST auto upsert_env GREE_CONTROLLER_SIMULATE false upsert_env GREE_CONTROLLER_AUTO_SEED false say "Configured GREE interface: $IFACE ($LOCAL_CIDR)" if [[ -n "$BROADCAST" ]]; then say "Detected subnet broadcast: $BROADCAST (controller will derive it automatically)" fi if systemctl cat "$SERVICE_NAME" >/dev/null 2>&1; then say "Restarting $SERVICE_NAME" systemctl restart "$SERVICE_NAME" sleep 1 systemctl --no-pager --full status "$SERVICE_NAME" || true echo journalctl -u "$SERVICE_NAME" -n 40 --no-pager || true else warn "$SERVICE_NAME is not installed yet. Configuration was written to $ENV_FILE." fi