#!/bin/sh # stops the script immediately if any error is encountered set -e PINK="\033[35m" RESET="\033[0m" kanidm_backup() { # $1 = out path echo -e "$PINK kanidm: backing up database$RESET" DATABASE_DUMP_PATH="$(mktemp)" chown kanidm:kanidm "$DATABASE_DUMP_PATH" run0 -u kanidm --unit=kanidmd sh -c "kanidmd database backup \"$DATABASE_DUMP_PATH\"" rsync "$DATABASE_DUMP_PATH" "$1" rm "$DATABASE_DUMP_PATH" echo -e "$PINK kanidm: DONE$RESET" } postgres_backup() { # $1 = database to backup # $2 = location to put backup echo -e "$PINK postgres($1): backing up database $1 to stdout$RESET" run0 -u postgres pg_dump --dbname="$1" > "$2" echo -e "$PINK postgres($1): DONE$RESET" } if [ "$1" = "" ]; then echo "$0: [BACKUP_DIR]" exit 1 elif [ "$USER" != "root" ]; then echo "$0: rerun the script as root" exit 1 fi case "$1" in /*) echo " ";; *) echo "$0: use absolute path for backup dir"; exit 1;; esac BACKUP_DIR="$1" echo -e "$PINK using folder $BACKUP_DIR$RESET" mkdir --parents "$BACKUP_DIR" SERVICES="jellyfin radarr sonarr prowlarr uptime-kuma deluged forgejo karakeep-web karakeep-workers karakeep-browser" systemctl stop $SERVICES rsync -avP /media/ --exclude "media" --exclude "secrets" --exclude "torrents" --include "torrents/files/*" "$BACKUP_DIR" kanidm_backup "$BACKUP_DIR"/apps/kanidm.bak postgres_backup miniflux "$BACKUP_DIR"/apps/miniflux.sql systemctl start $SERVICES echo -e "\n\nBACKUP COMPLETED!"