well I was looking forward to preparing for disaster recovery in zimbra.I downloaded an open source backup script posted on the forum but I'm having some problem with it.the source code for the script is as follows:
Code:
#!/bin/bash

# This script will do various backups of Zimbra depending on wich you choose,
# most of them are cold backups except the msg backup which hot copies the 'store'
# folder for possible individual mail retrival. Be sure to change the variables below
# to point to where you got the zimbra folder and where you want it to be backed up to.
#
# This script must be run as root or a user with equal privileges or it will not work.
#
# Usage: ZimBackup.sh full	- For full backup (Cold)
#	 ZimBackup.sh diff	- For diffrential backup (Cold)
#	 ZimBackup.sh msgfull	- For complete message backup (Hot)
#	 ZimBackup.sh msgdiff	- For diffrential message backup (Hot)
#
# When you run this script via crontab be sure to add '> /dev/null 2>&1' at the end
# of the script like below or the tar command will fail for no apparent reason.
# 00 12 * * * ZimBackup.sh full > /dev/null 2>&1
#
# As of 2008-04-16 this script uses some extra software to extend this script,
# the scripts standard function will still function without these extra softwares but if you
# intend to use this scripts built in file transfer functions you must install the described software below.
#
# Required software: expect & any software dependencies for this package.
#
# Bits and pieces was adopted from a script created by Daniel W. Martin, 9 Sept 2007
# Free to use and free of any warranty!  Marcus Uddenhed, 3 feb 2008
#
# Last updated: 2008-06-10

#### Global Settings ####
ZimInstPath=/opt			# Installation path for Zimbra, exluding the zimbra folder.
ZimHome=zimbra				# The Zimbra installation folder, exluding path to folder.
ZimBackupPath=/opt/backup		# Backup folder where backup files should be placed.
ZimTempPath=/opt/backup/tmp		# Temporary backup folder, should be placed as a subfolder to backup folder.

#### Log Settings ####
ZimLogEnable=no				# Turns logging off or on.
ZimLogFileName=BackupZimbra.log		# Log filename
ZimLogVerbose=no			# Activates extra logging information 

#### File Transfer Settings ####

# Enable Services (yes/no)
ZimFtpEnable=no				# Enable/Disable ftp file transfer.
ZimScpEnable=no				# Enable/Disable scp file transfer.

# Extra FTP Settings
ZimFtpOpt=''				# Extra options for ftp file transfer, see manual for ftp command

# Extra SCP Settings
ZimScpOpt=''				# Extra options for ftp file transfer, see manual for scp command

# Common Settings
ZimFilehostUser=			# Username for file transfers
ZimFilehostPass=			# Password for file transfers
ZimFilehostAddress=			# Host address for file transfers
ZimFilehostFolder=			# Folder on host where files will be placed during file transfer

#### File Delete Settings ####
ZimDeleteLocalFile=no			# Enable/Disable backup file deletion efter sucessfull backup.
ZimDeleteTimeSet=0			# Set in minutes above 0 to keep a desired amount of files locally,
					# be sure to match the time with your backup schedules.

##### Do not change anything below this line unless you know what you are doing #####

# Fetch backup type 
ZimBackupType=$1

# Set filename for backup files
ZimFilenameSystemFull=ZimBackupSystemFull_`date +%Y%m%d%H%M`.tar.gz
ZimFilenameSystemDiff=ZimBackupSystemDiff_`date +%Y%m%d%H%M`.tar.gz
ZimFilenameMsgFull=ZimBackupMsgFull_`date +%Y%m%d%H%M`.tar.gz
ZimFilenameMsgDiff=ZimBackupMsgDiff_`date +%Y%m%d%H%M`.tar.gz

