aboutsummaryrefslogtreecommitdiffstats
path: root/lifeboat
diff options
context:
space:
mode:
Diffstat (limited to 'lifeboat')
-rwxr-xr-xlifeboat48
1 files changed, 45 insertions, 3 deletions
diff --git a/lifeboat b/lifeboat
index d4100d0..9d569f5 100755
--- a/lifeboat
+++ b/lifeboat
@@ -15,13 +15,55 @@ usage() {
run_backup() {
(
cd "$rootdir/$repo"
- ./run
- for i in post sync; do
- test -x $i && ./$i
+
+ for i in run retain clean sync; do
+ if test -x $i; then
+ ./$i
+ else
+ ${i}_default;
+ fi
done
)
}
+run_default() {
+ restic-priv backup --files-from config/include --exclude-file config/exclude --exclude-caches
+}
+
+retain_default() {
+ restic forget --keep-daily 7 --keep-weekly 5 --keep-monthly 12 --keep-yearly 2
+}
+
+clean_default() {
+ restic check
+ restic prune
+}
+
+sync_default() {
+ if ! test -r config/sync; then
+ return
+ fi
+
+ while read -r target_spec; do
+ target=$(echo "$target_spec" | cut -f1)
+ limit=$(echo "$target_spec" | cut -sf2)
+
+ if test -n "$limit"; then
+ if test "$(du -s "$RESTIC_REPOSITORY" | cut -f1)" -gt "$limit"; then
+ printf "Warning: size threshold exceeded, skipping sync to %s\n" "$target/$LIFEBOAT_REPO_NAME"
+ else
+ sync_single "$target"
+ fi
+ else
+ sync_single "$target"
+ fi
+ done < config/sync
+}
+
+sync_single() {
+ rclone sync --transfers 20 --fast-list "$RESTIC_REPOSITORY" "$1/$LIFEBOAT_REPO_NAME"
+}
+
rootdir=${LIFEBOAT_ROOT:-"/srv/backup/lifeboat"}
test $# -lt 2 && usage