summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam Scholten2025-10-22 14:23:12 +1000
committerSam Scholten2025-10-22 15:32:14 +1000
commit5abbc944a50bf9e563d38e51f3ea5ff60076093b (patch)
treeaf2b20f64c9d3f1b6ea7e532aface65c11b3ab78
parenteded676575e6ef6150235b71d34ec4612f1a7bfb (diff)
downloaddrestic-5abbc944a50bf9e563d38e51f3ea5ff60076093b.tar.gz
drestic-5abbc944a50bf9e563d38e51f3ea5ff60076093b.zip
Release v1.2.0: Add automated update script
- Add update.sh script for seamless upgrades - Automatically detects user/system installations - Backs up configurations before updating - Migrates bandwidth limit from 1M to 2M - Updates scripts and services safely
-rw-r--r--CHANGELOG.md11
-rw-r--r--VERSION2
-rwxr-xr-xupdate.sh189
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
diff --git a/VERSION b/VERSION
index 1cc5f65..867e524 100644
--- a/VERSION
+++ b/VERSION
@@ -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