From 4ed7eae715b8f66c4573335b86bd82af901af5a3 Mon Sep 17 00:00:00 2001 From: user Date: Sat, 13 Sep 2025 19:45:31 +0300 Subject: [PATCH] start sh --- start.sh | 127 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 start.sh diff --git a/start.sh b/start.sh new file mode 100644 index 0000000..540f9e1 --- /dev/null +++ b/start.sh @@ -0,0 +1,127 @@ +#!/usr/bin/env bash +set -euo pipefail + +echo "MY Network Node setup (interactive)" + +ENV_FILE=".env" +EXAMPLE_FILE=".env.example" + +if [[ ! -f "$ENV_FILE" ]]; then + if [[ -f "$EXAMPLE_FILE" ]]; then + cp "$EXAMPLE_FILE" "$ENV_FILE" + else + echo "Missing .env.example; cannot continue" >&2 + exit 1 + fi +fi + +read -rp "Node privacy (public/private) [public]: " NODE_PRIVACY +NODE_PRIVACY=${NODE_PRIVACY:-public} +if [[ "$NODE_PRIVACY" != "public" && "$NODE_PRIVACY" != "private" ]]; then + echo "Invalid privacy; defaulting to public" + NODE_PRIVACY=public +fi + +if [[ "$NODE_PRIVACY" == "private" ]]; then + read -rp "Public host URL (leave empty for private): " PUBLIC_HOST || true +else + read -rp "Public host URL (e.g., https://node.example.com) [$(grep -E '^PUBLIC_HOST=' "$ENV_FILE" | cut -d'=' -f2)]: " PUBLIC_HOST + PUBLIC_HOST=${PUBLIC_HOST:-$(grep -E '^PUBLIC_HOST=' "$ENV_FILE" | cut -d'=' -f2)} +fi + +read -rp "Internal app port (SANIC_PORT) [$(grep -E '^SANIC_PORT=' "$ENV_FILE" | cut -d'=' -f2)]: " SANIC_PORT +SANIC_PORT=${SANIC_PORT:-$(grep -E '^SANIC_PORT=' "$ENV_FILE" | cut -d'=' -f2)} + +read -rp "Published backend port on host (BACKEND_HTTP_PORT) [$(grep -E '^BACKEND_HTTP_PORT=' "$ENV_FILE" | cut -d'=' -f2)]: " BACKEND_HTTP_PORT +BACKEND_HTTP_PORT=${BACKEND_HTTP_PORT:-$(grep -E '^BACKEND_HTTP_PORT=' "$ENV_FILE" | cut -d'=' -f2)} + +read -rp "Bootstrap seeds (comma-separated URLs) [$(grep -E '^BOOTSTRAP_SEEDS=' "$ENV_FILE" | cut -d'=' -f2)]: " BOOTSTRAP_SEEDS +BOOTSTRAP_SEEDS=${BOOTSTRAP_SEEDS:-$(grep -E '^BOOTSTRAP_SEEDS=' "$ENV_FILE" | cut -d'=' -f2)} + +read -rp "Handshake interval seconds [$(grep -E '^HANDSHAKE_INTERVAL_SEC=' "$ENV_FILE" | cut -d'=' -f2)]: " HANDSHAKE_INTERVAL_SEC +HANDSHAKE_INTERVAL_SEC=${HANDSHAKE_INTERVAL_SEC:-$(grep -E '^HANDSHAKE_INTERVAL_SEC=' "$ENV_FILE" | cut -d'=' -f2)} + +read -rp "Telegram uploader bot token (TELEGRAM_API_KEY) [$(grep -E '^TELEGRAM_API_KEY=' "$ENV_FILE" | cut -d'=' -f2)]: " TELEGRAM_API_KEY +TELEGRAM_API_KEY=${TELEGRAM_API_KEY:-$(grep -E '^TELEGRAM_API_KEY=' "$ENV_FILE" | cut -d'=' -f2)} + +read -rp "Telegram client bot token (CLIENT_TELEGRAM_API_KEY) [$(grep -E '^CLIENT_TELEGRAM_API_KEY=' "$ENV_FILE" | cut -d'=' -f2)]: " CLIENT_TELEGRAM_API_KEY +CLIENT_TELEGRAM_API_KEY=${CLIENT_TELEGRAM_API_KEY:-$(grep -E '^CLIENT_TELEGRAM_API_KEY=' "$ENV_FILE" | cut -d'=' -f2)} + +echo "Applying configuration to $ENV_FILE ..." + +# In-place update helper +update_env() { + local key=$1 value=$2 + if grep -qE "^${key}=" "$ENV_FILE"; then + sed -i.bak "s|^${key}=.*$|${key}=${value}|" "$ENV_FILE" + else + echo "${key}=${value}" >> "$ENV_FILE" + fi +} + +update_env NODE_PRIVACY "$NODE_PRIVACY" +update_env PUBLIC_HOST "${PUBLIC_HOST:-}" +if [[ -n "${PUBLIC_HOST:-}" ]]; then + update_env PROJECT_HOST "$PUBLIC_HOST" +fi +update_env SANIC_PORT "$SANIC_PORT" +update_env BACKEND_HTTP_PORT "$BACKEND_HTTP_PORT" +update_env BOOTSTRAP_SEEDS "$BOOTSTRAP_SEEDS" +update_env HANDSHAKE_INTERVAL_SEC "$HANDSHAKE_INTERVAL_SEC" +update_env TELEGRAM_API_KEY "$TELEGRAM_API_KEY" +update_env CLIENT_TELEGRAM_API_KEY "$CLIENT_TELEGRAM_API_KEY" + +# Ensure IPFS swarm key exists for private swarm by default +SWARM_KEY_FILE_DEFAULT="./configs/ipfs/swarm.key" +if [[ ! -f "$SWARM_KEY_FILE_DEFAULT" ]]; then + echo "Generating IPFS private swarm key at $SWARM_KEY_FILE_DEFAULT ..." + mkdir -p "$(dirname "$SWARM_KEY_FILE_DEFAULT")" + KEYHEX=$(python3 - <<'PY' +import os, binascii +print(binascii.b2a_hex(os.urandom(32)).decode()) +PY + ) + cat > "$SWARM_KEY_FILE_DEFAULT" <