AtlatestRepositoryapiary
1
#!/usr/bin/env bash2
#3
# Stand up a throwaway enclave-server + seeded DB for the apiary4
# transport harness. Writes state to $HARNESS_RUN/state.env so the5
# python drivers can read it.6
#7
# ./env-up.sh -> seeds, starts server, prints the run dir8
# ./env-down.sh -> kills the server by RECORDED PID, never pkill9
#10
# NEVER stop this server with a pattern match. See README.md --11
# concurrent enclave harnesses on one host are normal, and a pattern12
# kill takes somebody else's server AND the killing session with it.13
set -u15
RUN=${HARNESS_RUN:-/tmp/apiary-harness}16
PORT=${HARNESS_PORT:-49771}17
ENCLAVE_BIN=${ENCLAVE_BIN:-}18
DB="$RUN/harness.db"20
OWNER=${HARNESS_OWNER:-owner-1}21
OWNER_PASS=${HARNESS_OWNER_PASS:-harness-admin}22
LEADER=${HARNESS_LEADER:-leader-1}23
CHANNEL=${HARNESS_CHANNEL:-#coord}24
GROUP=${HARNESS_GROUP:-test-workers}26
if [ -z "$ENCLAVE_BIN" ]; then27
echo "FATAL: set ENCLAVE_BIN to an enclave-server binary." >&228
echo " e.g. ENCLAVE_BIN=/path/to/enclave ./env-up.sh" >&229
exit 130
fi31
if [ ! -x "$ENCLAVE_BIN" ]; then32
echo "FATAL: enclave binary not found/executable at $ENCLAVE_BIN" >&233
exit 134
fi36
mkdir -p "$RUN"37
rm -f "$DB" "$DB-shm" "$DB-wal"39
ENCLAVE_DB_PATH="$DB" "$ENCLAVE_BIN" user add "$OWNER" \40
--password "$OWNER_PASS" --role admin >/dev/null \41
|| { echo "FATAL: user add failed" >&2; exit 1; }42
ENCLAVE_DB_PATH="$DB" "$ENCLAVE_BIN" group create "$GROUP" >/dev/null 2>&1 || true44
LEADER_OUT=$(ENCLAVE_DB_PATH="$DB" "$ENCLAVE_BIN" \45
bot register "$LEADER" --owner "$OWNER" --allow-services yes \46
--auto-join "$CHANNEL")47
LEADER_TOKEN=$(echo "$LEADER_OUT" | grep -oE '[a-f0-9]{64}' | head -1)48
if [ -z "$LEADER_TOKEN" ]; then49
echo "FATAL: no leader token in bot-register output" >&250
echo "$LEADER_OUT" >&251
exit 152
fi54
ENCLAVE_LOG_LEVEL=${ENCLAVE_LOG_LEVEL:-info} ENCLAVE_PORT="$PORT" \55
ENCLAVE_DB_PATH="$DB" "$ENCLAVE_BIN" serve > "$RUN/server.log" 2>&1 &56
SERVER=$!57
sleep 258
if ! kill -0 "$SERVER" 2>/dev/null; then59
echo "FATAL: server died on startup" >&260
cat "$RUN/server.log" >&261
exit 162
fi64
cat > "$RUN/state.env" <<EOF65
RUN=$RUN66
PORT=$PORT67
DB=$DB68
SERVER_PID=$SERVER69
ENCLAVE_BIN=$ENCLAVE_BIN70
LEADER_TOKEN=$LEADER_TOKEN71
LEADER_NICK=$LEADER72
OWNER=$OWNER73
CHANNEL=$CHANNEL74
EOF76
echo "RUN=$RUN PORT=$PORT SERVER_PID=$SERVER"77
echo "leader token: ${LEADER_TOKEN:0:8}...(${#LEADER_TOKEN} chars)"78
echo "stop with: HARNESS_RUN=$RUN $(dirname "$0")/env-down.sh"