Removed
This commit is contained in:
		@@ -1,302 +0,0 @@
 | 
				
			|||||||
#!/bin/bash
 | 
					 | 
				
			||||||
# Copyright (c) 2012 Peter Varkoly Nürnberg, Germany.  All rights reserved.
 | 
					 | 
				
			||||||
# oss-backup
 | 
					 | 
				
			||||||
# 
 | 
					 | 
				
			||||||
# $Id: oss-backup,v 1.10 2007/07/18 16:43:22 pv Exp $
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
LOGFILE=/var/log/oss-backup.log
 | 
					 | 
				
			||||||
DATE=`date +%Y-%m-%d-%H-%M`
 | 
					 | 
				
			||||||
#TODO Make all variables configurable.
 | 
					 | 
				
			||||||
MYSQLDUMP_OPTIONS="--lock-tables --add-drop-database --add-locks --quote-names --opt --create-options"
 | 
					 | 
				
			||||||
MAILADDR="admin"
 | 
					 | 
				
			||||||
FORCE="no"
 | 
					 | 
				
			||||||
VERBOSE="yes"
 | 
					 | 
				
			||||||
CONFIG=/etc/sysconfig/schoolserver
 | 
					 | 
				
			||||||
RSYNCPARS=" -aA --delete --size-only "
 | 
					 | 
				
			||||||
LIMIT=80
 | 
					 | 
				
			||||||
DAY_OF_WEEK=$( date +%u )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if [ -e /var/adm/oss/BackupRunning ]
 | 
					 | 
				
			||||||
then
 | 
					 | 
				
			||||||
	BPID=$( cat /var/adm/oss/BackupRunning )
 | 
					 | 
				
			||||||
	if [ -d /proc/$BPID ]; then
 | 
					 | 
				
			||||||
		echo "An other backup process is running with PID: $BPID"
 | 
					 | 
				
			||||||
		exit 1;
 | 
					 | 
				
			||||||
	fi
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
echo $$ > /var/adm/oss/BackupRunning
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function TheEnd(){
 | 
					 | 
				
			||||||
	rm /var/adm/oss/BackupRunning
 | 
					 | 
				
			||||||
	echo $DATE > /var/adm/backup/LAST_BACKUP
 | 
					 | 
				
			||||||
	if [ "$2" ]; then
 | 
					 | 
				
			||||||
		LOG "$2 $1";
 | 
					 | 
				
			||||||
	fi
 | 
					 | 
				
			||||||
	exit $1
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function usage (){
 | 
					 | 
				
			||||||
	echo 
 | 
					 | 
				
			||||||
	echo "Usage: `basename $0` [OPTION] "
 | 
					 | 
				
			||||||
	echo "       -h|--help     : help (this message)"
 | 
					 | 
				
			||||||
	echo "       -f            : force backup (even if it's disabled in config)"
 | 
					 | 
				
			||||||
	echo "       -v            : be verbose"
 | 
					 | 
				
			||||||
	echo 
 | 
					 | 
				
			||||||
	echo "       Use this script to immediately create a backup of your OSS."
 | 
					 | 
				
			||||||
	echo "       You can find the configuration in $CONFIG."
 | 
					 | 
				
			||||||
	echo "       Feel free to read the administration handbook for further details."
 | 
					 | 
				
			||||||
	echo
 | 
					 | 
				
			||||||
	TheEnd $1
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function check_discspace() {
 | 
					 | 
				
			||||||
	if [ "$SCHOOL_BACKUP_WARNING_LIMIT" ]; then
 | 
					 | 
				
			||||||
		LIMIT=$SCHOOL_BACKUP_WARNING_LIMIT
 | 
					 | 
				
			||||||
	fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	USED=`df $1 | tail -n1 | awk '{ print $(NF-1) }' | sed s/%//`
 | 
					 | 
				
			||||||
	if [ $USED -gt $LIMIT ]; then
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		AVAIL=`df -h $1 | tail -n1 | awk '{ print $(NF-2) }'`
 | 
					 | 
				
			||||||
		echo "WARNING: only $AVAIL space available on $1." | tee -a $LOGFILE
 | 
					 | 
				
			||||||
	} | mail -s "BACKUP WARNING from $0" $MAILADDR
 | 
					 | 
				
			||||||
	fi
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function LOG() {
 | 
					 | 
				
			||||||
	LOG_DATE=`date "+%b %d %H:%M:%S"`
 | 
					 | 
				
			||||||
	HOST=`hostname`
 | 
					 | 
				
			||||||
	echo "$LOG_DATE $HOST oss-backup: $1" >> $LOGFILE
 | 
					 | 
				
			||||||
	if [ "$VERBOSE" = "yes" ]; then
 | 
					 | 
				
			||||||
		echo "$1"
 | 
					 | 
				
			||||||
	fi
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
while getopts 'fhv --long help --' OPTION ; do
 | 
					 | 
				
			||||||
        case $OPTION in
 | 
					 | 
				
			||||||
		        h|H|help)    usage 0
 | 
					 | 
				
			||||||
                ;;
 | 
					 | 
				
			||||||
				f) FORCE="yes"
 | 
					 | 
				
			||||||
				;;
 | 
					 | 
				
			||||||
				v) VERBOSE="yes"
 | 
					 | 
				
			||||||
				;;
 | 
					 | 
				
			||||||
		esac
 | 
					 | 
				
			||||||
done
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
shift $(( OPTIND - 1 ))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if [ ! -f $CONFIG ]; then
 | 
					 | 
				
			||||||
	echo -e "\033[0;31;1mThis script is for Open School Server only!\033[\0m"
 | 
					 | 
				
			||||||
	echo -e "\033[0;31;1m*********         exiting         *********\033[\0m"
 | 
					 | 
				
			||||||
	TheEnd 1
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Read the configuration
 | 
					 | 
				
			||||||
. $CONFIG
 | 
					 | 
				
			||||||
