96 lines
2.3 KiB
Bash
Executable File
96 lines
2.3 KiB
Bash
Executable File
#!/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 (GeuReflector 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
|
|
# (GeuReflector Satellite or Trunk keys) 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 "GeuReflector (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"
|