pre_check() {
# Check if expect is installed and file transfer is enabled, stops script if not
if [ $ZimFtpEnable = 'yes' ] || [ $ZimScpEnable = 'yes' ]
then
 if [ ! -e /usr/bin/expect ]
  then
   echo "expect command is missing, this is required for file transfer options, script exiting..."
   exit
 fi
fi

# Create log file if not exist
if [ $ZimLogEnable = 'yes' ]
 then
  touch $ZimBackupPath/$ZimLogFileName
fi

# Check to see if the tmp folder exist, and create if not
mkdir -p $ZimTempPath

# Check which zimbra version that is installed, for recovery purpose 
sudo -u zimbra $ZimInstPath/$ZimHome/bin/zmcontrol -v > $ZimTempPath/zimbra_version.txt
}

full_backup() {
if [ $ZimLogEnable = 'yes' ] && [ $ZimLogVerbose = 'yes' ]
 then
   # Removing possible old zimbra backup folder
   echo "`date +%Y%m%d%H%M%S` - Removing old backup folder from $ZimTempPath..." >> $ZimBackupPath/$ZimLogFileName
   rm -r -f $ZimTempPath/$ZimHome >> $ZimBackupPath/$ZimLogFileName
   echo "`date +%Y%m%d%H%M%S` - Removing old backup folder from $ZimTempPath done" >> $ZimBackupPath/$ZimLogFileName

   # Stopping Zimbra
   echo "`date +%Y%m%d%H%M%S` - Zimbra services stopping..." >> $ZimBackupPath/$ZimLogFileName
   /etc/init.d/zimbra stop >> $ZimBackupPath/$ZimLogFileName
   sleep 20
   echo "`date +%Y%m%d%H%M%S` - Zimbra services stopped." >> $ZimBackupPath/$ZimLogFileName

   # Backing up zimbra folder
   echo "`date +%Y%m%d%H%M%S` - Zimbra folder copying to backup..." >> $ZimBackupPath/$ZimLogFileName
   cp -rv $ZimInstPath/$ZimHome $ZimTempPath/ >> $ZimBackupPath/$ZimLogFileName
   echo "`date +%Y%m%d%H%M%S` - Zimbra folder copied to backup." >> $ZimBackupPath/$ZimLogFileName

   # Starting Zimbra
   echo "`date +%Y%m%d%H%M%S` - Zimbra services starting..." >> $ZimBackupPath/$ZimLogFileName
   /etc/init.d/zimbra start >> $ZimBackupPath/$ZimLogFileName
   echo "`date +%Y%m%d%H%M%S` - Zimbra services started." >> $ZimBackupPath/$ZimLogFileName

   # Compressing backup for space reduction
   echo "`date +%Y%m%d%H%M%S` - Compressing backup folder..." >> $ZimBackupPath/$ZimLogFileName
   tar -zcvf $ZimBackupPath/$ZimFilenameSystemFull -C $ZimTempPath $ZimHome zimbra_version.txt >> $ZimBackupPath/$ZimLogFileName
   echo "`date +%Y%m%d%H%M%S` - Compressed backup folder." >> $ZimBackupPath/$ZimLogFileName
 else
  # Removing possible old zimbra backup folder
  rm -r -f $ZimTempPath/$ZimHome
  # Stopping Zimbra
  /etc/init.d/zimbra stop
  sleep 20
  # Backing up zimbra folder
  cp -rv $ZimInstPath/$ZimHome $ZimTempPath/
  # Starting Zimbra
  /etc/init.d/zimbra start
  # Compressing backup for space reduction
  tar -zcvf $ZimBackupPath/$ZimFilenameSystemFull -C $ZimTempPath $ZimHome zimbra_version.txt
fi
}

