Implement functional Acronis agent upgrade

Completely rewrote acronis-update.sh to actually perform upgrades:

Features:
- Checks current version before upgrade
- Shows service status
- Two upgrade methods:
  1. Automatic (web console instructions)
  2. Manual (downloads and runs upgrade)

Manual Upgrade Process:
- Detects existing installation automatically
- Extracts cloud URL from /etc/Acronis/Global.config
- Downloads latest installer from correct region
- Runs installer in unattended mode (-a flag)
- Installer automatically upgrades over existing installation
- Preserves configuration and registration
- Shows version before/after upgrade
- Verifies services running after upgrade
- Offers to restart services if needed
- Cleans up download files

What Gets Preserved During Upgrade:
✓ Agent registration (stays connected to account)
✓ Backup plan configurations
✓ Connection settings
✓ Service configurations

Based on Acronis documentation research:
- Running installer over existing installation = automatic upgrade
- No uninstall needed
- No re-registration needed
This commit is contained in:
cschantz
2025-11-06 16:12:24 -05:00
parent 9cc1d70c83
commit f291a1f0c5
+260 -24
View File
@@ -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