#!/bin/bash # # Restores a Full Backup of Nagios XI # Copyright (c) 2008-2018 Nagios Enterprises, LLC. All rights reserved. # # Heavily modified by EverWatch Global, Inc. for syncing two Nagios installations # # Restore just needs to restore the MySQL stuff. Everything else was shipped over via rsync # Change this password if your root password is different than "nagiosxi" # MySQL root password themysqlpass="nagiosxi" # Make sure we have the backup file if [ $# != 1 ]; then echo "Usage: $0 " echo "This script restores your XI system using a previously made Nagios XI backup file." exit 1 fi backupfile=$1 BASEDIR=/usr/local/nagiosxi/scripts SPECIAL_BACKUP=0 # Import Nagios XI and xi-sys.cfg config vars . $BASEDIR/../var/xi-sys.cfg eval $(php $BASEDIR/import_xiconfig.php) # Must be root me=`whoami` if [ $me != "root" ]; then echo "You must be root to run this script." exit 1 fi rootdir=/store/backups/nagiosxi ############################## # MAKE SURE BACKUP FILE EXIST ############################## if [ ! -f $backupfile ]; then echo "Unable to find backup file $backupfile!" exit 1 fi ############################## # MAKE TEMP RESTORE DIRECTORY ############################## ts=`date +%s` mydir=${rootdir}/${ts}-restore mkdir -p $mydir if [ ! -d $mydir ]; then echo "Unable to create restore directory $mydir!" exit 1 fi ############################## # UNZIP BACKUP ############################## cd $mydir tar xzfps $backupfile cd `ls` backupdir=`pwd` ############################## # SHUTDOWN SERVICES ############################## echo "Shutting down services..." $BASEDIR/manage_services.sh stop nagios $BASEDIR/manage_services.sh stop ndo2db $BASEDIR/manage_services.sh stop npcd rootdir=/ # RE-IMPORT ALL XI CFG VARS . $BASEDIR/../var/xi-sys.cfg php $BASEDIR/import_xiconfig.php > $BASEDIR/config.dat . $BASEDIR/config.dat rm -f $BASEDIR/config.dat # Overwrite the mysqlpass with the hardcoded one at the top mysqlpass="$themysqlpass" ############################## # RESTORE DATABASES ############################## restore_databases() { echo "Restoring MySQL databases..." if [[ "$cfg__db_info__ndoutils__dbserver" == *":"* ]]; then ndoutils_dbport=`echo "$cfg__db_info__ndoutils__dbserver" | cut -f2 -d":"` ndoutils_dbserver=`echo "$cfg__db_info__ndoutils__dbserver" | cut -f1 -d":"` else ndoutils_dbport='3306' ndoutils_dbserver="$cfg__db_info__ndoutils__dbserver" fi mysql -h "$ndoutils_dbserver" --port="$ndoutils_dbport" -u root --password=$mysqlpass < $backupdir/mysql/nagios.sql res=$? if [ $res != 0 ]; then echo "Error restoring MySQL database 'nagios' - check the password in this script!" exit $res; fi if [[ "$cfg__db_info__nagiosql__dbserver" == *":"* ]]; then nagiosql_dbport=`echo "$cfg__db_info__nagiosql__dbserver" | cut -f2 -d":"` nagiosql_dbserver=`echo "$cfg__db_info__nagiosql__dbserver" | cut -f1 -d":"` else nagiosql_dbport='3306' nagiosql_dbserver="$cfg__db_info__nagiosql__dbserver" fi mysql -h "$nagiosql_dbserver" --port="$nagiosql_dbport" -u root --password=$mysqlpass < $backupdir/mysql/nagiosql.sql res=$? if [ $res != 0 ]; then echo "Error restoring MySQL database 'nagiosql' - check the password in this script!" exit $res; fi # Only restore PostgresQL if we are still using it if [ "$cfg__db_info__nagiosxi__dbtype" == "pgsql" ]; then service postgresql initdb &>/dev/null || true echo "Restoring Nagios XI PostgresQL database..." if [ -f /var/lib/pgsql/data/pg_hba.conf ]; then pghba="/var/lib/pgsql/data/pg_hba.conf" cp -pr $pghba $pghba.old else #Ubuntu/Debian pghba=$(find /etc/postgresql -name "*pg_hba.conf") cp -pr $pghba $pghba.old fi echo "local all all trust host all all 127.0.0.1/32 trust host all all ::1/128 trust" > $pghba $BASEDIR/manage_services.sh start postgresql sudo -u postgres psql -c "create user nagiosxi with password 'n@gweb';" sudo -u postgres psql -c "create database nagiosxi owner nagiosxi;" $BASEDIR/manage_services.sh restart postgresql # Sleep a bit (required so Postgres finishes startup before we connect again) echo "Sleeping for a few seconds (please wait)..." sleep 7 psql -U nagiosxi nagiosxi < $backupdir/pgsql/nagiosxi.sql res=$? if [ $res != 0 ]; then echo "Error restoring PostgresQL database 'nagiosxi' !" exit $res; fi $BASEDIR/manage_services.sh restart postgresql if [ "$dist" == "el7" ] || [ "$dist" == "el8" ]; then systemctl enable postgresql.service elif [[ "$distro" == "Ubuntu" ]] || [[ "$distro" == "Debian" ]]; then update-rc.d postgresql enable else chkconfig postgresql on fi # Remove nagiosxi db from mysql if postgres is used instead if [[ "$cfg__db_info__nagiosql__dbserver" == *":"* ]]; then nagiosql_dbport=`echo "$cfg__db_info__nagiosql__dbserver" | cut -f2 -d":"` nagiosql_dbserver=`echo "$cfg__db_info__nagiosql__dbserver" | cut -f1 -d":"` else nagiosql_dbport='3306' nagiosql_dbserver="$cfg__db_info__nagiosql__dbserver" fi mysql -h "$nagiosql_dbserver" --port="$nagiosql_dbport" -u root --password=$mysqlpass < "DROP TABLE IF EXISTS nagiosxi;" else echo "Restoring Nagios XI MySQL database..." if [[ "$cfg__db_info__nagiosxi__dbserver" == *":"* ]]; then nagiosxi_dbport=`echo "$cfg__db_info__nagiosxi__dbserver" | cut -f2 -d":"` nagiosxi_dbserver=`echo "$cfg__db_info__nagiosxi__dbserver" | cut -f1 -d":"` else nagiosxi_dbport='3306' if [ "x$cfg__db_info__nagiosxi__dbserver" == "x" ]; then nagiosxi_dbserver="localhost" else nagiosxi_dbserver="$cfg__db_info__nagiosxi__dbserver" fi fi mysql -h "$nagiosxi_dbserver" --port="$nagiosxi_dbport" -u root --password=$mysqlpass < $backupdir/mysql/nagiosxi.sql res=$? if [ $res != 0 ]; then echo "Error restoring MySQL database 'nagiosxi' !" exit $res; fi fi } restore_databases echo "Restarting services..." $BASEDIR/manage_services.sh restart mysqld $BASEDIR/manage_services.sh restart httpd $BASEDIR/manage_services.sh start npcd $BASEDIR/manage_services.sh start ndo2db $BASEDIR/manage_services.sh start nagios rm -rf $mydir rm -f /tmp/nagiosxi.forceinstall echo " " echo "===============" echo "RESTORE COMPLETE" echo "===============" echo "Restarting Nagios XI" cd /usr/local/nagiosxi/scripts ./reconfigure_nagios.sh exit 0