156 lines
5.3 KiB
Bash
156 lines
5.3 KiB
Bash
#!/bin/bash
|
||
|
||
# Set the version number
|
||
VERSION="2.0.2.4"
|
||
|
||
# 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 |