if [ -z "$SCHOOL_BACKUP_DAYS" ]; then
 | 
					 | 
				
			||||||
        SCHOOL_BACKUP_DAYS="1234567"
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
if [ "$SCHOOL_BACKUP_CAN_NOT_SAVE_ACL" = "yes" ]; then
 | 
					 | 
				
			||||||
	RSYNCPARS=" -a --delete "
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if [ "$SCHOOL_BACKUP_CAN_NOT_SAVE_OWNER" = "yes" ]; then
 | 
					 | 
				
			||||||
	RSYNCPARS=" -r --delete "
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if [ "${SCHOOL_BACKUP_DAYS/$DAY_OF_WEEK/}" = $SCHOOL_BACKUP_DAYS -a "$FORCE" != "yes" ]; then
 | 
					 | 
				
			||||||
        LOG "********** No backup needed today **********"
 | 
					 | 
				
			||||||
        exit 0;
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
MAILADDR="admin@$SCHOOL_DOMAIN"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if [ "$SCHOOL_BACKUP" = "yes" ] || [ "$FORCE" = "yes" ] ; then
 | 
					 | 
				
			||||||
	LOG "********** Starting Backup **********"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if [ "$SCHOOL_BACKUP_START_CMD" ]; then
 | 
					 | 
				
			||||||
	eval $SCHOOL_BACKUP_START_CMD
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
    if [ -e /var/adm/backup/LAST_BACKUP ]; then
 | 
					 | 
				
			||||||
        LAST_BACKUP=`cat /var/adm/backup/LAST_BACKUP`
 | 
					 | 
				
			||||||
    else    
 | 
					 | 
				
			||||||
        LAST_BACKUP=$DATE
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
	# check needed configs
 | 
					 | 
				
			||||||
	if [ -z $SCHOOL_BACKUP_FULL_DIR ]; then
 | 
					 | 
				
			||||||
		VERBOSE="yes"
 | 
					 | 
				
			||||||
		LOG "No SCHOOL_BACKUP_FULL_DIR defined - exiting" 
 | 
					 | 
				
			||||||
		TheEnd 1
 | 
					 | 
				
			||||||
	fi
 | 
					 | 
				
			||||||
	check_discspace $SCHOOL_BACKUP_FULL_DIR
 | 
					 | 
				
			||||||
	if [ -z $SCHOOL_BACKUP_INC_DIR ]; then
 | 
					 | 
				
			||||||
		VERBOSE="yes"
 | 
					 | 
				
			||||||
		LOG "No SCHOOL_BACKUP_INC_DIR defined - using $SCHOOL_BACKUP_FULL_DIR instead" 
 | 
					 | 
				
			||||||
		SCHOOL_BACKUP_INC_DIR=$SCHOOL_BACKUP_FULL_DIR
 | 
					 | 
				
			||||||
	else
 | 
					 | 
				
			||||||
		check_discspace $SCHOOL_BACKUP_INC_DIR
 | 
					 | 
				
			||||||
	fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    #create the backup direcktory
 | 
					 | 
				
			||||||
    BACKUP_DIR="$SCHOOL_BACKUP_INC_DIR/$LAST_BACKUP"
 | 
					 | 
				
			||||||
    mkdir -p $BACKUP_DIR
 | 
					 | 
				
			||||||
    if [ $? != 0 ]; then
 | 
					 | 
				
			||||||
	TheEnd 6 "CAN_NOT_MAKE_BACKUP"
 | 
					 | 
				
			||||||
    fi  
 | 
					 | 
				
			||||||
    touch $SCHOOL_BACKUP_FULL_DIR/DO_BACKUP
 | 
					 | 
				
			||||||
    if [ $? != 0 ]; then
 | 
					 | 
				
			||||||
	TheEnd 6 "CAN_NOT_MAKE_BACKUP"
 | 
					 | 
				
			||||||
    fi  
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    export BACKUP_DIR
 | 
					 | 
				
			||||||
    export SCHOOL_BACKUP_FULL_DIR
 | 
					 | 
				
			||||||
    if [ "$SCHOOL_BACKUP_CHECK_MOUNT" = "yes" ]; then
 | 
					 | 
				
			||||||
        mount | grep -q "$SCHOOL_BACKUP_FULL_DIR" || {
 | 
					 | 
				
			||||||
            LOG "Unable to mount $SCHOOL_BACKUP_FULL_DIR" 
 | 
					 | 
				
			||||||
            TheEnd 5
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        mount | grep -q "$SCHOOL_BACKUP_INC_DIR" || {
 | 
					 | 
				
			||||||
            LOG "Unable to mount $SCHOOL_BACKUP_INC_DIR" 
 | 
					 | 
				
			||||||
            TheEnd 5
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # copy sysconfig file schoolconf to the base for simple recovery
 | 
					 | 
				
			||||||
    cp /etc/sysconfig/schoolserver $SCHOOL_BACKUP_FULL_DIR/
 | 
					 | 
				
			||||||
    if [ $? != 0 ]; then
 | 
					 | 
				
			||||||
	TheEnd 6 "CAN_NOT_MAKE_BACKUP"
 | 
					 | 
				
			||||||
    fi  
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # save custom squidGuard database
 | 
					 | 
				
			||||||
    LOG "Syncing custom squidGuard database" 
 | 
					 | 
				
			||||||
    mkdir -p $SCHOOL_BACKUP_FULL_DIR/var/lib/squidGuard/db/custom/
 | 
					 | 
				
			||||||
    mkdir -p $BACKUP_DIR/var/lib/squidGuard/db/custom/
 | 
					 | 
				
			||||||
    rsync $RSYNCPARS -b --backup-dir=$BACKUP_DIR/var/lib/squidGuard/db/custom/ \
 | 
					 | 
				
			||||||
		/var/lib/squidGuard/db/custom/ \
 | 
					 | 
				
			||||||
		$SCHOOL_BACKUP_FULL_DIR/var/lib/squidGuard/db/custom/
 | 
					 | 
				
			||||||
    if [ $? != 0 ]; then
 | 
					 | 
				
			||||||
	TheEnd 6 "CAN_NOT_MAKE_BACKUP"
 | 
					 | 
				
			||||||
    fi  
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    LOG "Syncing samba"
 | 
					 | 
				
			||||||
    if [ "$SCHOOL_BACKUP_CAN_NOT_SAVE_ACL" = "yes" ]; then
 | 
					 | 
				
			||||||
       test -e $SCHOOL_BACKUP_FULL_DIR/samba_facls.gz && mv $SCHOOL_BACKUP_FULL_DIR/samba_facls.gz $BACKUP_DIR
 | 
					 | 
				
			||||||
       getfacl --absolute-names -R /var/lib/samba/ | gzip > $SCHOOL_BACKUP_FULL_DIR/samba_facls.gz
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
    mkdir -p $BACKUP_DIR/var/lib/samba/
 | 
					 | 
				
			||||||
    rsync $RSYNCPARS -b --backup-dir=$BACKUP_DIR/var/lib/samba/ /var/lib/samba/ $SCHOOL_BACKUP_FULL_DIR/var/lib/samba/
 | 
					 | 
				
			||||||
    if [ $? != 0 ]; then
 | 
					 | 
				
			||||||
        TheEnd 6 "CAN_NOT_MAKE_BACKUP"
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # save /etc - must run after samba-backup otherwise secrets.tdb.bak is not saved
 | 
					 | 
				
			||||||
    if [ "$SCHOOL_BACKUP_CAN_NOT_SAVE_ACL" = "yes" ]; then
 | 
					 | 
				
			||||||
	LOG "Saving acls on /etc/"
 | 
					 | 
				
			||||||
	if [ -e $SCHOOL_BACKUP_FULL_DIR/etc_facls.gz ]; then
 | 
					 | 
				
			||||||
		mv $SCHOOL_BACKUP_FULL_DIR/etc_facls.gz $BACKUP_DIR/etc_facls.gz
 | 
					 | 
				
			||||||
	fi
 | 
					 | 
				
			||||||
	getfacl --skip-base --absolute-names -R /etc/ | gzip > $SCHOOL_BACKUP_FULL_DIR/etc_facls.gz
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
    LOG "Syncing /etc/"
 | 
					 | 
				
			||||||
    mkdir -p $BACKUP_DIR/etc/
 | 
					 | 
				
			||||||
    rsync $RSYNCPARS -b --backup-dir=$BACKUP_DIR/etc/ /etc/ $SCHOOL_BACKUP_FULL_DIR/etc/
 | 
					 | 
				
			||||||
    if [ $? != 0 ]; then
 | 
					 | 
				
			||||||
	TheEnd 6 "CAN_NOT_MAKE_BACKUP"
 | 
					 | 
				
			||||||
    fi  
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # save /root (needed already for ssh-key files)
 | 
					 | 
				
			||||||
    LOG "Syncing /root/"
 | 
					 | 
				
			||||||
    mkdir -p $BACKUP_DIR/root/
 | 
					 | 
				
			||||||
    rsync $RSYNCPARS -b --backup-dir=$BACKUP_DIR/root/ /root/ $SCHOOL_BACKUP_FULL_DIR/root/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if [ "$SCHOOL_BACKUP_HOME" = "yes" ]; then
 | 
					 | 
				
			||||||
        if [ "$SCHOOL_BACKUP_CAN_NOT_SAVE_ACL" = "yes" ]; then
 | 
					 | 
				
			||||||
		LOG "Saving acls on /home/" 
 | 
					 | 
				
			||||||
		if [ -e $SCHOOL_BACKUP_FULL_DIR/home_facls.gz ]; then
 | 
					 | 
				
			||||||
		    mv $SCHOOL_BACKUP_FULL_DIR/home_facls.gz $BACKUP_DIR/home_facls.gz
 | 
					 | 
				
			||||||
		fi
 | 
					 | 
				
			||||||
		getfacl --skip-base --absolute-names -R /home/ | gzip > $SCHOOL_BACKUP_FULL_DIR/home_facls.gz
 | 
					 | 
				
			||||||
	fi
 | 
					 | 
				
			||||||
	LOG "Syncing /home/" 
 | 
					 | 
				
			||||||
	test -e /usr/share/oss/templates/exclude-from-home-backup || touch /usr/share/oss/templates/exclude-from-home-backup
 | 
					 | 
				
			||||||
	# If $SCHOOL_BACKUP_FULL_DIR equal $SCHOOL_BACKUP_INC_DIR we make hartlinks
 | 
					 | 
				
			||||||
	if [ $SCHOOL_BACKUP_FULL_DIR = $SCHOOL_BACKUP_INC_DIR -a "$SCHOOL_BACKUP_WITH_HARDLINK" = "yes" ]; then
 | 
					 | 
				
			||||||
	    if [ -d $SCHOOL_BACKUP_FULL_DIR/home/ ]; then
 | 
					 | 
				
			||||||
	    	mv $SCHOOL_BACKUP_FULL_DIR/home/ $BACKUP_DIR/home/
 | 
					 | 
				
			||||||
	    else
 | 
					 | 
				
			||||||
	    	mkdir -p $BACKUP_DIR/home/
 | 
					 | 
				
			||||||
	    fi
 | 
					 | 
				
			||||||
	    rsync $RSYNCPARS --exclude-from=/usr/share/oss/templates/exclude-from-home-backup --link-dest=$BACKUP_DIR/home/ /home/ $SCHOOL_BACKUP_FULL_DIR/home/
 | 
					 | 
				
			||||||
	    if [ $? != 0 ]; then
 | 
					 | 
				
			||||||
		TheEnd 6 "CAN_NOT_MAKE_BACKUP"
 | 
					 | 
				
			||||||
	    fi  
 | 
					 | 
				
			||||||
	else
 | 
					 | 
				
			||||||
	    mkdir -p $BACKUP_DIR/home/
 | 
					 | 
				
			||||||
	    rsync $RSYNCPARS --exclude-from=/usr/share/oss/templates/exclude-from-home-backup -b --backup-dir=$BACKUP_DIR/home/ /home/ $SCHOOL_BACKUP_FULL_DIR/home/
 | 
					 | 
				
			||||||
	    if [ $? != 0 ]; then
 | 
					 | 
				
			||||||
		TheEnd 6 "CAN_NOT_MAKE_BACKUP"
 | 
					 | 
				
			||||||
	    fi  
 | 
					 | 
				
			||||||
	fi
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if [ "$SCHOOL_BACKUP_CTOOL" = "yes" ]; then
 | 
					 | 
				
			||||||
    	LOG "Syncing itool"  
 | 
					 | 
				
			||||||
    	mkdir -p $SCHOOL_BACKUP_FULL_DIR/srv/itool
 | 
					 | 
				
			||||||
    	mkdir -p $BACKUP_DIR/srv/itool
 | 
					 | 
				
			||||||
    	rsync $RSYNCPARS -b --backup-dir=$BACKUP_DIR/srv/itool/ /srv/itool/ $SCHOOL_BACKUP_FULL_DIR/srv/itool/
 | 
					 | 
				
			||||||
        if [ $? != 0 ]; then
 | 
					 | 
				
			||||||
            TheEnd 6 "CAN_NOT_MAKE_BACKUP"
 | 
					 | 
				
			||||||
        fi  
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    if [ "$SCHOOL_BACKUP_DB" = "yes" ]; then
 | 
					 | 
				
			||||||
	LOG "Syncing OSS Database"
 | 
					 | 
				
			||||||
        mysqldump $MYSQLDUMP_OPTIONS --all-databases | gzip > $BACKUP_DIR/MYSQL.sql.gz
 | 
					 | 
				
			||||||
	if [ $? != 0 ]; then
 | 
					 | 
				
			||||||
		LOG " CAN_NOT_MAKE_BACKUP"
 | 
					 | 
				
			||||||
	fi  
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if [ "$SCHOOL_BACKUP_MAIL" = "yes" ]; then
 | 
					 | 
				
			||||||
	LOG "Syncing Mail Data"
 | 
					 | 
				
			||||||
        for i in var/spool/imap/ var/lib/imap/; do
 | 
					 | 
				
			||||||
            mkdir -p $SCHOOL_BACKUP_FULL_DIR/$i
 | 
					 | 
				
			||||||
            mkdir -p $BACKUP_DIR/$i
 | 
					 | 
				
			||||||
            rsync $RSYNCPARS -b --backup-dir=$BACKUP_DIR/$i /$i $SCHOOL_BACKUP_FULL_DIR/$i
 | 
					 | 
				
			||||||
	    if [ $? != 0 ]; then
 | 
					 | 
				
			||||||
		LOG " CAN_NOT_MAKE_BACKUP"
 | 
					 | 
				
			||||||
	    fi  
 | 
					 | 
				
			||||||
        done    
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Now we make recovery easy
 | 
					 | 
				
			||||||
    if [ -f /usr/share/oss/tools/oss_recover.sh ]; then
 | 
					 | 
				
			||||||
      cp -f /usr/share/oss/tools/oss_recover.sh $SCHOOL_BACKUP_FULL_DIR/
 | 
					 | 
				
			||||||
      chmod 750 $SCHOOL_BACKUP_FULL_DIR/oss_recover.sh 
 | 
					 | 
				
			||||||
      chown root:root $SCHOOL_BACKUP_FULL_DIR/oss_recover.sh
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
    if [ -f /usr/share/doc/packages/openschool-base/oss_recover.readme ]; then
 | 
					 | 
				
			||||||
      cp -f /usr/share/doc/packages/openschool-base/oss_recover.readme $SCHOOL_BACKUP_FULL_DIR/	
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Execute custom scripts
 | 
					 | 
				
			||||||
    if [ "$SCHOOL_BACKUP_CUSTOM_SCRIPTS" ]; then
 | 
					 | 
				
			||||||
        for i in $SCHOOL_BACKUP_CUSTOM_SCRIPTS
 | 
					 | 
				
			||||||
        do
 | 
					 | 
				
			||||||
                LOG "Starting $i"
 | 
					 | 
				
			||||||
                $i $BACKUP_DIR $SCHOOL_BACKUP_FULL_DIR
 | 
					 | 
				
			||||||
        done
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # create mark for last backup
 | 
					 | 
				
			||||||
    DATE=`date +%Y-%m-%d-%H-%M`
 | 
					 | 
				
			||||||
    LOG "********** Backup finished **********"
 | 
					 | 
				
			||||||
    echo $DATE > /var/adm/backup/LAST_BACKUP
 | 
					 | 
				
			||||||
    if [ "$SCHOOL_BACKUP_STOP_CMD" ]; then
 | 
					 | 
				
			||||||
	eval $SCHOOL_BACKUP_STOP_CMD
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
   
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
TheEnd
 | 
					 | 
				
			||||||
@@ -1,176 +0,0 @@
 | 
				
			|||||||
#!/bin/bash
 | 
					 | 
				
			||||||
# Copyright (c) 2021 Janic Voser Mettmenstetten, Zurich, Switzerland. All rights reserved.
 | 
					 | 
				
			||||||
# TUBS - The Ultimate Backup Script
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# Command: 
 | 
					 | 
				
			||||||
#rsync -av /SRC/ --backup-dir=/FULL-1/ /FULL/ --delete
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Config
 | 
					 | 
				
			||||||
CONFIG_FILE=/etc/tubs/config # Any Config File
 | 
					 | 
				
			||||||
# Defaults
 | 
					 | 
				
			||||||
DATE_FORMAT="+%Y-%m-%d_%H-%M"
 | 
					 | 
				
			||||||
TIME_FORMAT="+%H-%M-%S"
 | 
					 | 
				
			||||||
BACKUP_SRC_ARRAY=("/etc" "/home/janic/Documents/Reverse Engeenering/OSS-Editing/Tests/SRC") # All SRC-Directorys, separated with a space & in double quotes
 | 
					 | 
				
			||||||
BACKUP_DEST="/home/janic/Documents/Reverse Engeenering/OSS-Editing/Tests/DEST"
 | 
					 | 
				
			||||||
PID_FILE_NAME="pid" # Set diffrent, if multiple instances should run at once
 | 
					 | 
				
			||||||
LAST_BACKUP_FILE_NAME="LAST_BACKUP"
 | 
					 | 
				
			||||||
DISKSPACE_WARNING_SOFT=80 #Warn if the Diskspace is running out
 | 
					 | 
				
			||||||
DISKSPACE_WARNING_HARD=95 #Stop the Backup from execution
 | 
					 | 
				
			||||||
BACKUP_DAYS="1234567" # 1 = Monday, Example (Saturday no backup: "123457"- Used for excluding certain days
 | 
					 | 
				
			||||||
BACKUP_TODAY="no" # Use this config to overwrite (Only use if manual executed)
 | 
					 | 
				
			||||||
BACKUP_RSYNC_ARG=("-av" "--delete") # Save Rsync-Options as a array, else it will parse all options as one String
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Information Gathering
 | 
					 | 
				
			||||||
if [ -f $CONFIG_FILE ]
 | 
					 | 
				
			||||||
then
 | 
					 | 
				
			||||||
    source "$CONFIG_FILE"
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Variable Generation
 | 
					 | 
				
			||||||
DATE=$(date $DATE_FORMAT)
 | 
					 | 
				
			||||||
BACKUP_DEST_CONFIG=$BACKUP_DEST/Config
 | 
					 | 
				
			||||||
PID_FILE="$BACKUP_DEST_CONFIG/$PID_FILE_NAME"
 | 
					 | 
				
			||||||
BACKUP_DEST_LOG="$BACKUP_DEST/Logs"
 | 
					 | 
				
			||||||
LOG_FILE_NAME="Logfile_$DATE"
 | 
					 | 
				
			||||||
LOG_FILE=$BACKUP_DEST_LOG/$LOG_FILE_NAME
 | 
					 | 
				
			||||||
BACKUP_DEST_DATA=$BACKUP_DEST/Data
 | 
					 | 
				
			||||||
BACKUP_DEST_FULL=$BACKUP_DEST_DATA/Full
 | 
					 | 
				
			||||||
BACKUP_LAST_SUCCESSFUL=$BACKUP_DEST_CONFIG/$LAST_BACKUP_FILE_NAME
 | 
					 | 
				
			||||||
if [ -f "$BACKUP_LAST_SUCCESSFUL" ]
 | 
					 | 
				
			||||||
then
 | 
					 | 
				
			||||||
    BACKUP_INCREMENTAL_NAME="$BACKUP_NAME""_""$(cat "$BACKUP_LAST_SUCCESSFUL")"
 | 
					 | 
				
			||||||
    BACKUP_DEST_INCREMENTAL=$BACKUP_DEST_DATA/$BACKUP_INCREMENTAL_NAME
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
SCRIPT_SUCCESSFUL=false
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Functions
 | 
					 | 
				
			||||||
## LOG / Console-Output
 | 
					 | 
				
			||||||
function Log() { # Usage: Log Message ?Soudlevel?[silent, noisy, exit] ?State?[info, notice, warn, err]
 | 
					 | 
				
			||||||
    Timestamp
 | 
					 | 
				
			||||||
    if [ -z "$3" ]
 | 
					 | 
				
			||||||
    then
 | 
					 | 
				
			||||||
        case "$3" in
 | 
					 | 
				
			||||||
            info)
 | 
					 | 
				
			||||||
                tput setaf 4 setab 0 # Blue
 | 
					 | 
				
			||||||
                ;;
 | 
					 | 
				
			||||||
            notice)
 | 
					 | 
				
			||||||
                tput setaf 2 setab 0 bold # Green Bold
 | 
					 | 
				
			||||||
                ;;
 | 
					 | 
				
			||||||
            warn)
 | 
					 | 
				
			||||||
                tput setaf 3 setab 0 bold # Yellow Bold
 | 
					 | 
				
			||||||
                ;;
 | 
					 | 
				
			||||||
            err)
 | 
					 | 
				
			||||||
                tput setaf 1 setab 0 bold # Red Bold
 | 
					 | 
				
			||||||
                ;;
 | 
					 | 
				
			||||||
            *)
 | 
					 | 
				
			||||||
                tput sgr0 # Reset tput profile
 | 
					 | 
				
			||||||
                ;;
 | 
					 | 
				
			||||||
        esac
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
    case "$2" in
 | 
					 | 
				
			||||||
        silent)
 | 
					 | 
				
			||||||
            echo "$TIME : $1" | tee "$LOG_FILE"
 | 
					 | 
				
			||||||
            ;;
 | 
					 | 
				
			||||||
        noisy)
 | 
					 | 
				
			||||||
            echo "$TIME : $1" | tee "$LOG_FILE"
 | 
					 | 
				
			||||||
            ;;
 | 
					 | 
				
			||||||
        exit)
 | 
					 | 
				
			||||||
            echo "$TIME : Exiting cause: $1" | tee "$LOG_FILE"
 | 
					 | 
				
			||||||
            End
 | 
					 | 
				
			||||||
            ;;
 | 
					 | 
				
			||||||
        *)
 | 
					 | 
				
			||||||
            echo "$TIME : Internal error - False use of Log-Function"
 | 
					 | 
				
			||||||
            echo "$TIME : Additional Information: $1"
 | 
					 | 
				
			||||||
            ;;
 | 
					 | 
				
			||||||
        esac
 | 
					 | 
				
			||||||
    if [ -z "$3" ]
 | 
					 | 
				
			||||||
    then
 | 
					 | 
				
			||||||
        tput sgr0 # Reset tput profile
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
## Timestamp
 | 
					 | 
				
			||||||
