#!/usr/bin/perl
-# $Id$
-# $URL$
-
use strict;
use warnings;
echo "[`date`]: Backup beendet."
echo
+exit 0
+
# vim: noai : ts=4 fenc=utf-8 filetype=sh : expandtab
--- /dev/null
+#!/bin/bash
+
+export PATH=/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib64/subversion/bin
+export LANG="de_DE.UTF-8"
+export LC_CTYPE="de_DE.utf8"
+export LC_NUMERIC="de_DE.utf8"
+export LC_TIME="de_DE.utf8"
+export LC_COLLATE="de_DE.utf8"
+export LC_MONETARY="de_DE.utf8"
+export LC_MESSAGES="de_DE.utf8"
+export LC_PAPER="de_DE.utf8"
+export LC_NAME="de_DE.utf8"
+export LC_ADDRESS="de_DE.utf8"
+export LC_TELEPHONE="de_DE.utf8"
+export LC_MEASUREMENT="de_DE.utf8"
+export LC_IDENTIFICATION="de_DE.utf8"
+export LC_ALL=
+
+BACKUP_SCRIPT=$( realpath $( dirname $0 )/backup-svn.sh )
+
+if [ ! -x ${BACKUP_SCRIPT} ] ; then
+ printf "Script %s exitiert nicht oder ist nicht ausführbar.\n" ${BACKUP_SCRIPT} >&2
+ exit 5
+fi
+
+BACKUP_DIR=/var/backup/svn
+test -d ${BACKUP_DIR} || mkdir -p ${BACKUP_DIR} || exit 5
+cd ${BACKUP_DIR}
+
+echo
+echo "[$( date +'%Y-%m-%d %H:%M:%S' )]: Starte Full Backup der Subversion Repositories"
+echo
+
+printf "Lösche vorhergehende Backups ... "
+rm svn*
+printf "OK\n"
+
+${BACKUP_SCRIPT}
+
+echo "Linke Dumps nach /var/backup ..."
+for dump in svn*.dump.gz ; do
+ if [ -f "${dump}" ] ; then
+ target="/var/backup/${dump}"
+ if [ ! -f "${target}" ] ; then
+ ln "${dump}" "${target}"
+ fi
+ fi
+done
+
+svn_md5_file=/var/backup/svn.md5
+echo "Erstelle MD5-Checksummendatei ${svn_md5_file} ..."
+cp /dev/null ${svn_md5_file}
+for file in svn*.dump.gz.md5 ; do
+ if [ -f "${file}" ] ; then
+ cat "${file}" | sed 's|/var/backup/svn/||' >> ${svn_md5_file}
+ fi
+done
+
+echo
+echo "[$( date +'%Y-%m-%d %H:%M:%S' )]: Full Backup der Subversion Repositories beendet"
+
+# vim: noai : ts=4 fenc=utf-8 filetype=sh
--- /dev/null
+#!/bin/bash
+
+export PATH=/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib64/subversion/bin
+export LANG="de_DE.UTF-8"
+export LC_CTYPE="de_DE.utf8"
+export LC_NUMERIC="de_DE.utf8"
+export LC_TIME="de_DE.utf8"
+export LC_COLLATE="de_DE.utf8"
+export LC_MONETARY="de_DE.utf8"
+export LC_MESSAGES="de_DE.utf8"
+export LC_PAPER="de_DE.utf8"
+export LC_NAME="de_DE.utf8"
+export LC_ADDRESS="de_DE.utf8"
+export LC_TELEPHONE="de_DE.utf8"
+export LC_MEASUREMENT="de_DE.utf8"
+export LC_IDENTIFICATION="de_DE.utf8"
+export LC_ALL=
+
+BACKUP_SCRIPT=$( realpath $( dirname $0 )/backup-svn.sh )
+
+if [ ! -x ${BACKUP_SCRIPT} ] ; then
+ printf "Script %s exitiert nicht oder ist nicht ausführbar.\n" ${BACKUP_SCRIPT} >&2
+ exit 5
+fi
+
+BACKUP_DIR=/var/backup/svn
+test -d ${BACKUP_DIR} || mkdir -p ${BACKUP_DIR} || exit 5
+cd ${BACKUP_DIR}
+
+echo
+echo "[$( date +'%Y-%m-%d %H:%M:%S' )]: Starte Incremental Backup der Subversion Repositories"
+echo
+
+${BACKUP_SCRIPT}
+
+echo
+echo "[$( date +'%Y-%m-%d %H:%M:%S' )]: Full Incremental der Subversion Repositories beendet"
+
+# vim: noai : ts=4 fenc=utf-8 filetype=sh
--- /dev/null
+#!/bin/bash
+
+export PATH=/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib64/subversion/bin
+export LANG="de_DE.UTF-8"
+export LC_CTYPE="de_DE.utf8"
+export LC_NUMERIC="de_DE.utf8"
+export LC_TIME="de_DE.utf8"
+export LC_COLLATE="de_DE.utf8"
+export LC_MONETARY="de_DE.utf8"
+export LC_MESSAGES="de_DE.utf8"
+export LC_PAPER="de_DE.utf8"
+export LC_NAME="de_DE.utf8"
+export LC_ADDRESS="de_DE.utf8"
+export LC_TELEPHONE="de_DE.utf8"
+export LC_MEASUREMENT="de_DE.utf8"
+export LC_IDENTIFICATION="de_DE.utf8"
+export LC_ALL=
+
+BACKUP_DIR=/var/backup/svn
+test -d ${BACKUP_DIR} || mkdir -p ${BACKUP_DIR} || exit 5
+cd ${BACKUP_DIR}
+
+for repo_base in /var/lib/svn-repos /var/lib/svn-repos-priv ; do
+#for repo_base in /var/lib/svn-repos ; do
+
+ test -d ${repo_base} || continue
+
+ prefix=$( basename ${repo_base} | sed 's/svn-repos//' )
+ printf "\nSvn-Basedir: %s\n" ${repo_base}
+
+ for repo in ${repo_base}/* ; do
+
+ test -d ${repo} || continue
+
+ repo_name=$( basename ${repo} )
+
+ cur_revision=$( svnlook youngest ${repo} )
+ if [ "$?" != "0" ] ; then
+ printf "Verzeichnis %s ist kein Subversion Repository.\n" ${repo} >&2
+ continue
+ fi
+
+ changed=$( svnlook date -r ${cur_revision} ${repo} )
+ date_str=$( echo ${changed} | awk '{ print $1 "_" $2 }' )
+ dumpfile=${BACKUP_DIR}/svn${prefix}.${repo_name}.full.${cur_revision}.${date_str}.dump
+
+ rev_file=${BACKUP_DIR}/svn${prefix}.${repo_name}.revision
+ last_revision=
+ dump_revisions="-r 0:${cur_revision}"
+ if [ -f ${rev_file} ] ; then
+ last_revision=$( cat ${rev_file} | sed 's/[^0-9]//g' )
+ if [ "${last_revision}" != "" ] ; then
+ last_revision=$(( last_revision + 1 ))
+ if [ "${last_revision}" -gt "${cur_revision}" ] ; then
+ printf "\n[$( date +'%Y-%m-%d %H:%M:%S' )]\n"
+ printf "Dump Repository %s ist auf dem neuestem Stand.\n" ${repo}
+ continue
+ fi
+ dumpfile=${BACKUP_DIR}/svn${prefix}.${repo_name}.inc.${cur_revision}.${date_str}.dump
+ dump_revisions="--incremental -r ${last_revision}:${cur_revision}"
+ else
+ rm ${rev_file}
+ fi
+ fi
+
+ printf "\n[$( date +'%Y-%m-%d %H:%M:%S' )]\n"
+ printf "Dumping Repository %s nach %s\n" ${repo} "${dumpfile}.gz"
+ printf " (Revision %d, Letzte Änderung: %s)\n" ${cur_revision} "${changed}"
+ md5_file=${dumpfile}.gz.md5
+ #set -x
+ svnadmin dump --quiet ${dump_revisions} ${repo} | gzip -9 >"${dumpfile}.gz"
+ md5sum "${dumpfile}.gz" >${md5_file}
+ echo ${cur_revision} >${rev_file}
+ #set +x
+
+ done
+
+done
+
+# vim: noai : ts=4 fenc=utf-8 filetype=sh
export LC_IDENTIFICATION=de_DE.utf8
export LC_ALL=
+MY_HOSTNAME=$( hostname | perl -p -E '$_ =~ s/^(.)/uc($1)/e;' )
+
LOG_NEW=${LOG}.new
MY_UID=$( id -u )
BASEDIR=$(dirname $0)
BACKUP_PRE_SCRIPT="${BASEDIR}/backup-pre.sh"
+BACKUP_SVN_SCRIPT="${BASEDIR}/backup-svn-full.sh"
BACKUP_SCRIPT="${BASEDIR}/backup-per-ftp.pl"
BACKUP_POST_SCRIPT="${BASEDIR}/backup-post.sh"
FUNC_LIB="${BASEDIR}/backup-functions.rc"
ALL_SCRIPTS_FOUND=1
-for S in ${BACKUP_PRE_SCRIPT} ${BACKUP_SCRIPT} ${BACKUP_POST_SCRIPT} ; do
+for S in ${BACKUP_PRE_SCRIPT} ${BACKUP_SVN_SCRIPT} ${BACKUP_SCRIPT} ${BACKUP_POST_SCRIPT} ; do
if [ ! -x ${S} ] ; then
echo "Script '${S}' fehlt." >&2
ALL_SCRIPTS_FOUND=0
fi
cp /dev/null ${LOG_NEW}
-for S in ${BACKUP_PRE_SCRIPT} ${BACKUP_SCRIPT} ${BACKUP_POST_SCRIPT} ; do
+echo "Backupergebnisse:" >>${LOG_NEW}
+echo "=================" >>${LOG_NEW}
+echo >>${LOG_NEW}
+for S in ${BACKUP_PRE_SCRIPT} ${BACKUP_SVN_SCRIPT} ${BACKUP_SCRIPT} ${BACKUP_POST_SCRIPT} ; do
echo "${S} 2>&1 </dev/null | tee -a ${LOG_NEW}"
${S} 2>&1 </dev/null | tee -a ${LOG_NEW}
+ RES=$?
+ echo -e "Rückgabewert von '${S}': ${RES}\n" | tee -a ${LOG_NEW}
+ if [ "${RES}" != "0" ] ; then
+ break
+ fi
done
cat ${LOG_NEW} >> ${LOG}
-echo -e "Backupergebnisse:\n" | nail -s "Backup Sarah [`date +'%Y-%m-%d'`]" -a "${LOG_NEW}" $RCPT
+echo "" | mailx -s "Backup ${MY_HOSTNAME} [`date +'%Y-%m-%d'`]" -q "${LOG_NEW}" $RCPT
# vim: noai : ts=4 fenc=utf-8 filetype=sh : expandtab
#
# partielle lokale Änderungen können in einer 'config_local.yml' vorgenommen werden
#
-# $Id: config.yml 512 2010-05-05 08:00:18Z fbrehm $
-# $URL: http://svn.technik.berlin.strato.de/svn-os/trunk/sd-mailversand/etc/config.yml $
-#
---
# Produktionsstatus: Darf nur 'prod', 'test' oder 'dev' annehmen.
#production_state: prod
# Diese Konfiguration kann von einer log4perl_local.conf überschrieben werden.
# (Kein Merging! - Siehe Log::Log4perl zu Details der Konfiguration)
#
-# $Id$
-# $URL$
-#
##############################################################################
# Root-Logger
package FrBr::Backup::App;
-# $Id$
-# $URL$
-
=head1 NAME
FrBr::Backup::App
# Versionitis
-my $Revis = <<'ENDE';
- $Revision$
-ENDE
-$Revis =~ s/^.*:\s*(\S+)\s*\$.*/$1/s;
-
-use version; our $VERSION = qv("0.9.1"); $VERSION .= " r" . $Revis;
+use version; our $VERSION = qv("0.9.2");
#############################################################################################