dots/backup.sh

59 lines
1.4 KiB
Bash
Executable file

#!/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!"