From 2c67d48e7c58cfc53baff450295b57ea41a20969 Mon Sep 17 00:00:00 2001 From: cschantz Date: Fri, 2 Jan 2026 20:51:21 -0500 Subject: [PATCH] Improve Maldet installation error handling and diagnostics MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Problem: - Maldet installation was failing silently on Plesk servers - No error output to diagnose issues (./install.sh &>/dev/null) - Users only saw "✗ Maldet installation failed" with no context Changes: - Add comprehensive error capture to /tmp/maldet-install-$$.log - Show last 10 lines of installation output on failure - Add step-by-step progress indicators (download, extract, install) - Check each operation and fail fast with clear error messages - Add Plesk-specific diagnostics: • Detect Plesk installation • Check cron directory permissions • Verify /usr/local/sbin exists - Preserve full log file for detailed investigation - Return proper exit codes for error handling This enables users to diagnose and fix Plesk-specific installation issues instead of being stuck with a generic failure message. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 --- modules/security/malware-scanner.sh | 88 ++++++++++++++++++++++++----- 1 file changed, 73 insertions(+), 15 deletions(-) diff --git a/modules/security/malware-scanner.sh b/modules/security/malware-scanner.sh index e0cb106..2f08f52 100755 --- a/modules/security/malware-scanner.sh +++ b/modules/security/malware-scanner.sh @@ -218,26 +218,84 @@ install_all_scanners() { if ! is_maldet_installed; then echo -e "${CYAN}[2/4] Installing Maldet...${NC}" - cd /tmp - wget -q http://www.rfxn.com/downloads/maldetect-current.tar.gz + cd /tmp || { echo -e "${RED}✗ Cannot access /tmp${NC}"; return 1; } - if [ -f maldetect-current.tar.gz ]; then - tar -xzf maldetect-current.tar.gz - cd maldetect-* 2>/dev/null - ./install.sh &>/dev/null - cd /tmp - rm -rf "maldetect-"* + # Download Maldet + echo " → Downloading Maldet..." + if ! wget -q http://www.rfxn.com/downloads/maldetect-current.tar.gz; then + echo -e "${RED}✗ Download failed - check internet connectivity${NC}" + return 1 fi - if is_maldet_installed; then - echo -e "${GREEN}✓ Maldet installed${NC}" + if [ -f maldetect-current.tar.gz ]; then + echo " → Extracting archive..." + if ! tar -xzf maldetect-current.tar.gz 2>/dev/null; then + echo -e "${RED}✗ Extraction failed - archive may be corrupted${NC}" + rm -f maldetect-current.tar.gz + return 1 + fi - # Update malware signatures immediately - echo " → Updating malware signatures..." - maldet -u 2>&1 | grep -E "update completed|signatures" || maldet -u &>/dev/null - echo -e " ${GREEN}✓${NC} Signatures updated" + # Change to extracted directory + if ! cd maldetect-* 2>/dev/null; then + echo -e "${RED}✗ Cannot find extracted directory${NC}" + cd /tmp + rm -rf "maldetect-"* + return 1 + fi + + # Run installation with error capture + echo " → Running installation script..." + local install_log="/tmp/maldet-install-$$.log" + if ./install.sh > "$install_log" 2>&1; then + install_exit=0 + else + install_exit=$? + fi + + # Cleanup + cd /tmp + rm -rf "maldetect-"* + + # Check if installation succeeded + if is_maldet_installed; then + echo -e "${GREEN}✓ Maldet installed${NC}" + rm -f "$install_log" + + # Update malware signatures immediately + echo " → Updating malware signatures..." + maldet -u 2>&1 | grep -E "update completed|signatures" || maldet -u &>/dev/null + echo -e " ${GREEN}✓${NC} Signatures updated" + else + echo -e "${RED}✗ Maldet installation failed${NC}" + + # Show diagnostic information + if [ -f "$install_log" ]; then + echo -e "${YELLOW}Installation output (last 10 lines):${NC}" + tail -10 "$install_log" | sed 's/^/ /' + echo "" + echo -e "${YELLOW}Full log saved to: $install_log${NC}" + fi + + # Check for common Plesk issues + if command -v plesk >/dev/null 2>&1; then + echo -e "${YELLOW}Detected Plesk system - checking for conflicts...${NC}" + + # Check if cron is accessible + if [ ! -w /var/spool/cron ] && [ ! -w /etc/cron.d ]; then + echo " → Cron directory permissions may be restricted" + fi + + # Check if required directories exist + if [ ! -d /usr/local/sbin ]; then + echo " → /usr/local/sbin does not exist (required for maldet)" + fi + fi + + return 1 + fi else - echo -e "${RED}✗ Maldet installation failed${NC}" + echo -e "${RED}✗ Download failed - maldetect-current.tar.gz not found${NC}" + return 1 fi else echo -e "${GREEN}✓ Maldet already installed${NC}"