Enhance one-click install script and Regional Agent Dialog
This commit is contained in:
@@ -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!"
|
||||
Reference in New Issue
Block a user