Commit Diff


commit - /dev/null
commit + b5b4cc01a072ae5ea6c6b8c6cf99b1f9ecd18a07
blob - /dev/null
blob + ac38a523c2c94fa24b018d62981e57db376c0b29 (mode 644)
--- /dev/null
+++ config.sh
@@ -0,0 +1,25 @@
+REMOTE_PROTOCOL="PROTOCOL" # TODO: replace me
+REMOTE_USERNAME="USER" # TODO: replace me
+REMOTE_HOSTNAME="HOSTNAME.TLD" # TODO: replace me
+REMOTE_REPOSITORY_PATH="/path/to/repo" # TODO: replace me
+REMOTE_URL="${REMOTE_PROTOCOL}:${REMOTE_USERNAME}@${REMOTE_HOSTNAME}"
+
+REMOTE_FORGET_KEEP="30" # TODO: replace me
+REMOTE_KEEP_HOURLY="48" # TODO: replace me
+REMOTE_KEEP_DAILY="14" # TODO: replace me
+REMOTE_KEEP_WEEKLY="8" # TODO: replace me
+REMOTE_KEEP_MONTHLY="12" # TODO: replace me
+REMOTE_KEEP_YEARLY="5" # TODO: replace me
+
+CONFIG_HOME="${XDG_CONFIG_HOME:-${HOME}/.config}" # TODO: replace me
+CONFIG_PATH="${CONFIG_HOME}/backup" # TODO: replace me
+
+REPOSITORY_PASSWORD="hunter2" # TODO: replace me
+EXCLUDE_FILE_PATH="${CONFIG_PATH}/excludes.txt" # TODO: replace me
+FILES_FROM_PATH="${CONFIG_PATH}/files_from.txt" # TODO: replace me
+BACKUP_DIRECTORY="${HOME}" # TODO: replace me
+
+RESTIC_OPTIONS="--quiet"
+
+export RESTIC_REPOSITORY="${REMOTE_URL}:${REMOTE_REPOSITORY_PATH}"
+export RESTIC_PASSWORD="${REPOSITORY_PASSWORD}"
blob - /dev/null
blob + 7b67d9cb5840ebe74e72771c5f6087b8e6fdb851 (mode 755)
--- /dev/null
+++ restic-backup.sh
@@ -0,0 +1,42 @@
+#!/bin/sh -eu
+
+exec >> /var/log/backup.log 2>&1
+date
+
+# backup home directory to external server using restic.
+# steps:
+#   1. backup
+#   2. keep last x snapshots
+
+printf "Using configuration file \"$1\"\n"
+# TODO: env var expanding in dot is not posix
+# https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#dot
+. "$1"
+
+backup() (
+	printf "Backing up ${BACKUP_DIRECTORY} to repository ${RESTIC_REPOSITORY}\n"
+
+	restic "${RESTIC_OPTIONS}" \
+		backup \
+		--exclude-file "${EXCLUDE_FILE_PATH}" \
+		--files-from "${FILES_FROM_PATH}" \
+		"${BACKUP_DIRECTORY}"
+)
+
+forget() (
+	printf "Running forget, keeping last ${REMOTE_FORGET_KEEP} snapshots\n"
+
+	restic "${RESTIC_OPTIONS}" \
+		forget \
+		--keep-last="${REMOTE_FORGET_KEEP}" \
+		--keep-hourly="${REMOTE_KEEP_HOURLY}" \
+		--keep-daily="${REMOTE_KEEP_DAILY}" \
+		--keep-weekly="${REMOTE_KEEP_WEEKLY}" \
+		--keep-montly="${REMOTE_KEEP_MONTHLY}" \
+		--keep-yearly="${REMOTE_KEEP_YEARLY}"
+)
+
+backup
+forget
+
+printf "Done\n"