blob: 2b21a77d5273dad94943491fe63aa8f7d058c035 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
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 "$@"
|