atproto user agency toolkit for individuals and groups
1#!/bin/bash
2# Start a single p2pds node: scripts/start-node.sh [1|2] [--clean]
3set -e
4NODE=${1:-1}
5PIDFILE="/tmp/p2pds-node${NODE}.pid"
6PORTFILE="/tmp/p2pds-node${NODE}.port"
7LOGFILE="/tmp/p2pds-node${NODE}.log"
8
9# Stop if already running
10if [ -f "$PIDFILE" ]; then
11 kill "$(cat "$PIDFILE")" 2>/dev/null || true
12 rm -f "$PIDFILE" "$PORTFILE"
13 sleep 1
14fi
15
16# Optionally wipe data
17if [ "$2" = "--clean" ] || [ "$1" = "--clean" ]; then
18 DATADIR="data"
19 [ "$NODE" = "2" ] && DATADIR="data-node2"
20 echo "Cleaning $DATADIR..."
21 rm -rf "$DATADIR/pds.db" "$DATADIR/pds.db-shm" "$DATADIR/pds.db-wal" "$DATADIR/blobs" "$DATADIR/ipfs"
22fi
23
24npm run build
25
26# Fixed high port per node (node1=6700, node2=6701)
27PORT=$((6699 + NODE))
28export PORT
29
30if [ "$NODE" = "2" ]; then
31 set -a && source data-node2/.env && set +a
32 export PORT # override .env PORT with our random one
33fi
34
35> "$LOGFILE"
36node dist/server.js > "$LOGFILE" 2>&1 &
37echo $! > "$PIDFILE"
38echo "$PORT" > "$PORTFILE"
39
40# Wait for P2PDS_READY or failure
41for i in $(seq 1 30); do
42 if grep -q "P2PDS_READY" "$LOGFILE" 2>/dev/null; then
43 echo ""
44 cat "$LOGFILE"
45 echo ""
46 echo "PID: $(cat "$PIDFILE") PORT: $PORT"
47 exit 0
48 fi
49 if grep -q "Error:" "$LOGFILE" 2>/dev/null; then
50 echo "Node $NODE failed to start:"
51 cat "$LOGFILE"
52 rm -f "$PIDFILE" "$PORTFILE"
53 exit 1
54 fi
55 sleep 1
56done
57
58echo "Node $NODE startup timed out. Log:"
59cat "$LOGFILE"
60rm -f "$PIDFILE" "$PORTFILE"
61exit 1