Improve Maldet installation error handling and diagnostics

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.
This commit is contained in:
cschantz
2026-01-02 20:51:21 -05:00
parent 33ade14188
commit da041b22b0
+66 -8
View File
@@ -218,19 +218,48 @@ 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 [ -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
# 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..."
@@ -238,6 +267,35 @@ install_all_scanners() {
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}✗ Download failed - maldetect-current.tar.gz not found${NC}"
return 1
fi
else
echo -e "${GREEN}✓ Maldet already installed${NC}"