diff_backup() {
if [ $ZimLogEnable = 'yes' ] && [ $ZimLogVerbose = 'yes' ]
 then
  # Hot sync before shutdown on zimbra folder
  echo "`date +%Y%m%d%H%M%S` - Hot syncing to backup folder..." >> $ZimBackupPath/$ZimLogFileName
  rsync -avHK --delete $ZimInstPath/$ZimHome $ZimTempPath/ >> $ZimBackupPath/$ZimLogFileName
  echo "`date +%Y%m%d%H%M%S` - Hot syncing to backup folder done." >> $ZimBackupPath/$ZimLogFileName

  # Stopping Zimbra
  echo "`date +%Y%m%d%H%M%S` - Zimbra services stopping..." >> $ZimBackupPath/$ZimLogFileName
  /etc/init.d/zimbra stop >> $ZimBackupPath/$ZimLogFileName >> $ZimBackupPath/$ZimLogFileName
  sleep 20
  echo "`date +%Y%m%d%H%M%S` - Zimbra services stopped." >> $ZimBackupPath/$ZimLogFileName

  # Cold sync of zimbra folder
  echo "`date +%Y%m%d%H%M%S` - Cold syncing to backup folder..." >> $ZimBackupPath/$ZimLogFileName
  rsync -avHK --delete $ZimInstPath/$ZimHome $ZimTempPath/ >> $ZimBackupPath/$ZimLogFileName
  echo "`date +%Y%m%d%H%M%S` - Cold syncing to backup folder done." >> $ZimBackupPath/$ZimLogFileName

  # Starting Zimbra
  echo "`date +%Y%m%d%H%M%S` - Zimbra services starting..." >> $ZimBackupPath/$ZimLogFileName
  /etc/init.d/zimbra start >> $ZimBackupPath/$ZimLogFileName
  echo "`date +%Y%m%d%H%M%S` - Zimbra services started." >> $ZimBackupPath/$ZimLogFileName

  # Compressing backup for space reduction and removing unpacked folder
  echo "`date +%Y%m%d%H%M%S` - Compressing backup folder..." >> $ZimBackupPath/$ZimLogFileName
  tar -zcvf $ZimBackupPath/$ZimFilenameSystemDiff -C $ZimTempPath $ZimHome zimbra_version.txt >> $ZimBackupPath/$ZimLogFileName
  echo "`date +%Y%m%d%H%M%S` - Compressed backup folder." >> $ZimBackupPath/$ZimLogFileName
 else
  # Hot sync before shutdown on zimbra folder
  rsync -avHK --delete $ZimInstPath/$ZimHome $ZimTempPath/
  # Stopping Zimbra
  /etc/init.d/zimbra stop >> $ZimBackupPath/$ZimLogFileName
  sleep 20
  # Cold sync of zimbra folder
  rsync -avHK --delete $ZimInstPath/$ZimHome $ZimTempPath/
  # Starting Zimbra
  /etc/init.d/zimbra start >> $ZimBackupPath/$ZimLogFileName
  # Compressing backup for space reduction and removing unpacked folder
  tar -zcvf $ZimBackupPath/$ZimFilenameSystemDiff -C $ZimTempPath $ZimHome zimbra_version.txt
fi
}

msgfull_backup() {
if [ $ZimLogEnable = 'yes' ] && [ $ZimLogVerbose = 'yes' ]
 then
  # Removing possible old store backup folder
  echo "`date +%Y%m%d%H%M%S` - Removing old backup folder from $ZimTempPath" >> $ZimBackupPath/$ZimLogFileName
  rm -r -f $ZimTempPath/store >> $ZimBackupPath/$ZimLogFileName
  echo "`date +%Y%m%d%H%M%S` - Removing old backup folder from $ZimTempPath done" >> $ZimBackupPath/$ZimLogFileName

  # Make dir for hot sync
  echo "`date +%Y%m%d%H%M%S` - Creating backup folder..." >> $ZimBackupPath/$ZimLogFileName
  mkdir -p $ZimTempPath/store >> $ZimBackupPath/$ZimLogFileName
  echo "`date +%Y%m%d%H%M%S` - Creating backup folder done." >> $ZimBackupPath/$ZimLogFileName

  # Hot sync of mailbox messages
  echo "`date +%Y%m%d%H%M%S` - Hot syncing to backup folder..." >> $ZimBackupPath/$ZimLogFileName
  rsync -avHK --delete $ZimInstPath/$ZimHome/store/0 $ZimTempPath/store/ >> $ZimBackupPath/$ZimLogFileName
  echo "`date +%Y%m%d%H%M%S` - Hot syncing to backup folder done." >> $ZimBackupPath/$ZimLogFileName

  # Compressing store folder for space reduction
  echo "`date +%Y%m%d%H%M%S` - Compressing backup folder..." >> $ZimBackupPath/$ZimLogFileName
  tar -zcvf $ZimBackupPath/$ZimFilenameMsgFull -C $ZimTempPath store zimbra_version.txt >> $ZimBackupPath/$ZimLogFileName
  echo "`date +%Y%m%d%H%M%S` - Compressed backup folder." >> $ZimBackupPath/$ZimLogFileName
 else
  # Removing possible old store backup folder
  rm -r -f $ZimTempPath/store
  # Make dir for hot sync
  mkdir -p $ZimTempPath/store
  # Hot sync of mailbox messages
  rsync -avHK --delete $ZimInstPath/$ZimHome/store/0 $ZimTempPath/store/
  # Compressing store folder for space reduction
  tar -zcvf $ZimBackupPath/$ZimFilenameMsgFull -C $ZimTempPath store zimbra_version.txt
fi
}

