diff --git a/modules/backup/acronis-update.sh b/modules/backup/acronis-update.sh index b899c8b..a82cf2a 100755 --- a/modules/backup/acronis-update.sh +++ b/modules/backup/acronis-update.sh @@ -1,7 +1,17 @@ #!/bin/bash +################################################################################ +# Acronis Agent Update/Upgrade +################################################################################ +# Purpose: Update Acronis Cyber Protect agent to latest version +# Methods: +# - Automatic via cloud (web console) +# - Manual download and upgrade (preserves config/registration) +################################################################################ + SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" source "$SCRIPT_DIR/lib/common-functions.sh" +source "$SCRIPT_DIR/lib/system-detect.sh" if [ "$EUID" -ne 0 ]; then print_error "This script must be run as root" @@ -11,7 +21,20 @@ fi print_banner "Update Acronis Agent" echo "" -echo -e "${BOLD}Acronis Agent Update${NC}" + +# Check if Acronis is installed +if ! systemctl list-unit-files | grep -q "acronis_mms.service"; then + print_error "Acronis is not installed" + echo "" + echo "Install Acronis first:" + echo " 1. Return to Acronis menu" + echo " 2. Select 'Install Acronis Agent'" + echo "" + press_enter + exit 1 +fi + +echo -e "${BOLD}Current Installation${NC}" echo "" # Check current version @@ -20,59 +43,272 @@ if [ -f "/usr/lib/Acronis/BackupAndRecovery/aakore" ]; then current_version=$(/usr/lib/Acronis/BackupAndRecovery/aakore --version 2>/dev/null | head -1 || echo "Unknown") echo " Current version: ${current_version}" else - print_error "Acronis agent not found" - press_enter - exit 1 + echo " ${YELLOW}Version unknown${NC}" +fi + +# Check service status +echo "" +echo "→ Service status:" +if systemctl is-active --quiet acronis_mms; then + echo " ${GREEN}✓${NC} Services are running" +else + echo " ${YELLOW}⚠${NC} Some services are stopped" fi echo "" -echo -e "${BOLD}Update Methods:${NC}" +echo -e "${CYAN}──────────────────────────────────────────────────────────────${NC}" +echo "" +echo -e "${BOLD}Update Methods${NC}" echo "" echo -e "${CYAN}1. Automatic Update (via Acronis Cloud)${NC}" echo " • Managed from web console" echo " • Navigate to: Settings → Agent updates" -echo " • Enable automatic updates or schedule manually" +echo " • Can enable automatic updates" +echo " • Recommended for production environments" echo "" -echo -e "${CYAN}2. Manual Update (Download + Install)${NC}" -echo " • Download latest agent installer" -echo " • Install over existing agent" +echo -e "${CYAN}2. Manual Update (Download + Upgrade)${NC}" +echo " • Downloads latest installer" +echo " • Runs upgrade automatically" echo " • Preserves configuration and registration" +echo " • Agent stays registered to same account" echo "" -echo -n "Select update method (1/2) or 0 to cancel [1]: " +echo -n "Select update method (1/2) or 0 to cancel [2]: " read -r method -method="${method:-1}" +method="${method:-2}" case "$method" in 1) + # Automatic update instructions + clear + print_banner "Automatic Agent Updates" echo "" - echo "Automatic updates are managed through Acronis Cloud." + echo -e "${BOLD}Configure Automatic Updates via Web Console${NC}" echo "" - echo "To enable:" + echo "Steps:" echo " 1. Log in to Acronis web console" - echo " 2. Go to: Settings → Agent updates" - echo " 3. Configure update policy for this agent" + + # Try to get cloud URL + if [ -f "/etc/Acronis/Global.config" ]; then + cloud_url=$(grep -oP 'CloudUrl[>="].*?https://[^"<]+' /etc/Acronis/Global.config 2>/dev/null | grep -oP 'https://[^"<]+' | head -1) + if [ -n "$cloud_url" ]; then + echo " ${cloud_url}" + fi + fi + echo "" + echo " 2. Navigate to: Settings → Agent updates" + echo "" + echo " 3. Options available:" + echo " • Enable automatic updates" + echo " • Schedule update time" + echo " • Set update policy per device" + echo " • Configure notification preferences" + echo "" + echo " 4. Agents will update during maintenance window" + echo "" + echo -e "${GREEN}Benefits:${NC}" + echo " ✓ Centrally managed" + echo " ✓ Scheduled updates" + echo " ✓ Rollback capability" + echo " ✓ Update verification" + echo "" + press_enter ;; + 2) + # Manual update/upgrade + clear + print_banner "Manual Agent Upgrade" echo "" - echo "Manual update will download and install the latest agent." + echo -e "${BOLD}Upgrade Process${NC}" echo "" - echo -n "Proceed with manual update? (yes/no): " + echo "This will:" + echo " 1. Download the latest Acronis agent installer" + echo " 2. Run installer over existing installation" + echo " 3. Automatically upgrade to latest version" + echo " 4. Preserve all configuration and registration" + echo " 5. Restart services with new version" + echo "" + echo -e "${YELLOW}Note:${NC} The agent will stay registered to your Acronis account." + echo " No need to re-register after upgrade." + echo "" + echo -e "${CYAN}──────────────────────────────────────────────────────────────${NC}" + echo "" + + # Get cloud URL for download + SERVICE_URL="us5-cloud.acronis.com" + if [ -f "/etc/Acronis/Global.config" ]; then + config_url=$(grep -oP 'CloudUrl[>="].*?https://[^"<]+' /etc/Acronis/Global.config 2>/dev/null | grep -oP 'https://[^"<]+' | head -1) + if [ -n "$config_url" ]; then + SERVICE_URL=$(echo "$config_url" | sed 's|https://||' | sed 's|/.*||') + fi + fi + + echo "Download region: ${SERVICE_URL}" + echo "" + echo -n "Proceed with upgrade? (yes/no): " read -r confirm - if [ "$confirm" = "yes" ]; then + + if [[ ! "$confirm" =~ ^[Yy]([Ee][Ss])?$ ]]; then echo "" - echo "→ This will run the installer in upgrade mode..." + print_error "Upgrade cancelled" + press_enter + exit 0 + fi + + echo "" + echo -e "${BOLD}Starting Upgrade...${NC}" + echo "" + + # Create download directory + DOWNLOAD_DIR="$SCRIPT_DIR/downloads" + mkdir -p "$DOWNLOAD_DIR" + cd "$DOWNLOAD_DIR" || exit 1 + + INSTALL_DIR="$DOWNLOAD_DIR/acronis-upgrade-$(date +%Y%m%d-%H%M%S)" + mkdir -p "$INSTALL_DIR" + cd "$INSTALL_DIR" || exit 1 + + # Download installer + echo "→ Downloading latest Acronis agent..." + DOWNLOAD_URL="https://${SERVICE_URL}/bc/api/ams/links/agents/redirect?language=multi&system=linux&architecture=64&productType=enterprise" + + if wget -q --show-progress "$DOWNLOAD_URL" -O "Cyber_Protection_Agent_for_Linux_x86_64.bin"; then + print_success "Download complete" + else + print_error "Download failed" echo "" - echo "Note: You can use the 'Install Acronis Agent' option" - echo "which will detect existing installation and offer upgrade." + echo "Possible causes:" + echo " • No internet connection" + echo " • Invalid service URL" + echo " • Firewall blocking connection" + echo "" + cd "$SCRIPT_DIR" + rm -rf "$INSTALL_DIR" + press_enter + exit 1 + fi + + echo "" + + # Make executable + chmod +x "Cyber_Protection_Agent_for_Linux_x86_64.bin" 2>/dev/null + + # Verify file + file_size=$(stat -c%s "Cyber_Protection_Agent_for_Linux_x86_64.bin" 2>/dev/null || echo "0") + if [ "$file_size" -lt 1000000 ]; then + print_error "Downloaded file is too small (possibly corrupted)" + cd "$SCRIPT_DIR" + rm -rf "$INSTALL_DIR" + press_enter + exit 1 + fi + + # Run upgrade (unattended mode) + echo "→ Running upgrade..." + echo "" + echo "The installer will automatically:" + echo " • Detect existing installation" + echo " • Upgrade to latest version" + echo " • Preserve configuration" + echo " • Keep registration" + echo "" + sleep 2 + + echo -e "${DIM}──────────────────────────────────────────────────────────────${NC}" + + # Run installer in unattended mode + ./Cyber_Protection_Agent_for_Linux_x86_64.bin -a + + UPGRADE_EXIT_CODE=$? + + echo -e "${DIM}──────────────────────────────────────────────────────────────${NC}" + echo "" + + # Check result + if [ $UPGRADE_EXIT_CODE -eq 0 ]; then + print_success "Upgrade completed successfully!" + echo "" + + # Check new version + echo "→ Verifying upgrade..." + sleep 2 + + if [ -f "/usr/lib/Acronis/BackupAndRecovery/aakore" ]; then + new_version=$(/usr/lib/Acronis/BackupAndRecovery/aakore --version 2>/dev/null | head -1 || echo "Unknown") + echo " New version: ${new_version}" + echo "" + + if [ "$new_version" != "$current_version" ]; then + print_success "Agent upgraded: $current_version → $new_version" + else + echo " ${YELLOW}Version appears unchanged (may already be latest)${NC}" + fi + fi + + echo "" + + # Check services + echo "→ Checking services..." + sleep 1 + + if systemctl is-active --quiet acronis_mms; then + print_success "Services are running" + else + echo " ${YELLOW}⚠ Services may need restart${NC}" + echo "" + echo -n "Restart Acronis services? (yes/no): " + read -r restart_confirm + + if [[ "$restart_confirm" =~ ^[Yy]([Ee][Ss])?$ ]]; then + echo "" + echo "→ Restarting services..." + systemctl restart aakore + systemctl restart acronis_mms + systemctl restart acronis_schedule + sleep 2 + + if systemctl is-active --quiet acronis_mms; then + print_success "Services restarted" + else + print_error "Service restart failed" + echo "Check status: systemctl status acronis_mms" + fi + fi + fi + + echo "" + echo -e "${GREEN}${BOLD}✓ Upgrade Complete${NC}" + echo "" + echo "The agent has been upgraded and remains registered." + echo "Backups will continue according to existing schedules." + echo "" + + else + print_error "Upgrade failed with exit code $UPGRADE_EXIT_CODE" + echo "" + echo "Common issues:" + echo " • Agent is already latest version" + echo " • Insufficient disk space" + echo " • Services in use" + echo "" + echo "Check logs for details:" + echo " tail -f /var/lib/Acronis/BackupAndRecovery/MMS/mms.0.log" echo "" fi + + # Cleanup + echo "→ Cleaning up installation files..." + cd "$SCRIPT_DIR" + rm -rf "$INSTALL_DIR" + echo "" + + press_enter ;; + *) echo "" echo "Update cancelled" + press_enter ;; esac - -echo "" -press_enter