#!/bin/bash # Set the version number VERSION="2.0.4.1" qClientVERSION="2.0.4.1" cd ~ # Step 0: Welcome echo "This script is made with ❤️ by 0xOzgur @ https://quilibrium.space " echo "The script is prepared for Ubuntu machines. If you are using another operating system, please check the compatibility of the script." echo "The script doesn't install GO or GrpCurl packages. If you want to install them please visit https://docs.quilibrium.space/installing-prerequisites page." echo "⏳Enjoy and sit back while you are building your Quilibrium Node!" echo "⏳Processing..." sleep 10 # Add a 10-second delay # Step 1: Update and Upgrade the Machine echo "Updating the machine" echo "⏳Processing..." sleep 2 # Add a 2-second delay # Fof DEBIAN OS - Check if sudo and git is installed 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 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 sudo apt upgrade -y # Step 2: Adjust network buffer sizes echo "Adjusting network buffer sizes..." if grep -q "^net.core.rmem_max=600000000$" /etc/sysctl.conf; then echo "net.core.rmem_max=600000000 found inside /etc/sysctl.conf, skipping..." else echo -e "\n# Change made to increase buffer sizes for better network performance for ceremonyclient\nnet.core.rmem_max=600000000" | sudo tee -a /etc/sysctl.conf > /dev/null fi if grep -q "^net.core.wmem_max=600000000$" /etc/sysctl.conf; then echo "net.core.wmem_max=600000000 found inside /etc/sysctl.conf, skipping..." else echo -e "\n# Change made to increase buffer sizes for better network performance for ceremonyclient\nnet.core.wmem_max=600000000" | sudo tee -a /etc/sysctl.conf > /dev/null fi sudo sysctl -p # Step 3: Check if directory ~/ceremonyclient exists, download from github if [ -d ~/ceremonyclient ]; then # Check if backup directory ~/backup/qnode_keys exists, if not create it if [ ! -d ~/backup/qnode_keys ]; then mkdir -p ~/backup/qnode_keys fi # Check if files exist, then backup if [ -f ~/ceremonyclient/node/.config/keys.yml ]; then cp ~/ceremonyclient/node/.config/keys.yml ~/backup/qnode_keys/ echo "✅ Backup of keys.yml created in ~/backup/qnode_keys folder" fi if [ -f ~/ceremonyclient/node/.config/config.yml ]; then cp ~/ceremonyclient/node/.config/config.yml ~/backup/qnode_keys/ echo "✅ Backup of config.yml created in ~/backup/qnode_keys folder" fi fi # Step 4:Download Ceremonyclient echo "⏳Downloading Ceremonyclient" sleep 1 # Add a 1-second delay cd ~ if [ -d "ceremonyclient" ]; then echo "Directory ceremonyclient already exists, skipping git clone..." else until git clone https://github.com/QuilibriumNetwork/ceremonyclient.git || git clone https://source.quilibrium.com/quilibrium/ceremonyclient.git; do echo "Git clone failed, retrying..." sleep 2 done fi cd ~/ceremonyclient/ # git remote set-url origin https://github.com/QuilibriumNetwork/ceremonyclient.git || git remote set-url origin https://source.quilibrium.com/quilibrium/ceremonyclient.git git checkout release #========================== # NODE BINARY DOWNLOAD #========================== get_os_arch() { local os=$(uname -s | tr '[:upper:]' '[:lower:]') local arch=$(uname -m) case "$os" in linux|darwin) ;; *) echo "Unsupported operating system: $os" >&2; return 1 ;; esac case "$arch" in x86_64|amd64) arch="amd64" ;; arm64|aarch64) arch="arm64" ;; *) echo "Unsupported architecture: $arch" >&2; return 1 ;; esac echo "${os}-${arch}" } # Get the current OS and architecture OS_ARCH=$(get_os_arch) # Base URL for the Quilibrium releases RELEASE_FILES_URL="https://releases.quilibrium.com/release" # Fetch the list of files from the release page # Updated regex to allow for an optional fourth version number RELEASE_FILES=$(curl -s $RELEASE_FILES_URL | grep -oE "node-[0-9]+\.[0-9]+\.[0-9]+(\.[0-9]+)?-${OS_ARCH}(\.dgst)?(\.sig\.[0-9]+)?") # Change to the download directory cd ~/ceremonyclient/node # Download each file for file in $RELEASE_FILES; do echo "Downloading $file..." curl -L -o "$file" "https://releases.quilibrium.com/$file" # Check if the download was successful if [ $? -eq 0 ]; then echo "Successfully downloaded $file" # Check if the file is the base binary (without .dgst or .sig suffix) if [[ $file =~ ^node-[0-9]+\.[0-9]+\.[0-9]+(\.[0-9]+)?-${OS_ARCH}$ ]]; then echo "Making $file executable..." chmod +x "$file" if [ $? -eq 0 ]; then echo "Successfully made $file executable" else echo "Failed to make $file executable" fi fi else echo "Failed to download $file" fi echo "------------------------" done echo "✅ Node binary download completed." # 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 if [ "$ARCH" = "x86_64" ]; then if [ "$OS" = "Linux" ]; then NODE_BINARY="node-$VERSION-linux-amd64" GO_BINARY="go1.22.4.linux-amd64.tar.gz" QCLIENT_BINARY="qclient-$qClientVERSION-linux-amd64" elif [ "$OS" = "Darwin" ]; then NODE_BINARY="node-$VERSION-darwin-amd64" GO_BINARY="go1.22.44.linux-amd64.tar.gz" QCLIENT_BINARY="qclient-$qClientVERSION-darwin-arm64" fi elif [ "$ARCH" = "aarch64" ]; then if [ "$OS" = "Linux" ]; then NODE_BINARY="node-$VERSION-linux-arm64" GO_BINARY="go1.22.4.linux-arm64.tar.gz" elif [ "$OS" = "Darwin" ]; then NODE_BINARY="node-$VERSION-darwin-arm64" GO_BINARY="go1.22.4.linux-arm64.tar.gz" QCLIENT_BINARY="qclient-$qClientVERSION-linux-arm64" fi fi get_os_arch() { local os=$(uname -s | tr '[:upper:]' '[:lower:]') local arch=$(uname -m) case "$os" in linux|darwin) ;; *) echo "Unsupported operating system: $os" >&2; return 1 ;; esac case "$arch" in x86_64|amd64) arch="amd64" ;; arm64|aarch64) arch="arm64" ;; *) echo "Unsupported architecture: $arch" >&2; return 1 ;; esac echo "${os}-${arch}" } # Step 4:Download qClient echo "⏳Downloading qClient" sleep 1 # Add a 1-second delay # Get the current OS and architecture OS_ARCH=$(get_os_arch) # Base URL for the Quilibrium releases BASE_URL="https://releases.quilibrium.com/qclient-release" # Fetch the list of files from the release page FILES=$(curl -s $BASE_URL | grep -oE "qclient-[0-9]+\.[0-9]+\.[0-9]+(\.[0-9]+)?-${OS_ARCH}(\.dgst)?(\.sig\.[0-9]+)?") # Change to the download directory cd ~/ceremonyclient/node # Download each file for file in $FILES; do echo "Downloading $file..." wget "https://releases.quilibrium.com/$file" # Check if the download was successful if [ $? -eq 0 ]; then echo "Successfully downloaded $file" else echo "❌ Error: Failed to download $file" echo "Your node will still work, but you'll need to install the qclient manually later if needed." fi echo "------------------------" done // chmod +x qclient* echo "✅ qClient binary downloaded and configured successfully." echo # Step 5:Determine the ExecStart line based on the architecture # Get the current user's home directory HOME=$(eval echo ~$HOME_DIR) # Use the home directory in the path NODE_PATH="$HOME/ceremonyclient/node" EXEC_START="$NODE_PATH/$NODE_BINARY" # Step 6:Create Ceremonyclient Service echo "⏳ Creating Ceremonyclient Service" sleep 2 # Add a 2-second delay # Check if the file exists before attempting to remove it if [ -f "/lib/systemd/system/ceremonyclient.service" ]; then # If the file exists, remove it rm /lib/systemd/system/ceremonyclient.service echo "ceremonyclient.service file removed." else # If the file does not exist, inform the user echo "ceremonyclient.service file does not exist. No action taken." fi sudo tee /lib/systemd/system/ceremonyclient.service > /dev/null <