msgdiff_backup() {
if [ $ZimLogEnable = 'yes' ] && [ $ZimLogVerbose = 'yes' ]
 then
  # Make dir for hot sync
  echo "`date +%Y%m%d%H%M%S` - Creating backup folder..." >> $ZimBackupPath/$ZimLogFileName
  mkdir -p $ZimTempPath/store >> $ZimBackupPath/$ZimLogFileName
  echo "`date +%Y%m%d%H%M%S` - Creating backup folder done." >> $ZimBackupPath/$ZimLogFileName

  # Hot sync of mailbox messages
  echo "`date +%Y%m%d%H%M%S` - Hot syncing to backup folder..." >> $ZimBackupPath/$ZimLogFileName
  rsync -avHK --delete $ZimInstPath/$ZimHome/store/0 $ZimTempPath/store/ >> $ZimBackupPath/$ZimLogFileName
  echo "`date +%Y%m%d%H%M%S` - Hot syncing to backup folder done." >> $ZimBackupPath/$ZimLogFileName

  # Compressing store folder for space reduction
  echo "`date +%Y%m%d%H%M%S` - Compressing backup folder..." >> $ZimBackupPath/$ZimLogFileName
  tar -zcvf $ZimBackupPath/$ZimFilenameMsgDiff -C $ZimTempPath store zimbra_version.txt
  echo "`date +%Y%m%d%H%M%S` - Compressed backup folder." >> $ZimBackupPath/$ZimLogFileName
 else
  # Make dir for hot sync
  mkdir -p $ZimTempPath/store
  # Hot sync of mailbox messages
  rsync -avHK --delete $ZimInstPath/$ZimHome/store/0 $ZimTempPath/store/
  # Compressing store folder for space reduction
  tar -zcvf $ZimBackupPath/$ZimFilenameMsgDiff -C $ZimTempPath store zimbra_version.txt
fi
}

