This commit is contained in:
Mateusz Gruszczyński
2026-08-23 22:05:24 +02:00
parent 1d3dcba1a9
commit 9c9b7b272b
25 changed files with 902 additions and 252 deletions
+53
View File
@@ -0,0 +1,53 @@
#!/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 <interface>"
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