#!/bin/bash # Set the version number VERSION="2.0.4.1" # Determine the ExecStart line based on the architecture ARCH=$(uname -m) OS=$(uname -s) # Determine the node binary name based on the architecture and OS # Check if NODE_VERSION is empty if [ -z "$NODE_VERSION" ]; then NODE_VERSION=$(curl -s https://releases.quilibrium.com/release | grep -E "^node-[0-9]+(\.[0-9]+)*" | grep -v "dgst" | sed 's/^node-//' | cut -d '-' -f 1 | head -n 1) if [ -z "$NODE_VERSION" ]; then echo "❌ Error: Unable to determine NODE_VERSION automatically." echo "The script cannot proceed without a correct node version number." echo "Please try the manual step by step installation instead:" echo "https://docs.quilibrium.one/start/tutorials/node-step-by-step-installation" echo exit 1 else echo "✅ Automatically determined NODE_VERSION: $NODE_VERSION" fi else echo "✅ Using specified NODE_VERSION: $NODE_VERSION" fi # Determine qclient latest version # Check if QCLIENT_VERSION is empty if [ -z "$QCLIENT_VERSION" ]; then QCLIENT_VERSION=$(curl -s https://releases.quilibrium.com/qclient-release | grep -E "^qclient-[0-9]+(\.[0-9]+)*" | sed 's/^qclient-//' | cut -d '-' -f 1 | head -n 1) if [ -z "$QCLIENT_VERSION" ]; then echo "⚠️ Warning: Unable to determine QCLIENT_VERSION automatically. Continuing without it." echo "The script won't be able to install the qclient, but it will still install your node." echo "You can install the qclient later manually if you need to." echo sleep 1 else echo "✅ Automatically determined QCLIENT_VERSION: $QCLIENT_VERSION" fi else echo "✅ Using specified QCLIENT_VERSION: $QCLIENT_VERSION" fi echo # Determine the node binary name based on the architecture and OS if [ "$ARCH" = "x86_64" ]; then if [ "$OS" = "Linux" ]; then NODE_BINARY="node-$NODE_VERSION-linux-amd64" GO_BINARY="go1.22.4.linux-amd64.tar.gz" [ -n "$QCLIENT_VERSION" ] && QCLIENT_BINARY="qclient-$QCLIENT_VERSION-linux-amd64" elif [ "$OS" = "Darwin" ]; then NODE_BINARY="node-$NODE_VERSION-darwin-amd64" GO_BINARY="go1.22.4.darwin-amd64.tar.gz" [ -n "$QCLIENT_VERSION" ] && QCLIENT_BINARY="qclient-$QCLIENT_VERSION-darwin-amd64" fi elif [ "$ARCH" = "aarch64" ]; then if [ "$OS" = "Linux" ]; then NODE_BINARY="node-$NODE_VERSION-linux-arm64" GO_BINARY="go1.22.4.linux-arm64.tar.gz" [ -n "$QCLIENT_VERSION" ] && QCLIENT_BINARY="qclient-$QCLIENT_VERSION-linux-arm64" elif [ "$OS" = "Darwin" ]; then NODE_BINARY="node-$NODE_VERSION-darwin-arm64" GO_BINARY="go1.22.4.darwin-arm64.tar.gz" [ -n "$QCLIENT_VERSION" ] && QCLIENT_BINARY="qclient-$QCLIENT_VERSION-darwin-arm64" fi else echo "❌ Error: Unsupported system architecture ($ARCH) or operating system ($OS)." exit 1 fi echo "Installing prerequisites..." sleep 1 # Add a 1-second delay echo "Updating the machine" echo "⏳Processing..." sleep 1 # Add a 1-second delay # Fof DEBIAN OS - Check if sudo and git is installed # Step 1.1: Prepare Machine if ! command -v sudo &> /dev/null then echo "sudo could not be found" echo "Installing sudo..." su -c "apt update && apt install sudo -y" else echo "sudo is installed" fi # ınstall git if not installed if ! command -v git &> /dev/null then echo "git could not be found" echo "Installing git..." su -c "apt update && apt install git -y" else echo "git is installed" fi # Update the machine sudo apt update sudo apt upgrade -y # Install cpu limit and gawk apt install cpulimit -y apt install gawk -y #incase it is not installed # Download and install Go wget https://go.dev/dl/$GO_BINARY || { echo "Failed to download Node! Exiting..."; exit_message; exit 1; } sudo tar -xvf $GO_BINARY || { echo "Failed to extract Go! Exiting..."; exit_message; exit 1; } sudo rm -rf /usr/local/go || { echo "Failed to remove existing Go! Exiting..."; exit_message; exit 1; } sudo mv go /usr/local || { echo "Failed to move go! Exiting..."; exit_message; exit 1; } sudo rm $GO_BINARY || { echo "Failed to remove downloaded archive! Exiting..."; exit_message; exit 1; } # Set Go environment variables echo "⏳Setting Go environment variables..." sleep 2 # Add a 2-second delay # Check if GOROOT is already set if grep -q 'GOROOT=/usr/local/go' ~/.bashrc; then echo "GOROOT already set in ~/.bashrc." else echo 'GOROOT=/usr/local/go' >> ~/.bashrc echo "GOROOT set in ~/.bashrc." fi # Check if GOPATH is already set if grep -q "GOPATH=$HOME/go" ~/.bashrc; then echo "GOPATH already set in ~/.bashrc." else echo "GOPATH=$HOME/go" >> ~/.bashrc echo "GOPATH set in ~/.bashrc." fi # Check if PATH is already set if grep -q 'PATH=$GOPATH/bin:$GOROOT/bin:$PATH' ~/.bashrc; then echo "PATH already set in ~/.bashrc." else echo 'PATH=$GOPATH/bin:$GOROOT/bin:$PATH' >> ~/.bashrc echo "PATH set in ~/.bashrc." fi # Source .bashrc to apply changes echo "⏳Sourcing .bashrc to apply changes" source ~/.bashrc sleep 2 # Add a 2-second delay # Check GO Version go version sleep 2 # Add a 2-second delay # Install gRPCurl echo "⏳Installing gRPCurl" sleep 1 # Add a 1-second delay go install github.com/fullstorydev/grpcurl/cmd/grpcurl@latest