142 lines
3.4 KiB
Bash
Executable File
142 lines
3.4 KiB
Bash
Executable File
#!/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
|