diff options
Diffstat (limited to 'scripts/system-restore')
-rwxr-xr-x | scripts/system-restore | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/scripts/system-restore b/scripts/system-restore new file mode 100755 index 0000000..a95a185 --- /dev/null +++ b/scripts/system-restore @@ -0,0 +1,62 @@ +#!/bin/bash + +BACKUP="$1" +if [ -z "$BACKUP" ] || [ ! -f "$BACKUP" ]; then + echo "Backup file not found: $BACKUP" + exit 1 +fi + +if [ "$(whoami)" != "root" ]; then + echo "Must be running as root!" + exit 1 +fi + +DIR="/root/restore/$(date +%s)" + +if [ -d "$DIR" ]; then + echo "Restore already running!?" + exit 1 +fi + +mkdir -p "$DIR" +if ! cd "$DIR"; then + echo "Could not cd to $DIR" + exit 1 +fi + +if ! tar --ignore-failed-read -x -f "$BACKUP"; then + echo "Could not extract $BACKUP - make sure it's a valid .tar.gz / .tgz" + exit 1 +fi + +if [ ! -f db.sql ]; then + echo "Error: database dump not found in backup - are you sure this is a valid backup?" + exit 1 +fi + +if [ ! -f files.tgz ]; then + echo "Error: files.tgz not found in backup - are your sure this is a valid backup?" + exit 1 +fi + +mysql --defaults-extra-file=/etc/mysql/debian.cnf --default-character-set=utf8 < db.sql +RET=$? +if [ $RET -ne 0 ]; then + echo "Error: Restoring database contents failed with exit code $RET" + exit 1 +fi +echo "UPDATE openslx.property SET value = 'invalid' WHERE name = 'server-ip' LIMIT 1" | mysql --defaults-extra-file=/etc/mysql/debian.cnf --default-character-set=utf8 + +tar --ignore-failed-read -x -f files.tgz -C / +RET=$? +if [ $RET -ne 0 ]; then + echo "WARNING: Restoring filesystem contents failed with exit code $RET - backup might be incomplete!" +fi + +rm -rf -- "$DIR" +rm -f -- "$BACKUP" + +echo "Success." + +exit 0 + |