#!/bin/bash # Start a single p2pds node: scripts/start-node.sh [1|2] [--clean] set -e NODE=${1:-1} PIDFILE="/tmp/p2pds-node${NODE}.pid" PORTFILE="/tmp/p2pds-node${NODE}.port" LOGFILE="/tmp/p2pds-node${NODE}.log" # Stop if already running if [ -f "$PIDFILE" ]; then kill "$(cat "$PIDFILE")" 2>/dev/null || true rm -f "$PIDFILE" "$PORTFILE" sleep 1 fi # Optionally wipe data if [ "$2" = "--clean" ] || [ "$1" = "--clean" ]; then DATADIR="data" [ "$NODE" = "2" ] && DATADIR="data-node2" echo "Cleaning $DATADIR..." rm -rf "$DATADIR/pds.db" "$DATADIR/pds.db-shm" "$DATADIR/pds.db-wal" "$DATADIR/blobs" "$DATADIR/ipfs" fi npm run build # Fixed high port per node (node1=6700, node2=6701) PORT=$((6699 + NODE)) export PORT if [ "$NODE" = "2" ]; then set -a && source data-node2/.env && set +a export PORT # override .env PORT with our random one fi > "$LOGFILE" node dist/server.js > "$LOGFILE" 2>&1 & echo $! > "$PIDFILE" echo "$PORT" > "$PORTFILE" # Wait for P2PDS_READY or failure for i in $(seq 1 30); do if grep -q "P2PDS_READY" "$LOGFILE" 2>/dev/null; then echo "" cat "$LOGFILE" echo "" echo "PID: $(cat "$PIDFILE") PORT: $PORT" exit 0 fi if grep -q "Error:" "$LOGFILE" 2>/dev/null; then echo "Node $NODE failed to start:" cat "$LOGFILE" rm -f "$PIDFILE" "$PORTFILE" exit 1 fi sleep 1 done echo "Node $NODE startup timed out. Log:" cat "$LOGFILE" rm -f "$PIDFILE" "$PORTFILE" exit 1