24 lines
1.0 KiB
Bash
24 lines
1.0 KiB
Bash
#!/bin/sh
|
|||
|
|
set -eu
|
||
|
|
server=${1:-./VoiceCat.Server}
|
||
|
|
work=$(mktemp -d)
|
||
|
|
pid=
|
||
|
|
cleanup() { if [ -n "${pid}" ] && kill -0 "$pid" 2>/dev/null; then kill -TERM "$pid"; wait "$pid" || true; fi; rm -rf "$work"; }
|
||
|
|
trap cleanup EXIT INT TERM
|
||
|
|
"$server" --data-dir "$work/data" --bind 127.0.0.1 --port 0 >"$work/server.log" 2>"$work/server.err" &
|
||
|
|
pid=$!
|
||
|
|
i=0
|
||
|
|
while ! grep -q '"event":"ready"' "$work/server.log"; do
|
||
|
|
if ! kill -0 "$pid" 2>/dev/null; then cat "$work/server.err" >&2; exit 1; fi
|
||
|
|
i=$((i + 1)); [ "$i" -lt 100 ] || { echo "server readiness timeout" >&2; exit 1; }
|
||
|
|
sleep 0.1
|
||
|
|
done
|
||
|
|
port=$(sed -n 's/.*"port":\([0-9][0-9]*\).*/\1/p' "$work/server.log" | head -n 1)
|
||
|
|
fingerprint=$(sed -n 's/.*"certificate_fingerprint":"\([0-9A-F]*\)".*/\1/p' "$work/server.log" | head -n 1)
|
||
|
|
"$server" --health-check "127.0.0.1:$port" --expect-fingerprint "$fingerprint" | grep -q '"status":"healthy"'
|
||
|
|
[ "$(stat -c '%a' "$work/data")" = 700 ]
|
||
|
|
kill -TERM "$pid"
|
||
|
|
wait "$pid"
|
||
|
|
pid=
|
||
|
|
echo "Linux publish startup, TLS health, private data permissions and SIGTERM shutdown passed."
|