diff options
Diffstat (limited to 'scripts/system-restore')
-rwxr-xr-x | scripts/system-restore | 86 |
1 files changed, 68 insertions, 18 deletions
diff --git a/scripts/system-restore b/scripts/system-restore index dfc5c3a..8a66558 100755 --- a/scripts/system-restore +++ b/scripts/system-restore @@ -1,5 +1,24 @@ #!/bin/bash +RES_OPENSLX=0 +RES_SAT=0 +case "$1" in + both) + RES_OPENSLX=1 + RES_SAT=1 + ;; + openslx) + RES_OPENSLX=1 + ;; + sat) + RES_SAT=1 + ;; + *) + echo "Error: Restore mode must be one of both, openslx, sat" + exit 1 + ;; +esac + BACKUP="$1" if [ -z "$BACKUP" ] || [ ! -f "$BACKUP" ]; then echo "Backup file not found: $BACKUP" @@ -29,37 +48,68 @@ if ! tar --ignore-failed-read -x -f "$BACKUP"; then exit 1 fi -if [ ! -f db.sql ]; then +if [ -f db.sql ]; then + DB_OLD=1 +elif [ -f openslx.sql ] || [ -f sat.sql ]; then + DB_OLD=0 +else echo "Error: database dump not found in backup - are you sure this is a valid backup?" exit 1 fi -if [ ! -f files.tgz ]; then +if [ $RES_SAT -eq 1 -a $DB_OLD -eq 0 -a ! -f sat.sql ]; then + echo "Error: this backup does not contain the DozMod database" + echo "Error: cannot restore VM/lecture information" + exit 1 +fi +if [ $RES_OPENSLX -eq 1 -a $DB_OLD -eq 0 -a ! -f openslx.sql ]; then + echo "Error: this backup does not contain the OpenSLX database" + echo "Error: cannot restore satellite configuration" + exit 1 +fi + +if [ $RES_OPENSLX -eq 1 -a ! -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 [ $DB_OLD -eq 1 ]; then + mysql --defaults-extra-file=/etc/mysql/debian.cnf --default-character-set=utf8 < db.sql + RET=$? +else + RET=0 + if [ $RES_SAT -eq 1 ]; then + mysql --defaults-extra-file=/etc/mysql/debian.cnf --default-character-set=utf8 < sat.sql + RET=$? + fi + if [ $RET -eq 0 -a $RES_OPENSLX -eq 1 ]; then + mysql --defaults-extra-file=/etc/mysql/debian.cnf --default-character-set=utf8 < openslx.sql + RET=$? + fi +fi + if [ $RET -ne 0 ]; then echo "Error: Restoring database contents failed with exit code $RET" exit 1 fi -# Since we came that far we'll delete some old configs (if existent) -rm -rf /opt/ldadp/{configs,pid,logs}/* /opt/openslx/configs/* /srv/openslx/www/boot/default/config.tgz 2> /dev/null -# Force triggering IP detection/setting, which should in turn regenerate ldadp configs and launch ldadp instances if applicable -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 -# Try to update the db (if required) -curl -s 'http://localhost/slx-admin/api.php?do=update' - -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!" + +if [ $RES_OPENSLX -eq 1 ]; then + # Since we came that far we'll delete some old configs (if existent) + rm -rf /opt/ldadp/{configs,pid,logs}/* /opt/openslx/configs/* /srv/openslx/www/boot/default/config.tgz 2> /dev/null + # Force triggering IP detection/setting, which should in turn regenerate ldadp configs and launch ldadp instances if applicable + 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 + # Try to update the db (if required) + curl -s 'http://localhost/slx-admin/api.php?do=update' + + 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 + # Make sure the directory tree is owned by taskmanager, as tar will create intermediate + # directories as owned by root if they do not exist. + chown -R taskmanager /srv/openslx/www/boot /opt/openslx/configs fi -# Make sure the directory tree is owned by taskmanager, as tar will create intermediate -# directories as owned by root if they do not exist. -chown -R taskmanager /srv/openslx/www/boot /opt/openslx/configs rm -rf -- "$DIR" rm -f -- "$BACKUP" |