aboutsummaryrefslogtreecommitdiff
path: root/start-monzerod.sh
diff options
context:
space:
mode:
Diffstat (limited to 'start-monzerod.sh')
-rwxr-xr-xstart-monzerod.sh64
1 files changed, 64 insertions, 0 deletions
diff --git a/start-monzerod.sh b/start-monzerod.sh
new file mode 100755
index 000000000..6b3ac8c2f
--- /dev/null
+++ b/start-monzerod.sh
@@ -0,0 +1,64 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+PROJECT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
+DAEMON_BIN="${MONZERO_DAEMON_BIN:-$PROJECT_DIR/build/bin/monzerod}"
+DATA_DIR="${MONZERO_DATA_DIR:-$HOME/.monzero-auto-test}"
+P2P_PORT="${MONZERO_P2P_PORT:-16174}"
+RPC_PORT="${MONZERO_RPC_PORT:-16175}"
+ZMQ_PORT="${MONZERO_ZMQ_PORT:-16176}"
+
+if [[ ! -x "$DAEMON_BIN" ]]; then
+ printf 'Error: daemon executable not found: %s\n' "$DAEMON_BIN" >&2
+ printf 'Build monzerod first, or set MONZERO_DAEMON_BIN.\n' >&2
+ exit 1
+fi
+
+daemon_ready() {
+ curl --silent --fail --max-time 2 \
+ --header 'Content-Type: application/json' \
+ --data '{}' \
+ "http://127.0.0.1:$RPC_PORT/get_info" >/dev/null 2>&1
+}
+
+if daemon_ready; then
+ printf 'Monzero daemon is already running at 127.0.0.1:%s.\n' "$RPC_PORT"
+ exit 0
+fi
+
+if command -v ss >/dev/null && ss -ltn | awk '{print $4}' | grep -Eq "(^|:)$RPC_PORT$"; then
+ printf 'Error: port %s is occupied, but it is not responding as a Monzero daemon.\n' "$RPC_PORT" >&2
+ exit 1
+fi
+
+mkdir -p "$DATA_DIR"
+
+printf 'Starting Monzero daemon...\n'
+printf ' Data: %s\n P2P: %s\n RPC: %s\n ZMQ: %s\n' "$DATA_DIR" "$P2P_PORT" "$RPC_PORT" "$ZMQ_PORT"
+
+"$DAEMON_BIN" \
+ --detach \
+ --data-dir "$DATA_DIR" \
+ --p2p-bind-port "$P2P_PORT" \
+ --rpc-bind-port "$RPC_PORT" \
+ --zmq-rpc-bind-port "$ZMQ_PORT" \
+ --add-priority-node 82.165.112.237:6174 \
+ --no-igd
+
+for _ in {1..30}; do
+ if daemon_ready; then
+ info="$(curl --silent --max-time 2 --header 'Content-Type: application/json' --data '{}' "http://127.0.0.1:$RPC_PORT/get_info")"
+ python3 - "$info" <<'PY'
+import json, sys
+data = json.loads(sys.argv[1])
+print(f"Daemon ready: height={data.get('height', '?')} synchronized={str(data.get('synchronized', False)).lower()}")
+PY
+ printf 'Log: %s/monzero.log\n' "$DATA_DIR"
+ exit 0
+ fi
+ sleep 1
+done
+
+printf 'Error: daemon did not become ready within 30 seconds.\n' >&2
+printf 'Check: %s/monzero.log\n' "$DATA_DIR" >&2
+exit 1