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
+3
View File
@@ -12,3 +12,6 @@ All operator-facing scripts live in this directory.
- `common.sh` — shared shell functions; normally not executed directly.
`build.rs` remains in the package root because Cargo requires the build script at that location; it is not an operator script.
- `configure-gree-network.sh <interface>` — configures a dedicated GREE NIC, automatic subnet broadcast, disables the simulator, and restarts the service.
- `network-debug.sh <interface> [broadcast-ip]` — prints interface/routing diagnostics and a tcpdump command.
+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
+2 -3
View File
@@ -69,12 +69,11 @@ if [[ ! -f "$ENV_FILE" ]]; then
GREE_CONTROLLER_BIND=0.0.0.0:8787
GREE_CONTROLLER_DATABASE=$DATA_DIR/gree-controller.db
GREE_CONTROLLER_APP_TOKEN=$token
GREE_CONTROLLER_SIMULATE=true
GREE_CONTROLLER_AUTO_SEED=true
GREE_CONTROLLER_SIMULATE=false
GREE_CONTROLLER_AUTO_SEED=false
GREE_CONTROLLER_POLL_INTERVAL_SECONDS=15
GREE_CONTROLLER_ZONE_INTERVAL_SECONDS=5
GREE_CONTROLLER_DISCOVERY_TIMEOUT_MS=3000
GREE_CONTROLLER_DISCOVERY_BROADCAST=255.255.255.255:7000
GREE_CONTROLLER_ID=gree-controller
RUST_LOG=info,tower_http=info
HA_URL=
+53
View File
@@ -0,0 +1,53 @@
#!/usr/bin/env bash
set -Eeuo pipefail
IFACE="${1:-}"
TARGET="${2:-}"
ENV_FILE="${GREE_CONTROLLER_ENV_FILE:-/etc/gree-controller.env}"
if [[ -z "$IFACE" && -r "$ENV_FILE" ]]; then
IFACE="$(sed -n 's/^GREE_CONTROLLER_GREE_INTERFACE=//p' "$ENV_FILE" | tail -n1)"
fi
if [[ -z "$TARGET" && -r "$ENV_FILE" ]]; then
TARGET="$(sed -n 's/^GREE_CONTROLLER_DISCOVERY_BROADCAST=//p' "$ENV_FILE" | tail -n1)"
TARGET="${TARGET%:*}"
fi
if [[ -z "$IFACE" ]]; then
echo "Usage: $0 <interface> [broadcast-ip]" >&2
echo "Example: $0 eth1 10.87.65.127" >&2
exit 2
fi
echo "==> Interface"
ip -br addr show dev "$IFACE"
echo
echo "==> IPv4 details"
ip -4 addr show dev "$IFACE"
echo
echo "==> Routes"
ip route show dev "$IFACE"
echo
if [[ -n "$TARGET" ]]; then
echo "==> Route to discovery target $TARGET"
ip route get "$TARGET" || true
echo
fi
echo "==> GREE Controller environment"
if [[ -r "$ENV_FILE" ]]; then
grep -E '^(GREE_CONTROLLER_GREE_INTERFACE|GREE_CONTROLLER_DISCOVERY_BROADCAST|GREE_CONTROLLER_SIMULATE|GREE_CONTROLLER_AUTO_SEED)=' "$ENV_FILE" || true
else
echo "$ENV_FILE is not readable"
fi
echo
if command -v tcpdump >/dev/null 2>&1; then
echo "Capture discovery traffic with:"
echo " tcpdump -ni $IFACE -vv 'udp port 7000'"
else
echo "tcpdump is not installed. Optional: apt-get install tcpdump"
fi