Files
Developer 7c8bc085f7 Add detection diagnostic tools and fix silent detection on cached runs
NEW FEATURES:
- launcher.sh --detect-only: Force re-detect and show results
- test-detection.sh: Comprehensive detection diagnostic tool
- Better error feedback when detection fails

FIXES:
- launcher.sh: Detection now verified even on cached runs
- Added explicit check for SYS_DETECTION_COMPLETE before using cache
- User can now diagnose detection issues with --detect-only flag

USAGE:
  bash launcher.sh --detect-only        (check what was detected)
  bash test-detection.sh                (run full diagnostic)
  bash test-detection.sh verbose        (show file paths and details)

RESULTS:
- Users can now easily verify detection is working
- Detection issues are no longer silent
- Clear diagnostic output for troubleshooting
2026-03-20 01:44:31 -04:00

257 lines
9.2 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
#############################################################################
# System Detection Diagnostic Tool
# Run this on a standalone server to test all detection functions
# Usage: bash test-detection.sh [verbose]
#############################################################################
set -eo pipefail
BASE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
LIB_DIR="$BASE_DIR/lib"
# Check for verbose flag
VERBOSE=0
[ "$1" = "verbose" ] && VERBOSE=1
# Load libraries
source "$LIB_DIR/common-functions.sh"
source "$LIB_DIR/system-detect.sh"
echo "═══════════════════════════════════════════════════════════════"
echo " SYSTEM DETECTION DIAGNOSTIC TOOL"
echo "═══════════════════════════════════════════════════════════════"
echo ""
#############################################################################
# STEP 1: Test Basic Commands
#############################################################################
echo "[STEP 1] Testing Command Availability"
echo "─────────────────────────────────────────────────────────────"
test_command() {
local cmd="$1"
local desc="$2"
if command_exists "$cmd"; then
local path=$(which "$cmd" 2>/dev/null)
echo "$desc"
[ $VERBOSE -eq 1 ] && echo " Location: $path"
else
echo "$desc - NOT FOUND"
fi
}
echo ""
echo "Web Servers:"
test_command "httpd" "Apache (httpd)"
test_command "apache2" "Apache (apache2)"
test_command "nginx" "Nginx"
echo ""
echo "Databases:"
test_command "mysql" "MySQL/MariaDB"
test_command "psql" "PostgreSQL"
echo ""
echo "Firewalls:"
test_command "firewall-cmd" "Firewalld"
test_command "iptables" "iptables"
test_command "ufw" "UFW"
#############################################################################
# STEP 2: Test Version Detection
#############################################################################
echo ""
echo "[STEP 2] Version Detection"
echo "─────────────────────────────────────────────────────────────"
echo ""
echo "Apache Version Detection:"
if command_exists httpd; then
httpd_v=$(httpd -v 2>/dev/null | grep -oP 'Apache/\K[\d.]+' | head -1)
echo "✓ httpd version: $httpd_v"
elif command_exists apache2; then
apache2_v=$(apache2 -v 2>/dev/null | grep -oP 'Apache/\K[\d.]+' | head -1)
echo "✓ apache2 version: $apache2_v"
else
echo "✗ Apache not found"
fi
echo ""
echo "MySQL/MariaDB Version Detection:"
if command_exists mysql; then
mysql_v=$(mysql --version 2>/dev/null)
echo "✓ mysql version: $mysql_v"
else
echo "✗ MySQL not found"
fi
echo ""
echo "Nginx Version Detection:"
if command_exists nginx; then
nginx_v=$(nginx -v 2>&1 | grep -oP 'nginx/\K[\d.]+' 2>/dev/null)
echo "✓ nginx version: $nginx_v"
else
echo "✗ Nginx not found"
fi
#############################################################################
# STEP 3: Test Control Panel Detection
#############################################################################
echo ""
echo "[STEP 3] Control Panel Detection"
echo "─────────────────────────────────────────────────────────────"
echo ""
if [ -f "/usr/local/cpanel/version" ]; then
cpanel_v=$(cat /usr/local/cpanel/version)
echo "✓ cPanel detected: v$cpanel_v"
elif [ -f "/usr/local/psa/version" ]; then
plesk_v=$(cat /usr/local/psa/version | head -1)
echo "✓ Plesk detected: v$plesk_v"
elif [ -d "/usr/local/interworx" ] || [ -f "/etc/interworx/iworx.ini" ]; then
echo "✓ InterWorx detected"
else
echo "✓ Standalone (no control panel)"
fi
#############################################################################
# STEP 4: Test OS Detection
#############################################################################
echo ""
echo "[STEP 4] Operating System Detection"
echo "─────────────────────────────────────────────────────────────"
if [ -f /etc/os-release ]; then
. /etc/os-release
echo "✓ OS Detected: $NAME"
echo " Version: $VERSION_ID"
else
echo "✗ Could not detect OS"
fi
#############################################################################
# STEP 5: Test Firewall Detection
#############################################################################
echo ""
echo "[STEP 5] Firewall Detection"
echo "─────────────────────────────────────────────────────────────"
echo ""
if [ -f "/etc/csf/csf.conf" ]; then
csf_v=$(head -1 /etc/csf/version.txt 2>/dev/null || echo "unknown")
echo "✓ CSF detected: v$csf_v"
if pgrep -x lfd > /dev/null 2>&1; then
echo " Status: ACTIVE"
else
echo " Status: INACTIVE"
fi
else
echo "✗ CSF not found"
fi
echo ""
if command_exists firewall-cmd; then
fw_v=$(firewall-cmd --version 2>/dev/null || echo "unknown")
echo "✓ firewalld detected: v$fw_v"
if systemctl is-active --quiet firewalld 2>/dev/null; then
echo " Status: ACTIVE"
else
echo " Status: INACTIVE"
fi
else
echo "✗ firewalld not found"
fi
echo ""
if command_exists iptables; then
ipt_v=$(iptables --version 2>/dev/null | grep -oP 'v\K[\d.]+' | head -1 || echo "unknown")
echo "✓ iptables detected: v$ipt_v"
rules=$(iptables -L INPUT -n 2>/dev/null | wc -l)
if [ "$rules" -gt 2 ]; then
echo " Status: ACTIVE ($(($rules - 2)) rules)"
else
echo " Status: NO RULES"
fi
else
echo "✗ iptables not found"
fi
#############################################################################
# STEP 6: Run Full Detection
#############################################################################
echo ""
echo "[STEP 6] Running Full System Detection"
echo "─────────────────────────────────────────────────────────────"
echo ""
# Run the full detection
initialize_system_detection
#############################################################################
# STEP 7: Display Detected System Variables
#############################################################################
echo ""
echo "[STEP 7] Detected System Variables"
echo "─────────────────────────────────────────────────────────────"
echo ""
echo "Control Panel: ${SYS_CONTROL_PANEL:-unknown}"
echo "Control Panel Ver: ${SYS_CONTROL_PANEL_VERSION:-N/A}"
echo "Operating System: ${SYS_OS_TYPE:-unknown}"
echo "OS Version: ${SYS_OS_VERSION:-N/A}"
echo "Web Server: ${SYS_WEB_SERVER:-unknown}"
echo "Web Server Ver: ${SYS_WEB_SERVER_VERSION:-N/A}"
echo "Database Type: ${SYS_DB_TYPE:-unknown}"
echo "Database Ver: ${SYS_DB_VERSION:-N/A}"
echo "Log Directory: ${SYS_LOG_DIR:-N/A}"
echo "User Home Base: ${SYS_USER_HOME_BASE:-N/A}"
echo "PHP Versions: ${SYS_PHP_VERSIONS[*]:-N/A}"
echo "Firewall: ${SYS_FIREWALL:-unknown}"
echo "Firewall Version: ${SYS_FIREWALL_VERSION:-N/A}"
echo "Firewall Active: ${SYS_FIREWALL_ACTIVE:-unknown}"
echo ""
#############################################################################
# STEP 8: Summary
#############################################################################
echo ""
echo "═══════════════════════════════════════════════════════════════"
echo " SUMMARY"
echo "═══════════════════════════════════════════════════════════════"
echo ""
detection_ok=1
[ -z "$SYS_WEB_SERVER" ] || [ "$SYS_WEB_SERVER" = "unknown" ] && {
echo "⚠️ WARNING: Web server not detected"
detection_ok=0
}
[ -z "$SYS_DB_TYPE" ] || [ "$SYS_DB_TYPE" = "none" ] && {
echo "⚠️ INFO: No database detected (may be intentional)"
}
[ -z "$SYS_FIREWALL" ] || [ "$SYS_FIREWALL" = "none" ] && {
echo "️ INFO: No firewall detected (may be intentional on standalone)"
}
if [ $detection_ok -eq 1 ]; then
echo "✓ System detection completed successfully"
echo ""
echo "All critical components detected."
fi
echo ""
echo "═══════════════════════════════════════════════════════════════"
echo ""