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
This commit is contained in:
Developer
2026-03-20 01:44:31 -04:00
parent 11c3d23626
commit 7c8bc085f7
2 changed files with 307 additions and 0 deletions
+256
View File
@@ -0,0 +1,256 @@
#!/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 ""