#!/bin/bash # Pandora FMS Command line Backup Tool # (c) Sancho Lerena , Pandora FMS 2009-2023 function help { echo "" echo -e "Pandora FMS Command line backup tool. http://www.pandorafms.org" echo -e "(c) 2009-2015 Sancho Lerena , Pandora FMS" echo "" echo -e "Syntax:" echo -e "\t\t-c Path to Pandora FMS console, p.e: /srv/www/htdocs/pandora_console" echo -e "\t\t-d Destination path for backup file. p.e: /tmp" echo -e "\t\t-s Source filename for backup restore. p.e: /tmp/pandorafms" echo -e "\t\t-f Restore also files" echo -e "\t\t-q Quiet. No output message (used for scripts/cron)" echo -e "\t\t-b No database backup/restore" echo -e "\n\nPlease BE SURE TO USE RESTORE (-s) option. This will OVERWRITE ALL your" echo -e "PandoraFMS install, including files, configuration and data. Please backup first!" echo "" exit 1 } if [ $# -eq 0 ] then help fi SOURCEBACKUP="thisnotexist" QUIET=0 RESTOREFILES=0 DATABASE=1 TIMESTAMP=`date +"%Y-%m-%d-%H-%M-%S"` MDE=1 # Main parsing code while getopts "bfhqc:d:s:" optname do case "$optname" in "h") help ;; "c") PANDORAPATH=$OPTARG ;; "f") RESTOREFILES=1 ;; "b") DATABASE=0 ;; "d") BACKUPDIR=$OPTARG ;; "s") SOURCEBACKUP=$OPTARG ;; "q") QUIET=1 ;; ?) help ;; default) help ;; esac done # Execution which mysqldump &>/dev/null [ $? -eq 0 ] || MDE=0 if [ $MDE == 0 ] then echo -e "Command Mysqldump not found. \nIn order to make backups it is necessary to have mysqldump on your console.\nAborting..." exit 1 fi if [ ! -e "$PANDORAPATH/include/config.php" ] then echo "Cannot read config file at $PANDORAPATH/include/config.php. Aborting" exit 1 fi DBUSER=`cat $PANDORAPATH/include/config.php | grep dbuser | grep -v "^\/" | grep -o "\=\"[a-zA-Z0-9]*\"" | grep -o "[A-Za-z0-9]*"` DBPASS=`cat $PANDORAPATH/include/config.php | grep dbpass | grep -v "^\/" | grep -o "\=\"[a-zA-Z0-9]*\"" | grep -o "[A-Za-z0-9]*"` DBHOST=`cat $PANDORAPATH/include/config.php | grep dbhost | grep -v "^\/" | grep -o "\=\"[a-zA-Z0-9]*\"" | grep -o "[A-Za-z0-9]*"` DBNAME=`cat $PANDORAPATH/include/config.php | grep dbname | grep -v "^\/" | grep -o "\=\"[a-zA-Z0-9]*\"" | grep -o "[A-Za-z0-9]*"` cd /tmp mkdir $TIMESTAMP cd $TIMESTAMP # Make the backup if [ ! -e "$SOURCEBACKUP" ] then rm -Rf $BACKUPDIR/pandorafms_backup_$TIMESTAMP.tar.gz 2> /dev/null if [ $DATABASE == 1 ] then mysqldump -u $DBUSER -p$DBPASS --max_allowed_packet=32M -h $DBHOST $DBNAME > pandorafms_backup_$TIMESTAMP.sql tar cvzfh pandorafms_backup_$TIMESTAMP.tar.gz pandorafms_backup_$TIMESTAMP.sql $PANDORAPATH/* /etc/pandora /var/spool/pandora/data_in --exclude .data 2> /dev/null > /dev/null else tar cvzhf pandorafms_backup_$TIMESTAMP.tar.gz $PANDORAPATH/* /etc/pandora /var/spool/pandora/data_in --exclude .data 2> /dev/null > /dev/null fi mv /tmp/$TIMESTAMP/pandorafms_backup_$TIMESTAMP.tar.gz $BACKUPDIR cd /tmp rm -Rf /tmp/$TIMESTAMP if [ $QUIET == 0 ] then echo "Backup completed and placed in $BACKUPDIR/pandorafms_backup_$TIMESTAMP.tar.gz" fi else # Make the backup restore process echo "Detected Pandora FMS backup at $SOURCEBACKUP, please wait..." tar xvzf $SOURCEBACKUP > /dev/null 2> /dev/null if [ $DATABASE == 1 ] then echo "Dropping current database" echo "drop database $DBNAME;" | mysql -u $DBUSER -p$DBPASS -h $DBHOST echo "Restoring backup database" echo "CREATE DATABASE $DBNAME;" | mysql -u $DBUSER -p$DBPASS -h $DBHOST cat *.sql | mysql -u $DBUSER -p$DBPASS -h $DBHOST -D $DBNAME fi if [ $RESTOREFILES == 1 ] then echo "Restoring files and configuration" cp -R var/spool/pandora/* /var/spool/pandora cp -R etc/pandora/* /etc/pandora BACKUPBASEPATH="`echo $PANDORAPATH | cut -c2-`" cp -R $BACKUPBASEPATH/* $PANDORAPATH fi cd /tmp rm -Rf /tmp/$TIMESTAMP echo "Done. Backup in $SOURCEBACKUP restored" fi exit 0