file_transfer() {
# Check which filename to use in file transfer
if [ $ZimBackupType == "full" ]
then
 ZimFilenameTransfer=$ZimFilenameSystemFull
fi
if [ $ZimBackupType == "diff" ]
then
 ZimFilenameTransfer=$ZimFilenameSystemDiff
fi
if [ $ZimBackupType == "msgfull" ]
then
 ZimFilenameTransfer=$ZimFilenameMsgFull
fi
if [ $ZimBackupType == "msgdiff" ]
then
 ZimFilenameTransfer=$ZimFilenameMsgDiff
fi

# Transfer with ftp
if [ $ZimFtpEnable == "yes" ]
then
if [ $ZimLogEnable = 'yes' ] && [ $ZimLogVerbose = 'yes' ]
 then
  echo "`date +%Y%m%d%H%M%S` - Sending file via ftp to offsite storage..." >> $ZimBackupPath/$ZimLogFileName
  # Make a temporary script for expect commands
  touch $ZimTempPath/ftp.exp
  # Fill script with commands
  echo '#!/usr/bin/expect --' >> $ZimTempPath/ftp.exp
  echo 'set timeout -1' >> $ZimTempPath/ftp.exp
  echo 'spawn ftp '$ZimFilehostAddress >> $ZimTempPath/ftp.exp
  echo 'expect ):' >> $ZimTempPath/ftp.exp
  echo 'send '$ZimFilehostUser'\r' >> $ZimTempPath/ftp.exp
  echo 'expect :' >> $ZimTempPath/ftp.exp
  echo 'send '$ZimFilehostPass'\r' >> $ZimTempPath/ftp.exp
  echo 'expect >' >> $ZimTempPath/ftp.exp
  echo 'send '$ZimFtpOpt'\r' >> $ZimTempPath/ftp.exp
  echo 'send "send '$ZimBackupPath/$ZimFilenameTransfer $ZimFilehostFolder/$ZimFilenameTransfer'\r"' >> $ZimTempPath/ftp.exp
  echo 'expect >' >> $ZimTempPath/ftp.exp
  echo 'send quit\r' >> $ZimTempPath/ftp.exp
  echo 'expect closed' >> $ZimTempPath/ftp.exp
  # Run expect with created script
  expect $ZimTempPath/ftp.exp  >> $ZimBackupPath/$ZimLogFileName
  # Delete temporary expect script
  rm $ZimTempPath/ftp.exp
  echo "`date +%Y%m%d%H%M%S` - Sending file via ftp to offsite storage done." >> $ZimBackupPath/$ZimLogFileName
 else
  # Make a temporary script for expect commands
  touch $ZimTempPath/ftp.exp
  # Fill script with commands
  echo '#!/usr/bin/expect --' >> $ZimTempPath/ftp.exp
  echo 'set timeout -1' >> $ZimTempPath/ftp.exp
  echo 'spawn ftp '$ZimFilehostAddress >> $ZimTempPath/ftp.exp
  echo 'expect ):' >> $ZimTempPath/ftp.exp
  echo 'send '$ZimFilehostUser'\r' >> $ZimTempPath/ftp.exp
  echo 'expect :' >> $ZimTempPath/ftp.exp
  echo 'send '$ZimFilehostPass'\r' >> $ZimTempPath/ftp.exp
  echo 'expect >' >> $ZimTempPath/ftp.exp
  echo 'send '$ZimFtpOpt'\r' >> $ZimTempPath/ftp.exp
  echo 'send "send '$ZimBackupPath/$ZimFilenameTransfer $ZimFilehostFolder/$ZimFilenameTransfer'\r"' >> $ZimTempPath/ftp.exp
  echo 'expect >' >> $ZimTempPath/ftp.exp
  echo 'send quit\r' >> $ZimTempPath/ftp.exp
  echo 'expect closed' >> $ZimTempPath/ftp.exp
  # Run expect with created script
  expect $ZimTempPath/ftp.exp
  # Delete temporary expect script
  rm $ZimTempPath/ftp.exp
fi

fi
# Transfer with scp
if [ $ZimScpEnable == "yes" ]
then
 if [ $ZimLogEnable = 'yes' ] && [ $ZimLogVerbose = 'yes' ]
  then
   echo "`date +%Y%m%d%H%M%S` - Sending file via scp to offsite storage..." >> $ZimBackupPath/$ZimLogFileName
   # Make a temporary script for expect commands
   touch $ZimTempPath/scp.exp
   # Fill script with commands
   echo '#!/usr/bin/expect --' >> $ZimTempPath/scp.exp
   echo 'set timeout -1' >> $ZimTempPath/scp.exp
   echo 'spawn scp '$ZimScpOpt $ZimBackupPath/$ZimFilenameTransfer $ZimFilehostUser'@'$ZimFilehostAddress':'$ZimFilehostFolder >> $ZimTempPath/scp.exp
   echo 'expect :' >> $ZimTempPath/scp.exp
   echo 'send '$ZimFilehostPass'\r' >> $ZimTempPath/scp.exp
   echo 'expect closed' >> $ZimTempPath/scp.exp
   # Run expect with created script
   expect $ZimTempPath/scp.exp  >> $ZimBackupPath/$ZimLogFileName
   # Delete temporary expect script
   rm $ZimTempPath/scp.exp
   echo "`date +%Y%m%d%H%M%S` - Sending file via scp to offsite storage done." >> $ZimBackupPath/$ZimLogFileName
  else
   # Make a temporary script for expect commands
   touch $ZimTempPath/scp.exp
   # Fill script with commands
   echo '#!/usr/bin/expect --' >> $ZimTempPath/scp.exp
   echo 'set timeout -1' >> $ZimTempPath/scp.exp
   echo 'spawn scp '$ZimScpOpt $ZimBackupPath/$ZimFilenameTransfer $ZimFilehostUser'@'$ZimFilehostAddress':'$ZimFilehostFolder >> $ZimTempPath/scp.exp
   echo 'expect :' >> $ZimTempPath/scp.exp
   echo 'send '$ZimFilehostPass'\r' >> $ZimTempPath/scp.exp
   echo 'expect closed' >> $ZimTempPath/scp.exp
   # Run expect with created script
   expect $ZimTempPath/scp.exp
   # Delete temporary expect script
   rm $ZimTempPath/scp.exp
 fi
fi

# Remove local file(s) if ZimDeleteLocalFile is set to 'yes'
if [ $ZimDeleteLocalFile == "yes" ]
then
 if [ $ZimLogEnable = 'yes' ] && [ $ZimLogVerbose = 'yes' ]
  then
   echo "`date +%Y%m%d%H%M%S` - Deleting local file(s)..." >> $ZimBackupPath/$ZimLogFileName
   find $ZimBackupPath -maxdepth 1 -type f -mmin +$ZimDeleteTimeSet -name ZimBackup\*.tar.gz -exec rm {} +  >> $ZimBackupPath/$ZimLogFileName
   echo "`date +%Y%m%d%H%M%S` - Deleting local file(s) done." >> $ZimBackupPath/$ZimLogFileName
  else
   find $ZimBackupPath -maxdepth 1 -type f -mmin +$ZimDeleteTimeSet -name ZimBackup\*.tar.gz -exec rm {} +
 fi
fi
}

