Add Restic backup repository initialization script
Initialize encrypted backup repository on NAS with: - Auto-install of Restic if needed - Secure password generation and storage - Repository initialization with AES-256 encryption
This commit is contained in:
74
scripts/backup-init.sh
Executable file
74
scripts/backup-init.sh
Executable file
@@ -0,0 +1,74 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Initialize Restic backup repository on NAS
|
||||||
|
# Run once to set up the backup system
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Configuration
|
||||||
|
BACKUP_REPO="/mnt/nas/backups/homelab-restic"
|
||||||
|
PASSWORD_FILE="/home/hoborg/creds/restic-password.txt"
|
||||||
|
|
||||||
|
echo "========================================"
|
||||||
|
echo "Restic Backup Repository Initialization"
|
||||||
|
echo "========================================"
|
||||||
|
echo ""
|
||||||
|
echo "This will:"
|
||||||
|
echo " 1. Install restic if needed"
|
||||||
|
echo " 2. Create backup repository at: $BACKUP_REPO"
|
||||||
|
echo " 3. Generate and save encryption password"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Check if restic is installed
|
||||||
|
if ! command -v restic &> /dev/null; then
|
||||||
|
echo "Installing restic..."
|
||||||
|
pacman -S --needed --noconfirm restic
|
||||||
|
echo "✓ Restic installed"
|
||||||
|
else
|
||||||
|
echo "✓ Restic already installed ($(restic version))"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Create backup directory on NAS
|
||||||
|
echo ""
|
||||||
|
echo "Creating backup directory on NAS..."
|
||||||
|
mkdir -p "$BACKUP_REPO"
|
||||||
|
echo "✓ Directory created: $BACKUP_REPO"
|
||||||
|
|
||||||
|
# Generate random password if doesn't exist
|
||||||
|
echo ""
|
||||||
|
if [ -f "$PASSWORD_FILE" ]; then
|
||||||
|
echo "✓ Password file already exists: $PASSWORD_FILE"
|
||||||
|
else
|
||||||
|
echo "Generating encryption password..."
|
||||||
|
mkdir -p /home/hoborg/creds
|
||||||
|
openssl rand -base64 32 > "$PASSWORD_FILE"
|
||||||
|
chmod 600 "$PASSWORD_FILE"
|
||||||
|
echo "✓ Password saved to: $PASSWORD_FILE"
|
||||||
|
echo "⚠️ IMPORTANT: Back up this password file! Without it, backups cannot be restored."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Export password for restic
|
||||||
|
export RESTIC_PASSWORD_FILE="$PASSWORD_FILE"
|
||||||
|
|
||||||
|
# Initialize repository
|
||||||
|
echo ""
|
||||||
|
echo "Initializing Restic repository..."
|
||||||
|
if restic -r "$BACKUP_REPO" snapshots &>/dev/null; then
|
||||||
|
echo "✓ Repository already initialized"
|
||||||
|
else
|
||||||
|
restic -r "$BACKUP_REPO" init
|
||||||
|
echo "✓ Repository initialized"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "========================================"
|
||||||
|
echo "Backup Repository Ready!"
|
||||||
|
echo "========================================"
|
||||||
|
echo ""
|
||||||
|
echo "Repository location: $BACKUP_REPO"
|
||||||
|
echo "Password file: $PASSWORD_FILE"
|
||||||
|
echo ""
|
||||||
|
echo "Next steps:"
|
||||||
|
echo " 1. Run backup-homelab.sh to create first backup"
|
||||||
|
echo " 2. Test restore with backup-restore.sh"
|
||||||
|
echo " 3. Enable automated backups with systemd timer"
|
||||||
|
echo ""
|
||||||
Reference in New Issue
Block a user