#!/bin/bash # IPMI Controller - Backup and Restore SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" DATA_DIR="${DATA_DIR:-$SCRIPT_DIR/data}" BACKUP_DIR="${BACKUP_DIR:-$SCRIPT_DIR/backups}" show_help() { echo "IPMI Controller - Backup/Restore Tool" echo "" echo "Usage:" echo " $0 backup - Create backup" echo " $0 restore [filename] - Restore from backup" echo " $0 list - List available backups" echo " $0 auto - Auto-backup (cron-friendly)" echo "" } create_backup() { mkdir -p "$BACKUP_DIR" TIMESTAMP=$(date +%Y%m%d_%H%M%S) BACKUP_FILE="$BACKUP_DIR/ipmi-controller-backup-$TIMESTAMP.tar.gz" echo "📦 Creating backup..." tar -czf "$BACKUP_FILE" -C "$SCRIPT_DIR" data/ 2>/dev/null if [ $? -eq 0 ]; then echo "✅ Backup created: $BACKUP_FILE" echo "" ls -lh "$BACKUP_FILE" else echo "❌ Backup failed" exit 1 fi } restore_backup() { if [ -z "$1" ]; then echo "❌ Please specify backup file" list_backups exit 1 fi BACKUP_FILE="$BACKUP_DIR/$1" if [ ! -f "$BACKUP_FILE" ]; then BACKUP_FILE="$1" fi if [ ! -f "$BACKUP_FILE" ]; then echo "❌ Backup file not found: $1" exit 1 fi echo "⚠️ This will overwrite current settings!" read -p "Are you sure? (yes/no): " confirm if [ "$confirm" != "yes" ]; then echo "Aborted" exit 0 fi # Create safety backup first echo "📦 Creating safety backup..." mkdir -p "$BACKUP_DIR" TIMESTAMP=$(date +%Y%m%d_%H%M%S) tar -czf "$BACKUP_DIR/safety-backup-before-restore-$TIMESTAMP.tar.gz" -C "$SCRIPT_DIR" data/ 2>/dev/null # Stop service if running if systemctl is-active --quiet ipmi-controller 2>/dev/null; then echo "🛑 Stopping service..." sudo systemctl stop ipmi-controller WAS_RUNNING=true else WAS_RUNNING=false fi # Restore echo "📥 Restoring from backup..." tar -xzf "$BACKUP_FILE" -C "$SCRIPT_DIR" if [ $? -eq 0 ]; then echo "✅ Restore complete" # Restart service if it was running if [ "$WAS_RUNNING" = true ]; then echo "🚀 Starting service..." sudo systemctl start ipmi-controller fi else echo "❌ Restore failed" exit 1 fi } list_backups() { echo "📂 Available backups:" echo "" if [ -d "$BACKUP_DIR" ] && [ "$(ls -A "$BACKUP_DIR")" ]; then ls -lh "$BACKUP_DIR"/*.tar.gz 2>/dev/null | awk '{print " " $9 " (" $5 ")"}' else echo " No backups found" fi } auto_backup() { # This is cron-friendly - keeps only last 30 days mkdir -p "$BACKUP_DIR" # Create backup TIMESTAMP=$(date +%Y%m%d_%H%M%S) BACKUP_FILE="$BACKUP_DIR/auto-backup-$TIMESTAMP.tar.gz" tar -czf "$BACKUP_FILE" -C "$SCRIPT_DIR" data/ 2>/dev/null # Clean old backups (keep last 30 days) find "$BACKUP_DIR" -name "auto-backup-*.tar.gz" -mtime +30 -delete 2>/dev/null echo "Auto-backup complete: $BACKUP_FILE" } case "${1:-}" in backup) create_backup ;; restore) restore_backup "$2" ;; list) list_backups ;; auto) auto_backup ;; help|--help|-h) show_help ;; *) show_help exit 1 ;; esac