log_start() {
if [ $ZimLogEnable = 'yes' ]
 then
  echo "" >> $ZimBackupPath/$ZimLogFileName
  echo "-------------------------------------------------------" >> $ZimBackupPath/$ZimLogFileName
  echo "Backup Started: `date +%Y%m%d%H%M%S` Type: $ZimBackupType" >> $ZimBackupPath/$ZimLogFileName
fi
}

log_end() {
if [ $ZimLogEnable = 'yes' ]
 then
  echo "Backup Finished: `date +%Y%m%d%H%M%S` Type: $ZimBackupType" >> $ZimBackupPath/$ZimLogFileName
  echo "-------------------------------------------------------" >> $ZimBackupPath/$ZimLogFileName
fi
}

case $1 in
full)
pre_check
log_start
full_backup
file_transfer
log_end
;;
diff)
pre_check
log_start
diff_backup
file_transfer
log_end
;;
msgfull)
pre_check
log_start
msgfull_backup
file_transfer
log_end
;;
msgdiff)
pre_check
log_start
msgdiff_backup
file_transfer
log_end
;;
*)
echo "Usage: ZimColdBackup.sh {full|diff|msgfull|msgdiff}"
;;
esac
while running this script I'm facing the following Errors in the middle of the backup:
Code:
[:416: ==: unexpected operator
[:416: ==: unexpected operator
[:416: ==: unexpected operator
and the script stops abruptly...can anybody give a hand at this.also if we are to ftp the backup to a remote location ,how do we specify the paths in the scripts .ie proper format.

regards!