f291a1f0c5
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
315 lines
11 KiB
Bash
Executable File
315 lines
11 KiB
Bash
Executable File
#!/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"
|
|
exit 1
|
|
fi
|
|
|
|
print_banner "Update Acronis Agent"
|
|
|
|
echo ""
|
|
|
|
# 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
|
|
echo "→ Checking current agent version..."
|
|
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
|
|
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 "${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 " • Can enable automatic updates"
|
|
echo " • Recommended for production environments"
|
|
echo ""
|
|
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 [2]: "
|
|
read -r method
|
|
method="${method:-2}"
|
|
|
|
case "$method" in
|
|
1)
|
|
# Automatic update instructions
|
|
clear
|
|
print_banner "Automatic Agent Updates"
|
|
echo ""
|
|
echo -e "${BOLD}Configure Automatic Updates via Web Console${NC}"
|
|
echo ""
|
|
echo "Steps:"
|
|
echo " 1. Log in to Acronis web console"
|
|
|
|
# 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 -e "${BOLD}Upgrade Process${NC}"
|
|
echo ""
|
|
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" =~ ^[Yy]([Ee][Ss])?$ ]]; then
|
|
echo ""
|
|
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 "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
|