#!/bin/bash

# Dit script maakt dagelijks een backup van de Linux directories
# /ARDEZO naar /LinuxBackup. en nu ook voor / = NANO
# Door gebruik te maken van rsync,
# is van elke dag waarvan de backup beschikbaar is een volledige
# directory boom van die dag beschikbaar.

# /LinuxBackup is normaal niet gemount. Voor het uitvoeren van de 
# backup wordt deze partitie tijdelijk gemount.

# Elke dag wordt een dagcopie gemaakt middels rsync.
# rsync -a -v --delete --link-dest=OUDE_BACKUP /DIR/  NIEUWE_BACKUP/
# Ik gebruik hiervoor /root/work/rsync-2.6.3/rsync 
# omdat deze versie van rsync de optie --link-dest begrijpt.

# De copie van de voorgaande week wordt verwijderd.

# Eens per week is de dagbackup tevens de weekbackup.
# Die wordt na 4 weken verwijderd

# Eens per 4 weken is de backup tevens maandbackup
# Die wordt na 1 jaar verwijderd

date

RSYNC=/root/work/rsync-2.6.3/rsync
RSYNC=/usr/bin/rsync

# date --help zegt
# %w   day of week (0..6);  0 represents Sunday
# %V   week number of year with Monday as first day of week (01..53)
DATUM=`date +'%w %V'` 

WEEKDAG=`echo $DATUM|cut -f 1 -d ' '`
GISTEREN=$[ ($WEEKDAG+6) % 7 ]
WEEKNUMMER=`echo $DATUM|cut -f 2 -d ' '`
# WEEKNUMMER, zoals date die geeft, bestaat altijd uit 2 cijfers
# de voorloop-nul, zoals in 08, zorgt dat WEEKNUMMER octaal
# geinterpreteerd wordt en dan moppert die dat dat niet kan :( 
WEEKNUMMER=$[10#$WEEKNUMMER]
VORIGEMAAND=$[ (53+$WEEKNUMMER-4) % 53 ]

if [ -z $1 ] 
then DESTDIR=ARDEZO
else DESTDIR=$1
fi

if [ $DESTDIR = "NANO" ]
then BRONDIR=`/bin/ls -1d /* |egrep -v 'proc|tmp|ARDEZO|BACKUP|Cdos|Data|LinuxBackup|MANO|Spel-W98|WindowsBackup'`
# /[a-z]*"
else BRONDIR=/${DESTDIR}/
fi

BACKUPDIR=/LinuxBackup/$DESTDIR/daily/$WEEKDAG
LINKDIR=/LinuxBackup/$DESTDIR/daily/$GISTEREN
WEEKBACKUP=/LinuxBackup/$DESTDIR/weekly/$WEEKNUMMER
VORIGEMAAND=/LinuxBackup/$DESTDIR/weekly/$VORIGEMAAND
MAANDBACKUP=/LinuxBackup/$DESTDIR/monthly/$WEEKNUMMER

lockfile /var/lock/LinuxBackup
mount /LinuxBackup

mkdir -p /LinuxBackup/$DESTDIR/daily/
mkdir -p /LinuxBackup/$DESTDIR/weekly/
mkdir -p /LinuxBackup/$DESTDIR/monthly/

# --exclude /var/spool/squid --exclude /var/cache/apt --exclude /var/cache/apt-proxy

# waarom moet ik de oude informatie wissen?

if [ -z `find $BACKUPDIR -maxdepth 0 -ctime -1 ` ]
then # eerste aanroep van vandaag, de oude informatie wissen
     rm -rf $BACKUPDIR 
     $RSYNC -v -x -a --delete --link-dest=$LINKDIR $BRONDIR $BACKUPDIR/ \
            > $BACKUPDIR.list
else # reeds eerder een aaroep geweest vadaag, voeg de nieuwe informatie toe
     $RSYNC -v -x -a --delete  --link-dest=$LINKDIR $BRONDIR $BACKUPDIR/ >> $BACKUPDIR.list
fi
touch $BACKUPDIR

if [ $WEEKDAG -eq 5 ]
then 
     rm -rf $VORIGEMAAND
     rm -rf $VORIGEMAAND.list
     cp -al $BACKUPDIR $WEEKBACKUP 
     cp -af $BACKUPDIR.list $WEEKBACKUP.list 

     if [ $[ $WEEKNUMMER % 4 ] -eq 0 ]  
     then rm -rf $MAANDBACKUP 
          rm -rf $MAANDBACKUP.list
          cp -al $BACKUPDIR $MAANDBACKUP
          cp -af $BACKUPDIR.list $MAANDBACKUP.list
     fi
fi

df /LinuxBackup | grep LinuxBackup
umount /LinuxBackup
rm -f /var/lock/LinuxBackup
date
