diff --git a/application/src/services/regionalService.ts b/application/src/services/regionalService.ts index 1cf44e2..832caf8 100644 --- a/application/src/services/regionalService.ts +++ b/application/src/services/regionalService.ts @@ -92,7 +92,7 @@ export const regionalService = { # CheckCle Regional Monitoring Agent - Automatic Installation Script # Generated on: $(date) -# This script will automatically download, install, configure and start the regional monitoring agent +# This script will automatically detect architecture, download, install, configure and start the regional monitoring agent echo "🚀 CheckCle Regional Monitoring Agent - Automatic Installation" echo "==============================================================" @@ -105,9 +105,9 @@ AGENT_IP_ADDRESS="${agentIp}" AGENT_TOKEN="${token}" POCKETBASE_URL="${apiEndpoint}" -# Package information -PACKAGE_URL="https://github.com/operacle/distributed-regional-monitoring/releases/latest/download/distributed-regional-check-agent_1.0.0_amd64.deb" -PACKAGE_NAME="distributed-regional-check-agent_1.0.0_amd64.deb" +# Base package information +BASE_PACKAGE_URL="https://github.com/operacle/Distributed-Regional-Monitoring/releases" +PACKAGE_VERSION="1.0.0" SERVICE_NAME="regional-check-agent" # Check if running as root @@ -117,11 +117,55 @@ if [[ $EUID -ne 0 ]]; then exit 1 fi +# Detect operating system +echo "🔍 Detecting system information..." +OS_TYPE=$(uname -s | tr '[:upper:]' '[:lower:]') +echo " Operating System: $OS_TYPE" + +# Check if it's a supported OS +if [[ "$OS_TYPE" != "linux" ]]; then + echo "❌ Unsupported operating system: $OS_TYPE" + echo " This installer only supports Linux systems" + exit 1 +fi + +# Detect architecture +ARCH=$(uname -m) +echo " Hardware Architecture: $ARCH" + +# Map architecture to package architecture +case $ARCH in + x86_64|amd64) + PKG_ARCH="amd64" + ;; + aarch64|arm64) + PKG_ARCH="arm64" + ;; + armv7l|armv6l) + PKG_ARCH="arm64" + echo "⚠️ ARM 32-bit detected, using ARM64 package (may require compatibility layer)" + ;; + *) + echo "❌ Unsupported architecture: $ARCH" + echo " Supported architectures: x86_64 (amd64), aarch64 (arm64)" + echo " Please contact support for your architecture: $ARCH" + exit 1 + ;; +esac + +echo " Package Architecture: $PKG_ARCH" + +# Construct package URLs and names +PACKAGE_URL="$BASE_PACKAGE_URL/distributed-regional-check-agent_\${PACKAGE_VERSION}_\${PKG_ARCH}.deb" +PACKAGE_NAME="distributed-regional-check-agent_\${PACKAGE_VERSION}_\${PKG_ARCH}.deb" + +echo "" echo "📋 Installation Configuration:" echo " Region Name: $REGION_NAME" echo " Agent ID: $AGENT_ID" echo " Agent IP: $AGENT_IP_ADDRESS" echo " PocketBase URL: $POCKETBASE_URL" +echo " Package URL: $PACKAGE_URL" echo "" # Create temporary directory @@ -129,13 +173,27 @@ TEMP_DIR=$(mktemp -d) echo "📁 Created temporary directory: $TEMP_DIR" # Download the .deb package -echo "📥 Downloading Regional Monitoring Agent 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 echo "❌ Failed to download package from $PACKAGE_URL" - echo " Please check your internet connection and try again" + echo " Please check:" + echo " - Internet connection" + echo " - Package availability for $PKG_ARCH architecture" + echo " - GitHub repository access" + rm -rf "$TEMP_DIR" + exit 1 +fi + +# Verify package integrity +echo "" +echo "🔍 Verifying package..." +if dpkg-deb --info "$PACKAGE_NAME" > /dev/null 2>&1; then + echo "✅ Package verification successful" +else + echo "❌ Package verification failed - corrupted download" rm -rf "$TEMP_DIR" exit 1 fi @@ -151,6 +209,10 @@ else echo "✅ Dependencies fixed and package installed successfully" else echo "❌ Failed to install package and fix dependencies" + echo " This might be due to:" + echo " - Missing system dependencies" + echo " - Architecture compatibility issues" + echo " - Insufficient disk space" rm -rf "$TEMP_DIR" exit 1 fi @@ -221,6 +283,7 @@ if systemctl start $SERVICE_NAME; then else echo "❌ Failed to start service" echo " Check the configuration and try: sudo systemctl start $SERVICE_NAME" + echo " View logs with: sudo journalctl -u $SERVICE_NAME -f" rm -rf "$TEMP_DIR" exit 1 fi @@ -250,6 +313,7 @@ echo "" echo "📋 Installation Summary:" echo " Agent ID: $AGENT_ID" echo " Region: $REGION_NAME" +echo " Architecture: $PKG_ARCH" echo " Status: $(systemctl is-active $SERVICE_NAME)" echo " Health URL: http://localhost:8091/health" echo " Service endpoint: http://localhost:8091/operation" diff --git a/scripts/install-regional-agent.sh b/scripts/install-regional-agent.sh new file mode 100644 index 0000000..ba87228 --- /dev/null +++ b/scripts/install-regional-agent.sh @@ -0,0 +1,385 @@ + +#!/bin/bash + +# 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] + +set -e + +# Default values +REGION_NAME="" +AGENT_ID="" +AGENT_IP_ADDRESS="" +AGENT_TOKEN="" +POCKETBASE_URL="" +BASE_PACKAGE_URL="https://github.com/operacle/Distributed-Regional-Monitoring/releases" +PACKAGE_VERSION="1.0.0" +SERVICE_NAME="regional-check-agent" + +# Function to show usage +show_usage() { + echo "Usage: $0 [OPTIONS]" + echo "" + echo "Options:" + echo " --region-name=NAME Set the region name (required)" + echo " --agent-id=ID Set the agent ID (required)" + echo " --agent-ip=IP Set the agent IP address (required)" + echo " --token=TOKEN Set the authentication token (required)" + echo " --pocketbase-url=URL Set the PocketBase API URL (required)" + echo " --package-version=VER Set package version (default: $PACKAGE_VERSION)" + echo " --help Show this help message" + echo "" + echo "Example:" + echo " $0 --region-name=\"us-east-1\" --agent-id=\"agent_abc123\" \\" + echo " --agent-ip=\"192.168.1.100\" --token=\"your-token\" \\" + echo " --pocketbase-url=\"https://your-pb.com\"" +} + +# Parse command line arguments +while [[ $# -gt 0 ]]; do + case $1 in + --region-name=*) + REGION_NAME="${1#*=}" + shift + ;; + --agent-id=*) + AGENT_ID="${1#*=}" + shift + ;; + --agent-ip=*) + AGENT_IP_ADDRESS="${1#*=}" + shift + ;; + --token=*) + AGENT_TOKEN="${1#*=}" + shift + ;; + --pocketbase-url=*) + POCKETBASE_URL="${1#*=}" + shift + ;; + --package-version=*) + PACKAGE_VERSION="${1#*=}" + shift + ;; + --help) + show_usage + exit 0 + ;; + *) + echo "Unknown option: $1" + show_usage + exit 1 + ;; + esac +done + +# Validate required parameters +if [[ -z "$REGION_NAME" || -z "$AGENT_ID" || -z "$AGENT_IP_ADDRESS" || -z "$AGENT_TOKEN" || -z "$POCKETBASE_URL" ]]; then + echo "❌ Error: Missing required parameters" + echo "" + show_usage + exit 1 +fi + +echo "🚀 CheckCle Regional Monitoring Agent - Universal Installation" +echo "==============================================================" +echo "" + +# Check if running as root +if [[ $EUID -ne 0 ]]; then + echo "❌ This script must be run as root (use sudo)" + echo " Usage: sudo bash $0 [options]" + exit 1 +fi + +# Detect operating system +echo "🔍 Detecting system information..." +OS_TYPE=$(uname -s | tr '[:upper:]' '[:lower:]') +echo " Operating System: $OS_TYPE" + +# Check if it's a supported OS +if [[ "$OS_TYPE" != "linux" ]]; then + echo "❌ Unsupported operating system: $OS_TYPE" + echo " This installer only supports Linux systems" + exit 1 +fi + +# Detect architecture +ARCH=$(uname -m) +echo " Hardware Architecture: $ARCH" + +# Map architecture to package architecture +case $ARCH in + x86_64|amd64) + PKG_ARCH="amd64" + ;; + aarch64|arm64) + PKG_ARCH="arm64" + ;; + armv7l|armv6l) + PKG_ARCH="arm64" + echo "⚠️ ARM 32-bit detected, using ARM64 package (may require compatibility layer)" + ;; + *) + echo "❌ Unsupported architecture: $ARCH" + echo " Supported architectures: x86_64 (amd64), aarch64 (arm64)" + echo " Please contact support for your architecture: $ARCH" + exit 1 + ;; +esac + +echo " Package Architecture: $PKG_ARCH" + +# Construct package URLs and names +PACKAGE_URL="$BASE_PACKAGE_URL/distributed-regional-check-agent_${PACKAGE_VERSION}_${PKG_ARCH}.deb" +PACKAGE_NAME="distributed-regional-check-agent_${PACKAGE_VERSION}_${PKG_ARCH}.deb" + +echo "" +echo "📋 Installation Configuration:" +echo " Region Name: $REGION_NAME" +echo " Agent ID: $AGENT_ID" +echo " Agent IP: $AGENT_IP_ADDRESS" +echo " Package Architecture: $PKG_ARCH" +echo " Package URL: $PACKAGE_URL" +echo "" + +# Check for required tools +echo "🔧 Checking system requirements..." +MISSING_TOOLS=() + +if ! command -v wget >/dev/null 2>&1; then + MISSING_TOOLS+=("wget") +fi + +if ! command -v dpkg >/dev/null 2>&1; then + MISSING_TOOLS+=("dpkg") +fi + +if ! command -v systemctl >/dev/null 2>&1; then + MISSING_TOOLS+=("systemd") +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" + exit 1 +fi + +echo "✅ System requirements satisfied" + +# Create temporary directory +TEMP_DIR=$(mktemp -d) +echo "📁 Created temporary directory: $TEMP_DIR" + +# Download the .deb package +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 + 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 " - Firewall/proxy settings" + rm -rf "$TEMP_DIR" + exit 1 +fi + +# Verify package integrity +echo "" +echo "🔍 Verifying package..." +if dpkg-deb --info "$PACKAGE_NAME" > /dev/null 2>&1; then + echo "✅ Package verification successful" + + # Show package info + echo "📦 Package Information:" + dpkg-deb --field "$PACKAGE_NAME" Package Version Architecture Description | head -4 +else + echo "❌ Package verification failed - corrupted download" + rm -rf "$TEMP_DIR" + exit 1 +fi + +# Install the package +echo "" +echo "📦 Installing Regional Monitoring Agent package..." +if dpkg -i "$PACKAGE_NAME" 2>/dev/null; then + echo "✅ Package installed successfully" +else + echo "⚠️ Package installation had dependency issues, attempting to fix..." + if apt-get update && apt-get install -f -y; then + echo "✅ Dependencies fixed and package installed successfully" + else + echo "❌ Failed to install package and fix dependencies" + echo " This might be due to:" + echo " - Missing system dependencies" + echo " - Architecture compatibility issues" + echo " - Package conflicts" + echo " - Insufficient disk space" + echo "" + echo " Manual resolution:" + echo " 1. Run: sudo apt-get update" + echo " 2. Run: sudo apt-get install -f" + echo " 3. Retry installation" + rm -rf "$TEMP_DIR" + exit 1 + fi +fi + +# Configure the agent +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 +# Auto-generated on $(date) +# Architecture: $PKG_ARCH + +# Server Configuration +PORT=8091 + +# Operation defaults +DEFAULT_COUNT=4 +DEFAULT_TIMEOUT=10s +MAX_COUNT=20 +MAX_TIMEOUT=30s + +# Logging +ENABLE_LOGGING=true + +# PocketBase integration +POCKETBASE_ENABLED=true +POCKETBASE_URL=$POCKETBASE_URL + +# Regional Agent Configuration - Auto-configured +REGION_NAME=$REGION_NAME +AGENT_ID=$AGENT_ID +AGENT_IP_ADDRESS=$AGENT_IP_ADDRESS +AGENT_TOKEN=$AGENT_TOKEN + +# Monitoring configuration +CHECK_INTERVAL=30s +MAX_RETRIES=3 +REQUEST_TIMEOUT=10s +EOF + +echo "✅ Configuration file created at /etc/regional-check-agent/regional-check-agent.env" + +# Set proper permissions +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 + echo "✅ Configuration file permissions set" +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 "" +echo "🔧 Starting Regional Monitoring Agent service..." + +# Reload systemd daemon +systemctl daemon-reload + +# Enable the service for auto-start +if systemctl enable $SERVICE_NAME; then + echo "✅ Service enabled for auto-start" +else + echo "❌ Failed to enable service" + echo " Check systemd configuration" + rm -rf "$TEMP_DIR" + exit 1 +fi + +# Start the service +if systemctl start $SERVICE_NAME; then + echo "✅ Service started successfully" +else + echo "❌ Failed to start service" + echo " Common issues:" + echo " - Configuration errors" + echo " - Port 8091 already in use" + echo " - Permission issues" + echo "" + echo " Troubleshooting:" + echo " - Check logs: sudo journalctl -u $SERVICE_NAME -f" + echo " - Check config: sudo nano /etc/regional-check-agent/regional-check-agent.env" + echo " - Manual start: sudo systemctl start $SERVICE_NAME" + rm -rf "$TEMP_DIR" + exit 1 +fi + +# Wait a moment for service to initialize +echo "⏳ Waiting for service to initialize..." +sleep 5 + +# Check service status +echo "" +echo "📊 Service Status:" +systemctl status $SERVICE_NAME --no-pager -l --lines=5 + +# Test health endpoint +echo "" +echo "🩺 Testing agent health endpoint..." +HEALTH_CHECK_ATTEMPTS=3 +HEALTH_CHECK_DELAY=2 + +for i in $(seq 1 $HEALTH_CHECK_ATTEMPTS); do + if curl -s -f --connect-timeout 5 http://localhost:8091/health > /dev/null; then + echo "✅ Agent health endpoint is responding" + HEALTH_OK=true + break + else + if [ $i -lt $HEALTH_CHECK_ATTEMPTS ]; then + echo "⏳ Health check attempt $i/$HEALTH_CHECK_ATTEMPTS failed, retrying in ${HEALTH_CHECK_DELAY}s..." + sleep $HEALTH_CHECK_DELAY + else + echo "⚠️ Agent health endpoint not responding after $HEALTH_CHECK_ATTEMPTS attempts" + echo " This may be normal if the service is still starting up" + echo " Check status later with: curl http://localhost:8091/health" + fi + fi +done + +# Cleanup +rm -rf "$TEMP_DIR" +echo "" +echo "🎉 Regional Monitoring Agent Installation Complete!" +echo "" +echo "📋 Installation Summary:" +echo " Agent ID: $AGENT_ID" +echo " Region: $REGION_NAME" +echo " Architecture: $PKG_ARCH ($ARCH)" +echo " Status: $(systemctl is-active $SERVICE_NAME 2>/dev/null || echo 'unknown')" +echo " Health URL: http://localhost:8091/health" +echo " Service endpoint: http://localhost:8091/operation" +echo " Config file: /etc/regional-check-agent/regional-check-agent.env" +echo "" +echo "📝 Useful commands:" +echo " Check status: sudo systemctl status $SERVICE_NAME" +echo " View logs: sudo journalctl -u $SERVICE_NAME -f" +echo " Restart: sudo systemctl restart $SERVICE_NAME" +echo " Stop: sudo systemctl stop $SERVICE_NAME" +echo " Health check: curl http://localhost:8091/health" +echo "" +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 " 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