#!/bin/sh set -eu SVXREFLECTOR_CONF="${SVXREFLECTOR_CONF:-/etc/svxlink/svxreflector.conf}" SVXREFLECTOR_LINK_CONF="${SVXREFLECTOR_LINK_CONF:-/etc/svxlink/svxreflector.link.conf}" SVXREFLECTOR_ARGS="${SVXREFLECTOR_ARGS:-}" ENABLE_FM_LINK="${ENABLE_FM_LINK:-0}" RUNTIME_CONF="/tmp/svxreflector.runtime.conf" pids="" log() { echo "[$(date -Iseconds)] $*" } die() { log "ERROR: $*" exit 1 } start_bg() { name="$1" shift log "Starting: $name -> $*" "$@" & pid="$!" pids="$pids $pid" log "$name started (pid=$pid)" } stop_all() { log "Stop requested; stopping: $pids" for pid in $pids; do kill -TERM "$pid" 2>/dev/null || true done i=0 while [ $i -lt 10 ]; do alive=0 for pid in $pids; do if kill -0 "$pid" 2>/dev/null; then alive=1 fi done [ "$alive" -eq 0 ] && break i=$((i + 1)) sleep 1 done for pid in $pids; do kill -KILL "$pid" 2>/dev/null || true done log "Stop complete." } trap 'stop_all; exit 0' INT TERM command -v svxreflector >/dev/null 2>&1 || die "svxreflector binary not found (jayReflector build)" [ -f "$SVXREFLECTOR_CONF" ] || die "Config not found: $SVXREFLECTOR_CONF (expected volume mount)" # Local-only by default. When ENABLE_FM_LINK=1, append the link stub # (Satellite or Trunk keys from DJ1JAY) after the base lab conf. if [ "$ENABLE_FM_LINK" = "1" ]; then [ -f "$SVXREFLECTOR_LINK_CONF" ] || die "ENABLE_FM_LINK=1 but link config missing: $SVXREFLECTOR_LINK_CONF" { cat "$SVXREFLECTOR_CONF" echo echo "###################################################################" echo "# Appended FM-Funknetz link stub (ENABLE_FM_LINK=1)" echo "###################################################################" cat "$SVXREFLECTOR_LINK_CONF" } >"$RUNTIME_CONF" conf_path="$RUNTIME_CONF" log "FM link enabled: using $SVXREFLECTOR_CONF + $SVXREFLECTOR_LINK_CONF" else conf_path="$SVXREFLECTOR_CONF" log "FM link disabled (ENABLE_FM_LINK=0): local lab reflector only" fi # Ensure PKI dir exists for first-start cert bootstrap. mkdir -p /etc/svxlink/pki /var/lib/svxlink/pki start_bg "svxreflector" svxreflector --config "$conf_path" $SVXREFLECTOR_ARGS log "jayReflector (svxreflector) is running. Waiting…" exit_code=0 for pid in $pids; do if ! wait "$pid"; then exit_code=1 fi done log "Exit (exit_code=$exit_code)" exit "$exit_code"