#!/bin/bash
#*********************************************************************************************
#* BACKUPPWG-CRON Versie 2.0 Script voor autom. synchronisatie (backup) van de Piwigo data   *
#* Ben Makkink 09 december 2016                                                              *
#*********************************************************************************************
#* BELANGRIJK: Dit script wordt gebruikt door CRON voor het dagelijks maken van een          *
#* automatische backup. CRON gebruikt echter per default 'sh' ipv 'bash'.                    *
#* Als script geschreven is in 'bash' werkt het mogelijk niet onder CRON. Corrigeer dit      *
#* door op de eerste regel van het script '#!/bin/bash' te plaatsen. Nu wordt het script     *
#* uitgevoerd is 'bash' ondanks dat het door CRON in 'sh' aangeroepen wordt.                 *
#* *******************************************************************************************
# * Verifieer dat de voor script 'backuppwg-cron' benodigde bestanden in /usr/local/bin
# * aanwezig zijn.
#
# * 1: 'mysql_access' met Mysql inloggegevens
clear;
ok="y";
if [ ! -f /usr/local/bin/.mysql_access ]
   then
	 echo;
     echo "     Bestand 1 : '.mysql_access' mist in /usr/local/bin!";
	 ok="n";
fi
# * 2: 'backuppwg_readme' met 'backuppwg' gebruikersinstructies
if [ ! -f /usr/local/bin/backuppwg_readme ]
   then
	 echo;
     echo "     Bestand 2 : 'backuppwg_readme' mist in /usr/local/bin!";
	 ok="n";
fi

# * Bericht als bestand(en) missen
if [ $ok == "n" ]
    then
	echo;
	echo "     ===============================================================================";
    echo "     Installeer eerst bovenstaande bestand(en), BACKUPPWG-CRON heeft deze nodig!!";
	echo "     ===============================================================================";
	echo -n "     Druk <Enter> om verder te gaan: "; read foo;
	echo;
	exit;  #exit script omdat bestanden missen in /usr/local/bin/
fi

# *****************************************************************************************
# * Als alle benodigde bestanden in /usr/local/bin/ bestaan; start het script
# *****************************************************************************************

# include verborgen bestand met setting van de MYSQL wachtwoorden
# Als dit script door CRON gebruikt wordt mag het pad naar .mysql_access niet relatief zijn
# CRON werkt vanuit de root en het pad naar het 'include' bestand moet dus 'full' zijn.
. /usr/local/bin/.mysql_access

# Geef hier aan waar het 'piwigo' programma zich bevindt
source_prog="/var/www/html/piwigo";

# Geef hier aan waar de buiten de webroot geplaatste 'piwigo data' zich bevinden
source_data="/home/pwgdata"

# Geef hier aan waar synchronisatie backups opgeslagen moeten worden
storedir="/vault/piwigo/";

# Geef hier aan welk datumformaat gebruikt moet worden voor de bestandsnaam
datestamp=$(date +%Y%m%d);

# Maak dump van Piwigo database naar /home/pwgdata
# ===================================================
# Maak een dump (export) van de mysql database 'piwigo' genaamd 'piwigo-dump.sql' in
# /home/pwgdata/dbase_dump
mysqldump -uroot -p$MYSQL_PWD_R --opt --databases piwigo > $source_data/dbase_dump/"piwigo-dump"$datestamp".sql";
# De datum van synchronisatie houden we bij met de naam van een bestand (zonder inhoud)
# Verwijder laatste bestand 
syncfile=$source_data"/synchronisatie*";
rm -rf $syncfile;
# Maak nieuw synchronisatiedatum bestand aan in 'source_data'
touch $source_data"/synchronisatiedatum-"$datestamp;
# Verwijder oude synchronisatiedatum bestanden uit 'storedir'
find $storedir -maxdepth 2 -mtime +7 -name synchronisatiedatum* -exec rm '{}' \;
# Verwijder dbase_dumps in source_data ouder dan 7 dagen
find $source_data/dbase_dump/ -maxdepth 2 -mtime +7 -name *piwigo-dump* -exec rm {} \;

# Backup alleen piwigo-programma naar $storedir
# Symbolic links worden gecopieerd en niet de achterliggende data
# ============================================================================================
rsync -avzh $source_prog $storedir;

# Backup 'pwgdata'
rsync -avzh $source_data $storedir;
# Verwijder databasedumps die niet meer in bron voorkomen.
rsync -avzh --delete $source_data/dbase_dump $storedir"pwgdata";
# ============================================================================================
# Zie BACKUPPWG_README voor uitleg en restore instructies
# ============================================================================================
