#!/bin/bash #!/bin/bash # Nextcloud restore backup # # Copyleft 2017 by Ignacio Nunez Hernanz # GPL licensed (see end of file) * Use at your own risk! # # More at https://ownyourbits.com/2017/02/13/nextcloud-ready-raspberry-pi-image/ # BACKUPFILE_=/media/USBdrive/nextcloud-bkp_xxxxxxxx.tar DESCRIPTION="Restore a previously backuped NC instance" INFOTITLE="Restore NextCloud backup" INFO="This new installation will cleanup current NextCloud instance, including files and database. ** perform backup before proceding ** You can use nc-backup" install() { cat > /usr/local/bin/ncp-restore <<'EOF' #!/bin/bash set -eE BACKUPFILE="$1" DBADMIN=ncadmin DBPASSWD="$( grep password /root/.my.cnf | sed 's|password=||' )" DIR="$( cd "$( dirname "$BACKUPFILE" )" &>/dev/null && pwd )" #abspath [[ $# -eq 0 ]] && { echo "missing first argument" ; exit 1; } [[ -f "$BACKUPFILE" ]] || { echo "$BACKUPFILE not found" ; exit 1; } [[ "$DIR" =~ "/var/www/nextcloud" ]] && { echo "Refusing to restore from /var/www/nextcloud"; exit 1; } [[ -d /var/www/nextcloud ]] && { echo "INFO: overwriting old instance"; } TMPDIR="$( mktemp -d "$( dirname "$BACKUPFILE" )"/ncp-restore.XXXXXX )" || { echo "Failed to create temp dir" >&2; exit 1; } TMPDIR="$( cd "$TMPDIR" &>/dev/null && pwd )" || { echo "$TMPDIR not found"; exit 1; } #abspath cleanup(){ local RET=$?; echo "Cleanup..."; rm -rf "${TMPDIR}"; trap "" EXIT; exit $RET; } trap cleanup INT TERM HUP ERR EXIT rm -rf "$TMPDIR" && mkdir -p "$TMPDIR" # EXTRACT FILES [[ "$BACKUPFILE" =~ ".tar.gz" ]] && COMPRESSED=1 || COMPRESSED=0 [[ "$COMPRESSED" == "1" ]] && { echo "decompressing backup file $BACKUPFILE..." tar -xzf "$BACKUPFILE" -C "$TMPDIR" || exit 1 BACKUPFILE="$( ls "$TMPDIR"/*.tar 2>/dev/null )" [[ -f "$BACKUPFILE" ]] || { echo "$BACKUPFILE not found"; exit 1; } } echo "extracting backup file $BACKUPFILE..." tar -xf "$BACKUPFILE" -C "$TMPDIR" || exit 1 ## SANITY CHECKS [[ -d "$TMPDIR"/nextcloud ]] && [[ -f "$( ls "$TMPDIR"/nextcloud-sqlbkp_*.bak 2>/dev/null )" ]] || { echo "invalid backup file. Abort" exit 1 } ## RESTORE FILES echo "restore files..." rm -rf /var/www/nextcloud mv "$TMPDIR"/nextcloud /var/www || { echo "Error restoring base files"; exit 1; } # update NC database password to this instance sed -i "s|'dbpassword' =>.*|'dbpassword' => '$DBPASSWD',|" /var/www/nextcloud/config/config.php # update redis credentials REDISPASS="$( grep "^requirepass" /etc/redis/redis.conf | cut -f2 -d' ' )" [[ "$REDISPASS" != "" ]] && \ sed -i "s|'password'.*|'password' => '$REDISPASS',|" /var/www/nextcloud/config/config.php service redis-server restart ## RE-CREATE DATABASE TABLE echo "restore database..." mysql -u root </dev/null && service fail2ban restart # refresh nextcloud trusted domains bash /usr/local/bin/nextcloud-domain.sh # restart PHP if needed [[ "$NEED_RESTART" == "1" ]] && \ bash -c " sleep 3 service php7.0-fpm stop service mysql stop sleep 0.5 service php7.0-fpm start service mysql start " &>/dev/null & EOF chmod +x /usr/local/bin/ncp-restore } configure() { ncp-restore "$BACKUPFILE_" } # License # # This script is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This script is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this script; if not, write to the # Free Software Foundation, Inc., 59 Temple Place, Suite 330, # Boston, MA 02111-1307 USA