function Timestamp() {
 | 
					 | 
				
			||||||
    TIME=$(date $TIME_FORMAT)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
## Ending Function
 | 
					 | 
				
			||||||
function End() {
 | 
					 | 
				
			||||||
    if [ $SCRIPT_SUCCESSFUL = true ]
 | 
					 | 
				
			||||||
    then
 | 
					 | 
				
			||||||
        echo "Backup Successful" > "$LOG_FILE"
 | 
					 | 
				
			||||||
        echo "$DATE" > "$BACKUP_LAST_SUCCESSFUL"
 | 
					 | 
				
			||||||
        rm "$PID_FILE"
 | 
					 | 
				
			||||||
    else
 | 
					 | 
				
			||||||
        echo "Backup not Successful" > "$LOG_FILE"
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
## Diskspace Check
 | 
					 | 
				
			||||||
function check_diskspace() {
 | 
					 | 
				
			||||||
    USED_DISKSPACE=$(df "$BACKUP_DEST" | tail -n1 | cut -d"%" -f 1 | rev | cut -d " " -f 1 | rev)
 | 
					 | 
				
			||||||
    if [[ $USED_DISKSPACE -ge $DISKSPACE_WARNING_HARD ]]
 | 
					 | 
				
			||||||
    then
 | 
					 | 
				
			||||||
        Log "Diskspace running out, Stoping Backup" "exit" "err"
 | 
					 | 
				
			||||||
        Log "Diskspace used: $USED_DISKSPACE%" "exit" "err"
 | 
					 | 
				
			||||||
    elif [[ $USED_DISKSPACE -ge $DISKSPACE_WARNING_SOFT ]]
 | 
					 | 
				
			||||||
    then
 | 
					 | 
				
			||||||
        Log "Diskspace running out!" "noisy" "warn"
 | 
					 | 
				
			||||||
        Log "Diskspace used: $USED_DISKSPACE%" "noisy" "warn"
 | 
					 | 
				
			||||||
    else
 | 
					 | 
				
			||||||
        Log "Diskspace used: $USED_DISKSPACE%" "noisy" "info"
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
function check_FileStructure() {
 | 
					 | 
				
			||||||
    $BACKUP_DEST
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
# Script
 | 
					 | 
				
			||||||
## Check if Configfile exists
 | 
					 | 
				
			||||||
if [ ! -f $CONFIG_FILE ]
 | 
					 | 
				
			||||||
then
 | 
					 | 
				
			||||||
    Log "Missing Configfile" "noisy" "warn"
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
## Check if TUBS is still running
 | 
					 | 
				
			||||||
if [ -e "$PID_FILE" ]
 | 
					 | 
				
			||||||
then
 | 
					 | 
				
			||||||
    Log "Another TUBS is running with PID $(cat "$PID_FILE" )" "exit" "err"
 | 
					 | 
				
			||||||
else
 | 
					 | 
				
			||||||
    Log "Starting Backup"
 | 
					 | 
				
			||||||
    echo $$ > "$PID_FILE"
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
## Check day of Week
 | 
					 | 
				
			||||||
if [ $BACKUP_TODAY == "yes" ]
 | 
					 | 
				
			||||||
then
 | 
					 | 
				
			||||||
    Log "Forcing Backup Today" "noisy" "warn"
 | 
					 | 
				
			||||||
else
 | 
					 | 
				
			||||||
    DAY_OF_WEEK=$(date +%u)
 | 
					 | 
				
			||||||
    if [[ $BACKUP_DAYS == *"$DAY_OF_WEEK"* ]];
 | 
					 | 
				
			||||||
    then
 | 
					 | 
				
			||||||
        Log "Today is a happy Backup Day" "noisy" "notice"
 | 
					 | 
				
			||||||
    else
 | 
					 | 
				
			||||||
        Log "Set Variable \$BACKUP_TODAY to yes, so the backup will be forced" "noisy" "notice"
 | 
					 | 
				
			||||||
        Log "Today is sadly no Backup Day" "exit" "warn"
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Check diskspace
 | 
					 | 
				
			||||||
check_diskspace
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Check Filestructure and create Missing
 | 
					 | 
				
			||||||
if [ ! -d "$BACKUP_DEST" ]
 | 
					 | 
				
			||||||
then
 | 
					 | 
				
			||||||
    Log "First Backup? No problem. Creating Backup Folder" "noisy" "notice"
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
mkdir -p "$BACKUP_DEST"
 | 
					 | 
				
			||||||
mkdir -p "$BACKUP_DEST_CONFIG"
 | 
					 | 
				
			||||||
mkdir -p "$BACKUP_DEST_FULL"
 | 
					 | 
				
			||||||
mkdir -p "$BACKUP_DEST_LOG"
 | 
					 | 
				
			||||||
for BACKUP_SRC_DIR in "${BACKUP_SRC_ARRAY[@]}"
 | 
					 | 
				
			||||||
do
 | 
					 | 
				
			||||||
    mkdir -p "$BACKUP_DEST_FULL/$BACKUP_SRC_DIR"
 | 
					 | 
				
			||||||
    ## Create Backups with Rsync
 | 
					 | 
				
			||||||
    BACKUP_SRC_DIR_NAME=$(echo "$BACKUP_SRC_DIR" | rev | cut -d "/" -f1 | rev)
 | 
					 | 
				
			||||||
    rsync "${BACKUP_RSYNC_ARG[@]}" "$BACKUP_SRC_DIR" --backup-dir="$BACKUP_DEST_INCREMENTAL" "$BACKUP_DEST_FULL/$BACKUP_SRC_DIR_NAME"
 | 
					 | 
				
			||||||
done
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
SCRIPT_SUCCESSFUL=true
 | 
					 | 
				
			||||||
Log "Backup Finished" "exit" "notice"
 | 
					 | 
				
			||||||
@@ -1,302 +0,0 @@
 | 
				
			|||||||
#!/bin/bash
 | 
					 | 
				
			||||||
# Copyright (c) 2012 Peter Varkoly Nürnberg, Germany.  All rights reserved.
 | 
					 | 
				
			||||||
# oss-backup
 | 
					 | 
				
			||||||
# 
 | 
					 | 
				
			||||||
# $Id: oss-backup,v 1.10 2007/07/18 16:43:22 pv Exp $
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
LOGFILE=/var/log/oss-backup.log
 | 
					 | 
				
			||||||
DATE=$(date +%Y-%m-%d-%H-%M)
 | 
					 | 
				
			||||||
#TODO Make all variables configurable.
 | 
					 | 
				
			||||||
MYSQLDUMP_OPTIONS="--lock-tables --add-drop-database --add-locks --quote-names --opt --create-options"
 | 
					 | 
				
			||||||
MAILADDR="admin"
 | 
					 | 
				
			||||||
FORCE="no"
 | 
					 | 
				
			||||||
VERBOSE="yes"
 | 
					 | 
				
			||||||
CONFIG=/etc/sysconfig/schoolserver
 | 
					 | 
				
			||||||
RSYNCPARS=" -aA --delete --size-only "
 | 
					 | 
				
			||||||
LIMIT=80
 | 
					 | 
				
			||||||
DAY_OF_WEEK=$( date +%u )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if [ -e /var/adm/oss/BackupRunning ]
 | 
					 | 
				
			||||||
then
 | 
					 | 
				
			||||||
	BPID=$( cat /var/adm/oss/BackupRunning )
 | 
					 | 
				
			||||||
	if [ -d /proc/$BPID ]; then
 | 
					 | 
				
			||||||
		echo "An other backup process is running with PID: $BPID"
 | 
					 | 
				
			||||||
		exit 1;
 | 
					 | 
				
			||||||
	fi
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
echo $$ > /var/adm/oss/BackupRunning
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function TheEnd(){
 | 
					 | 
				
			||||||
	rm /var/adm/oss/BackupRunning
 | 
					 | 
				
			||||||
	echo $DATE > /var/adm/backup/LAST_BACKUP
 | 
					 | 
				
			||||||
	if [ "$2" ]; then
 | 
					 | 
				
			||||||
		LOG "$2 $1";
 | 
					 | 
				
			||||||
	fi
 | 
					 | 
				
			||||||
	exit $1
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function usage (){
 | 
					 | 
				
			||||||
	echo 
 | 
					 | 
				
			||||||
	echo "Usage: $(basename $0) [OPTION] "
 | 
					 | 
				
			||||||
	echo "       -h|--help     : help (this message)"
 | 
					 | 
				
			||||||
	echo "       -f            : force backup (even if it's disabled in config)"
 | 
					 | 
				
			||||||
	echo "       -v            : be verbose"
 | 
					 | 
				
			||||||
	echo 
 | 
					 | 
				
			||||||
	echo "       Use this script to immediately create a backup of your OSS."
 | 
					 | 
				
			||||||
	echo "       You can find the configuration in $CONFIG."
 | 
					 | 
				
			||||||
	echo "       Feel free to read the administration handbook for further details."
 | 
					 | 
				
			||||||
	echo
 | 
					 | 
				
			||||||
	TheEnd $1
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function check_discspace() {
 | 
					 | 
				
			||||||
	if [ "$SCHOOL_BACKUP_WARNING_LIMIT" ]; then
 | 
					 | 
				
			||||||
		LIMIT=$SCHOOL_BACKUP_WARNING_LIMIT
 | 
					 | 
				
			||||||
	fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	USED=$(df $1 | tail -n1 | awk '{ print $(NF-1) }' | sed s/%//)
 | 
					 | 
				
			||||||
	if [ $USED -gt $LIMIT ]; then
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		AVAIL=$(df -h $1 | tail -n1 | awk '{ print $(NF-2) }')
 | 
					 | 
				
			||||||
		echo "WARNING: only $AVAIL space available on $1." | tee -a $LOGFILE
 | 
					 | 
				
			||||||
	} | mail -s "BACKUP WARNING from $0" $MAILADDR
 | 
					 | 
				
			||||||
	fi
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function LOG() {
 | 
					 | 
				
			||||||
	LOG_DATE=`date "+%b %d %H:%M:%S"`
 | 
					 | 
				
			||||||
	HOST=`hostname`
 | 
					 | 
				
			||||||
	echo "$LOG_DATE $HOST oss-backup: $1" >> $LOGFILE
 | 
					 | 
				
			||||||
	if [ "$VERBOSE" = "yes" ]; then
 | 
					 | 
				
			||||||
		echo "$1"
 | 
					 | 
				
			||||||
	fi
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
while getopts 'fhv --long help --' OPTION ; do
 | 
					 | 
				
			||||||
        case $OPTION in
 | 
					 | 
				
			||||||
		        h|H|help)    usage 0
 | 
					 | 
				
			||||||
                ;;
 | 
					 | 
				
			||||||
				f) FORCE="yes"
 | 
					 | 
				
			||||||
				;;
 | 
					 | 
				
			||||||
				v) VERBOSE="yes"
 | 
					 | 
				
			||||||
				;;
 | 
					 | 
				
			||||||
		esac
 | 
					 | 
				
			||||||
done
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
shift $(( OPTIND - 1 ))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if [ ! -f $CONFIG ]; then
 | 
					 | 
				
			||||||
	echo -e "\033[0;31;1mThis script is for Open School Server only!\033[\0m"
 | 
					 | 
				
			||||||
	echo -e "\033[0;31;1m*********         exiting         *********\033[\0m"
 | 
					 | 
				
			||||||
	TheEnd 1
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Read the configuration
 | 
					 | 
				
			||||||
. $CONFIG
 | 
					 | 
				
			||||||
if [ -z "$SCHOOL_BACKUP_DAYS" ]; then
 | 
					 | 
				
			||||||
        SCHOOL_BACKUP_DAYS="1234567"
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
if [ "$SCHOOL_BACKUP_CAN_NOT_SAVE_ACL" = "yes" ]; then
 | 
					 | 
				
			||||||
	RSYNCPARS=" -a --delete "
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if [ "$SCHOOL_BACKUP_CAN_NOT_SAVE_OWNER" = "yes" ]; then
 | 
					 | 
				
			||||||
	RSYNCPARS=" -r --delete "
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if [ "${SCHOOL_BACKUP_DAYS/$DAY_OF_WEEK/}" = $SCHOOL_BACKUP_DAYS -a "$FORCE" != "yes" ]; then
 | 
					 | 
				
			||||||
        LOG "********** No backup needed today **********"
 | 
					 | 
				
			||||||
        exit 0;
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
MAILADDR="admin@$SCHOOL_DOMAIN"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if [ "$SCHOOL_BACKUP" = "yes" ] || [ "$FORCE" = "yes" ] ; then
 | 
					 | 
				
			||||||
	LOG "********** Starting Backup **********"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if [ "$SCHOOL_BACKUP_START_CMD" ]; then
 | 
					 | 
				
			||||||
	eval $SCHOOL_BACKUP_START_CMD
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
    if [ -e /var/adm/backup/LAST_BACKUP ]; then
 | 
					 | 
				
			||||||
        LAST_BACKUP=`cat /var/adm/backup/LAST_BACKUP`
 | 
					 | 
				
			||||||
    else    
 | 
					 | 
				
			||||||
        LAST_BACKUP=$DATE
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
	# check needed configs
 | 
					 | 
				
			||||||
	if [ -z $SCHOOL_BACKUP_FULL_DIR ]; then
 | 
					 | 
				
			||||||
		VERBOSE="yes"
 | 
					 | 
				
			||||||
		LOG "No SCHOOL_BACKUP_FULL_DIR defined - exiting" 
 | 
					 | 
				
			||||||
		TheEnd 1
 | 
					 | 
				
			||||||
	fi
 | 
					 | 
				
			||||||
	check_discspace $SCHOOL_BACKUP_FULL_DIR
 | 
					 | 
				
			||||||
	if [ -z $SCHOOL_BACKUP_INC_DIR ]; then
 | 
					 | 
				
			||||||
		VERBOSE="yes"
 | 
					 | 
				
			||||||
		LOG "No SCHOOL_BACKUP_INC_DIR defined - using $SCHOOL_BACKUP_FULL_DIR instead" 
 | 
					 | 
				
			||||||
		SCHOOL_BACKUP_INC_DIR=$SCHOOL_BACKUP_FULL_DIR
 | 
					 | 
				
			||||||
	else
 | 
					 | 
				
			||||||
		check_discspace $SCHOOL_BACKUP_INC_DIR
 | 
					 | 
				
			||||||
	fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    #create the backup direcktory
 | 
					 | 
				
			||||||
    BACKUP_DIR="$SCHOOL_BACKUP_INC_DIR/$LAST_BACKUP"
 | 
					 | 
				
			||||||
    mkdir -p $BACKUP_DIR
 | 
					 | 
				
			||||||
    if [ $? != 0 ]; then
 | 
					 | 
				
			||||||
	TheEnd 6 "CAN_NOT_MAKE_BACKUP"
 | 
					 | 
				
			||||||
    fi  
 | 
					 | 
				
			||||||
    touch $SCHOOL_BACKUP_FULL_DIR/DO_BACKUP
 | 
					 | 
				
			||||||
    if [ $? != 0 ]; then
 | 
					 | 
				
			||||||
	TheEnd 6 "CAN_NOT_MAKE_BACKUP"
 | 
					 | 
				
			||||||
    fi  
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    export BACKUP_DIR
 | 
					 | 
				
			||||||
    export SCHOOL_BACKUP_FULL_DIR
 | 
					 | 
				
			||||||
    if [ "$SCHOOL_BACKUP_CHECK_MOUNT" = "yes" ]; then
 | 
					 | 
				
			||||||
        mount | grep -q "$SCHOOL_BACKUP_FULL_DIR" || {
 | 
					 | 
				
			||||||
            LOG "Unable to mount $SCHOOL_BACKUP_FULL_DIR" 
 | 
					 | 
				
			||||||
            TheEnd 5
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        mount | grep -q "$SCHOOL_BACKUP_INC_DIR" || {
 | 
					 | 
				
			||||||
            LOG "Unable to mount $SCHOOL_BACKUP_INC_DIR" 
 | 
					 | 
				
			||||||
            TheEnd 5
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # copy sysconfig file schoolconf to the base for simple recovery
 | 
					 | 
				
			||||||
    cp /etc/sysconfig/schoolserver $SCHOOL_BACKUP_FULL_DIR/
 | 
					 | 
				
			||||||
    if [ $? != 0 ]; then
 | 
					 | 
				
			||||||
	TheEnd 6 "CAN_NOT_MAKE_BACKUP"
 | 
					 | 
				
			||||||
    fi  
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # save custom squidGuard database
 | 
					 | 
				
			||||||
    LOG "Syncing custom squidGuard database" 
 | 
					 | 
				
			||||||
    mkdir -p $SCHOOL_BACKUP_FULL_DIR/var/lib/squidGuard/db/custom/
 | 
					 | 
				
			||||||
    mkdir -p $BACKUP_DIR/var/lib/squidGuard/db/custom/
 | 
					 | 
				
			||||||
    rsync $RSYNCPARS -b --backup-dir=$BACKUP_DIR/var/lib/squidGuard/db/custom/ \
 | 
					 | 
				
			||||||
		/var/lib/squidGuard/db/custom/ \
 | 
					 | 
				
			||||||
		$SCHOOL_BACKUP_FULL_DIR/var/lib/squidGuard/db/custom/
 | 
					 | 
				
			||||||
    if [ $? != 0 ]; then
 | 
					 | 
				
			||||||
	TheEnd 6 "CAN_NOT_MAKE_BACKUP"
 | 
					 | 
				
			||||||
    fi  
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    LOG "Syncing samba"
 | 
					 | 
				
			||||||
    if [ "$SCHOOL_BACKUP_CAN_NOT_SAVE_ACL" = "yes" ]; then
 | 
					 | 
				
			||||||
       test -e $SCHOOL_BACKUP_FULL_DIR/samba_facls.gz && mv $SCHOOL_BACKUP_FULL_DIR/samba_facls.gz $BACKUP_DIR
 | 
					 | 
				
			||||||
       getfacl --absolute-names -R /var/lib/samba/ | gzip > $SCHOOL_BACKUP_FULL_DIR/samba_facls.gz
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
    mkdir -p $BACKUP_DIR/var/lib/samba/
 | 
					 | 
				
			||||||
    rsync $RSYNCPARS -b --backup-dir=$BACKUP_DIR/var/lib/samba/ /var/lib/samba/ $SCHOOL_BACKUP_FULL_DIR/var/lib/samba/
 | 
					 | 
				
			||||||
    if [ $? != 0 ]; then
 | 
					 | 
				
			||||||
        TheEnd 6 "CAN_NOT_MAKE_BACKUP"
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # save /etc - must run after samba-backup otherwise secrets.tdb.bak is not saved
 | 
					 | 
				
			||||||
    if [ "$SCHOOL_BACKUP_CAN_NOT_SAVE_ACL" = "yes" ]; then
 | 
					 | 
				
			||||||
	LOG "Saving acls on /etc/"
 | 
					 | 
				
			||||||
	if [ -e $SCHOOL_BACKUP_FULL_DIR/etc_facls.gz ]; then
 | 
					 | 
				
			||||||
		mv $SCHOOL_BACKUP_FULL_DIR/etc_facls.gz $BACKUP_DIR/etc_facls.gz
 | 
					 | 
				
			||||||
	fi
 | 
					 | 
				
			||||||
	getfacl --skip-base --absolute-names -R /etc/ | gzip > $SCHOOL_BACKUP_FULL_DIR/etc_facls.gz
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
    LOG "Syncing /etc/"
 | 
					 | 
				
			||||||
    mkdir -p $BACKUP_DIR/etc/
 | 
					 | 
				
			||||||
    rsync $RSYNCPARS -b --backup-dir=$BACKUP_DIR/etc/ /etc/ $SCHOOL_BACKUP_FULL_DIR/etc/
 | 
					 | 
				
			||||||
    if [ $? != 0 ]; then
 | 
					 | 
				
			||||||
	TheEnd 6 "CAN_NOT_MAKE_BACKUP"
 | 
					 | 
				
			||||||
    fi  
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # save /root (needed already for ssh-key files)
 | 
					 | 
				
			||||||
    LOG "Syncing /root/"
 | 
					 | 
				
			||||||
    mkdir -p $BACKUP_DIR/root/
 | 
					 | 
				
			||||||
    rsync $RSYNCPARS -b --backup-dir=$BACKUP_DIR/root/ /root/ $SCHOOL_BACKUP_FULL_DIR/root/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if [ "$SCHOOL_BACKUP_HOME" = "yes" ]; then
 | 
					 | 
				
			||||||
        if [ "$SCHOOL_BACKUP_CAN_NOT_SAVE_ACL" = "yes" ]; then
 | 
					 | 
				
			||||||
		LOG "Saving acls on /home/" 
 | 
					 | 
				
			||||||
		if [ -e $SCHOOL_BACKUP_FULL_DIR/home_facls.gz ]; then
 | 
					 | 
				
			||||||
		    mv $SCHOOL_BACKUP_FULL_DIR/home_facls.gz $BACKUP_DIR/home_facls.gz
 | 
					 | 
				
			||||||
		fi
 | 
					 | 
				
			||||||
		getfacl --skip-base --absolute-names -R /home/ | gzip > $SCHOOL_BACKUP_FULL_DIR/home_facls.gz
 | 
					 | 
				
			||||||
	fi
 | 
					 | 
				
			||||||
	LOG "Syncing /home/" 
 | 
					 | 
				
			||||||
	test -e /usr/share/oss/templates/exclude-from-home-backup || touch /usr/share/oss/templates/exclude-from-home-backup
 | 
					 | 
				
			||||||
	# If $SCHOOL_BACKUP_FULL_DIR equal $SCHOOL_BACKUP_INC_DIR we make hartlinks
 | 
					 | 
				
			||||||
	if [ $SCHOOL_BACKUP_FULL_DIR = $SCHOOL_BACKUP_INC_DIR -a "$SCHOOL_BACKUP_WITH_HARDLINK" = "yes" ]; then
 | 
					 | 
				
			||||||
	    if [ -d $SCHOOL_BACKUP_FULL_DIR/home/ ]; then
 | 
					 | 
				
			||||||
	    	mv $SCHOOL_BACKUP_FULL_DIR/home/ $BACKUP_DIR/home/
 | 
					 | 
				
			||||||
	    else
 | 
					 | 
				
			||||||
	    	mkdir -p $BACKUP_DIR/home/
 | 
					 | 
				
			||||||
	    fi
 | 
					 | 
				
			||||||
	    rsync $RSYNCPARS --exclude-from=/usr/share/oss/templates/exclude-from-home-backup --link-dest=$BACKUP_DIR/home/ /home/ $SCHOOL_BACKUP_FULL_DIR/home/
 | 
					 | 
				
			||||||
	    if [ $? != 0 ]; then
 | 
					 | 
				
			||||||
		TheEnd 6 "CAN_NOT_MAKE_BACKUP"
 | 
					 | 
				
			||||||
	    fi  
 | 
					 | 
				
			||||||
	else
 | 
					 | 
				
			||||||
	    mkdir -p $BACKUP_DIR/home/
 | 
					 | 
				
			||||||
	    rsync $RSYNCPARS --exclude-from=/usr/share/oss/templates/exclude-from-home-backup -b --backup-dir=$BACKUP_DIR/home/ /home/ $SCHOOL_BACKUP_FULL_DIR/home/
 | 
					 | 
				
			||||||
	    if [ $? != 0 ]; then
 | 
					 | 
				
			||||||
		TheEnd 6 "CAN_NOT_MAKE_BACKUP"
 | 
					 | 
				
			||||||
	    fi  
 | 
					 | 
				
			||||||
	fi
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if [ "$SCHOOL_BACKUP_CTOOL" = "yes" ]; then
 | 
					 | 
				
			||||||
    	LOG "Syncing itool"  
 | 
					 | 
				
			||||||
    	mkdir -p $SCHOOL_BACKUP_FULL_DIR/srv/itool
 | 
					 | 
				
			||||||
    	mkdir -p $BACKUP_DIR/srv/itool
 | 
					 | 
				
			||||||
    	rsync $RSYNCPARS -b --backup-dir=$BACKUP_DIR/srv/itool/ /srv/itool/ $SCHOOL_BACKUP_FULL_DIR/srv/itool/
 | 
					 | 
				
			||||||
        if [ $? != 0 ]; then
 | 
					 | 
				
			||||||
            TheEnd 6 "CAN_NOT_MAKE_BACKUP"
 | 
					 | 
				
			||||||
        fi  
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    if [ "$SCHOOL_BACKUP_DB" = "yes" ]; then
 | 
					 | 
				
			||||||
	LOG "Syncing OSS Database"
 | 
					 | 
				
			||||||
        mysqldump $MYSQLDUMP_OPTIONS --all-databases | gzip > $BACKUP_DIR/MYSQL.sql.gz
 | 
					 | 
				
			||||||
	if [ $? != 0 ]; then
 | 
					 | 
				
			||||||
		LOG " CAN_NOT_MAKE_BACKUP"
 | 
					 | 
				
			||||||
	fi  
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if [ "$SCHOOL_BACKUP_MAIL" = "yes" ]; then
 | 
					 | 
				
			||||||
	LOG "Syncing Mail Data"
 | 
					 | 
				
			||||||
        for i in var/spool/imap/ var/lib/imap/; do
 | 
					 | 
				
			||||||
            mkdir -p $SCHOOL_BACKUP_FULL_DIR/$i
 | 
					 | 
				
			||||||
            mkdir -p $BACKUP_DIR/$i
 | 
					 | 
				
			||||||
            rsync $RSYNCPARS -b --backup-dir=$BACKUP_DIR/$i /$i $SCHOOL_BACKUP_FULL_DIR/$i
 | 
					 | 
				
			||||||
	    if [ $? != 0 ]; then
 | 
					 | 
				
			||||||
		LOG " CAN_NOT_MAKE_BACKUP"
 | 
					 | 
				
			||||||
	    fi  
 | 
					 | 
				
			||||||
        done    
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Now we make recovery easy
 | 
					 | 
				
			||||||
    if [ -f /usr/share/oss/tools/oss_recover.sh ]; then
 | 
					 | 
				
			||||||
      cp -f /usr/share/oss/tools/oss_recover.sh $SCHOOL_BACKUP_FULL_DIR/
 | 
					 | 
				
			||||||
      chmod 750 $SCHOOL_BACKUP_FULL_DIR/oss_recover.sh 
 | 
					 | 
				
			||||||
      chown root:root $SCHOOL_BACKUP_FULL_DIR/oss_recover.sh
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
    if [ -f /usr/share/doc/packages/openschool-base/oss_recover.readme ]; then
 | 
					 | 
				
			||||||
      cp -f /usr/share/doc/packages/openschool-base/oss_recover.readme $SCHOOL_BACKUP_FULL_DIR/	
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Execute custom scripts
 | 
					 | 
				
			||||||
    if [ "$SCHOOL_BACKUP_CUSTOM_SCRIPTS" ]; then
 | 
					 | 
				
			||||||
        for i in $SCHOOL_BACKUP_CUSTOM_SCRIPTS
 | 
					 | 
				
			||||||
        do
 | 
					 | 
				
			||||||
                LOG "Starting $i"
 | 
					 | 
				
			||||||
                $i $BACKUP_DIR $SCHOOL_BACKUP_FULL_DIR
 | 
					 | 
				
			||||||
        done
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # create mark for last backup
 | 
					 | 
				
			||||||
    DATE=`date +%Y-%m-%d-%H-%M`
 | 
					 | 
				
			||||||
    LOG "********** Backup finished **********"
 | 
					 | 
				
			||||||
    echo $DATE > /var/adm/backup/LAST_BACKUP
 | 
					 | 
				
			||||||
    if [ "$SCHOOL_BACKUP_STOP_CMD" ]; then
 | 
					 | 
				
			||||||
	eval $SCHOOL_BACKUP_STOP_CMD
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
   
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
TheEnd
 | 
					 | 
				
			||||||
		Reference in New Issue
	
	Block a user