#!/bin/bash VERSION="2.0.0.1" # Step 0: Welcome echo "This script is made with ❤️ by 0xOzgur @ https://quilibrium.space" echo "⏳Enjoy and sit back while you are upgrading your Quilibrium Node to v$VERSION!" echo "The script is prepared for Ubuntu machines. If you are using another operating system, please check the compatibility of the script." echo "⏳Processing..." sleep 5 # Add a 5-second delay # Stop the ceremonyclient service echo "Updating node..." service ceremonyclient stop echo "⏳ Stopping the ceremonyclient service if it exists..." if systemctl is-active --quiet ceremonyclient; then if sudo systemctl stop ceremonyclient; then echo "🔴 Service stopped successfully." echo else echo "❌ Failed to stop the ceremonyclient service." >&2 echo fi else echo "ℹ️ Ceremonyclient service is not active or does not exist." echo fi sleep 1 # apt install cpulimit -y # apt install gawk -y #incase it is not installed # Download Binary echo "⏳ Downloading New Release v$VERSION" cd ~/ceremonyclient git remote set-url origin https://github.com/QuilibriumNetwork/ceremonyclient.git git checkout main git branch -D release git pull git checkout release echo "✅ Github repo updated to the latest changes successfully." echo #========================== # 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-2.0.0-linux-amd64" elif [ "$OS" = "Darwin" ]; then NODE_BINARY="node-$VERSION-darwin-amd64" GO_BINARY="go1.22.44.linux-amd64.tar.gz" QCLIENT_BINARY="qclient-2.0.0-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-2.0.0-linux-arm64" fi fi # Step 4:Update qClient # 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]+-${OS_ARCH}(\.dgst)?(\.sig\.[0-9]+)?") # Change to the download directory cd ~/ceremonyclient/client # 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 #========================== # SERVICE UPDATE #========================== #Set variables HOME=$(eval echo ~$HOME_DIR) NODE_PATH="$HOME/ceremonyclient/node" EXEC_START="$NODE_PATH/$NODE_BINARY" # Check if the node is running via cluster script or para.sh and skip if [ -f "$SERVICE_FILE" ] && (grep -q "ExecStart=/root/scripts/qnode_cluster_run.sh" "$SERVICE_FILE" || grep -q "ExecStart=.*para\.sh" "$SERVICE_FILE"); then echo "⚠️ You are running a cluster or para.sh script. Skipping service file update..." echo else # Build service file echo "⏳ Rebuilding Ceremonyclient Service..." if [ ! -f "$SERVICE_FILE" ]; then echo "⏳ Creating new ceremonyclient service file..." if ! sudo tee "$SERVICE_FILE" > /dev/null <&2 exit 1 fi else echo "⏳ Checking existing ceremonyclient service file..." # Function to add or update a line in the [Service] section update_service_section() { local key="$1" local value="$2" if grep -q "^$key=" "$SERVICE_FILE"; then current_value=$(grep "^$key=" "$SERVICE_FILE" | cut -d'=' -f2-) if [ "$current_value" != "$value" ]; then echo "⏳ Updating $key from $current_value to $value in the service file..." sudo sed -i "s|^$key=.*|$key=$value|" "$SERVICE_FILE" else echo "✅ $key=$value already exists and is correct." fi else echo "⏳ Adding $key=$value to the service file..." sudo sed -i "/^\[Service\]/,/^\[/ { /^\[Install\]/i $key=$value }" "$SERVICE_FILE" fi } # Update all required lines in the [Service] section update_service_section "WorkingDirectory" "$NODE_PATH" update_service_section "ExecStart" "$EXEC_START" update_service_section "KillSignal" "SIGINT" update_service_section "TimeoutStopSec" "30s" fi fi echo "✅ Service file update completed." echo # Start the ceremonyclient service echo "✅ Starting Ceremonyclient Service" sleep 2 # Add a 2-second delay sudo systemctl daemon-reload sudo systemctl enable ceremonyclient sudo systemctl start ceremonyclient # See the logs of the ceremonyclient service echo "🎉 Welcome to Quilibrium Ceremonyclient v$VERSION" echo "⏳ Please let it flow node logs at least 5 minutes then you can press CTRL + C to exit the logs." sleep 2 # Add a 2-second delay sudo journalctl -u ceremonyclient.service -f --no-hostname -o cat