Compare commits
18 Commits
main
..
e14dc213aa
| Author | SHA1 | Date | |
|---|---|---|---|
| e14dc213aa | |||
| aaae6adfb9 | |||
| e40c281cbf | |||
| d1e81109ba | |||
| aabc3cb238 | |||
| 9048066a49 | |||
| c7080d04b6 | |||
| 9f8522d8a6 | |||
| e0a7991949 | |||
| 2d9cc9a23f | |||
| 0b0fd8c5c8 | |||
| 7c57d21463 | |||
| d36e668b0e | |||
| cd38f9248f | |||
| 64a2b2b0b1 | |||
| 24dd0974cb | |||
| ef16e309cb | |||
| adcb3b04d6 |
@@ -0,0 +1,275 @@
|
||||
# Dev Launcher - Platform Support Roadmap
|
||||
|
||||
**Goal**: Build comprehensive **automatic platform detection** that collects all system data during launcher startup and stores in reference database (`.sysref.beta`).
|
||||
|
||||
**Key Principle**: Launcher runs on startup, collects ALL data automatically, displays findings, stores in reference DB. No interactive menus - modules use the detected/stored data.
|
||||
|
||||
---
|
||||
|
||||
## Phase 1: Comprehensive Automatic Detection (CURRENT)
|
||||
**Status**: 🔄 In Progress
|
||||
|
||||
### Step 1: System Detection at Startup ✅ DONE
|
||||
- [x] System info display at startup (show_system_overview)
|
||||
- [x] Control panel detection (cPanel, Plesk, InterWorx, Standalone)
|
||||
- [x] OS detection (CentOS, AlmaLinux, Rocky, CloudLinux, Ubuntu, Debian)
|
||||
- [x] Web server detection (Apache, Nginx, LiteSpeed, OpenLiteSpeed)
|
||||
- [x] Database detection (MySQL, MariaDB)
|
||||
- [x] PHP version detection (default + EA4 + Plesk + alt-php)
|
||||
- [x] Firewall detection (CSF, firewalld, UFW, iptables)
|
||||
|
||||
### Step 2: Automatic Data Collection & Storage (NEXT)
|
||||
- [ ] **Enhance reference-db.sh** to collect platform compatibility data
|
||||
- Add PLATFORM record type to .sysref:
|
||||
```
|
||||
PLATFORM|control_panel|cpanel|120.0|ok
|
||||
PLATFORM|os|almalinux|9|supported
|
||||
PLATFORM|web_server|apache|2.4.57|ok
|
||||
PLATFORM|php_version|8.1|available
|
||||
PLATFORM|compatibility|cpanel_almalinux|ok
|
||||
```
|
||||
- Add health status for each component
|
||||
- Add package status (installed/missing/conflict)
|
||||
|
||||
- [ ] **Enhance startup_detection()** to:
|
||||
- Run comprehensive detection automatically
|
||||
- Call platform health checks (store results, don't display menu)
|
||||
- Run OS compatibility checks (store results)
|
||||
- Populate PLATFORM records in .sysref.beta
|
||||
- Show summary at startup (what was detected, any issues)
|
||||
|
||||
### Step 3: Store Platform Data in Reference DB
|
||||
- [ ] Extend .sysref format to include:
|
||||
- Control panel status and features
|
||||
- OS compatibility status
|
||||
- Package installation status
|
||||
- Service health status
|
||||
- Known issues found
|
||||
|
||||
- [ ] Create functions to query this data:
|
||||
- `db_get_platform_status()` - Get overall platform health
|
||||
- `db_get_compatibility_issues()` - Get known incompatibilities
|
||||
- `db_get_missing_packages()` - Get required packages not installed
|
||||
|
||||
### Step 4: Display Findings at Startup
|
||||
- [ ] Show platform detection summary during initialization
|
||||
- [ ] List any critical issues found
|
||||
- [ ] List recommendations (upgrades, package installs, fixes)
|
||||
- [ ] Cache expires with .sysref (1 hour)
|
||||
|
||||
---
|
||||
|
||||
## Phase 2: Automatic OS Compatibility Detection
|
||||
**Status**: ⏳ Planned
|
||||
|
||||
### Auto-Collect for Each OS
|
||||
- [ ] **Package Manager State** - YUM, DNF, or APT status
|
||||
- [ ] **Required Packages** - Verify installed (httpd, apache2, mysql, etc.)
|
||||
- [ ] **Service Manager** - Detect systemd vs init
|
||||
- [ ] **Apache Binary** - Detect httpd vs apache2
|
||||
- [ ] **MySQL Socket** - Detect correct socket path
|
||||
- [ ] **Firewall Type** - Auto-detect running firewall
|
||||
- [ ] **PHP Installation** - Detect all available PHP versions
|
||||
- [ ] **Repository Config** - Detect EPEL, Remi, Ondrej PPAs
|
||||
|
||||
### Store Results in .sysref
|
||||
- Package installation status per OS
|
||||
- Service availability status
|
||||
- Path configuration status
|
||||
- Version support timeline
|
||||
- Known incompatibilities
|
||||
|
||||
---
|
||||
|
||||
## Phase 3: Control Panel Feature Auto-Discovery
|
||||
**Status**: ⏳ Planned
|
||||
|
||||
### Auto-Detect & Store for Each Panel
|
||||
|
||||
**cPanel**:
|
||||
- [ ] Installed EA4 modules
|
||||
- [ ] Installed plugins (AutoSSL, Immuify, etc.)
|
||||
- [ ] cPanel API version
|
||||
- [ ] License status
|
||||
|
||||
**Plesk**:
|
||||
- [ ] Installed extensions (Qmail, Nginx, etc.)
|
||||
- [ ] Module status (mail, web, dns, etc.)
|
||||
- [ ] License information
|
||||
- [ ] Version-specific features
|
||||
|
||||
**InterWorx**:
|
||||
- [ ] Installed modules
|
||||
- [ ] NodeWorx API availability
|
||||
- [ ] Custom plugins
|
||||
|
||||
**CloudLinux**:
|
||||
- [ ] LVE limits per account
|
||||
- [ ] alt-php selector availability
|
||||
- [ ] CloudLinux tools availability
|
||||
|
||||
### Store in .sysref as PLATFORM records
|
||||
|
||||
---
|
||||
|
||||
## Phase 4: Database & PHP Auto-Discovery
|
||||
**Status**: ⏳ Planned
|
||||
|
||||
### Automatic Database Data Collection
|
||||
- [ ] MySQL/MariaDB version and type
|
||||
- [ ] Percona Server detection
|
||||
- [ ] Database cluster detection (Galera)
|
||||
- [ ] Replication status
|
||||
- [ ] Backup tools detection (Acronis, Bacula)
|
||||
- [ ] Store database inventory in .sysref (already have DB records)
|
||||
|
||||
### Automatic PHP Detection (Already Partial)
|
||||
- [ ] All installed PHP versions (default + EA4 + Plesk + alt-php)
|
||||
- [ ] PHP module availability per version
|
||||
- [ ] PHP-FPM pool detection
|
||||
- [ ] OPcache status per version
|
||||
- [ ] Per-domain PHP version mapping (query from configs)
|
||||
|
||||
### Store PHP Data in .sysref
|
||||
- [ ] PHP versions available
|
||||
- [ ] Default PHP version
|
||||
- [ ] PHP modules per version
|
||||
- [ ] PHP-FPM pool count
|
||||
|
||||
---
|
||||
|
||||
## Phase 5: Service Status Auto-Collection
|
||||
**Status**: ⏳ Planned
|
||||
|
||||
### Automatic Service Health Check
|
||||
- [ ] Essential services (Apache/Nginx, MySQL, PHP-FPM, SSH)
|
||||
- [ ] Control panel services (cpanel, sw-engine, iworx)
|
||||
- [ ] Mail service (Exim/Postfix)
|
||||
- [ ] Firewall service
|
||||
- [ ] Store status in .sysref as SERVICE records:
|
||||
```
|
||||
SERVICE|apache|running|ok
|
||||
SERVICE|mysql|running|ok
|
||||
SERVICE|php-fpm|running|warning
|
||||
SERVICE|firewall|active|ok
|
||||
```
|
||||
|
||||
### Automatic Issue Detection
|
||||
- [ ] Missing critical services
|
||||
- [ ] Services that should be running but aren't
|
||||
- [ ] Port conflicts (multiple web servers on port 80)
|
||||
- [ ] Store findings as ISSUE records
|
||||
|
||||
---
|
||||
|
||||
## Phase 6: Reference Database Queries
|
||||
**Status**: ⏳ Planned
|
||||
|
||||
### Add Query Functions to reference-db.sh
|
||||
- [ ] `db_get_platform_info()` - Get all platform data
|
||||
- [ ] `db_get_compatibility_issues()` - Get known issues
|
||||
- [ ] `db_get_service_status()` - Get service states
|
||||
- [ ] `db_get_missing_packages()` - Get uninstalled packages
|
||||
- [ ] `db_get_recommendations()` - Get suggested actions
|
||||
|
||||
### Modules Use These to Make Decisions
|
||||
Instead of detecting themselves, modules query the data:
|
||||
- Modules call `db_get_platform_info()` to know the platform
|
||||
- Modules call `db_get_service_status()` before running
|
||||
- Modules check `db_get_missing_packages()` to suggest installs
|
||||
- Modules suggest actions based on `db_get_recommendations()`
|
||||
|
||||
---
|
||||
|
||||
## Implementation Priority
|
||||
|
||||
### IMMEDIATE (Phase 1 - Step 2-4)
|
||||
1. ⏳ Enhance reference-db.sh to collect platform data automatically
|
||||
2. ⏳ Add PLATFORM record type to .sysref format
|
||||
3. ⏳ Update startup_detection() to run comprehensive checks
|
||||
4. ⏳ Display platform findings during initialization
|
||||
|
||||
### NEAR TERM (Phase 2-3)
|
||||
5. ⏳ Add OS compatibility data collection to startup
|
||||
6. ⏳ Add control panel feature auto-discovery
|
||||
7. ⏳ Store all findings in .sysref.beta
|
||||
|
||||
### MEDIUM TERM (Phase 4-5)
|
||||
8. ⏳ Database & PHP data collection
|
||||
9. ⏳ Service status auto-detection
|
||||
10. ⏳ Issue detection and storage
|
||||
|
||||
### LONG TERM (Phase 6)
|
||||
11. ⏳ Query functions in reference-db.sh
|
||||
12. ⏳ Modules refactored to use cached data
|
||||
|
||||
---
|
||||
|
||||
## Testing Strategy
|
||||
|
||||
### By Control Panel
|
||||
- [ ] Test on cPanel/RHEL
|
||||
- [ ] Test on Plesk/Ubuntu
|
||||
- [ ] Test on InterWorx/Rocky
|
||||
- [ ] Test on Standalone/Debian
|
||||
|
||||
### By OS
|
||||
- [ ] CentOS 7/8/9
|
||||
- [ ] AlmaLinux 8/9
|
||||
- [ ] Rocky Linux 8/9
|
||||
- [ ] CloudLinux 7/8/9
|
||||
- [ ] Ubuntu 20.04/22.04/24.04
|
||||
- [ ] Debian 11/12
|
||||
|
||||
### Coverage Matrix
|
||||
- All 4 control panels × 6 OSes = 24 test combinations
|
||||
- Plus 4 web servers, 2 DB types, multiple PHP versions
|
||||
|
||||
---
|
||||
|
||||
## Success Criteria
|
||||
|
||||
1. ✅ Launcher detects all 4 control panels automatically
|
||||
2. ✅ Launcher detects all 6 OS types automatically
|
||||
3. ✅ All platform data stored in .sysref.beta on startup
|
||||
4. ✅ Platform summary displayed during initialization
|
||||
5. ✅ Critical issues flagged (missing packages, incompatibilities)
|
||||
6. ✅ Modules query cached data instead of re-detecting
|
||||
7. ✅ No interactive menus - launcher is pure data collection
|
||||
|
||||
---
|
||||
|
||||
## Files to Create/Modify
|
||||
|
||||
### Enhanced Files
|
||||
- `lib/reference-db.sh` - Add PLATFORM record collection and queries
|
||||
- `lib/system-detect.sh` - Comprehensive automatic detection
|
||||
- `launcher.sh` - Enhanced startup_detection() to store all findings
|
||||
|
||||
### New Functions in reference-db.sh
|
||||
- `collect_platform_data()` - Gather all platform info
|
||||
- `db_get_platform_info()` - Query platform data
|
||||
- `db_get_compatibility_issues()` - Query issues found
|
||||
- `db_get_service_status()` - Query service states
|
||||
- `db_get_missing_packages()` - Query missing packages
|
||||
|
||||
### Standalone Diagnostic Modules (Optional)
|
||||
- `modules/diagnostics/platform-health-check.sh` - For manual health checks
|
||||
- `modules/diagnostics/os-compatibility-check.sh` - For manual compatibility checks
|
||||
- Note: These are optional modules for users to run manually, not part of launcher
|
||||
|
||||
---
|
||||
|
||||
## Knowledge Base Integration
|
||||
|
||||
This roadmap uses the comprehensive knowledge base at `/root/.claude/knowledge-base/`:
|
||||
- `control-panels/*/` - Platform-specific implementation details
|
||||
- `operating-systems/*/` - OS-specific configuration and differences
|
||||
- `databases/*/` - Database detection and management
|
||||
- `shared-systems/php-version-detection.md` - PHP multi-version handling
|
||||
|
||||
---
|
||||
|
||||
**Last Updated**: 2026-03-19
|
||||
**Created By**: Claude Code - Dev Session
|
||||
**Status**: Active Development
|
||||
@@ -1,386 +1,56 @@
|
||||
# ⚡ Linux Server Management Toolkit
|
||||
# 🧪 Linux Server Toolkit - DEV Branch
|
||||
|
||||
Comprehensive multi-panel server management suite supporting cPanel, InterWorx, Plesk, and standalone Apache with modular architecture and intelligent security features.
|
||||
**STATUS**: 🚀 Development & Testing Branch (Separate from Production)
|
||||
|
||||
## 📦 Directory Structure
|
||||
> This is the **`dev` branch** for testing, development, and experimentation.
|
||||
> Changes here are **isolated from production** and can be safely tested before merging to main.
|
||||
|
||||
```
|
||||
server-toolkit/
|
||||
├── launcher.sh # Main menu system
|
||||
├── README.md # This file
|
||||
│
|
||||
├── modules/ # Modular scripts organized by category
|
||||
│ │
|
||||
│ ├── diagnostics/ # 🔍 System Diagnostics
|
||||
│ │ ├── system-health-check.sh # Comprehensive health analysis
|
||||
│ │ └── loadwatch-analyzer.sh # Historical system health analysis (1h/6h/24h/7d/30d)
|
||||
│ │
|
||||
│ ├── security/ # 🛡️ Security & Monitoring
|
||||
│ │ ├── live-attack-monitor-v2.sh # Real-time SOC dashboard with auto-mitigation
|
||||
│ │ ├── live-attack-monitor.sh # Legacy attack monitoring (deprecated)
|
||||
│ │ ├── bot-analyzer.sh # Full bot/threat analysis with pattern detection
|
||||
│ │ ├── bot-blocker.sh # Apache User-Agent blocking manager (NEW!)
|
||||
│ │ ├── malware-scanner.sh # ImunifyAV, ClamAV, Maldet integration
|
||||
│ │ ├── ip-reputation-manager.sh # Centralized IP reputation tracking
|
||||
│ │ ├── ssh-attack-monitor.sh # SSH brute force detection
|
||||
│ │ ├── web-traffic-monitor.sh # Web traffic monitoring
|
||||
│ │ ├── firewall-activity-monitor.sh # CSF/iptables monitoring
|
||||
│ │ ├── enable-cphulk.sh # cPHulk enablement with CSF whitelist import
|
||||
│ │ ├── optimize-ct-limit.sh # Connection tracking optimization
|
||||
│ │ ├── tail-apache-access.sh # Live Apache access log viewer
|
||||
│ │ ├── tail-apache-error.sh # Live Apache error log viewer
|
||||
│ │ ├── tail-mail-log.sh # Live mail log viewer
|
||||
│ │ └── tail-secure-log.sh # Live secure/auth log viewer
|
||||
│ │
|
||||
│ ├── backup/ # 💾 Backup & Recovery
|
||||
│ │ ├── acronis-*.sh # Acronis Cyber Protect (17 management scripts)
|
||||
│ │ │ ├── acronis-install.sh # Install Acronis agent
|
||||
│ │ │ ├── acronis-register.sh # Register agent with cloud
|
||||
│ │ │ ├── acronis-configure.sh # Configure backup plans
|
||||
│ │ │ ├── acronis-status.sh # Agent status check
|
||||
│ │ │ ├── acronis-backup-status.sh # Backup job status
|
||||
│ │ │ ├── acronis-manual-backup.sh # Trigger manual backup
|
||||
│ │ │ ├── acronis-restore.sh # Restore from backup
|
||||
│ │ │ ├── acronis-update.sh # Update agent
|
||||
│ │ │ ├── acronis-uninstall.sh # Remove agent
|
||||
│ │ │ ├── acronis-troubleshoot.sh # Diagnostics and repair
|
||||
│ │ │ └── (7 more utilities)
|
||||
│ │ └── mysql-restore-to-sql.sh # MySQL/MariaDB database restore & dump tool
|
||||
│ │
|
||||
│ ├── website/ # 🌐 Website Diagnostics
|
||||
│ │ ├── website-error-analyzer.sh # Comprehensive error analysis
|
||||
│ │ ├── 500-error-tracker.sh # Fast 500 error tracking
|
||||
│ │ ├── cloudflare-detector.sh # Cloudflare domain detection (NEW!)
|
||||
│ │ ├── wordpress-menu.sh # WordPress tools submenu
|
||||
│ │ └── wordpress/
|
||||
│ │ └── wordpress-cron-manager.sh # WP-Cron diagnostics and management
|
||||
│ │
|
||||
│ ├── email/ # 📧 Email Diagnostics & Management
|
||||
│ │ ├── email-diagnostics.sh # Comprehensive email diagnostics
|
||||
│ │ ├── mail-log-analyzer.sh # Mail log analysis
|
||||
│ │ ├── mail-queue-inspector.sh # Exim queue inspection
|
||||
│ │ ├── flush-mail-queue.sh # Flush stuck mail queue
|
||||
│ │ ├── blacklist-check.sh # RBL/DNSBL blacklist checker
|
||||
│ │ ├── spf-dkim-dmarc-check.sh # Email authentication validator
|
||||
│ │ ├── deliverability-test.sh # Email delivery testing
|
||||
│ │ ├── smtp-connection-test.sh # SMTP connectivity checker
|
||||
│ │ └── clean-mailboxes.sh # Mailbox cleanup utility
|
||||
│ │
|
||||
│ ├── performance/ # 📊 Performance Analysis
|
||||
│ │ ├── nginx-varnish-manager.sh # Nginx + Varnish Cache Manager
|
||||
│ │ ├── php-optimizer.sh # PHP Configuration Optimizer
|
||||
│ │ ├── hardware-health-check.sh # Hardware diagnostics (SMART, sensors)
|
||||
│ │ ├── mysql-query-analyzer.sh # MySQL performance analysis
|
||||
│ │ └── network-bandwidth-analyzer.sh # Network analysis
|
||||
│ │
|
||||
│ └── maintenance/ # 🧹 System Maintenance
|
||||
│ ├── cleanup-toolkit-data.sh # Clean temporary toolkit data
|
||||
│ └── disk-space-analyzer.sh # Disk usage analysis and recommendations
|
||||
│
|
||||
├── lib/ # Shared libraries
|
||||
│ ├── common-functions.sh # Reusable UI, logging, and utility functions
|
||||
│ ├── system-detect.sh # Multi-panel system detection (cPanel/Plesk/InterWorx)
|
||||
│ ├── user-manager.sh # User account management across panels
|
||||
│ ├── domain-discovery.sh # Multi-panel domain discovery
|
||||
│ ├── reference-db.sh # Cross-module intelligence sharing (.sysref)
|
||||
│ │
|
||||
│ ├── attack-patterns.sh # Attack pattern definitions and scoring
|
||||
│ ├── attack-signatures.sh # 24+ attack signature detection rules
|
||||
│ ├── bot-signatures.sh # Bot classification (legitimate vs malicious)
|
||||
│ ├── http-attack-analyzer.sh # HTTP attack analysis engine
|
||||
│ ├── threat-intelligence.sh # Threat scoring and intelligence aggregation
|
||||
│ ├── ip-reputation.sh # IP reputation tracking and querying
|
||||
│ ├── rate-anomaly-detector.sh # Request rate anomaly detection
|
||||
│ │
|
||||
│ ├── mysql-analyzer.sh # MySQL performance utilities
|
||||
│ ├── php-detector.sh # PHP configuration detection
|
||||
│ ├── php-analyzer.sh # PHP performance analysis engine
|
||||
│ ├── php-config-manager.sh # PHP config backup/restore/modification
|
||||
│ ├── email-functions.sh # Email-related utilities
|
||||
│ └── plesk-helpers.sh # Plesk-specific helper functions
|
||||
│
|
||||
├── config/ # Configuration files
|
||||
│ ├── settings.conf # Main configuration
|
||||
│ ├── whitelist-ips.txt # IP whitelist
|
||||
│ └── whitelist-user-agents.txt # User-Agent whitelist
|
||||
│
|
||||
└── tools/ # Utility scripts
|
||||
├── diagnostic-report.sh # Generate comprehensive system reports
|
||||
├── toolkit-qa-check.sh # Quality assurance checker (88 tests)
|
||||
├── qa-functional-tests.sh # Functional testing suite
|
||||
├── update-attack-signatures.sh # Update attack signature database
|
||||
├── analyze-historical-attacks.sh # Historical attack pattern analysis
|
||||
└── erase-toolkit-traces.sh # Complete toolkit removal utility
|
||||
```
|
||||
---
|
||||
|
||||
## 🚀 Quick Start
|
||||
|
||||
### Installation & Running
|
||||
**One command - pulls dev branch with YELLOW ⚠️ BETA banner:**
|
||||
|
||||
**One command - automatic cleanup:**
|
||||
```bash
|
||||
curl -sL https://git.mull.lol/cschantz/Linux-Server-Management-Toolkit/archive/main.tar.gz | tar xz && source linux-server-management-toolkit/run.sh
|
||||
curl -sL https://git.mull.lol/cschantz/Linux-Server-Management-Toolkit/archive/dev.tar.gz | tar xz && source linux-server-management-toolkit/run.sh
|
||||
```
|
||||
|
||||
When exiting (option 0), answer "yes" and cleanup happens automatically - no extra steps.
|
||||
|
||||
Or if already downloaded:
|
||||
```bash
|
||||
source /root/linux-server-management-toolkit/run.sh
|
||||
```
|
||||
---
|
||||
|
||||
## ✨ Key Features
|
||||
## 📍 Key Differences (Dev vs Production)
|
||||
|
||||
### 🛡️ Security & Monitoring
|
||||
- **Live Attack Monitor v2**: Real-time SOC dashboard with intelligent auto-blocking
|
||||
- **Auto-Mitigation Engine**: Automatic blocking at Score >= 80 (critical) or >= 100 (instant)
|
||||
- **Distributed Attack Detection**: Blocks coordinated attacks (5+ IPs, 25+ for subnet-level blocking)
|
||||
- **24 Attack Signatures**: RCE, SQL injection, XSS, path traversal, SSRF, XXE, credential stuffing, and more
|
||||
- **IPset Integration**: Kernel-level blocking for instant response (batched for performance)
|
||||
- **Bot Classification**: Distinguishes legitimate bots (Google, Bing) from AI scrapers and attack tools
|
||||
- **Attack Scoring System**: Dynamic scoring with volume bonuses and attack severity weighting
|
||||
- **Multi-Source Monitoring**: HTTP, SSH, Email, FTP, Database, Network attacks in unified dashboard
|
||||
- **Bot Blocker**: Apache User-Agent blocking manager with one-click enable/disable
|
||||
- Blocks 24+ malicious bots: security scanners, AI scrapers, SEO bots, vulnerability scanners
|
||||
- Safe Apache restart with automatic rollback on syntax errors
|
||||
- Configuration backup and restore capability
|
||||
- Syntax validation before applying changes
|
||||
- **Bot & Traffic Analyzer**: Full bot/threat analysis with pattern detection
|
||||
- **IP Reputation Manager**: Centralized cross-module IP intelligence with query/tracking
|
||||
- **Malware Scanner**: ImunifyAV, ClamAV, and Maldet integration with auto-installation
|
||||
- **cPHulk Integration**: Auto-imports CSF whitelists from all sources
|
||||
- **Specialized Monitors**: SSH attacks, web traffic, firewall activity
|
||||
- **Log Viewers**: Live tail for Apache access/error, mail, and security logs
|
||||
- **No System Pollution**: All data stored in /tmp (auto-cleanup on reboot, no /var/lib/ files)
|
||||
|
||||
### 💾 Backup & Recovery
|
||||
- **Acronis Cyber Protect**: Complete agent management (install, update, configure, monitor, troubleshoot)
|
||||
- **MySQL Database Restore Tool**: Advanced recovery from file-based backups with intelligent Force Recovery
|
||||
- Multi-control panel support (cPanel, InterWorx, Plesk, standalone)
|
||||
- Smart detection for selective restore scenarios
|
||||
- Safe single-database extraction from full backups
|
||||
- Clean SQL export for production import
|
||||
|
||||
### 🌐 Website Diagnostics
|
||||
- **Error Analysis**: Comprehensive website error detection and troubleshooting
|
||||
- **500 Error Tracking**: Detailed analysis of application errors
|
||||
- **Cloudflare Detector**: Identify domains using Cloudflare with datacenter locations
|
||||
- Distinguishes between Proxied (orange cloud) and DNS-Only (gray cloud)
|
||||
- Shows Cloudflare datacenter locations (Chicago, Los Angeles, etc.)
|
||||
- Detects NXDOMAIN domains that need cleanup
|
||||
- Triple validation: nameservers, IP ranges, CF-RAY headers
|
||||
- Helps debug regional outages and cache issues
|
||||
- **WordPress Tools**: WP-Cron manager for WordPress diagnostics
|
||||
- **Log Integration**: Apache, PHP-FPM, cPanel error log analysis
|
||||
- **Smart Recommendations**: Context-aware suggestions for fixing issues
|
||||
|
||||
### 📧 Email Diagnostics & Management
|
||||
- **Comprehensive Email Diagnostics**: Full email system health check
|
||||
- **Mail Log Analyzer**: Parse and analyze mail logs for delivery issues
|
||||
- **Mail Queue Inspector**: Inspect stuck/frozen mail queue with filtering
|
||||
- **Flush Mail Queue**: Clear stuck messages from Exim queue
|
||||
- **Blacklist Checker**: Check server IP against 50+ RBL/DNSBL lists
|
||||
- **SPF/DKIM/DMARC Validator**: Verify email authentication records
|
||||
- **Deliverability Testing**: Send test emails and verify delivery
|
||||
- **SMTP Connection Test**: Test SMTP connectivity and authentication
|
||||
- **Mailbox Cleanup**: Clean up mailbox quotas and old messages
|
||||
|
||||
### 🔍 Performance & Diagnostics
|
||||
- **System Health Check**: Comprehensive hardware, services, and security posture analysis
|
||||
- **Loadwatch Analyzer**: Historical system health analysis (1h/6h/24h/7d/30d time ranges)
|
||||
- **MySQL Query Analyzer**: Slow query detection and optimization recommendations
|
||||
- **Network & Bandwidth Analyzer**: Traffic analysis and top consumers
|
||||
- **Hardware Health Check**: SMART, memory, CPU sensors
|
||||
- **PHP Configuration Optimizer**: Per-domain PHP-FPM tuning with auto-backup and zero downtime
|
||||
- **Nginx + Varnish Cache Manager**: Complete Varnish cache installation and management for cPanel
|
||||
- **99.5% Stock Compliance**: Only settings.json modified (RPM config file)
|
||||
- **Full HTTP + HTTPS Caching**: SSL termination at Nginx, HTTP backends to Varnish
|
||||
- **Update Survival**: Proven to survive ea-nginx package updates and rebuilds
|
||||
- **93 Static File Types**: Images, fonts, CSS/JS, videos, documents, archives, and more
|
||||
- **Self-Healing**: 8 automatic fixes including config-script integrity checks
|
||||
- **Complete Backup/Revert**: Full restoration to pre-installation state
|
||||
- **Smart Bypasses**: AutoSSL, cPanel services, admin pages, POST requests
|
||||
- **Automated Audit**: 44 tests verify configuration and functionality
|
||||
- **Multi-Panel Support**: cPanel, InterWorx, Plesk, standalone Apache
|
||||
|
||||
### 📊 Session Intelligence
|
||||
- **Reference Database**: Cross-module data sharing (.sysref)
|
||||
- **No Historical Tracking**: Session-based intelligence only
|
||||
- **"Download, Run, Fix, Delete"**: Designed for one-time troubleshooting
|
||||
|
||||
## 🎯 Usage Examples
|
||||
|
||||
### Quick System Health Check
|
||||
|
||||
```bash
|
||||
bash launcher.sh
|
||||
# Select: 1) System Health Check
|
||||
```
|
||||
|
||||
### Security Analysis & Monitoring
|
||||
|
||||
```bash
|
||||
bash launcher.sh
|
||||
# Select: 2) Security & Monitoring
|
||||
# Options:
|
||||
# - Live Attack Monitor v2 (real-time SOC dashboard with auto-blocking)
|
||||
# * Monitors HTTP, SSH, Email, FTP, Database, Network attacks
|
||||
# * Auto-blocks IPs at Score >= 80 (critical) or >= 100 (instant)
|
||||
# * Detects distributed attacks (5+ IPs) and blocks all participants
|
||||
# * Subnet blocking when 25+ IPs attack from same /24 range
|
||||
# * IPset kernel-level blocking for instant response
|
||||
# - Bot Blocker (Apache User-Agent blocking)
|
||||
# * One-click enable/disable
|
||||
# * Blocks 24+ malicious bots (scanners, scrapers, AI bots)
|
||||
# * Safe Apache restart with syntax validation
|
||||
# * Automatic backup and restore
|
||||
# - Bot & Traffic Analyzer (full scan or 1-hour quick scan)
|
||||
# - IP Reputation Manager
|
||||
# - Malware Scanner (ImunifyAV, ClamAV, Maldet with auto-install)
|
||||
# - Enable cPHulk Protection
|
||||
# - SSH/Web/Firewall attack monitors
|
||||
```
|
||||
|
||||
### Website Diagnostics
|
||||
|
||||
```bash
|
||||
bash launcher.sh
|
||||
# Select: 3) Website Diagnostics
|
||||
# Options:
|
||||
# - Website Error Analyzer (comprehensive error detection)
|
||||
# - Fast 500 Error Tracker (500 errors only)
|
||||
# - Cloudflare Detector
|
||||
# * Scan all domains or check single domain
|
||||
# * Shows Proxied (orange cloud) vs DNS-Only (gray cloud)
|
||||
# * Displays datacenter locations (Chicago, LA, etc.)
|
||||
# * Identifies NXDOMAIN domains that need cleanup
|
||||
# - WordPress Tools (WP-Cron manager)
|
||||
```
|
||||
|
||||
### Email Diagnostics
|
||||
|
||||
```bash
|
||||
bash launcher.sh
|
||||
# Select: 6) Email Diagnostics
|
||||
# Options:
|
||||
# - Comprehensive Email Diagnostics
|
||||
# - Mail Log Analyzer
|
||||
# - Mail Queue Inspector
|
||||
# - Blacklist Checker (RBL/DNSBL)
|
||||
# - SPF/DKIM/DMARC Validator
|
||||
# - Deliverability Testing
|
||||
# - SMTP Connection Test
|
||||
# - Flush Mail Queue
|
||||
# - Clean Mailboxes
|
||||
```
|
||||
|
||||
### Performance Analysis
|
||||
|
||||
```bash
|
||||
bash launcher.sh
|
||||
# Select: 4) Performance Analysis
|
||||
# Options:
|
||||
# - MySQL Query Analyzer (slow query detection)
|
||||
# - Network & Bandwidth Analyzer
|
||||
# - Hardware Health Check
|
||||
# - PHP Configuration Optimizer (per-domain tuning)
|
||||
# - Nginx + Varnish Cache Manager (transparent caching layer)
|
||||
# - Loadwatch Health Analyzer (1h/6h/24h/7d/30d analysis)
|
||||
```
|
||||
|
||||
### Backup & Recovery
|
||||
|
||||
```bash
|
||||
bash launcher.sh
|
||||
# Select: 5) Backup & Recovery
|
||||
# Options:
|
||||
# - Acronis Management (complete backup interface)
|
||||
# - MySQL File Restore (convert DB files to SQL)
|
||||
```
|
||||
|
||||
## 🔧 Configuration
|
||||
|
||||
Edit the configuration file:
|
||||
```bash
|
||||
nano /root/server-toolkit/config/settings.conf
|
||||
```
|
||||
|
||||
## 🔒 Security Considerations
|
||||
|
||||
- **Run as root**: Most modules require root access
|
||||
- **Credentials stored safely**: Git credentials in ~/.git-credentials (outside project)
|
||||
- **No sensitive data in repo**: .gitignore excludes keys, tokens, credentials
|
||||
- **Test first**: Try on non-production environments first
|
||||
|
||||
## 📊 Recent Updates (v2.3)
|
||||
|
||||
### January 2026 Highlights - Performance & Security
|
||||
|
||||
#### Week 4 - Cloudflare & Bot Management
|
||||
- **Cloudflare Detector**: Advanced Cloudflare domain detection with location tracking (NEW!)
|
||||
- Distinguishes between Proxied (orange cloud) and DNS-Only (gray cloud) configurations
|
||||
- Shows datacenter locations with city names (Chicago, Los Angeles, etc.)
|
||||
- NXDOMAIN detection for identifying old/deleted domains
|
||||
- Triple validation: nameservers, IP range matching, CF-RAY header analysis
|
||||
- Helps debug regional outages and identify misconfigured domains
|
||||
- **Bot Blocker**: Apache User-Agent blocking manager for malicious bots (NEW!)
|
||||
- One-click enable/disable for 24+ malicious user-agents
|
||||
- Blocks: security scanners (nikto, nmap), AI scrapers (GPTBot, Claude-Web), SEO bots
|
||||
- Safe Apache restart with syntax validation and automatic rollback
|
||||
- Configuration backup/restore with timestamped backups
|
||||
- Real-time testing to verify blocking effectiveness
|
||||
|
||||
#### Week 3 - Varnish Cache & Auto-Mitigation
|
||||
- **Nginx + Varnish Cache Manager**: Complete Varnish cache installation system
|
||||
- 99.5% stock compliance (only settings.json modified)
|
||||
- Full HTTP + HTTPS caching via SSL termination and config-script automation
|
||||
- Proven update survival (RPM config file preservation)
|
||||
- 93 static file types cached
|
||||
- 8 self-healing auto-fixes
|
||||
- Complete backup/revert capability
|
||||
- Automated 44-test audit system
|
||||
- **Auto-Mitigation Engine**: Automatic IP blocking at Score >= 80/100 via IPset (kernel-level)
|
||||
- **Distributed Attack Blocking**: Detects and blocks coordinated botnet attacks (5+ IPs)
|
||||
- **Subnet-Level Blocking**: Blocks entire /24 subnets when 25+ IPs attack from same range
|
||||
- **Attack Signature Improvements**: Fixed false positives in HTTP_SMUGGLING and SUSPICIOUS_UA detection
|
||||
- **Function Exports**: Fixed critical bug preventing HTTP attack auto-blocking in subshells
|
||||
- **No System Pollution**: Moved all persistent data from /var/lib/ to /tmp/ for clean removal
|
||||
- **Maldet Auto-Installation**: Enhanced Plesk support with improved directory detection
|
||||
|
||||
### December 2025 Highlights
|
||||
- **Launcher Cleanup**: Removed 90+ phantom menu items, reduced from 1,576 to 574 lines (64% reduction)
|
||||
- **Performance**: Cached domain status checks save ~5 minutes on 50-domain servers
|
||||
- **MySQL Restore Tool**: Advanced database recovery with intelligent Force Recovery detection
|
||||
- **Multi-Panel**: Full support for cPanel, InterWorx, Plesk, standalone Apache
|
||||
|
||||
### Current Feature Set
|
||||
- **60+ Working Modules**: Security (14), Website (5), Email (9), Performance (5), Backup (18), Diagnostics (2), Maintenance (2)
|
||||
- **18 Shared Libraries**: Attack detection, bot classification, system detection, PHP/MySQL analysis
|
||||
- **6 Utility Tools**: QA checker (88 tests), attack signature updater, diagnostic reports
|
||||
- **24 Attack Signatures**: RCE, SQL Injection, XSS, Path Traversal, SSRF, XXE, and more
|
||||
- **Bot Management**: Auto-blocking malicious bots via Apache User-Agent filtering
|
||||
- **Cloudflare Integration**: Advanced detection with datacenter location tracking
|
||||
- **Varnish Cache**: Transparent caching layer with 99.5% stock compliance
|
||||
- **Email Diagnostics**: Complete email troubleshooting suite with RBL checking
|
||||
- **Reference Database**: 1-hour cached status for cross-module intelligence
|
||||
- **Zero Hardcoded Paths**: Automatic control panel detection and path abstraction
|
||||
- **Self-Contained Design**: Delete toolkit directory = all data removed (no system files)
|
||||
|
||||
## 🙏 Credits
|
||||
|
||||
Built for comprehensive cPanel/Linux server management with a focus on security and intelligent automation.
|
||||
| Feature | Dev Branch | Production |
|
||||
|---------|-----------|-----------|
|
||||
| **Cache** | `.sysref.beta` | `.sysref` |
|
||||
| **Version** | `2.1.0-BETA` | `2.1.0` |
|
||||
| **Banner** | 🟨 Yellow (⚠️) | 🔵 Cyan |
|
||||
| **Git Branch** | `dev` | `main` |
|
||||
| **Purpose** | Testing & Development | Stable/Production |
|
||||
|
||||
---
|
||||
|
||||
**Version**: 2.3.0
|
||||
**Last Updated**: January 28, 2026
|
||||
## 📦 Features
|
||||
|
||||
Comprehensive multi-panel server management suite supporting cPanel, InterWorx, Plesk, and standalone Apache with:
|
||||
|
||||
- 🛡️ **Security & Monitoring**: Live attack monitor, bot blocker, malware scanner, IP reputation
|
||||
- 💾 **Backup & Recovery**: Acronis management, MySQL database restore
|
||||
- 🌐 **Website Diagnostics**: Error analysis, WordPress tools, Cloudflare detection
|
||||
- 📧 **Email Diagnostics**: Mail queue, blacklist checker, SPF/DKIM/DMARC validation
|
||||
- 📊 **Performance Analysis**: MySQL optimization, PHP tuning, hardware health, Varnish cache
|
||||
- 🔍 **System Diagnostics**: Health checks, loadwatch analysis, bandwidth monitoring
|
||||
|
||||
---
|
||||
|
||||
## 📖 Documentation
|
||||
|
||||
For detailed documentation, see the main repository:
|
||||
https://git.mull.lol/cschantz/Linux-Server-Management-Toolkit
|
||||
|
||||
---
|
||||
|
||||
**Version**: 2.1.0-BETA
|
||||
**Repository**: https://git.mull.lol/cschantz/Linux-Server-Management-Toolkit
|
||||
|
||||
## 📈 Statistics
|
||||
|
||||
- **Total Modules**: 60+
|
||||
- **Shared Libraries**: 18
|
||||
- **Attack Signatures**: 24+
|
||||
- **Supported Panels**: cPanel, InterWorx, Plesk, Standalone
|
||||
- **Lines of Code**: ~30,000+
|
||||
- **QA Tests**: 88 automated checks
|
||||
**Branch**: dev
|
||||
|
||||
+104
-44
@@ -1,16 +1,17 @@
|
||||
#!/bin/bash
|
||||
|
||||
#############################################################################
|
||||
# Server Management Toolkit - Main Launcher
|
||||
# Version: 2.1
|
||||
# Server Management Toolkit - BETA/DEV Version
|
||||
# Version: 2.1-beta
|
||||
#
|
||||
# Streamlined menu showing only implemented features
|
||||
# Development and testing version - SEPARATE FROM PRODUCTION
|
||||
# Uses independent cache, config, and data directories
|
||||
#############################################################################
|
||||
|
||||
set -eo pipefail
|
||||
|
||||
# Configuration
|
||||
SUITE_VERSION="2.1.0"
|
||||
SUITE_VERSION="2.1.0-BETA"
|
||||
BASE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
MODULES_DIR="$BASE_DIR/modules"
|
||||
LIB_DIR="$BASE_DIR/lib"
|
||||
@@ -36,10 +37,12 @@ NC='\033[0m'
|
||||
# Banner
|
||||
show_banner() {
|
||||
clear
|
||||
echo -e "${CYAN}═══════════════════════════════════════════════════════════════${NC}"
|
||||
echo -e "${CYAN} ⚡ Server Management Toolkit v${SUITE_VERSION}${NC}"
|
||||
echo -e "${CYAN} Complete cPanel/Linux Server Administration Suite${NC}"
|
||||
echo -e "${CYAN}═══════════════════════════════════════════════════════════════${NC}"
|
||||
echo -e "${YELLOW}═══════════════════════════════════════════════════════════════${NC}"
|
||||
echo -e "${YELLOW} ⚠️ Server Management Toolkit v${SUITE_VERSION}${NC}"
|
||||
echo -e "${YELLOW} 🧪 BETA/DEV VERSION - Testing & Development${NC}"
|
||||
echo -e "${YELLOW} Complete cPanel/Linux Server Administration Suite${NC}"
|
||||
echo -e "${YELLOW}═══════════════════════════════════════════════════════════════${NC}"
|
||||
echo -e "${MAGENTA} ⚠️ This is a SEPARATE INSTANCE from production${NC}"
|
||||
echo ""
|
||||
}
|
||||
|
||||
@@ -53,7 +56,7 @@ run_module() {
|
||||
echo ""
|
||||
echo -e "${RED}✗ Module not found: $category/$module${NC}"
|
||||
echo ""
|
||||
read -p "Press Enter to continue..." < /dev/tty 2>/dev/null || true
|
||||
read -p "Press Enter to continue..."
|
||||
return 1
|
||||
fi
|
||||
|
||||
@@ -74,7 +77,80 @@ run_module() {
|
||||
echo -e "${RED}✗ Exited with code: $exit_code${NC}"
|
||||
fi
|
||||
echo ""
|
||||
read -p "Press Enter to continue..." < /dev/tty 2>/dev/null || true
|
||||
read -p "Press Enter to continue..."
|
||||
}
|
||||
|
||||
#############################################################################
|
||||
# TERMINAL INPUT HELPER
|
||||
#############################################################################
|
||||
|
||||
# Safe read that handles both interactive and piped scenarios
|
||||
safe_read() {
|
||||
local prompt="$1"
|
||||
local varname="$2"
|
||||
|
||||
if [ -t 0 ]; then
|
||||
# Terminal available, normal read
|
||||
read -p "$prompt" "$varname"
|
||||
else
|
||||
# No terminal (piped stdin), accept input or skip
|
||||
read -p "$prompt" "$varname" 2>/dev/null || eval "$varname=''"
|
||||
fi
|
||||
}
|
||||
|
||||
#############################################################################
|
||||
# SYSTEM INFO DISPLAY (Quick View)
|
||||
#############################################################################
|
||||
|
||||
show_system_overview() {
|
||||
# Only show if detection is complete
|
||||
if [ -z "${SYS_DETECTION_COMPLETE:-}" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo -e "${BOLD}🖥️ System Information:${NC}"
|
||||
|
||||
# Control Panel
|
||||
if [ "$SYS_CONTROL_PANEL" != "none" ]; then
|
||||
echo -n " Control Panel: ${CYAN}${SYS_CONTROL_PANEL^^}${NC}"
|
||||
[ -n "$SYS_CONTROL_PANEL_VERSION" ] && echo -n " v${SYS_CONTROL_PANEL_VERSION}" || echo -n " (version unknown)"
|
||||
echo ""
|
||||
else
|
||||
echo " Control Panel: ${CYAN}Standalone${NC} (no control panel)"
|
||||
fi
|
||||
|
||||
# OS
|
||||
echo " OS: ${CYAN}${SYS_OS_TYPE^^}${NC} ${SYS_OS_VERSION}"
|
||||
[ "${SYS_CLOUDLINUX:-}" = "yes" ] && echo -e " ${CYAN}➜${NC} CloudLinux detected"
|
||||
|
||||
# Web Server
|
||||
echo -n " Web Server: ${CYAN}${SYS_WEB_SERVER^^}${NC}"
|
||||
[ -n "$SYS_WEB_SERVER_VERSION" ] && echo " v${SYS_WEB_SERVER_VERSION}" || echo ""
|
||||
|
||||
# Database
|
||||
if [ "$SYS_DB_TYPE" != "none" ]; then
|
||||
echo -n " Database: ${CYAN}${SYS_DB_TYPE^^}${NC}"
|
||||
[ -n "$SYS_DB_VERSION" ] && echo " v${SYS_DB_VERSION}" || echo ""
|
||||
fi
|
||||
|
||||
# PHP Versions
|
||||
if [ ${#SYS_PHP_VERSIONS[@]} -gt 0 ]; then
|
||||
echo -n " PHP Versions: ${CYAN}"
|
||||
printf '%s, ' "${SYS_PHP_VERSIONS[@]}" | sed 's/, $//'
|
||||
echo "${NC}"
|
||||
fi
|
||||
|
||||
# Firewall
|
||||
if [ "$SYS_FIREWALL" != "none" ]; then
|
||||
echo -n " Firewall: ${CYAN}${SYS_FIREWALL^^}${NC}"
|
||||
[ "$SYS_FIREWALL_ACTIVE" = "yes" ] && echo " (${GREEN}active${NC})" || echo " (${YELLOW}inactive${NC})"
|
||||
fi
|
||||
|
||||
# Cloudflare
|
||||
[ "$SYS_CLOUDFLARE_ACTIVE" = "yes" ] && echo " Cloudflare: ${YELLOW}Detected${NC}"
|
||||
|
||||
echo ""
|
||||
}
|
||||
|
||||
#############################################################################
|
||||
@@ -84,6 +160,9 @@ run_module() {
|
||||
show_main_menu() {
|
||||
show_banner
|
||||
|
||||
# Show quick system overview if detection is complete
|
||||
[ -n "${SYS_DETECTION_COMPLETE:-}" ] && show_system_overview
|
||||
|
||||
echo -e "${BOLD}Quick Diagnostics:${NC}"
|
||||
echo ""
|
||||
echo -e " ${MAGENTA}1)${NC} 🏥 System Health Check - Full server diagnostics"
|
||||
@@ -135,9 +214,7 @@ show_threat_analysis_menu() {
|
||||
handle_threat_analysis_menu() {
|
||||
while true; do
|
||||
show_threat_analysis_menu
|
||||
if ! read -r choice 2>/dev/null </dev/tty; then
|
||||
return 0
|
||||
fi
|
||||
read -r choice
|
||||
|
||||
case $choice in
|
||||
1) run_module "security" "bot-analyzer.sh" ;;
|
||||
@@ -171,9 +248,7 @@ show_live_monitoring_menu() {
|
||||
handle_live_monitoring_menu() {
|
||||
while true; do
|
||||
show_live_monitoring_menu
|
||||
if ! read -r choice 2>/dev/null </dev/tty; then
|
||||
return 0
|
||||
fi
|
||||
read -r choice
|
||||
|
||||
case $choice in
|
||||
1) run_module "security" "live-attack-monitor.sh" ;;
|
||||
@@ -205,9 +280,7 @@ show_log_viewers_menu() {
|
||||
handle_log_viewers_menu() {
|
||||
while true; do
|
||||
show_log_viewers_menu
|
||||
if ! read -r choice 2>/dev/null </dev/tty; then
|
||||
return 0
|
||||
fi
|
||||
read -r choice
|
||||
|
||||
case $choice in
|
||||
1) run_module "security" "tail-apache-access.sh" ;;
|
||||
@@ -238,9 +311,7 @@ show_security_actions_menu() {
|
||||
handle_security_actions_menu() {
|
||||
while true; do
|
||||
show_security_actions_menu
|
||||
if ! read -r choice 2>/dev/null </dev/tty; then
|
||||
return 0
|
||||
fi
|
||||
read -r choice
|
||||
|
||||
case $choice in
|
||||
1) run_module "security" "enable-cphulk.sh" ;;
|
||||
@@ -274,9 +345,7 @@ show_security_menu() {
|
||||
handle_security_menu() {
|
||||
while true; do
|
||||
show_security_menu
|
||||
if ! read -r choice 2>/dev/null </dev/tty; then
|
||||
return 0
|
||||
fi
|
||||
read -r choice
|
||||
|
||||
case $choice in
|
||||
1) handle_threat_analysis_menu ;;
|
||||
@@ -324,9 +393,7 @@ show_website_menu() {
|
||||
handle_website_menu() {
|
||||
while true; do
|
||||
show_website_menu
|
||||
if ! read -r choice 2>/dev/null </dev/tty; then
|
||||
return 0
|
||||
fi
|
||||
read -r choice
|
||||
|
||||
case $choice in
|
||||
1) run_module "website" "website-error-analyzer.sh" ;;
|
||||
@@ -379,9 +446,7 @@ show_performance_menu() {
|
||||
handle_performance_menu() {
|
||||
while true; do
|
||||
show_performance_menu
|
||||
if ! read -r choice 2>/dev/null </dev/tty; then
|
||||
return 0
|
||||
fi
|
||||
read -r choice
|
||||
|
||||
case $choice in
|
||||
1) run_module "performance" "mysql-query-analyzer.sh" ;;
|
||||
@@ -414,7 +479,7 @@ handle_loadwatch_analyzer() {
|
||||
echo -e "${CYAN}──────────────────────────────────────────────────────────────${NC}"
|
||||
echo -n "Select time range: "
|
||||
|
||||
read -r range_choice
|
||||
read -r range_choice < /dev/tty
|
||||
|
||||
case $range_choice in
|
||||
1) run_module "diagnostics" "loadwatch-analyzer.sh" "-r" "1h" ;;
|
||||
@@ -487,9 +552,7 @@ show_acronis_menu() {
|
||||
handle_backup_menu() {
|
||||
while true; do
|
||||
show_backup_menu
|
||||
if ! read -r choice 2>/dev/null </dev/tty; then
|
||||
return 0
|
||||
fi
|
||||
read -r choice
|
||||
|
||||
case $choice in
|
||||
1) handle_acronis_menu ;;
|
||||
@@ -504,9 +567,7 @@ handle_backup_menu() {
|
||||
handle_acronis_menu() {
|
||||
while true; do
|
||||
show_acronis_menu
|
||||
if ! read -r choice 2>/dev/null </dev/tty; then
|
||||
return 0
|
||||
fi
|
||||
read -r choice
|
||||
|
||||
case $choice in
|
||||
1) run_module "backup" "acronis-install.sh" ;;
|
||||
@@ -560,9 +621,7 @@ show_email_menu() {
|
||||
handle_email_menu() {
|
||||
while true; do
|
||||
show_email_menu
|
||||
if ! read -r choice 2>/dev/null </dev/tty; then
|
||||
return 0
|
||||
fi
|
||||
read -r choice
|
||||
|
||||
case $choice in
|
||||
1) run_module "email" "email-diagnostics.sh" ;;
|
||||
@@ -593,7 +652,7 @@ init_directories() {
|
||||
}
|
||||
|
||||
startup_detection() {
|
||||
# Initialize system detection first (required for proper reference database)
|
||||
# Initialize system detection first (required for show_system_overview)
|
||||
if [ -z "${SYS_DETECTION_COMPLETE:-}" ]; then
|
||||
initialize_system_detection
|
||||
fi
|
||||
@@ -633,7 +692,8 @@ startup_detection() {
|
||||
print_success "Detection complete! Cached for 1 hour."
|
||||
echo ""
|
||||
|
||||
read -p "Press Enter to continue..." < /dev/tty 2>/dev/null || true
|
||||
# Read from terminal (use /dev/tty directly)
|
||||
read -p "Press Enter to continue..." 2>/dev/null </dev/tty || true
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -664,7 +724,7 @@ main() {
|
||||
7) run_module "maintenance" "cleanup-toolkit-data.sh" ;;
|
||||
0)
|
||||
echo ""
|
||||
read -p "Clean history and remove traces? (yes/no): " clean_hist
|
||||
read -p "Clean history and remove traces? (yes/no): " clean_hist < /dev/tty
|
||||
|
||||
if [ "$clean_hist" = "yes" ]; then
|
||||
touch /tmp/.cleanup_requested
|
||||
|
||||
@@ -169,7 +169,8 @@ show_terminal_info() {
|
||||
# Create temporary session directory
|
||||
create_temp_session() {
|
||||
export SESSION_ID=$$
|
||||
export TEMP_SESSION_DIR=$(mktemp -d -t server-toolkit.XXXXXX)
|
||||
export TEMP_SESSION_DIR="/tmp/server-toolkit-${SESSION_ID}"
|
||||
mkdir -p "$TEMP_SESSION_DIR"
|
||||
|
||||
# Cleanup on exit
|
||||
trap '[ -n "$TEMP_SESSION_DIR" ] && rm -rf "$TEMP_SESSION_DIR" 2>/dev/null' EXIT INT TERM
|
||||
|
||||
+6
-9
@@ -15,9 +15,9 @@ if [ -z "$TOOLKIT_BASE_DIR" ]; then
|
||||
[ -f "$SCRIPT_DIR/user-manager.sh" ] && source "$SCRIPT_DIR/user-manager.sh" || { echo "ERROR: user-manager.sh not found" >&2; return 1; }
|
||||
fi
|
||||
|
||||
# Reference database location
|
||||
export SYSREF_DB="${TOOLKIT_BASE_DIR}/.sysref"
|
||||
export SYSREF_TIMESTAMP="${TOOLKIT_BASE_DIR}/.sysref.timestamp"
|
||||
# Reference database location - BETA VERSION (separate from production)
|
||||
export SYSREF_DB="${TOOLKIT_BASE_DIR}/.sysref.beta"
|
||||
export SYSREF_TIMESTAMP="${TOOLKIT_BASE_DIR}/.sysref.beta.timestamp"
|
||||
|
||||
#############################################################################
|
||||
# DATABASE STRUCTURE
|
||||
@@ -162,8 +162,8 @@ build_databases_section() {
|
||||
# Build MySQL command with credentials if needed
|
||||
local mysql_cmd="mysql"
|
||||
if [ "$SYS_CONTROL_PANEL" = "plesk" ] && [ -f /etc/psa/.psa.shadow ]; then
|
||||
export MYSQL_PWD=$(cat /etc/psa/.psa.shadow)
|
||||
mysql_cmd="mysql -uadmin"
|
||||
local plesk_mysql_pass=$(cat /etc/psa/.psa.shadow)
|
||||
mysql_cmd="mysql -uadmin -p${plesk_mysql_pass}"
|
||||
fi
|
||||
|
||||
local total_dbs=$($mysql_cmd -Ns -e "SHOW DATABASES" 2>/dev/null | grep -v "^information_schema$\|^mysql$\|^performance_schema$\|^sys$" | wc -l)
|
||||
@@ -180,7 +180,7 @@ build_databases_section() {
|
||||
|
||||
local size_mb=$($mysql_cmd -Ns -e "SELECT ROUND(SUM(data_length + index_length) / 1024 / 1024, 2)
|
||||
FROM information_schema.TABLES
|
||||
WHERE table_schema=\`$db\`" 2>/dev/null)
|
||||
WHERE table_schema='$db'" 2>/dev/null)
|
||||
[ -z "$size_mb" ] && size_mb=0
|
||||
|
||||
local table_count=$($mysql_cmd -Ns "$db" -e "SHOW TABLES" 2>/dev/null | wc -l)
|
||||
@@ -190,9 +190,6 @@ build_databases_section() {
|
||||
|
||||
finish_progress
|
||||
echo "" >> "$SYSREF_DB"
|
||||
|
||||
# Clean up password environment variable
|
||||
unset MYSQL_PWD
|
||||
}
|
||||
|
||||
# Check domain HTTP/HTTPS status codes
|
||||
|
||||
+602
@@ -0,0 +1,602 @@
|
||||
#!/bin/bash
|
||||
|
||||
#############################################################################
|
||||
# OS Compatibility Check Module
|
||||
# Verifies OS-specific packages, compatibility, and version requirements
|
||||
# Supports: CentOS, AlmaLinux, Rocky, CloudLinux, Ubuntu, Debian
|
||||
#############################################################################
|
||||
|
||||
set -eo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
BASE_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
||||
LIB_DIR="$BASE_DIR/lib"
|
||||
|
||||
# Load libraries
|
||||
source "$LIB_DIR/common-functions.sh"
|
||||
source "$LIB_DIR/system-detect.sh"
|
||||
|
||||
# Ensure system detection is complete
|
||||
[ -z "${SYS_DETECTION_COMPLETE:-}" ] && initialize_system_detection
|
||||
|
||||
#############################################################################
|
||||
# COLORS & FORMATTING
|
||||
#############################################################################
|
||||
|
||||
PASS="${GREEN}✓${NC}"
|
||||
FAIL="${RED}✗${NC}"
|
||||
WARN="${YELLOW}⚠${NC}"
|
||||
INFO="${CYAN}ℹ${NC}"
|
||||
|
||||
#############################################################################
|
||||
# PACKAGE CHECK FUNCTIONS
|
||||
#############################################################################
|
||||
|
||||
package_installed() {
|
||||
local package="$1"
|
||||
|
||||
case "$SYS_OS_TYPE" in
|
||||
centos|rhel|almalinux|rocky|cloudlinux)
|
||||
rpm -q "$package" > /dev/null 2>&1
|
||||
;;
|
||||
ubuntu|debian)
|
||||
dpkg -l | grep -q "^ii.*$package" || apt list --installed 2>/dev/null | grep -q "^$package/"
|
||||
;;
|
||||
*)
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
check_package() {
|
||||
local package="$1"
|
||||
local critical="${2:-0}"
|
||||
|
||||
if package_installed "$package"; then
|
||||
local version=$(get_package_version "$package")
|
||||
echo "$PASS Package ${GREEN}${package}${NC} is installed (${version})"
|
||||
return 0
|
||||
else
|
||||
if [ "$critical" = "1" ]; then
|
||||
echo "$FAIL Package ${RED}${package}${NC} is ${RED}MISSING${NC} (required)"
|
||||
else
|
||||
echo "$WARN Package ${YELLOW}${package}${NC} is not installed"
|
||||
fi
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
get_package_version() {
|
||||
local package="$1"
|
||||
|
||||
case "$SYS_OS_TYPE" in
|
||||
centos|rhel|almalinux|rocky|cloudlinux)
|
||||
rpm -q "$package" 2>/dev/null | sed "s/^${package}-//" || echo "unknown"
|
||||
;;
|
||||
ubuntu|debian)
|
||||
apt list --installed 2>/dev/null | grep "^${package}/" | awk '{print $2}' | head -1 || echo "unknown"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
#############################################################################
|
||||
# RHEL-BASED OS CHECKS
|
||||
#############################################################################
|
||||
|
||||
check_rhel_packages() {
|
||||
echo ""
|
||||
print_section "RHEL/CentOS Package Compatibility"
|
||||
echo ""
|
||||
|
||||
# Essential packages
|
||||
check_package "gcc" 1
|
||||
check_package "curl" 1
|
||||
check_package "wget" 1
|
||||
check_package "git" 0
|
||||
|
||||
# Web server
|
||||
if [ "$SYS_WEB_SERVER" = "apache" ]; then
|
||||
check_package "httpd" 1
|
||||
elif [ "$SYS_WEB_SERVER" = "nginx" ]; then
|
||||
check_package "nginx" 1
|
||||
fi
|
||||
|
||||
# Database
|
||||
if [ "$SYS_DB_TYPE" = "mysql" ]; then
|
||||
check_package "mysql-server" 0 || check_package "mysql" 0
|
||||
elif [ "$SYS_DB_TYPE" = "mariadb" ]; then
|
||||
check_package "mariadb-server" 1
|
||||
fi
|
||||
|
||||
# PHP
|
||||
if [ ${#SYS_PHP_VERSIONS[@]} -gt 0 ]; then
|
||||
check_package "php-cli" 0
|
||||
check_package "php-common" 0
|
||||
fi
|
||||
|
||||
# Additional tools
|
||||
check_package "net-tools" 0
|
||||
check_package "bind-utils" 0
|
||||
check_package "openssh-server" 1
|
||||
|
||||
echo ""
|
||||
}
|
||||
|
||||
#############################################################################
|
||||
# DEBIAN-BASED OS CHECKS
|
||||
#############################################################################
|
||||
|
||||
check_debian_packages() {
|
||||
echo ""
|
||||
print_section "Debian/Ubuntu Package Compatibility"
|
||||
echo ""
|
||||
|
||||
# Essential packages
|
||||
check_package "build-essential" 1
|
||||
check_package "curl" 1
|
||||
check_package "wget" 1
|
||||
check_package "git" 0
|
||||
|
||||
# Web server
|
||||
if [ "$SYS_WEB_SERVER" = "apache" ]; then
|
||||
check_package "apache2" 1
|
||||
elif [ "$SYS_WEB_SERVER" = "nginx" ]; then
|
||||
check_package "nginx" 1
|
||||
fi
|
||||
|
||||
# Database
|
||||
if [ "$SYS_DB_TYPE" = "mysql" ]; then
|
||||
check_package "mysql-server" 1
|
||||
elif [ "$SYS_DB_TYPE" = "mariadb" ]; then
|
||||
check_package "mariadb-server" 1
|
||||
fi
|
||||
|
||||
# PHP
|
||||
if [ ${#SYS_PHP_VERSIONS[@]} -gt 0 ]; then
|
||||
check_package "php-cli" 0
|
||||
check_package "php-common" 0
|
||||
fi
|
||||
|
||||
# Additional tools
|
||||
check_package "net-tools" 0
|
||||
check_package "dnsutils" 0
|
||||
check_package "openssh-server" 1
|
||||
|
||||
echo ""
|
||||
}
|
||||
|
||||
#############################################################################
|
||||
# CLOUDLINUX-SPECIFIC CHECKS
|
||||
#############################################################################
|
||||
|
||||
check_cloudlinux_packages() {
|
||||
if [ "${SYS_CLOUDLINUX:-}" != "yes" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
echo ""
|
||||
print_section "CloudLinux-Specific Packages"
|
||||
echo ""
|
||||
|
||||
check_package "lve-utils" 0
|
||||
check_package "lvemanager" 0
|
||||
check_package "kernel-lve" 0
|
||||
check_package "cloudlinux-ssa" 0
|
||||
check_package "cloudlinux-admin" 0
|
||||
|
||||
# LVE CLI tool
|
||||
if command_exists lvectl; then
|
||||
echo "$PASS lvectl CLI is available"
|
||||
else
|
||||
echo "$WARN lvectl command not found (LVE management may be unavailable)"
|
||||
fi
|
||||
|
||||
# Check LVE status
|
||||
if systemctl is-active --quiet lve-manager 2>/dev/null; then
|
||||
echo "$PASS LVE Manager service is running"
|
||||
else
|
||||
echo "$WARN LVE Manager service is not running"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
}
|
||||
|
||||
#############################################################################
|
||||
# CONTROL PANEL-SPECIFIC CHECKS
|
||||
#############################################################################
|
||||
|
||||
check_cpanel_packages() {
|
||||
if [ "$SYS_CONTROL_PANEL" != "cpanel" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
echo ""
|
||||
print_section "cPanel Package Dependencies"
|
||||
echo ""
|
||||
|
||||
# cPanel requires RHEL-based
|
||||
if [[ ! "$SYS_OS_TYPE" =~ (centos|rhel|almalinux|rocky|cloudlinux) ]]; then
|
||||
echo "$FAIL cPanel requires RHEL-based OS, found: ${RED}${SYS_OS_TYPE}${NC}"
|
||||
return 1
|
||||
fi
|
||||
|
||||
check_package "cpanel-liveupdate-exclude" 0
|
||||
check_package "ea-apache24" 0
|
||||
check_package "ea-php" 0
|
||||
|
||||
# cPanel version compatibility
|
||||
local major_version=$(echo "$SYS_CONTROL_PANEL_VERSION" | cut -d. -f1)
|
||||
if [ "$major_version" -lt 11 ]; then
|
||||
echo "$FAIL cPanel version ${RED}${SYS_CONTROL_PANEL_VERSION}${NC} is out of support"
|
||||
else
|
||||
echo "$PASS cPanel version ${SYS_CONTROL_PANEL_VERSION} is supported"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
}
|
||||
|
||||
check_plesk_packages() {
|
||||
if [ "$SYS_CONTROL_PANEL" != "plesk" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
echo ""
|
||||
print_section "Plesk Package Dependencies"
|
||||
echo ""
|
||||
|
||||
# Plesk version compatibility
|
||||
local major_version=$(echo "$SYS_CONTROL_PANEL_VERSION" | cut -d. -f1)
|
||||
|
||||
if [ "$major_version" -lt 12 ]; then
|
||||
echo "$FAIL Plesk version ${RED}${SYS_CONTROL_PANEL_VERSION}${NC} is out of support"
|
||||
elif [ "$major_version" -lt 18 ]; then
|
||||
echo "$WARN Plesk version ${YELLOW}${SYS_CONTROL_PANEL_VERSION}${NC} is nearing end of support"
|
||||
else
|
||||
echo "$PASS Plesk version ${GREEN}${SYS_CONTROL_PANEL_VERSION}${NC} is supported"
|
||||
fi
|
||||
|
||||
# Plesk requires specific packages
|
||||
if [[ "$SYS_OS_TYPE" =~ (ubuntu|debian) ]]; then
|
||||
check_package "plesk-core" 0
|
||||
elif [[ "$SYS_OS_TYPE" =~ (centos|rhel|almalinux|rocky) ]]; then
|
||||
check_package "psa" 0
|
||||
fi
|
||||
|
||||
echo ""
|
||||
}
|
||||
|
||||
check_interworx_packages() {
|
||||
if [ "$SYS_CONTROL_PANEL" != "interworx" ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
echo ""
|
||||
print_section "InterWorx Package Dependencies"
|
||||
echo ""
|
||||
|
||||
if [ -d "/opt/interworx" ]; then
|
||||
echo "$PASS InterWorx installation directory found"
|
||||
else
|
||||
echo "$FAIL InterWorx installation directory ${RED}not found${NC}"
|
||||
fi
|
||||
|
||||
# InterWorx uses standard packages
|
||||
check_package "openssl" 1
|
||||
check_package "perl" 0
|
||||
|
||||
echo ""
|
||||
}
|
||||
|
||||
#############################################################################
|
||||
# OS VERSION COMPATIBILITY
|
||||
#############################################################################
|
||||
|
||||
check_os_version_support() {
|
||||
echo ""
|
||||
print_section "OS Version Support Status"
|
||||
echo ""
|
||||
|
||||
case "$SYS_OS_TYPE" in
|
||||
centos)
|
||||
case "$SYS_OS_VERSION" in
|
||||
7) echo "$WARN CentOS 7 is ${YELLOW}End of Life (June 2024)${NC}" ;;
|
||||
8) echo "$WARN CentOS 8 is ${YELLOW}End of Life (December 2021)${NC}" ;;
|
||||
9) echo "$PASS CentOS 9 is ${GREEN}supported until 2032${NC}" ;;
|
||||
*) echo "$INFO CentOS $SYS_OS_VERSION version support unknown" ;;
|
||||
esac
|
||||
;;
|
||||
rhel)
|
||||
case "$SYS_OS_VERSION" in
|
||||
7) echo "$WARN RHEL 7 is in ${YELLOW}limited support${NC}" ;;
|
||||
8) echo "$PASS RHEL 8 is in ${GREEN}standard support${NC}" ;;
|
||||
9) echo "$PASS RHEL 9 is in ${GREEN}standard support${NC}" ;;
|
||||
*) echo "$INFO RHEL $SYS_OS_VERSION version support unknown" ;;
|
||||
esac
|
||||
;;
|
||||
almalinux|rocky)
|
||||
case "$SYS_OS_VERSION" in
|
||||
8) echo "$PASS ${SYS_OS_TYPE^^} 8 is supported until 2029" ;;
|
||||
9) echo "$PASS ${SYS_OS_TYPE^^} 9 is supported until 2032" ;;
|
||||
*) echo "$INFO ${SYS_OS_TYPE^^} $SYS_OS_VERSION version support unknown" ;;
|
||||
esac
|
||||
;;
|
||||
cloudlinux)
|
||||
case "$SYS_OS_VERSION" in
|
||||
7) echo "$WARN CloudLinux 7 is in ${YELLOW}extended support${NC}" ;;
|
||||
8|9) echo "$PASS CloudLinux $SYS_OS_VERSION is ${GREEN}fully supported${NC}" ;;
|
||||
*) echo "$INFO CloudLinux $SYS_OS_VERSION version support unknown" ;;
|
||||
esac
|
||||
;;
|
||||
ubuntu)
|
||||
case "$SYS_OS_VERSION" in
|
||||
20.04) echo "$PASS Ubuntu 20.04 LTS supported until 2030" ;;
|
||||
22.04) echo "$PASS Ubuntu 22.04 LTS supported until 2032" ;;
|
||||
24.04) echo "$PASS Ubuntu 24.04 LTS supported until 2034" ;;
|
||||
*) echo "$INFO Ubuntu $SYS_OS_VERSION support status unknown" ;;
|
||||
esac
|
||||
;;
|
||||
debian)
|
||||
case "$SYS_OS_VERSION" in
|
||||
11) echo "$PASS Debian 11 supported until 2026" ;;
|
||||
12) echo "$PASS Debian 12 supported until 2028" ;;
|
||||
*) echo "$INFO Debian $SYS_OS_VERSION support status unknown" ;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
|
||||
echo ""
|
||||
}
|
||||
|
||||
#############################################################################
|
||||
# KERNEL & SYSTEM COMPATIBILITY
|
||||
#############################################################################
|
||||
|
||||
check_kernel_compatibility() {
|
||||
echo ""
|
||||
print_section "Kernel & System Compatibility"
|
||||
echo ""
|
||||
|
||||
local kernel=$(uname -r)
|
||||
echo "$INFO Kernel version: $kernel"
|
||||
|
||||
# Check for kernel modules
|
||||
if [ -f /proc/sys/kernel/osrelease ]; then
|
||||
local kernel_release=$(cat /proc/sys/kernel/osrelease)
|
||||
echo "$INFO Kernel release: $kernel_release"
|
||||
fi
|
||||
|
||||
# Check virtualization/container
|
||||
if grep -qi "hypervisor" /proc/cpuinfo 2>/dev/null; then
|
||||
echo "$INFO Running in virtualized environment"
|
||||
fi
|
||||
|
||||
# Check for known incompatibilities
|
||||
case "$SYS_OS_TYPE" in
|
||||
centos)
|
||||
if [ "$SYS_OS_VERSION" = "8" ] && [ "$SYS_CONTROL_PANEL" = "cpanel" ]; then
|
||||
echo "$WARN CentOS 8 with cPanel requires migration path (CentOS Stream)"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
echo ""
|
||||
}
|
||||
|
||||
#############################################################################
|
||||
# PACKAGE MANAGER COMPATIBILITY
|
||||
#############################################################################
|
||||
|
||||
check_package_manager() {
|
||||
echo ""
|
||||
print_section "Package Manager Status"
|
||||
echo ""
|
||||
|
||||
case "$SYS_OS_TYPE" in
|
||||
centos|rhel|almalinux|rocky|cloudlinux)
|
||||
if command_exists yum; then
|
||||
echo "$PASS YUM package manager is available"
|
||||
elif command_exists dnf; then
|
||||
echo "$PASS DNF package manager is available"
|
||||
else
|
||||
echo "$FAIL No package manager found"
|
||||
fi
|
||||
|
||||
# Check for yum plugin conflicts
|
||||
if [ -f /etc/yum.repos.d/epel.repo ]; then
|
||||
echo "$PASS EPEL repository is configured"
|
||||
fi
|
||||
|
||||
# Check for remi repository (optional but common)
|
||||
if [ -f /etc/yum.repos.d/remi.repo ]; then
|
||||
echo "$INFO Remi repository is configured (for additional PHP versions)"
|
||||
fi
|
||||
;;
|
||||
|
||||
ubuntu|debian)
|
||||
if command_exists apt; then
|
||||
echo "$PASS APT package manager is available"
|
||||
else
|
||||
echo "$FAIL APT package manager not found"
|
||||
fi
|
||||
|
||||
# Check for PPA repositories
|
||||
if [ -d /etc/apt/sources.list.d ]; then
|
||||
local ppa_count=$(ls /etc/apt/sources.list.d/*.list 2>/dev/null | wc -l)
|
||||
if [ "$ppa_count" -gt 0 ]; then
|
||||
echo "$INFO $ppa_count PPA/custom repositories configured"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Check for Ondrej PPA (PHP)
|
||||
if grep -q "ondrej/php" /etc/apt/sources.list* 2>/dev/null; then
|
||||
echo "$INFO Ondrej PPA configured (for PHP versions)"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
echo ""
|
||||
}
|
||||
|
||||
#############################################################################
|
||||
# CONTROL PANEL / OS COMPATIBILITY MATRIX
|
||||
#############################################################################
|
||||
|
||||
check_panel_os_compatibility() {
|
||||
echo ""
|
||||
print_section "Control Panel & OS Compatibility"
|
||||
echo ""
|
||||
|
||||
local compatible="1"
|
||||
|
||||
case "$SYS_CONTROL_PANEL" in
|
||||
cpanel)
|
||||
if [[ ! "$SYS_OS_TYPE" =~ (centos|rhel|almalinux|rocky|cloudlinux) ]]; then
|
||||
echo "$FAIL cPanel requires RHEL-based OS, but found: ${RED}${SYS_OS_TYPE}${NC}"
|
||||
compatible="0"
|
||||
else
|
||||
echo "$PASS cPanel on ${SYS_OS_TYPE^^} is a ${GREEN}supported configuration${NC}"
|
||||
fi
|
||||
;;
|
||||
|
||||
plesk)
|
||||
if [[ "$SYS_OS_TYPE" =~ (ubuntu|debian|centos|rhel|almalinux|rocky) ]]; then
|
||||
echo "$PASS Plesk on ${SYS_OS_TYPE^^} is a ${GREEN}supported configuration${NC}"
|
||||
else
|
||||
echo "$FAIL Plesk on ${SYS_OS_TYPE^^} may not be officially supported"
|
||||
compatible="0"
|
||||
fi
|
||||
;;
|
||||
|
||||
interworx)
|
||||
if [[ ! "$SYS_OS_TYPE" =~ (centos|rhel|almalinux|rocky) ]]; then
|
||||
echo "$WARN InterWorx on ${SYS_OS_TYPE^^} is ${YELLOW}not commonly used${NC}"
|
||||
compatible="0"
|
||||
else
|
||||
echo "$PASS InterWorx on ${SYS_OS_TYPE^^} is a ${GREEN}supported configuration${NC}"
|
||||
fi
|
||||
;;
|
||||
|
||||
none)
|
||||
echo "$PASS Standalone server (no control panel constraints)"
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ "$compatible" = "0" ]; then
|
||||
echo ""
|
||||
echo "$WARN This combination may experience compatibility issues. Consider migration."
|
||||
fi
|
||||
|
||||
echo ""
|
||||
}
|
||||
|
||||
#############################################################################
|
||||
# KNOWN ISSUES & RECOMMENDATIONS
|
||||
#############################################################################
|
||||
|
||||
check_known_issues() {
|
||||
echo ""
|
||||
print_section "Known Issues & Recommendations"
|
||||
echo ""
|
||||
|
||||
# CentOS 8 EOL warning
|
||||
if [ "$SYS_OS_TYPE" = "centos" ] && [ "$SYS_OS_VERSION" = "8" ]; then
|
||||
echo "$WARN CentOS 8 reached EOL on December 31, 2021"
|
||||
echo " Recommend: Migrate to AlmaLinux 8, Rocky Linux 8, or CentOS Stream"
|
||||
echo ""
|
||||
fi
|
||||
|
||||
# RHEL 7 EOL warning
|
||||
if [ "$SYS_OS_TYPE" = "rhel" ] && [ "$SYS_OS_VERSION" = "7" ]; then
|
||||
echo "$WARN RHEL 7 will reach EOL on June 30, 2024"
|
||||
echo " Recommend: Plan upgrade to RHEL 8 or 9"
|
||||
echo ""
|
||||
fi
|
||||
|
||||
# cPanel on Debian/Ubuntu
|
||||
if [ "$SYS_CONTROL_PANEL" = "cpanel" ] && [[ "$SYS_OS_TYPE" =~ (ubuntu|debian) ]]; then
|
||||
echo "$FAIL cPanel is NOT compatible with Debian/Ubuntu"
|
||||
echo " This installation appears to be misconfigured"
|
||||
echo ""
|
||||
fi
|
||||
|
||||
# Plesk version 17 and older
|
||||
if [ "$SYS_CONTROL_PANEL" = "plesk" ]; then
|
||||
local major_version=$(echo "$SYS_CONTROL_PANEL_VERSION" | cut -d. -f1)
|
||||
if [ "$major_version" -lt 18 ]; then
|
||||
echo "$WARN Plesk $major_version is out of support"
|
||||
echo " Recommend: Upgrade to Plesk 18.0.50+ or newer"
|
||||
echo ""
|
||||
fi
|
||||
fi
|
||||
|
||||
# Multiple conflicting web servers
|
||||
local web_count=0
|
||||
command_exists apache2 && ((web_count++))
|
||||
command_exists httpd && ((web_count++))
|
||||
command_exists nginx && ((web_count++))
|
||||
|
||||
if [ "$web_count" -gt 1 ]; then
|
||||
echo "$WARN Multiple web servers detected on system"
|
||||
echo " This may cause port conflicts (both trying to use port 80)"
|
||||
echo ""
|
||||
fi
|
||||
|
||||
echo ""
|
||||
}
|
||||
|
||||
#############################################################################
|
||||
# MAIN EXECUTION
|
||||
#############################################################################
|
||||
|
||||
main() {
|
||||
clear
|
||||
|
||||
print_banner "OS Compatibility Check"
|
||||
echo ""
|
||||
echo "Verifying OS packages, version support, and platform compatibility..."
|
||||
echo ""
|
||||
|
||||
# Show detected platform
|
||||
echo -e "${BOLD}Detected Configuration:${NC}"
|
||||
echo " OS: ${CYAN}${SYS_OS_TYPE^^}${NC} ${SYS_OS_VERSION}"
|
||||
echo " Kernel: $(uname -r)"
|
||||
echo " Control Panel: ${CYAN}${SYS_CONTROL_PANEL^^}${NC}"
|
||||
echo ""
|
||||
|
||||
# OS-specific package checks
|
||||
case "$SYS_OS_TYPE" in
|
||||
centos|rhel|almalinux|rocky|cloudlinux)
|
||||
check_rhel_packages
|
||||
;;
|
||||
ubuntu|debian)
|
||||
check_debian_packages
|
||||
;;
|
||||
esac
|
||||
|
||||
# CloudLinux-specific
|
||||
check_cloudlinux_packages
|
||||
|
||||
# Control panel-specific checks
|
||||
check_cpanel_packages
|
||||
check_plesk_packages
|
||||
check_interworx_packages
|
||||
|
||||
# General compatibility checks
|
||||
check_os_version_support
|
||||
check_kernel_compatibility
|
||||
check_package_manager
|
||||
check_panel_os_compatibility
|
||||
check_known_issues
|
||||
|
||||
# Summary
|
||||
echo ""
|
||||
print_section "Summary"
|
||||
echo ""
|
||||
echo "Compatibility check complete. Review any ${RED}failures${NC}, ${YELLOW}warnings${NC}, or ${INFO}informational${NC} items above."
|
||||
echo ""
|
||||
}
|
||||
|
||||
# Run if sourced or executed
|
||||
if [ "${BASH_SOURCE[0]}" = "${0}" ]; then
|
||||
main "$@"
|
||||
fi
|
||||
Executable
+384
@@ -0,0 +1,384 @@
|
||||
#!/bin/bash
|
||||
|
||||
#############################################################################
|
||||
# Platform Health Check Module
|
||||
# Verifies all detected platform components are running and healthy
|
||||
# Works across all supported control panels and operating systems
|
||||
#############################################################################
|
||||
|
||||
set -eo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
BASE_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
||||
LIB_DIR="$BASE_DIR/lib"
|
||||
|
||||
# Load libraries
|
||||
source "$LIB_DIR/common-functions.sh"
|
||||
source "$LIB_DIR/system-detect.sh"
|
||||
|
||||
# Ensure system detection is complete
|
||||
[ -z "${SYS_DETECTION_COMPLETE:-}" ] && initialize_system_detection
|
||||
|
||||
#############################################################################
|
||||
# COLORS & FORMATTING
|
||||
#############################################################################
|
||||
|
||||
PASS="${GREEN}✓${NC}"
|
||||
FAIL="${RED}✗${NC}"
|
||||
WARN="${YELLOW}⚠${NC}"
|
||||
INFO="${CYAN}ℹ${NC}"
|
||||
|
||||
#############################################################################
|
||||
# SERVICE STATUS FUNCTIONS
|
||||
#############################################################################
|
||||
|
||||
check_service_running() {
|
||||
local service_name="$1"
|
||||
local systemctl_name="${2:-$service_name}"
|
||||
|
||||
if systemctl is-active --quiet "$systemctl_name" 2>/dev/null; then
|
||||
echo "$PASS ${GREEN}${service_name}${NC} is running"
|
||||
return 0
|
||||
else
|
||||
echo "$FAIL ${RED}${service_name}${NC} is NOT running"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
check_process_running() {
|
||||
local process_name="$1"
|
||||
local display_name="${2:-$process_name}"
|
||||
|
||||
if pgrep -x "$process_name" > /dev/null 2>&1; then
|
||||
echo "$PASS ${GREEN}${display_name}${NC} process is running"
|
||||
return 0
|
||||
else
|
||||
echo "$FAIL ${RED}${display_name}${NC} process is NOT running"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
check_port_listening() {
|
||||
local port="$1"
|
||||
local service="$2"
|
||||
|
||||
if netstat -tlnp 2>/dev/null | grep -q ":$port "; then
|
||||
echo "$PASS Port ${GREEN}$port${NC} (${service}) is listening"
|
||||
return 0
|
||||
else
|
||||
echo "$FAIL Port ${RED}$port${NC} (${service}) is NOT listening"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
#############################################################################
|
||||
# PLATFORM-SPECIFIC HEALTH CHECKS
|
||||
#############################################################################
|
||||
|
||||
check_cpanel_health() {
|
||||
echo ""
|
||||
print_section "cPanel Health"
|
||||
echo ""
|
||||
|
||||
# Check cPanel services
|
||||
check_process_running "cpanel" "cPanel daemon" || true
|
||||
check_service_running "cpsrvd" "cPanel service" || true
|
||||
|
||||
# Check Apache
|
||||
if [ "$SYS_WEB_SERVER" = "apache" ]; then
|
||||
check_service_running "httpd" "Apache httpd" || check_service_running "apache2" "Apache" || true
|
||||
fi
|
||||
|
||||
# Check MySQL/MariaDB
|
||||
if [ "$SYS_DB_TYPE" != "none" ]; then
|
||||
check_service_running "mysql" "MySQL/MariaDB" || check_service_running "mariadb" || true
|
||||
fi
|
||||
|
||||
# Check DNS (BIND)
|
||||
check_service_running "named" "BIND DNS" 2>/dev/null || echo "$INFO DNS not checked (may not be running locally)" || true
|
||||
|
||||
echo ""
|
||||
}
|
||||
|
||||
check_plesk_health() {
|
||||
echo ""
|
||||
print_section "Plesk Health"
|
||||
echo ""
|
||||
|
||||
# Check Plesk core services
|
||||
check_process_running "sw-engine" "Plesk backend" || true
|
||||
check_process_running "sw-cp-server" "Plesk control panel" || true
|
||||
|
||||
# Check web server
|
||||
if [ "$SYS_WEB_SERVER" = "apache" ]; then
|
||||
check_service_running "apache2" "Apache" || check_service_running "httpd" || true
|
||||
elif [ "$SYS_WEB_SERVER" = "nginx" ]; then
|
||||
check_service_running "nginx" "Nginx" || true
|
||||
fi
|
||||
|
||||
# Check database
|
||||
if [ "$SYS_DB_TYPE" != "none" ]; then
|
||||
check_service_running "mysql" "MySQL" || check_service_running "mariadb" || true
|
||||
fi
|
||||
|
||||
echo ""
|
||||
}
|
||||
|
||||
check_interworx_health() {
|
||||
echo ""
|
||||
print_section "InterWorx Health"
|
||||
echo ""
|
||||
|
||||
# Check InterWorx services
|
||||
check_process_running "iworx" "InterWorx daemon" || true
|
||||
check_process_running "iworx-httpd" "InterWorx HTTP daemon" || true
|
||||
|
||||
# Check NodeWorx API
|
||||
if [ -x "/usr/bin/nodeworx" ]; then
|
||||
echo "$PASS NodeWorx CLI is available"
|
||||
fi
|
||||
|
||||
# Check web server
|
||||
check_service_running "httpd" "Apache httpd" || true
|
||||
|
||||
# Check database
|
||||
if [ "$SYS_DB_TYPE" != "none" ]; then
|
||||
check_service_running "mysql" "MySQL" || check_service_running "mariadb" || true
|
||||
fi
|
||||
|
||||
echo ""
|
||||
}
|
||||
|
||||
check_standalone_health() {
|
||||
echo ""
|
||||
print_section "Standalone Server Health"
|
||||
echo ""
|
||||
|
||||
# Check web server
|
||||
if [ "$SYS_WEB_SERVER" = "apache" ]; then
|
||||
check_service_running "httpd" "Apache httpd" || check_service_running "apache2" || true
|
||||
elif [ "$SYS_WEB_SERVER" = "nginx" ]; then
|
||||
check_service_running "nginx" "Nginx" || true
|
||||
fi
|
||||
|
||||
# Check database
|
||||
if [ "$SYS_DB_TYPE" != "none" ]; then
|
||||
check_service_running "mysql" "MySQL" || check_service_running "mariadb" || true
|
||||
fi
|
||||
|
||||
echo ""
|
||||
}
|
||||
|
||||
#############################################################################
|
||||
# FIREWALL HEALTH CHECKS
|
||||
#############################################################################
|
||||
|
||||
check_firewall_health() {
|
||||
echo ""
|
||||
print_section "Firewall Status"
|
||||
echo ""
|
||||
|
||||
case "$SYS_FIREWALL" in
|
||||
csf)
|
||||
check_process_running "lfd" "LFD (CSF)" || true
|
||||
if [ -f "/etc/csf/csf.conf" ]; then
|
||||
if grep -q "^TESTING = \"0\"" /etc/csf/csf.conf 2>/dev/null; then
|
||||
echo "$PASS CSF is in ${GREEN}production mode${NC}"
|
||||
else
|
||||
echo "$WARN CSF is in ${YELLOW}testing mode${NC}"
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
firewalld)
|
||||
check_service_running "firewalld" "firewalld" || true
|
||||
;;
|
||||
ufw)
|
||||
if ufw status 2>/dev/null | grep -q "Status: active"; then
|
||||
echo "$PASS UFW is ${GREEN}active${NC}"
|
||||
else
|
||||
echo "$WARN UFW is ${YELLOW}inactive${NC}"
|
||||
fi
|
||||
;;
|
||||
iptables)
|
||||
local rule_count=$(iptables -L -n 2>/dev/null | grep -c "^Chain" || echo 0)
|
||||
if [ "$rule_count" -gt 0 ]; then
|
||||
echo "$PASS iptables has ${rule_count} chains configured"
|
||||
else
|
||||
echo "$WARN No iptables rules found"
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
echo "$INFO No firewall detected"
|
||||
;;
|
||||
esac
|
||||
|
||||
echo ""
|
||||
}
|
||||
|
||||
#############################################################################
|
||||
# PHP HEALTH CHECKS
|
||||
#############################################################################
|
||||
|
||||
check_php_health() {
|
||||
echo ""
|
||||
print_section "PHP Status"
|
||||
echo ""
|
||||
|
||||
if [ ${#SYS_PHP_VERSIONS[@]} -eq 0 ]; then
|
||||
echo "$WARN No PHP versions detected"
|
||||
return
|
||||
fi
|
||||
|
||||
for version in "${SYS_PHP_VERSIONS[@]}"; do
|
||||
php_binary=$(command -v "php${version}" 2>/dev/null || command -v php 2>/dev/null || echo "")
|
||||
if [ -x "$php_binary" ]; then
|
||||
echo "$PASS PHP $version is available"
|
||||
else
|
||||
echo "$FAIL PHP $version binary not found"
|
||||
fi
|
||||
done
|
||||
|
||||
# Check PHP-FPM if installed
|
||||
if command_exists php-fpm; then
|
||||
if check_process_running "php-fpm" "PHP-FPM" 2>/dev/null; then
|
||||
echo ""
|
||||
else
|
||||
echo "$WARN PHP-FPM is installed but not running"
|
||||
fi
|
||||
fi
|
||||
|
||||
echo ""
|
||||
}
|
||||
|
||||
#############################################################################
|
||||
# STORAGE & RESOURCE CHECKS
|
||||
#############################################################################
|
||||
|
||||
check_storage() {
|
||||
echo ""
|
||||
print_section "Storage & Resources"
|
||||
echo ""
|
||||
|
||||
# Disk usage
|
||||
local root_usage=$(df / | awk 'NR==2 {print $5}' | sed 's/%//')
|
||||
if [ "$root_usage" -gt 90 ]; then
|
||||
echo "$FAIL Disk usage is ${RED}${root_usage}%${NC} (CRITICAL)"
|
||||
elif [ "$root_usage" -gt 80 ]; then
|
||||
echo "$WARN Disk usage is ${YELLOW}${root_usage}%${NC} (Warning)"
|
||||
else
|
||||
echo "$PASS Disk usage is ${GREEN}${root_usage}%${NC}"
|
||||
fi
|
||||
|
||||
# Memory check
|
||||
local mem_available=$(free -h | awk '/^Mem:/ {print $7}')
|
||||
echo "$INFO Available Memory: $mem_available"
|
||||
|
||||
# Swap check
|
||||
local swap_total=$(free -h | awk '/^Swap:/ {print $2}')
|
||||
if [ "$swap_total" = "0B" ]; then
|
||||
echo "$WARN No swap space configured"
|
||||
else
|
||||
local swap_used=$(free -h | awk '/^Swap:/ {print $3}')
|
||||
echo "$INFO Swap: $swap_used / $swap_total"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
}
|
||||
|
||||
#############################################################################
|
||||
# CLOUDFLARE STATUS
|
||||
#############################################################################
|
||||
|
||||
check_cloudflare_status() {
|
||||
if [ "$SYS_CLOUDFLARE_ACTIVE" = "yes" ]; then
|
||||
echo ""
|
||||
print_section "CloudFlare"
|
||||
echo ""
|
||||
echo "$PASS CloudFlare integration is ${GREEN}active${NC}"
|
||||
echo ""
|
||||
fi
|
||||
}
|
||||
|
||||
#############################################################################
|
||||
# GENERAL SYSTEM CHECKS
|
||||
#############################################################################
|
||||
|
||||
check_system_critical() {
|
||||
echo ""
|
||||
print_section "Critical System Checks"
|
||||
echo ""
|
||||
|
||||
# Check if running as root
|
||||
if [ "$EUID" -eq 0 ]; then
|
||||
echo "$PASS Running as ${GREEN}root${NC}"
|
||||
else
|
||||
echo "$FAIL Not running as root - some checks may fail"
|
||||
fi
|
||||
|
||||
# Check system date/time
|
||||
if command_exists ntpstat; then
|
||||
echo "$PASS NTP is available for time synchronization"
|
||||
else
|
||||
echo "$INFO NTP tools not installed (may still be synchronized)"
|
||||
fi
|
||||
|
||||
# Check SSH
|
||||
check_service_running "sshd" "SSH" || true
|
||||
|
||||
# Check mail service
|
||||
if check_process_running "exim" "Exim" 2>/dev/null || check_process_running "postfix" "Postfix" 2>/dev/null; then
|
||||
true
|
||||
else
|
||||
echo "$INFO Mail service not detected"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
}
|
||||
|
||||
#############################################################################
|
||||
# MAIN EXECUTION
|
||||
#############################################################################
|
||||
|
||||
main() {
|
||||
clear
|
||||
|
||||
print_banner "Platform Health Check"
|
||||
echo ""
|
||||
echo "Checking health of all detected services and components..."
|
||||
echo ""
|
||||
|
||||
# Show detected platform
|
||||
echo -e "${BOLD}Detected Platform:${NC}"
|
||||
echo " Control Panel: ${CYAN}${SYS_CONTROL_PANEL^^}${NC} v${SYS_CONTROL_PANEL_VERSION}"
|
||||
echo " OS: ${CYAN}${SYS_OS_TYPE^^}${NC} ${SYS_OS_VERSION}"
|
||||
echo " Web Server: ${CYAN}${SYS_WEB_SERVER^^}${NC}"
|
||||
echo " Database: ${CYAN}${SYS_DB_TYPE^^}${NC}"
|
||||
echo ""
|
||||
|
||||
# Run platform-specific checks
|
||||
case "$SYS_CONTROL_PANEL" in
|
||||
cpanel) check_cpanel_health ;;
|
||||
plesk) check_plesk_health ;;
|
||||
interworx) check_interworx_health ;;
|
||||
*) check_standalone_health ;;
|
||||
esac
|
||||
|
||||
# Universal checks
|
||||
check_system_critical
|
||||
check_firewall_health
|
||||
check_php_health
|
||||
check_storage
|
||||
check_cloudflare_status
|
||||
|
||||
# Summary
|
||||
echo ""
|
||||
print_section "Summary"
|
||||
echo ""
|
||||
echo "Health check complete. Review any ${RED}failures${NC} or ${YELLOW}warnings${NC} above."
|
||||
echo ""
|
||||
}
|
||||
|
||||
# Run if sourced or executed
|
||||
if [ "${BASH_SOURCE[0]}" = "${0}" ]; then
|
||||
main "$@"
|
||||
fi
|
||||
+378
-1268
File diff suppressed because it is too large
Load Diff
@@ -29,8 +29,8 @@ if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Run the launcher
|
||||
bash "$SCRIPT_DIR/launcher.sh"
|
||||
# Run the launcher (source in current shell, don't execute in subshell)
|
||||
source "$SCRIPT_DIR/launcher.sh"
|
||||
|
||||
# Check if cleanup is requested
|
||||
if [ -f /tmp/.cleanup_requested ]; then
|
||||
|
||||
Reference in New Issue
Block a user