# Scanner Installation Issues & Fixes **Date:** 2026-04-21 **Reported Issues:** 1. ClamAV installation fails with "No such file or directory: /scripts/check_cpanel_rpms" 2. No way to install individual scanners from dedicated menus (e.g., Maldet submenu) --- ## Issue 1: ClamAV Installation Failure ### Current Behavior ```bash [1/4] Installing ClamAV... → Installing via cPanel package manager... /root/linux-server-management-toolkit/modules/security/malware-scanner.sh: line 294: /scripts/check_cpanel_rpms: No such file or directory ✗ Exited with code: 127 ``` ### Root Cause The script tries to use `/scripts/check_cpanel_rpms` which: - May not exist on all cPanel installations - May have been removed/changed in newer cPanel versions - May require specific permissions or cPanel configuration **Location:** `/root/server-toolkit-beta/modules/security/malware-scanner.sh` lines 223-226 ### Current Code (PROBLEMATIC) ```bash if [ -f "/usr/local/cpanel/cpanel" ]; then # cPanel method - use cPanel's package management only if rpm -qa 2>/dev/null | grep -q "cpanel-clamav"; then echo -e "${GREEN}✓ ClamAV already installed (cPanel)${NC}" else echo " → Installing via cPanel package manager..." /scripts/update_local_rpm_versions --edit target_settings.clamav installed 2>/dev/null || true /scripts/check_cpanel_rpms --fix --targets=clamav 2>&1 | tail -3 # ← FAILS HERE fi # IMPORTANT: Don't fall through to standard yum - cPanel packages conflict! ``` ### The Fix **Strategy:** If cPanel scripts don't work, fall back to standard package managers with error handling **Updated Code:** ```bash if [ -f "/usr/local/cpanel/cpanel" ]; then # cPanel method - use cPanel's package management if rpm -qa 2>/dev/null | grep -q "cpanel-clamav"; then echo -e "${GREEN}✓ ClamAV already installed (cPanel)${NC}" else echo " → Installing via cPanel package manager..." # Try cPanel scripts, but fall back to standard package manager if they fail if [ -f "/scripts/check_cpanel_rpms" ] && [ -f "/scripts/update_local_rpm_versions" ]; then /scripts/update_local_rpm_versions --edit target_settings.clamav installed 2>/dev/null || true if /scripts/check_cpanel_rpms --fix --targets=clamav 2>&1 | tail -3; then : # Success, continue else # cPanel scripts failed, try standard yum echo " → cPanel scripts unavailable, trying standard package manager..." yum install -y clamav clamav-update 2>&1 | grep -E "Installing|Installed|already" || echo " (installation in progress)" fi else # Scripts don't exist, use standard package manager echo " → cPanel tools not available, using standard package manager..." yum install -y clamav clamav-update 2>&1 | grep -E "Installing|Installed|already" || echo " (installation in progress)" fi fi # Don't fall through - we've handled installation above elif command -v yum &>/dev/null; then # Non-cPanel RHEL/CentOS systems echo " → Installing via yum..." yum install -y clamav clamav-update 2>&1 | grep -E "Installing|Installed|already" || echo " (installation in progress)" # ... rest of OS detection ``` **Benefits:** - ✅ Gracefully falls back if cPanel scripts missing - ✅ Still tries cPanel first if available - ✅ Provides user feedback on what's happening - ✅ Doesn't crash with exit code 127 --- ## Issue 2: No Individual Scanner Installation ### Current Behavior **In Maldet Submenu:** ``` Select scan type: 1. Scan entire server 2. Scan all user accounts 3. Scan specific user account 4. Scan specific domain 5. Scan custom path 6. Update Maldet signatures 7. View Maldet results 0. Back to main menu ``` **No install option.** If Maldet isn't installed: - User tries to scan - Script detects Maldet missing - Script asks "Install Maldet now? (yes/no)" - Calls `install_all_scanners` which installs ALL scanners - Overkill and wastes time if user only wants Maldet ### The Fix **Add individual scanner installation functions:** ```bash install_maldet_only() { echo "" print_banner "Installing Maldet (Linux Malware Detection)" echo "" if command -v maldet &>/dev/null || [ -f "/usr/local/sbin/maldet" ]; then echo -e "${GREEN}✓ Maldet is already installed${NC}" echo "" read -p "Press Enter to continue..." return 0 fi echo "Maldet is a fast, Linux-specific malware scanner" echo "Repository: https://github.com/rfxn/maldet" echo "" echo "Installing via wget..." echo "" cd /tmp || return 1 if wget -q https://www.rfxn.com/downloads/maldetect-latest.tar.gz; then tar xzf maldetect-latest.tar.gz cd maldetect-* if bash install.sh > /tmp/maldet-install.log 2>&1; then echo -e "${GREEN}✓ Maldet installed successfully${NC}" # Update signatures echo "" echo "Updating malware signatures..." if command -v maldet &>/dev/null; then maldet -u > /dev/null 2>&1 & echo " (signatures updating in background)" fi else echo -e "${RED}✗ Installation failed. Check /tmp/maldet-install.log${NC}" fi cd /tmp rm -rf maldetect-* else echo -e "${RED}✗ Failed to download Maldet${NC}" echo "Try: wget https://www.rfxn.com/downloads/maldetect-latest.tar.gz" fi echo "" read -p "Press Enter to continue..." } install_clamav_only() { echo "" print_banner "Installing ClamAV (Open Source Antivirus)" echo "" if command -v clamscan &>/dev/null; then echo -e "${GREEN}✓ ClamAV is already installed${NC}" echo "" read -p "Press Enter to continue..." return 0 fi echo "Installing ClamAV..." if command -v yum &>/dev/null; then yum install -y clamav clamav-daemon clamav-update 2>&1 | tail -5 elif command -v apt-get &>/dev/null; then apt-get update > /dev/null 2>&1 apt-get install -y clamav clamav-daemon 2>&1 | tail -5 else echo -e "${RED}✗ No compatible package manager found${NC}" return 1 fi if command -v clamscan &>/dev/null; then echo -e "${GREEN}✓ ClamAV installed successfully${NC}" # Update signatures echo "" echo "Updating virus signatures..." if command -v freshclam &>/dev/null; then freshclam > /dev/null 2>&1 & echo " (signatures updating in background)" fi else echo -e "${RED}✗ Installation may have failed${NC}" fi echo "" read -p "Press Enter to continue..." } install_rkhunter_only() { echo "" print_banner "Installing RKHunter (Rootkit Detection)" echo "" if command -v rkhunter &>/dev/null; then echo -e "${GREEN}✓ RKHunter is already installed${NC}" echo "" read -p "Press Enter to continue..." return 0 fi echo "Installing RKHunter..." if command -v yum &>/dev/null; then yum install -y rkhunter 2>&1 | tail -3 elif command -v apt-get &>/dev/null; then apt-get install -y rkhunter 2>&1 | tail -3 else echo -e "${RED}✗ No compatible package manager found${NC}" return 1 fi if command -v rkhunter &>/dev/null; then echo -e "${GREEN}✓ RKHunter installed successfully${NC}" else echo -e "${RED}✗ Installation may have failed${NC}" fi echo "" read -p "Press Enter to continue..." } ``` **Update Maldet Submenu to include install option:** ```bash maldet_scan_submenu() { while true; do echo "" print_header "Maldet Scanner - Linux Malware Detection" echo "Fast, efficient, Linux-specific malware detection" echo "" if is_maldet_installed; then echo -e "${GREEN}✓ Maldet is installed${NC}" else echo -e "${RED}✗ Maldet is NOT installed${NC}" fi echo "" echo "Select option:" echo -e " ${CYAN}1.${NC} Scan entire server (fastest comprehensive scan)" echo -e " ${CYAN}2.${NC} Scan all user accounts" echo -e " ${CYAN}3.${NC} Scan specific user account" echo -e " ${CYAN}4.${NC} Scan specific domain" echo -e " ${CYAN}5.${NC} Scan custom path" echo "" echo -e " ${CYAN}6.${NC} Update Maldet signatures" echo -e " ${CYAN}7.${NC} View Maldet results" echo -e " ${CYAN}8.${NC} Install Maldet (if not installed)" # ← NEW echo "" echo -e " ${RED}0.${NC} Back to main menu" echo "" while true; do read -p "Select option (0-8): " choice if ! [[ "$choice" =~ ^[0-8]$ ]]; then echo -e "${RED}Invalid option${NC}" sleep 1 continue fi case $choice in 1) if is_maldet_installed; then maldet_launch_scan "server" else echo -e "${RED}Maldet not installed. Install first (option 8).${NC}" sleep 2 fi break ;; 2) maldet_launch_scan "all_users"; break ;; 3) maldet_launch_scan "user"; break ;; 4) maldet_launch_scan "domain"; break ;; 5) maldet_launch_scan "custom"; break ;; 6) maldet_update_signatures; break ;; 7) maldet_view_results; break ;; 8) install_maldet_only; break ;; # ← NEW 0) return 0 ;; esac done done } ``` **Also add a Scanner Install Submenu:** ```bash scanner_install_submenu() { while true; do echo "" print_banner "Install Individual Scanners" echo "" echo "Available Scanners:" echo -e " ${CYAN}1.${NC} Maldet (Fast, Linux-specific)" [ ! -f "/usr/bin/imunify-antivirus" ] && echo " Status: NOT installed" [ -f "/usr/bin/imunify-antivirus" ] && echo " Status: ✓ Installed" echo -e " ${CYAN}2.${NC} ClamAV (Free, open source)" command -v clamscan &>/dev/null && echo " Status: ✓ Installed" || echo " Status: NOT installed" echo -e " ${CYAN}3.${NC} RKHunter (Rootkit detection)" command -v rkhunter &>/dev/null && echo " Status: ✓ Installed" || echo " Status: NOT installed" echo "" echo -e " ${CYAN}4.${NC} Install ALL scanners (Maldet + ClamAV + RKHunter + ImunifyAV)" echo -e " ${RED}0.${NC} Back" echo "" read -p "Select option: " choice case "$choice" in 1) install_maldet_only; break ;; 2) install_clamav_only; break ;; 3) install_rkhunter_only; break ;; 4) install_all_scanners; break ;; 0) return 0 ;; *) echo "Invalid option"; sleep 1 ;; esac done } ``` **Update main menu to show install submenu:** ```bash # In Configuration section of main menu: echo -e " ${CYAN}10.${NC} Install individual scanners" echo -e " ${CYAN}11.${NC} Install all scanners (recommended first time)" echo -e " ${CYAN}12.${NC} Scanner settings" ``` --- ## Implementation Plan ### Phase 1: Fix ClamAV Installation (10 minutes) 1. Edit `/root/server-toolkit-beta/modules/security/malware-scanner.sh` lines 223-235 2. Add fallback logic for missing cPanel scripts 3. Test: Run "Install all scanners" again, should not fail on ClamAV ### Phase 2: Add Individual Scanner Install (30 minutes) 1. Add `install_maldet_only()` function 2. Add `install_clamav_only()` function 3. Add `install_rkhunter_only()` function 4. Update Maldet submenu to include option 8 "Install Maldet" 5. Update main menu with new install submenu 6. Test each individual installer ### Phase 3: Copy to Production (5 minutes) 1. Copy fixed `/root/server-toolkit-beta/modules/security/malware-scanner.sh` to production 2. Test production version --- ## Testing Checklist - [ ] ClamAV installs even if `/scripts/check_cpanel_rpms` missing - [ ] Maldet can be installed from Maldet submenu (option 8) - [ ] Individual scanners can be installed one at a time - [ ] "Install all scanners" still works - [ ] Scanner status shows as "✓ Installed" after installation - [ ] Installation functions handle already-installed cases gracefully - [ ] No exit code 127 errors --- ## Expected Behavior After Fix **Scenario 1: User wants to install Maldet only** ``` bash launcher.sh → Security → Malware Scanner → Maldet menu → Select "8. Install Maldet" → Maldet installs (just Maldet, nothing else) → User can immediately scan with Maldet ``` **Scenario 2: User's cPanel scripts are missing** ``` bash launcher.sh → Security → Malware Scanner → Install all scanners → ClamAV installation tries cPanel scripts → Scripts missing, gracefully falls back to yum → ClamAV installs successfully → Installation continues with other scanners ```