#!/bin/bash # Start both p2pds nodes for two-node testing # Usage: scripts/start-both.sh [--clean] set -e # Stop previous instances if pid files exist bash scripts/stop-both.sh 2>/dev/null || true # Optionally wipe all data if [ "$1" = "--clean" ]; then echo "Cleaning node data..." rm -rf data/pds.db data/pds.db-shm data/pds.db-wal data/blobs data/ipfs rm -rf data-node2/pds.db data-node2/pds.db-shm data-node2/pds.db-wal data-node2/blobs data-node2/ipfs echo "Data wiped (kept .env files)" fi # Build first npm run build # Start node 1 (random port) PORT1=$(python3 -c 'import socket; s=socket.socket(); s.bind(("",0)); print(s.getsockname()[1]); s.close()') export PORT=$PORT1 node dist/server.js > /tmp/p2pds-node1.log 2>&1 & echo $! > /tmp/p2pds-node1.pid echo "$PORT1" > /tmp/p2pds-node1.port echo "Node 1 started (pid $!, port $PORT1, log: /tmp/p2pds-node1.log)" # Start node 2 (random port, different env) PORT2=$(python3 -c 'import socket; s=socket.socket(); s.bind(("",0)); print(s.getsockname()[1]); s.close()') set -a && source data-node2/.env && set +a export PORT=$PORT2 node dist/server.js > /tmp/p2pds-node2.log 2>&1 & echo $! > /tmp/p2pds-node2.pid echo "$PORT2" > /tmp/p2pds-node2.port echo "Node 2 started (pid $!, port $PORT2, log: /tmp/p2pds-node2.log)" # Wait for both to be ready echo "" echo "Waiting for nodes..." for node in 1 2; do for i in $(seq 1 30); do if grep -q "P2PDS_READY" "/tmp/p2pds-node${node}.log" 2>/dev/null; then echo "Node $node ready (port $(cat /tmp/p2pds-node${node}.port))" break fi if grep -q "Error:" "/tmp/p2pds-node${node}.log" 2>/dev/null; then echo "Node $node FAILED:" cat "/tmp/p2pds-node${node}.log" break fi sleep 1 done done echo "" echo "=== NODE 1 (port $PORT1) ===" tail -10 /tmp/p2pds-node1.log echo "" echo "=== NODE 2 (port $PORT2) ===" tail -10 /tmp/p2pds-node2.log