From 044f9e07fd6cc4190812720cd097c969670f61c0 Mon Sep 17 00:00:00 2001 From: Tola Leng Date: Sat, 21 Jun 2025 22:04:49 +0700 Subject: [PATCH 01/10] fixed install-regional-agent bash script --- application/src/services/regionalService.ts | 56 +++++++++++++--- scripts/install-regional-agent.sh | 71 +++++++++++++++++---- 2 files changed, 107 insertions(+), 20 deletions(-) diff --git a/application/src/services/regionalService.ts b/application/src/services/regionalService.ts index 832caf8..4794feb 100644 --- a/application/src/services/regionalService.ts +++ b/application/src/services/regionalService.ts @@ -1,4 +1,3 @@ - import { pb } from '@/lib/pocketbase'; import { RegionalService, CreateRegionalServiceParams, InstallCommand } from '@/types/regional.types'; @@ -106,7 +105,7 @@ AGENT_TOKEN="${token}" POCKETBASE_URL="${apiEndpoint}" # Base package information -BASE_PACKAGE_URL="https://github.com/operacle/Distributed-Regional-Monitoring/releases" +BASE_PACKAGE_URL="https://github.com/operacle/Distributed-Regional-Monitoring/releases/download/v1.0.0" PACKAGE_VERSION="1.0.0" SERVICE_NAME="regional-check-agent" @@ -175,14 +174,44 @@ echo "📁 Created temporary directory: $TEMP_DIR" # Download the .deb package echo "📥 Downloading Regional Monitoring Agent package for $PKG_ARCH..." cd "$TEMP_DIR" -if wget -q --show-progress "$PACKAGE_URL" -O "$PACKAGE_NAME"; then - echo "✅ Package downloaded successfully" -else + +# Test if package exists first +echo "🔍 Checking package availability..." +if command -v curl >/dev/null 2>&1; then + HTTP_STATUS=$(curl -s -o /dev/null -w "%{http_code}" -I "$PACKAGE_URL") + if [ "$HTTP_STATUS" != "200" ]; then + echo "❌ Package not found at $PACKAGE_URL (HTTP $HTTP_STATUS)" + echo " Available packages should be:" + echo " - distributed-regional-check-agent_\${PACKAGE_VERSION}_amd64.deb" + echo " - distributed-regional-check-agent_\${PACKAGE_VERSION}_arm64.deb" + rm -rf "$TEMP_DIR" + exit 1 + fi + echo "✅ Package found, proceeding with download..." +fi + +# Try wget first, then curl as fallback +DOWNLOAD_SUCCESS=false + +if command -v wget >/dev/null 2>&1; then + if wget -q --show-progress --timeout=30 --tries=3 "$PACKAGE_URL" -O "$PACKAGE_NAME"; then + DOWNLOAD_SUCCESS=true + echo "✅ Package downloaded successfully using wget" + fi +elif command -v curl >/dev/null 2>&1; then + if curl -L --connect-timeout 30 --max-time 300 --retry 3 --retry-delay 2 -o "$PACKAGE_NAME" "$PACKAGE_URL"; then + DOWNLOAD_SUCCESS=true + echo "✅ Package downloaded successfully using curl" + fi +fi + +if [ "$DOWNLOAD_SUCCESS" = false ]; then echo "❌ Failed to download package from $PACKAGE_URL" echo " Please check:" echo " - Internet connection" echo " - Package availability for $PKG_ARCH architecture" - echo " - GitHub repository access" + echo " - GitHub repository access: https://github.com/operacle/Distributed-Regional-Monitoring/releases" + echo " - Firewall/proxy settings" rm -rf "$TEMP_DIR" exit 1 fi @@ -222,6 +251,9 @@ fi echo "" echo "⚙️ Configuring Regional Monitoring Agent..." +# Ensure configuration directory exists +mkdir -p /etc/regional-check-agent + # Create the environment configuration file cat > /etc/regional-check-agent/regional-check-agent.env << EOF # Distributed Regional Check Agent Configuration @@ -232,7 +264,7 @@ PORT=8091 # Operation defaults DEFAULT_COUNT=4 -DEFAULT_TIMEOUT=3s +DEFAULT_TIMEOUT=10s MAX_COUNT=20 MAX_TIMEOUT=30s @@ -258,8 +290,14 @@ EOF echo "✅ Configuration file created at /etc/regional-check-agent/regional-check-agent.env" # Set proper permissions -chown root:regional-check-agent /etc/regional-check-agent/regional-check-agent.env -chmod 640 /etc/regional-check-agent/regional-check-agent.env +if id "regional-check-agent" &>/dev/null; then + chown root:regional-check-agent /etc/regional-check-agent/regional-check-agent.env + chmod 640 /etc/regional-check-agent/regional-check-agent.env +else + echo "⚠️ regional-check-agent user not found, using root permissions" + chown root:root /etc/regional-check-agent/regional-check-agent.env + chmod 600 /etc/regional-check-agent/regional-check-agent.env +fi # Enable and start the service echo "" diff --git a/scripts/install-regional-agent.sh b/scripts/install-regional-agent.sh index ba87228..cc730fc 100644 --- a/scripts/install-regional-agent.sh +++ b/scripts/install-regional-agent.sh @@ -3,7 +3,7 @@ # CheckCle Regional Monitoring Agent - Universal Installation Script # This script automatically detects system architecture and installs the appropriate package -# Usage: curl -fsSL https://github.com/operacle/checkcle/blob/main/scripts/install-regional-agent.sh | sudo bash -s -- [options] +# Usage: curl -fsSL https://raw.githubusercontent.com/operacle/checkcle/main/scripts/install-regional-agent.sh | sudo bash -s -- [options] set -e @@ -13,7 +13,7 @@ AGENT_ID="" AGENT_IP_ADDRESS="" AGENT_TOKEN="" POCKETBASE_URL="" -BASE_PACKAGE_URL="https://github.com/operacle/Distributed-Regional-Monitoring/releases" +BASE_PACKAGE_URL="https://github.com/operacle/Distributed-Regional-Monitoring/releases/download/v1.0.0" PACKAGE_VERSION="1.0.0" SERVICE_NAME="regional-check-agent" @@ -149,8 +149,8 @@ echo "" echo "🔧 Checking system requirements..." MISSING_TOOLS=() -if ! command -v wget >/dev/null 2>&1; then - MISSING_TOOLS+=("wget") +if ! command -v wget >/dev/null 2>&1 && ! command -v curl >/dev/null 2>&1; then + MISSING_TOOLS+=("wget or curl") fi if ! command -v dpkg >/dev/null 2>&1; then @@ -164,7 +164,7 @@ fi if [ ${#MISSING_TOOLS[@]} -ne 0 ]; then echo "❌ Missing required tools: ${MISSING_TOOLS[*]}" echo " Please install missing tools and try again" - echo " On Debian/Ubuntu: sudo apt-get update && sudo apt-get install wget" + echo " On Debian/Ubuntu: sudo apt-get update && sudo apt-get install wget curl" exit 1 fi @@ -179,15 +179,62 @@ echo "" echo "📥 Downloading Regional Monitoring Agent package for $PKG_ARCH..." cd "$TEMP_DIR" -if wget -q --show-progress --timeout=30 --tries=3 "$PACKAGE_URL" -O "$PACKAGE_NAME"; then - echo "✅ Package downloaded successfully" -else +# Test if package exists first +echo "🔍 Checking package availability..." +if command -v curl >/dev/null 2>&1; then + HTTP_STATUS=$(curl -s -o /dev/null -w "%{http_code}" -I "$PACKAGE_URL") + if [ "$HTTP_STATUS" != "200" ]; then + echo "❌ Package not found at $PACKAGE_URL (HTTP $HTTP_STATUS)" + echo " Available packages should be:" + echo " - distributed-regional-check-agent_${PACKAGE_VERSION}_amd64.deb" + echo " - distributed-regional-check-agent_${PACKAGE_VERSION}_arm64.deb" + echo "" + echo " Please check the GitHub releases page:" + echo " https://github.com/operacle/Distributed-Regional-Monitoring/releases" + rm -rf "$TEMP_DIR" + exit 1 + fi + echo "✅ Package found, proceeding with download..." +fi + +# Try wget first, then curl as fallback +DOWNLOAD_SUCCESS=false + +if command -v wget >/dev/null 2>&1; then + echo "📥 Downloading with wget..." + if wget -q --show-progress --timeout=30 --tries=3 "$PACKAGE_URL" -O "$PACKAGE_NAME"; then + DOWNLOAD_SUCCESS=true + echo "✅ Package downloaded successfully using wget" + fi +fi + +if [ "$DOWNLOAD_SUCCESS" = false ] && command -v curl >/dev/null 2>&1; then + echo "📥 Downloading with curl..." + if curl -L --connect-timeout 30 --max-time 300 --retry 3 --retry-delay 2 -o "$PACKAGE_NAME" "$PACKAGE_URL" --progress-bar; then + DOWNLOAD_SUCCESS=true + echo "✅ Package downloaded successfully using curl" + fi +fi + +if [ "$DOWNLOAD_SUCCESS" = false ]; then echo "❌ Failed to download package from $PACKAGE_URL" echo " Please check:" echo " - Internet connection" echo " - Package availability for $PKG_ARCH architecture" - echo " - GitHub repository access" + echo " - GitHub repository access: https://github.com/operacle/Distributed-Regional-Monitoring/releases" echo " - Firewall/proxy settings" + echo "" + echo " Available packages should be:" + echo " - distributed-regional-check-agent_${PACKAGE_VERSION}_amd64.deb" + echo " - distributed-regional-check-agent_${PACKAGE_VERSION}_arm64.deb" + rm -rf "$TEMP_DIR" + exit 1 +fi + +# Verify download was successful +if [ ! -f "$PACKAGE_NAME" ] || [ ! -s "$PACKAGE_NAME" ]; then + echo "❌ Downloaded package is empty or missing" + echo " File size: $(ls -lh "$PACKAGE_NAME" 2>/dev/null | awk '{print $5}' || echo 'file not found')" rm -rf "$TEMP_DIR" exit 1 fi @@ -203,6 +250,8 @@ if dpkg-deb --info "$PACKAGE_NAME" > /dev/null 2>&1; then dpkg-deb --field "$PACKAGE_NAME" Package Version Architecture Description | head -4 else echo "❌ Package verification failed - corrupted download" + echo " File size: $(ls -lh "$PACKAGE_NAME" | awk '{print $5}')" + echo " Try downloading manually from: $PACKAGE_URL" rm -rf "$TEMP_DIR" exit 1 fi @@ -227,7 +276,7 @@ else echo " Manual resolution:" echo " 1. Run: sudo apt-get update" echo " 2. Run: sudo apt-get install -f" - echo " 3. Retry installation" + echo " 3. Retry installation: sudo dpkg -i $PACKAGE_NAME" rm -rf "$TEMP_DIR" exit 1 fi @@ -379,7 +428,7 @@ echo "🔧 Troubleshooting:" echo " If the service fails to start:" echo " 1. Check logs: sudo journalctl -u $SERVICE_NAME -n 50" echo " 2. Verify config: cat /etc/regional-check-agent/regional-check-agent.env" -echo " 3. Test connectivity: ping $POCKETBASE_URL" +echo " 3. Test connectivity: ping $(echo $POCKETBASE_URL | sed 's|https\?://||' | sed 's|/.*||')" echo " 4. Check port availability: sudo netstat -tlnp | grep 8091" echo "" echo "✨ The agent is now monitoring and reporting to your CheckCle dashboard!" \ No newline at end of file From 879e106051445aa7ad2ef7ebf9514738a2bea8d1 Mon Sep 17 00:00:00 2001 From: Tola Leng Date: Sat, 21 Jun 2025 22:09:28 +0700 Subject: [PATCH 02/10] Fixed bash script for correct download package URL --- scripts/install-regional-agent.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/install-regional-agent.sh b/scripts/install-regional-agent.sh index cc730fc..eb3182a 100644 --- a/scripts/install-regional-agent.sh +++ b/scripts/install-regional-agent.sh @@ -190,7 +190,7 @@ if command -v curl >/dev/null 2>&1; then echo " - distributed-regional-check-agent_${PACKAGE_VERSION}_arm64.deb" echo "" echo " Please check the GitHub releases page:" - echo " https://github.com/operacle/Distributed-Regional-Monitoring/releases" + echo " https://github.com/operacle/Distributed-Regional-Monitoring/releases/download/v1.0.0" rm -rf "$TEMP_DIR" exit 1 fi From 1b11deb40f8b58484ec6f5e024807ced145e7ff7 Mon Sep 17 00:00:00 2001 From: Tola Leng Date: Sat, 21 Jun 2025 22:14:08 +0700 Subject: [PATCH 03/10] Fixed bash script package version --- scripts/install-regional-agent.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/install-regional-agent.sh b/scripts/install-regional-agent.sh index eb3182a..e325180 100644 --- a/scripts/install-regional-agent.sh +++ b/scripts/install-regional-agent.sh @@ -13,7 +13,7 @@ AGENT_ID="" AGENT_IP_ADDRESS="" AGENT_TOKEN="" POCKETBASE_URL="" -BASE_PACKAGE_URL="https://github.com/operacle/Distributed-Regional-Monitoring/releases/download/v1.0.0" +BASE_PACKAGE_URL="https://github.com/operacle/Distributed-Regional-Monitoring/releases/download/V1.0.0" PACKAGE_VERSION="1.0.0" SERVICE_NAME="regional-check-agent" @@ -190,7 +190,7 @@ if command -v curl >/dev/null 2>&1; then echo " - distributed-regional-check-agent_${PACKAGE_VERSION}_arm64.deb" echo "" echo " Please check the GitHub releases page:" - echo " https://github.com/operacle/Distributed-Regional-Monitoring/releases/download/v1.0.0" + echo " https://github.com/operacle/Distributed-Regional-Monitoring/releases/download/V1.0.0" rm -rf "$TEMP_DIR" exit 1 fi From 35b11f5a16a40aab345b9ed0e6ac1f789ee0b7e8 Mon Sep 17 00:00:00 2001 From: Tola Leng Date: Sat, 21 Jun 2025 23:26:24 +0700 Subject: [PATCH 04/10] Fix: Correct package download URL --- .../AddRegionalAgentDialog.tsx | 97 ++++++++++++++----- application/src/services/regionalService.ts | 2 +- scripts/install-regional-agent.sh | 8 +- 3 files changed, 78 insertions(+), 29 deletions(-) diff --git a/application/src/components/regional-monitoring/AddRegionalAgentDialog.tsx b/application/src/components/regional-monitoring/AddRegionalAgentDialog.tsx index 14d8bd4..9ade178 100644 --- a/application/src/components/regional-monitoring/AddRegionalAgentDialog.tsx +++ b/application/src/components/regional-monitoring/AddRegionalAgentDialog.tsx @@ -1,4 +1,3 @@ - import React, { useState } from "react"; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from "@/components/ui/dialog"; import { Button } from "@/components/ui/button"; @@ -54,19 +53,69 @@ export const AddRegionalAgentDialog: React.FC = ({ } }; - const copyToClipboard = async (text: string) => { + const copyToClipboard = async (text: string, description: string = "Content") => { try { - await navigator.clipboard.writeText(text); - toast({ - title: "Copied!", - description: "Installation script copied to clipboard.", - }); + // Try the modern clipboard API first + if (navigator.clipboard && window.isSecureContext) { + await navigator.clipboard.writeText(text); + toast({ + title: "Copied!", + description: `${description} copied to clipboard.`, + }); + return; + } + + // Fallback for older browsers or non-secure contexts (like localhost) + const textArea = document.createElement('textarea'); + textArea.value = text; + textArea.style.position = 'fixed'; + textArea.style.left = '-999999px'; + textArea.style.top = '-999999px'; + document.body.appendChild(textArea); + textArea.focus(); + textArea.select(); + + const successful = document.execCommand('copy'); + document.body.removeChild(textArea); + + if (successful) { + toast({ + title: "Copied!", + description: `${description} copied to clipboard.`, + }); + } else { + throw new Error('execCommand failed'); + } } catch (error) { + console.error('Failed to copy to clipboard:', error); + + // Show the text in a modal or alert as final fallback + const userAgent = navigator.userAgent.toLowerCase(); + const isLocalhost = window.location.hostname === 'localhost' || window.location.hostname === '127.0.0.1'; + + let errorMessage = "Failed to copy to clipboard."; + if (isLocalhost) { + errorMessage += " This is common in local development. Please manually copy the text."; + } else if (userAgent.includes('chrome')) { + errorMessage += " Try using HTTPS or enable clipboard permissions."; + } + toast({ title: "Copy failed", - description: "Failed to copy to clipboard.", + description: errorMessage, variant: "destructive", }); + + // As a last resort, select the text for manual copying + try { + const textarea = document.querySelector('textarea[readonly]') as HTMLTextAreaElement; + if (textarea) { + textarea.select(); + textarea.setSelectionRange(0, 99999); // For mobile devices + } + } catch (selectError) { + console.error('Failed to select text:', selectError); + } } }; @@ -89,16 +138,6 @@ export const AddRegionalAgentDialog: React.FC = ({ }); }; - const copyOneClickCommand = () => { - if (!installCommand) return; - - const oneClickCommand = `curl -fsSL -H "User-Agent: CheckCle-Installer" \\ - "data:text/plain;base64,$(echo '${installCommand.bash_script}' | base64 -w 0)" \\ - | sudo bash`; - - copyToClipboard(oneClickCommand); - }; - const handleComplete = () => { onAgentAdded(); setStep(1); @@ -211,7 +250,7 @@ export const AddRegionalAgentDialog: React.FC = ({