59 lines
1.4 KiB
Bash
Executable file
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!"
|