#!/bin/sh

#
# Backup files needed for metacat.  This script creates a temporary directory,
# backs up the postgres database, metacat data files, and ldap directory, and 
# then creates a gzipped tar file from those files.  It then writes the backup
# file to a DVD drive and then cleans up any old backup files.
#
# To run this file, install it in /usr/sbin or a similar location and add an
# entry in the root user's crontab to run the command periodically.  The
# following crontab entry would run it every night at 2:00 am
# 0 2 * * *       /usr/sbin/backup-metacat.sh >> $HOME/cron-output 2>&1
#
# This is really just an example script and may not work in your environment
# uless you modify it appropriately.
#
# 13 March 2006 Matt Jones

# Name of the metacat database in postgres to be backed up
DBNAME=metacat

# The day of the week on which the DVD is swapped (1-7, 1=Monday)
# This must be correct or else the write to DVD will not work
SWAPDAY=2

# Number of days of backups to keep online, anything older is removed
DAYSTOKEEP=7

# Device to be used for the DVD writer -- this may vary on your system
DVD=/dev/dvd

# Location of the metacat.properties file
METACATPROPERTIESPATH=/var/lib/tomcat7/webapps/knb/WEB-INF/metacat.properties
METACATPROPERTIESPATH2=/var/lib/tomcat7/webapps/metacat/WEB-INF/metacat.properties

# Location of the apache configuration file
APACHECONF=/etc/apache2/sites-enabled

#Location of the server key
KEYLOCATION=/etc/ssl/private 

#Location of the server certificate
CERTLOCATION=/etc/ssl/certs/_.test.dataone.org.crt
#
# Below here lie demons
#

# Set up our umask to protect files from prying eyes
umask 007

# Make a temp dir for the backed up files
TAG=`date +%F-%H%M%S`
DATADIR="/var/metacat"
ARCHROOT="/var/metacat/metacat-backup"
mkdir $ARCHROOT
chgrp postgres $ARCHROOT
chmod g+rwxs $ARCHROOT

ARCHNAME="metacat-backup-$TAG"
ARCHDIR="$ARCHROOT/$ARCHNAME"
mkdir $ARCHDIR

# Shut down the tomcat server so nobody else changes anything while we backup
/etc/init.d/tomcat7 stop

# Shut down ldap too
#/etc/init.d/slapd stop

# Copy the metacat.properties file to /var/metacat
if [ -f $METACATPROPERTIESPATH ]; then
	cp $METACATPROPERTIESPATH $DATADIR
else
  cp $METACATPROPERTIESPATH2 $DATADIR
fi
# Backup postgres
su - postgres -c "pg_dumpall | gzip > $ARCHDIR/metacat-postgres-backup.gz"

# Backup the data files
tar czhf $ARCHDIR/datafiles-backup.tgz --exclude=$ARCHROOT $DATADIR

# Backup the apache configuration files
tar czhf $ARCHDIR/apache-config-backup.tgz $APACHECONF $KEYLOCATION $CERTLOCATION

# Backup LDAP to an LDIF file
#slapcat -l $ARCHDIR/$DBNAME-ldap.ldif

# Restart LDAP
#/etc/init.d/slapd start

# Restart tomcat
/etc/init.d/tomcat7 start

# Tar up the archive and copy it to archive media
cd $ARCHROOT
tar czhf $ARCHDIR.tgz $ARCHNAME

# Clean up the temp files
rm -rf $ARCHDIR

# Write the backup file to DVD
#DAY=`date +%u`
#DVDFLAG=-M
#if [ $DAY == $SWAPDAY ] ; then
  #DVDFLAG=-Z
#fi
#growisofs $DVDFLAG $DVD -R -J $ARCHDIR.tgz

# clean up any of the backup files that are older than DAYSTOKEEP
find $ARCHROOT -mtime +$DAYSTOKEEP -exec rm -f {} \;