diff options
| -rw-r--r-- | CHANGELOG.md | 11 | ||||
| -rw-r--r-- | VERSION | 2 | ||||
| -rwxr-xr-x | update.sh | 189 |
3 files changed, 200 insertions, 2 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 899e95c..44de820 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,12 @@ +drestic (1.2.0) stable; urgency=medium + + * Added automated update script for seamless upgrades + * Update script detects installation type (user/system) + * Automatic backup of configurations before update + * Optional bandwidth limit migration (1M -> 2M) + + -- Sam <samsci@posteo.com> Wed, 22 Oct 2025 14:21:00 +1000 + drestic (1.1.0) stable; urgency=medium * Critical: Fixed memory swap configuration preventing swap usage @@ -8,7 +17,7 @@ drestic (1.1.0) stable; urgency=medium - Prune failures are warnings instead of errors - Memory limits increased from 500M to 512M for better stability - -- Sam <samsci@posteo.com> Thu, 16 Jan 2025 10:00:00 -0000 + -- Sam <samsci@posteo.com> Wed, 22 Oct 2025 14:15:00 +1000 drestic (1.0.0) stable; urgency=low @@ -1 +1 @@ -1.1.0
\ No newline at end of file +1.2.0
\ No newline at end of file diff --git a/update.sh b/update.sh new file mode 100755 index 0000000..6bc6de8 --- /dev/null +++ b/update.sh @@ -0,0 +1,189 @@ +#!/bin/bash +set -euo pipefail + +# Update script for drestic installations +# Detects installation type and updates files safely + +log() { + echo "--- $* ---" +} + +error() { + echo "Error: $*" >&2 + exit 1 +} + +# Detect installation type +detect_installation() { + if [ -f "/root/.restic_env" ] && [ -d "/etc/restic" ]; then + echo "system" + elif [ -f "$HOME/.config/restic/env" ]; then + echo "user" + else + error "Cannot detect drestic installation. Not found in system (/root/.restic_env) or user ($HOME/.config/restic/env) locations." + fi +} + +# Check if running as root for system installation +check_permissions() { + local install_type="$1" + if [ "$install_type" = "system" ] && [ "$EUID" -ne 0 ]; then + error "System installation update requires root. Run with sudo." + fi +} + +# Backup existing configuration files +backup_configs() { + local install_type="$1" + local backup_dir + + if [ "$install_type" = "system" ]; then + backup_dir="/etc/restic/backup-$(date +%Y%m%d-%H%M%S)" + sudo mkdir -p "$backup_dir" + else + backup_dir="$HOME/.config/restic/backup-$(date +%Y%m%d-%H%M%S)" + mkdir -p "$backup_dir" + fi + + log "Backing up configuration to $backup_dir" + + if [ "$install_type" = "system" ]; then + sudo cp -r /etc/restic/* "$backup_dir/" 2>/dev/null || true + else + cp -r "$HOME/.config/restic"/* "$backup_dir/" 2>/dev/null || true + fi + + echo "$backup_dir" +} + +# Update scripts +update_scripts() { + local install_type="$1" + local install_dir + + if [ "$install_type" = "system" ]; then + install_dir="/usr/local/bin" + log "Updating scripts in $install_dir" + sudo cp restic_backup.sh "$install_dir/" + sudo cp restic_check.sh "$install_dir/" + sudo cp common.sh "$install_dir/" + sudo chmod +x "$install_dir/restic_*.sh" "$install_dir/common.sh" + else + install_dir="$HOME/.local/bin" + mkdir -p "$install_dir" + log "Updating scripts in $install_dir" + cp restic_backup.sh "$install_dir/" + cp restic_check.sh "$install_dir/" + cp common.sh "$install_dir/" + chmod +x "$install_dir/restic_*.sh" "$install_dir/common.sh" + fi +} + +# Update systemd services +update_services() { + local install_type="$1" + local systemd_dir + + if [ "$install_type" = "system" ]; then + systemd_dir="/etc/systemd/system" + log "Updating systemd services in $systemd_dir" + sudo cp systemd/restic-backup.service "$systemd_dir/" + sudo cp systemd/restic-check.service "$systemd_dir/" + sudo systemctl daemon-reload + else + systemd_dir="$HOME/.config/systemd/user" + mkdir -p "$systemd_dir" + log "Updating systemd services in $systemd_dir" + cp systemd/restic-backup.service "$systemd_dir/" + cp systemd/restic-check.service "$systemd_dir/" + systemctl --user daemon-reload + fi +} + +# Optional: Update bandwidth limit in environment file +update_bandwidth() { + local install_type="$1" + local env_file + + if [ "$install_type" = "system" ]; then + env_file="/root/.restic_env" + else + env_file="$HOME/.config/restic/env" + fi + + # Check if file exists and has old bandwidth setting + if [ -f "$env_file" ] && grep -q "RCLONE_BWLIMIT=1M" "$env_file"; then + log "Updating rclone bandwidth limit from 1M to 2M" + if [ "$install_type" = "system" ]; then + sudo sed -i 's/RCLONE_BWLIMIT=1M/RCLONE_BWLIMIT=2M/' "$env_file" + else + sed -i 's/RCLONE_BWLIMIT=1M/RCLONE_BWLIMIT=2M/' "$env_file" + fi + fi +} + +# Restart services +restart_services() { + local install_type="$1" + + log "Restarting systemd timers" + if [ "$install_type" = "system" ]; then + sudo systemctl restart restic-backup.timer restic-check.timer + echo "System services updated. Check status with:" + echo " sudo systemctl status restic-backup.timer restic-check.timer" + else + systemctl --user restart restic-backup.timer restic-check.timer + echo "User services updated. Check status with:" + echo " systemctl --user status restic-backup.timer restic-check.timer" + fi +} + +# Main update logic +main() { + log "Starting drestic update process" + + # Get script directory + SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + cd "$SCRIPT_DIR" + + # Check we're in a git repo + if ! git rev-parse --git-dir > /dev/null 2>&1; then + error "Not in a git repository. Please run from drestic directory." + fi + + # Detect installation type + install_type=$(detect_installation) + log "Detected $install_type installation" + + # Check permissions + check_permissions "$install_type" + + # Backup configs + backup_dir=$(backup_configs "$install_type") + log "Configuration backed up to: $backup_dir" + + # Update scripts + update_scripts "$install_type" + + # Update services + update_services "$install_type" + + # Update bandwidth (optional) + update_bandwidth "$install_type" + + # Restart services + restart_services "$install_type" + + log "Update completed successfully!" + echo "" + echo "Key improvements in this update:" + echo " - Memory limits increased (512M RAM, 1G swap) to prevent OOM" + echo " - Prune coordination (2-4 AM window) to avoid multi-device conflicts" + echo " - Lock retry settings for robust multi-device operation" + echo " - Bandwidth increased from 1M to 2M for better performance" + echo "" + echo "If you encounter issues, restore from: $backup_dir" +} + +# Run main function +main "$@"
\ No newline at end of file |
