From 9f7ac4a17c62a0e1afd6a1f2993dea3fad0745d7 Mon Sep 17 00:00:00 2001 From: Slava <20563034+veaceslavdoina@users.noreply.github.com> Date: Wed, 2 Oct 2024 20:12:48 +0300 Subject: [PATCH] Set auto IP (#30) * Add Codex data-dir and ethereum keypair to the .gitignore * Add get_ip_public and unify all functions syntax * Set Public IP and Bootstrap based on the NETWORK variable, defaults to testnet --- .gitignore | 5 +++ scripts/run_client.sh | 33 ++++++++++------- scripts/utils.sh | 86 ++++++++++++++++++++----------------------- 3 files changed, 64 insertions(+), 60 deletions(-) diff --git a/.gitignore b/.gitignore index d1ef770..00b2540 100644 --- a/.gitignore +++ b/.gitignore @@ -4,5 +4,10 @@ # Datadir *-data +data_client + +# Ethereum keypair +eth.address +eth.key .DS_Store diff --git a/scripts/run_client.sh b/scripts/run_client.sh index 409d5c9..ac38279 100755 --- a/scripts/run_client.sh +++ b/scripts/run_client.sh @@ -4,23 +4,30 @@ set -e source ./utils.sh if [ -z "$LOCALIP" ]; then - LOCALIP=$(get_ip) + if [ "${NETWORK}" == "workshop" ]; then + LOCALIP=$(get_ip) + else + LOCALIP=$(get_ip_public) + fi fi echo "LOCAL IP: ${LOCALIP}" if [ -z "$BOOTSPR" ]; then - # Local network SPR (Workshop NUC): - # BOOTSPR="spr:CiUIAhIhAnBsex_7L5xKJQpmAuOtubQEtKsgCOXE2vaJoTJXrprbEgIDARo8CicAJQgCEiECcGx7H_svnEolCmYC4625tAS0qyAI5cTa9omhMleumtsQnbm0tAYaCwoJBMCoWP2RAh-aKkcwRQIhANjwAV9DGFe4zcMUEHjuTsGWAPc7WB7uoSS86HATwouqAiA8dFhsALCSLsQbSOPF1j7NF643oEmPEJAwU9dIwjM6TA" - # Cloud-Node-01 SPR: - BOOTSPR="spr:CiUIAhIhAiJvIcA_ZwPZ9ugVKDbmqwhJZaig5zKyLiuaicRcCGqLEgIDARo8CicAJQgCEiECIm8hwD9nA9n26BUoNuarCEllqKDnMrIuK5qJxFwIaosQ3d6esAYaCwoJBJ_f8zKRAnU6KkYwRAIgM0MvWNJL296kJ9gWvfatfmVvT-A7O2s8Mxp8l9c8EW0CIC-h-H-jBVSgFjg3Eny2u33qF7BDnWFzo7fGfZ7_qc9P" - # All Codex Testnet Cloud Bootstrap Node SPRs: - # BOOTSPR="spr:CiUIAhIhAiJvIcA_ZwPZ9ugVKDbmqwhJZaig5zKyLiuaicRcCGqLEgIDARo8CicAJQgCEiECIm8hwD9nA9n26BUoNuarCEllqKDnMrIuK5qJxFwIaosQ3d6esAYaCwoJBJ_f8zKRAnU6KkYwRAIgM0MvWNJL296kJ9gWvfatfmVvT-A7O2s8Mxp8l9c8EW0CIC-h-H-jBVSgFjg3Eny2u33qF7BDnWFzo7fGfZ7_qc9P" - # BOOTSPR="spr:CiUIAhIhAyUvcPkKoGE7-gh84RmKIPHJPdsX5Ugm_IHVJgF-Mmu_EgIDARo8CicAJQgCEiEDJS9w-QqgYTv6CHzhGYog8ck92xflSCb8gdUmAX4ya78QoemesAYaCwoJBES39Q2RAnVOKkYwRAIgLi3rouyaZFS_Uilx8k99ySdQCP1tsmLR21tDb9p8LcgCIG30o5YnEooQ1n6tgm9fCT7s53k6XlxyeSkD_uIO9mb3" - # BOOTSPR="spr:CiUIAhIhA6_j28xa--PvvOUxH10wKEm9feXEKJIK3Z9JQ5xXgSD9EgIDARo8CicAJQgCEiEDr-PbzFr74--85TEfXTAoSb195cQokgrdn0lDnFeBIP0QzOGesAYaCwoJBK6Kf1-RAnVEKkcwRQIhAPUH5nQrqG4OW86JQWphdSdnPA98ErQ0hL9OZH9a4e5kAiBBZmUl9KnhSOiDgU3_hvjXrXZXoMxhGuZ92_rk30sNDA" - # BOOTSPR="spr:CiUIAhIhA7E4DEMer8nUOIUSaNPA4z6x0n9Xaknd28Cfw9S2-cCeEgIDARo8CicAJQgCEiEDsTgMQx6vydQ4hRJo08DjPrHSf1dqSd3bwJ_D1Lb5wJ4Qt_CesAYaCwoJBEDhWZORAnVYKkYwRAIgFNzhnftocLlVHJl1onuhbSUM7MysXPV6dawHAA0DZNsCIDRVu9gnPTH5UkcRXLtt7MLHCo4-DL-RCMyTcMxYBXL0" - # BOOTSPR="spr:CiUIAhIhAzZn3JmJab46BNjadVnLNQKbhnN3eYxwqpteKYY32SbOEgIDARo8CicAJQgCEiEDNmfcmYlpvjoE2Np1Wcs1ApuGc3d5jHCqm14phjfZJs4QrvWesAYaCwoJBKpA-TaRAnViKkcwRQIhANuMmZDD2c25xzTbKSirEpkZYoxbq-FU_lpI0K0e4mIVAiBfQX4yR47h1LCnHznXgDs6xx5DLO5q3lUcicqUeaqGeg" - # BOOTSPR="spr:CiUIAhIhAgybmRwboqDdUJjeZrzh43sn5mp8jt6ENIb08tLn4x01EgIDARo8CicAJQgCEiECDJuZHBuioN1QmN5mvOHjeyfmanyO3oQ0hvTy0ufjHTUQh4ifsAYaCwoJBI_0zSiRAnVsKkcwRQIhAJCb_z0E3RsnQrEePdJzMSQrmn_ooHv6mbw1DOh5IbVNAiBbBJrWR8eBV6ftzMd6ofa5khNA2h88OBhMqHCIzSjCeA" - # BOOTSPR="spr:CiUIAhIhAntGLadpfuBCD9XXfiN_43-V3L5VWgFCXxg4a8uhDdnYEgIDARo8CicAJQgCEiECe0Ytp2l-4EIP1dd-I3_jf5XcvlVaAUJfGDhry6EN2dgQsIufsAYaCwoJBNEmoCiRAnV2KkYwRAIgXO3bzd5VF8jLZG8r7dcLJ_FnQBYp1BcxrOvovEa40acCIDhQ14eJRoPwJ6GKgqOkXdaFAsoszl-HIRzYcXKeb7D9" + if [ "${NETWORK}" == "workshop" ]; then + # Local network SPR (Workshop NUC): + BOOTSPR="spr:CiUIAhIhAnBsex_7L5xKJQpmAuOtubQEtKsgCOXE2vaJoTJXrprbEgIDARo8CicAJQgCEiECcGx7H_svnEolCmYC4625tAS0qyAI5cTa9omhMleumtsQnbm0tAYaCwoJBMCoWP2RAh-aKkcwRQIhANjwAV9DGFe4zcMUEHjuTsGWAPc7WB7uoSS86HATwouqAiA8dFhsALCSLsQbSOPF1j7NF643oEmPEJAwU9dIwjM6TA" + else + # Cloud-Node-01 SPR: + BOOTSPR="spr:CiUIAhIhAiJvIcA_ZwPZ9ugVKDbmqwhJZaig5zKyLiuaicRcCGqLEgIDARo8CicAJQgCEiECIm8hwD9nA9n26BUoNuarCEllqKDnMrIuK5qJxFwIaosQ3d6esAYaCwoJBJ_f8zKRAnU6KkYwRAIgM0MvWNJL296kJ9gWvfatfmVvT-A7O2s8Mxp8l9c8EW0CIC-h-H-jBVSgFjg3Eny2u33qF7BDnWFzo7fGfZ7_qc9P" + # All Codex Testnet Cloud Bootstrap Node SPRs: + # BOOTSPR="spr:CiUIAhIhAiJvIcA_ZwPZ9ugVKDbmqwhJZaig5zKyLiuaicRcCGqLEgIDARo8CicAJQgCEiECIm8hwD9nA9n26BUoNuarCEllqKDnMrIuK5qJxFwIaosQ3d6esAYaCwoJBJ_f8zKRAnU6KkYwRAIgM0MvWNJL296kJ9gWvfatfmVvT-A7O2s8Mxp8l9c8EW0CIC-h-H-jBVSgFjg3Eny2u33qF7BDnWFzo7fGfZ7_qc9P" + # BOOTSPR="spr:CiUIAhIhAyUvcPkKoGE7-gh84RmKIPHJPdsX5Ugm_IHVJgF-Mmu_EgIDARo8CicAJQgCEiEDJS9w-QqgYTv6CHzhGYog8ck92xflSCb8gdUmAX4ya78QoemesAYaCwoJBES39Q2RAnVOKkYwRAIgLi3rouyaZFS_Uilx8k99ySdQCP1tsmLR21tDb9p8LcgCIG30o5YnEooQ1n6tgm9fCT7s53k6XlxyeSkD_uIO9mb3" + # BOOTSPR="spr:CiUIAhIhA6_j28xa--PvvOUxH10wKEm9feXEKJIK3Z9JQ5xXgSD9EgIDARo8CicAJQgCEiEDr-PbzFr74--85TEfXTAoSb195cQokgrdn0lDnFeBIP0QzOGesAYaCwoJBK6Kf1-RAnVEKkcwRQIhAPUH5nQrqG4OW86JQWphdSdnPA98ErQ0hL9OZH9a4e5kAiBBZmUl9KnhSOiDgU3_hvjXrXZXoMxhGuZ92_rk30sNDA" + # BOOTSPR="spr:CiUIAhIhA7E4DEMer8nUOIUSaNPA4z6x0n9Xaknd28Cfw9S2-cCeEgIDARo8CicAJQgCEiEDsTgMQx6vydQ4hRJo08DjPrHSf1dqSd3bwJ_D1Lb5wJ4Qt_CesAYaCwoJBEDhWZORAnVYKkYwRAIgFNzhnftocLlVHJl1onuhbSUM7MysXPV6dawHAA0DZNsCIDRVu9gnPTH5UkcRXLtt7MLHCo4-DL-RCMyTcMxYBXL0" + # BOOTSPR="spr:CiUIAhIhAzZn3JmJab46BNjadVnLNQKbhnN3eYxwqpteKYY32SbOEgIDARo8CicAJQgCEiEDNmfcmYlpvjoE2Np1Wcs1ApuGc3d5jHCqm14phjfZJs4QrvWesAYaCwoJBKpA-TaRAnViKkcwRQIhANuMmZDD2c25xzTbKSirEpkZYoxbq-FU_lpI0K0e4mIVAiBfQX4yR47h1LCnHznXgDs6xx5DLO5q3lUcicqUeaqGeg" + # BOOTSPR="spr:CiUIAhIhAgybmRwboqDdUJjeZrzh43sn5mp8jt6ENIb08tLn4x01EgIDARo8CicAJQgCEiECDJuZHBuioN1QmN5mvOHjeyfmanyO3oQ0hvTy0ufjHTUQh4ifsAYaCwoJBI_0zSiRAnVsKkcwRQIhAJCb_z0E3RsnQrEePdJzMSQrmn_ooHv6mbw1DOh5IbVNAiBbBJrWR8eBV6ftzMd6ofa5khNA2h88OBhMqHCIzSjCeA" + # BOOTSPR="spr:CiUIAhIhAntGLadpfuBCD9XXfiN_43-V3L5VWgFCXxg4a8uhDdnYEgIDARo8CicAJQgCEiECe0Ytp2l-4EIP1dd-I3_jf5XcvlVaAUJfGDhry6EN2dgQsIufsAYaCwoJBNEmoCiRAnV2KkYwRAIgXO3bzd5VF8jLZG8r7dcLJ_FnQBYp1BcxrOvovEa40acCIDhQ14eJRoPwJ6GKgqOkXdaFAsoszl-HIRzYcXKeb7D9" + fi fi if [ ! -f eth.key ]; then diff --git a/scripts/utils.sh b/scripts/utils.sh index 92a84ef..b102f28 100755 --- a/scripts/utils.sh +++ b/scripts/utils.sh @@ -1,74 +1,66 @@ #!/bin/bash +# Variables +NETWORK="${NETWORK:-testnet}" + # Function to detect OS get_os() { - case "$(uname -s)" in - Linux*) echo "linux";; - Darwin*) echo "darwin";; - CYGWIN*|MINGW*|MSYS*|MINGW*) echo "windows";; - *) echo "unknown";; - esac + case "$(uname -s)" in + Linux*) echo "linux" ;; + Darwin*) echo "darwin" ;; + CYGWIN*|MINGW*|MSYS*|MINGW*) echo "windows" ;; + *) echo "unknown" ;; + esac } # Function to detect CPU architecture get_arch() { - case "$(uname -m)" in - x86_64|amd64) echo "amd64";; - arm64|aarch64) echo "arm64";; - *) echo "Unsupported architecture: $(uname -m)"; exit 1;; - esac + case "$(uname -m)" in + x86_64|amd64) echo "amd64" ;; + arm64|aarch64) echo "arm64" ;; + *) echo "Unsupported architecture: $(uname -m)"; exit 1 ;; + esac } # Function to change file permissions using native OS commands change_permissions() { - local file_path="$1" - local permissions="$2" + local file_path="$1" + local permissions="$2" - case "$OS" in - linux|darwin) - # Use chmod for Linux and macOS - chmod $permissions "$file_path" - ;; - windows) - # For Windows, we'll skip changing permissions - echo "Skipping permission change on Windows for $file_path" - ;; - *) - echo "Unsupported OS for changing permissions" - return 1 - ;; - esac + case "$OS" in + linux|darwin) chmod $permissions "$file_path" ;; + windows) echo "Skipping permission change on Windows for $file_path" ;; + *) echo "Unsupported OS for changing permissions"; return 1 ;; + esac } # Function to get IP on Linux and macOS get_ip_unix() { - if command -v ip >/dev/null 2>&1; then - ip addr show | grep "inet " | grep -v 127.0.0.1 | awk '{print $2}' | cut -d "/" -f 1 | head -n 1 - elif command -v ifconfig >/dev/null 2>&1; then - ifconfig | grep "inet " | grep -v 127.0.0.1 | awk '{print $2}' | head -n 1 - else - echo "Unable to find IP address. Neither 'ip' nor 'ifconfig' command found." - exit 1 - fi + if command -v ip >/dev/null 2>&1; then + ip addr show | grep "inet " | grep -v 127.0.0.1 | awk '{print $2}' | cut -d "/" -f 1 | head -n 1 + elif command -v ifconfig >/dev/null 2>&1; then + ifconfig | grep "inet " | grep -v 127.0.0.1 | awk '{print $2}' | head -n 1 + else + echo "Unable to find IP address. Neither 'ip' nor 'ifconfig' command found." + exit 1 + fi } # Function to get IP on Windows get_ip_windows() { - ipconfig | grep -i "IPv4 Address" | awk '{print $NF}' | head -n 1 + ipconfig | grep -i "IPv4 Address" | awk '{print $NF}' | head -n 1 +} + +# Function to get Public IP using ip lookup service +get_ip_public() { + curl -m 5 -s https://ip.codex.storage } # Detect the operating system and call the appropriate function get_ip() { case "$(uname -s)" in - Linux*|Darwin*) - echo $(get_ip_unix) - ;; - CYGWIN*|MINGW32*|MSYS*|MINGW*) - echo $(get_ip_windows) - ;; - *) - echo "Unsupported operating system" - exit 1 - ;; - esac + Linux*|Darwin*) echo $(get_ip_unix) ;; + CYGWIN*|MINGW32*|MSYS*|MINGW*) echo $(get_ip_windows) ;; + *) echo "Unsupported operating system"; exit 1 ;; + esac }