]> Frank Brehm's Git Trees - my-stuff/backup.git/commitdiff
Shellscripte für Backup dazu
authorFrank Brehm <frank@brehm-online.com>
Wed, 19 May 2010 12:26:04 +0000 (12:26 +0000)
committerFrank Brehm <frank@brehm-online.com>
Wed, 19 May 2010 12:26:04 +0000 (12:26 +0000)
bin/backup-functions.rc [new file with mode: 0644]
bin/backup-post.sh [new file with mode: 0755]
bin/backup-pre.sh [new file with mode: 0755]
bin/backup-wrapper.sh [new file with mode: 0755]

diff --git a/bin/backup-functions.rc b/bin/backup-functions.rc
new file mode 100644 (file)
index 0000000..a2a9177
--- /dev/null
@@ -0,0 +1,139 @@
+#!/bin/sh
+
+BACKUP_DIR="${BACKUP_DIR:-/var/backup}"
+VHOSTS_DIR="${VHOSTS_DIR:-/var/www}"
+MY_CNF="${MY_CNF:-/root/.my.cnf.backup}"
+LDAP_DN="${LDAP_DN:-cn=frank,dc=brehm-online,dc=com}"
+LDAP_PW="${LDAP_PW:-up2UdLCE}"
+LDAP_SEARCH_BASE="${LDAP_SEARCH_BASE:-dc=brehm-online,dc=com}"
+
+TAR_MAX_VOLUME_SIZE=${TAR_MAX_VOLUME_SIZE:-660m}
+
+#export LANG=
+#export LC_CTYPE=en_US.UTF-8
+#export LC_NUMERIC=POSIX
+#export LC_TIME=POSIX
+#export LC_COLLATE=POSIX
+#export LC_MONETARY=POSIX
+#export LC_MESSAGES=POSIX
+#export LC_PAPER=POSIX
+##export LC_NAME=POSIX
+#export LC_ADDRESS=POSIX
+#export LC_TELEPHONE=POSIX
+#export LC_MEASUREMENT=POSIX
+#export LC_IDENTIFICATION=POSIX
+
+#######################################################################
+
+do_backup_fs( ) {
+
+    DIR2BACKUP=$1
+    TARNAME=$2
+    TYPE=$3
+    DO_COMPRESS=$4
+
+    EXT=tar
+    TAR_CMD_OPTS="--create --preserve --sparse"
+    SPLIT_CMD_OPTS="--bytes=${TAR_MAX_VOLUME_SIZE}"
+    if [ -n "${DO_COMPRESS}" ] ; then
+        EXT=tbz
+        TAR_CMD_OPTS="${TAR_CMD_OPTS} --bzip2"
+    fi
+    if [ -n "${VERBOSE}" -a "${VERBOSE}" != "0" ] ; then
+        TAR_CMD_OPTS="${TAR_CMD_OPTS} --verbose"
+        SPLIT_CMD_OPTS="${SPLIT_CMD_OPTS} --verbose"
+    fi
+    TAR_CMD_OPTS="${TAR_CMD_OPTS} -f"
+    TARFILE="backup-${TARNAME}.${TYPE}.${EXT}"
+    TARFILE_ABS=${BACKUP_DIR}/${TARFILE}
+
+    OPWD=`pwd`
+
+    echo
+    echo "Sichere ${DIR2BACKUP} ..."
+
+    if echo "${DIR2BACKUP}" | grep "^/" >/dev/null ; then
+        cd /
+        DIR2BACKUP=`echo "${DIR2BACKUP}" | sed 's#^/*##'`
+    fi
+
+    echo "   [`date`]: beginne TAR"
+#    echo "tar ${TAR_CMD_OPTS} - ${DIR2BACKUP} | split ${SPLIT_CMD_OPTS} - ${TARFILE_ABS}"
+    tar ${TAR_CMD_OPTS} - ${DIR2BACKUP} | split ${SPLIT_CMD_OPTS} - ${TARFILE_ABS}.
+    echo "   [`date`]: fertig TAR"
+
+    if [ ! -f ${TARFILE_ABS}.ab -a -f ${TARFILE_ABS}.aa ] ; then
+        echo "   [`date`]: Benenne ${TARFILE_ABS}.aa in ${TARFILE_ABS} um ..."
+        mv "${TARFILE_ABS}.aa" "${TARFILE_ABS}"
+    fi
+
+    cd ${OPWD}
+
+}
+
+#######################################################################
+
+do_backup_mysql( ) {
+
+    TYPE="$1"
+    DUMPFILE="mysql.dump.${TYPE}.bz2"
+    DUMPFILE_ABS="${BACKUP_DIR}"/"${DUMPFILE}"
+
+    V_PARAM=""
+    if [ -n "${VERBOSE}" -a "${VERBOSE}" != "0" ] ; then
+        V_PARAM="--verbose"
+    fi
+
+    echo
+    echo "Sichere MySQL-Datenbank ..."
+    echo "   [`date`]: beginne DUMP"
+
+    mysqldump --defaults-extra-file="$MY_CNF" \
+              --add-locks \
+              --skip-opt \
+              --comments \
+              --create-options \
+              --hex-blob \
+              --routines \
+              --triggers \
+              --lock-tables \
+              --quote-names \
+              --add-drop-table \
+              ${V_PARAM} --all-databases | bzip2 -c >"${DUMPFILE_ABS}"
+
+    echo "   [`date`]: fertig DUMP"
+
+}
+
+#######################################################################
+
+do_backup_ldap( ) {
+
+    TYPE="$1"
+    DUMPFILE=ldap.dump.${TYPE}.gz
+    DUMPFILE_ABS=${BACKUP_DIR}/${DUMPFILE}
+
+    V_PARAM=""
+    if [ -n "${VERBOSE}" -a "${VERBOSE}" != "0" ] ; then
+        V_PARAM="-v"
+    fi
+
+    echo
+    echo "Sichere LDAP-Datenbank ..."
+    echo "   [`date`]: beginne DUMP"
+    ldapsearch -D "${LDAP_DN}" -x ${V_PARAM} -h localhost -z 10000 -w "${LDAP_PW}" -b "${LDAP_SEARCH_BASE}" | gzip -9 >${DUMPFILE_ABS}
+    echo "   [`date`]: fertig DUMP"
+
+}
+
+#######################################################################
+
+remove_all( ) {
+    echo
+    echo "Lösche alle lokalen Backups unter ${BACKUP_DIR} ..."
+    find ${BACKUP_DIR} -type f -exec rm -v {} \;
+}
+
+#######################################################################
+
+# vim: noai : ts=4 fenc=utf-8 filetype=sh : expandtab
diff --git a/bin/backup-post.sh b/bin/backup-post.sh
new file mode 100755 (executable)
index 0000000..1fe6fa8
--- /dev/null
@@ -0,0 +1,30 @@
+#!/bin/bash
+
+#export VERBOSE=1
+
+MY_UID=$( id -u )
+if [ "${MY_UID}" != "0" ] ; then
+    echo "Nur root darf dieses Script ausfrühren." >&2
+    exit 20
+fi
+
+LIBDIR=$(dirname $0)
+
+FUNC_LIB="${LIBDIR}/backup-functions.rc"
+if [ ! -f "${FUNC_LIB}" ] ; then
+    echo "Datei '${FUNC_LIB}' nicht gefunden." >&2
+    exit 8
+fi
+. "${FUNC_LIB}"
+
+echo
+echo "[`date`]: Werfe Backup-Sets weg."
+echo
+
+remove_all
+
+echo
+echo "[`date`]: Backup beendet."
+echo
+
+# vim: noai : ts=4 fenc=utf-8 filetype=sh : expandtab
diff --git a/bin/backup-pre.sh b/bin/backup-pre.sh
new file mode 100755 (executable)
index 0000000..4ab152d
--- /dev/null
@@ -0,0 +1,87 @@
+#!/bin/bash
+
+#export VERBOSE=1
+
+MY_UID=$( id -u )
+if [ "${MY_UID}" != "0" ] ; then
+    echo "Nur root darf dieses Script ausfrühren." >&2
+    exit 20
+fi
+
+LIBDIR=$(dirname $0)
+
+FUNC_LIB="${LIBDIR}/backup-functions.rc"
+if [ ! -f "${FUNC_LIB}" ] ; then
+    echo "Datei '${FUNC_LIB}' nicht gefunden." >&2
+    exit 8
+fi
+. "${FUNC_LIB}"
+
+DATUM=$( date +'%Y-%m-%d' )
+
+echo
+echo "[`date`]: Beginne Backup."
+echo
+echo "Backup-Datum: ${DATUM}"
+echo
+
+cd /
+
+echo "Sichere Virtuelle Webhosts ..."
+if [ ! -d "${VHOSTS_DIR}" ] ; then
+    echo "Verzeichnis '${VHOSTS_DIR}' existiert nicht." >&2
+    exit 7
+fi
+
+#for vdir in "${VHOSTS_DIR}"/* ; do
+#    if [ -d "${vdir}" ] ; then
+#        d=`basename "${vdir}"`
+#        if [ "${d}" == "fotoalbum" ] ; then
+#            do_backup_fs "${vdir}" www."${d}" "${DATUM}"
+#        else
+#            do_backup_fs "${vdir}" www."${d}" "${DATUM}" 1
+#        fi
+#    fi
+#done
+
+do_backup_fs "/etc"                "etc"         "${DATUM}" 1
+do_backup_fs "/var/bind"           "bind"        "${DATUM}" 1
+do_backup_fs "/var/lib/portage"    "lib-portage" "${DATUM}" 1
+do_backup_fs "/var/lib/ip*tables"  "iptables"    "${DATUM}" 1
+do_backup_fs "/var/lib/openldap-*" "openldap"    "${DATUM}" 1
+do_backup_fs "/var/lib/svn-repos"  "subversion"  "${DATUM}" 1
+do_backup_fs "/var/log"            "var-log"     "${DATUM}" 1
+do_backup_fs "/root"               "root"        "${DATUM}" 1
+
+for dir in /home/* ; do
+
+    base=`basename "${dir}"`
+    if echo ${base} | grep "^aquota\." >/dev/null ; then
+        continue
+    fi
+    if [ "${base}" = "lost+found" ] ; then
+        continue
+    fi
+
+    do_backup_fs "${dir}" home."${base}" "${TYPE}" 1
+
+done
+
+do_backup_mysql "${TYPE}"
+do_backup_ldap  "${TYPE}"
+
+echo
+echo "Backup-Verzeichnis '${BACKUP_DIR}':"
+echo
+ls -lA "${BACKUP_DIR}"
+
+echo
+echo "Plattenauslastung Backup-Verzeichnis '${BACKUP_DIR}':"
+echo
+df -k "${BACKUP_DIR}"
+
+echo
+echo "[`date`]: Vorbereitung Backup beendet."
+echo
+
+# vim: noai : ts=4 fenc=utf-8 filetype=sh : expandtab
diff --git a/bin/backup-wrapper.sh b/bin/backup-wrapper.sh
new file mode 100755 (executable)
index 0000000..472dfc6
--- /dev/null
@@ -0,0 +1,58 @@
+#!/bin/bash
+
+RCPT="frank@brehm-online.com"
+LOG="/var/log/ftp-backup/backup.log"
+export TZ="Europe/Berlin"
+
+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=
+
+LOG_NEW=${LOG}.new
+
+MY_UID=$( id -u )
+if [ "${MY_UID}" != "0" ] ; then
+    echo "Nur root darf dieses Script ausfrühren." >&2
+    exit 20
+fi
+
+BASEDIR=$(dirname $0)
+
+BACKUP_PRE_SCRIPT="${BASEDIR}/backup-pre.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} ${FUNC_LIB} ; do
+    if [ ! -x ${S} ] ; then
+        echo "Script '${S}' fehlt." >&2
+        ALL_SCRIPTS_FOUND=0
+    fi
+done
+
+if [ "${ALL_SCRIPTS_FOUND}" == "0" ] ; then
+    exit 10
+fi
+
+cp /dev/null ${LOG_NEW}
+for S in ${BACKUP_PRE_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}
+done
+
+cat ${LOG_NEW} >> ${LOG}
+echo -e "Backupergebnisse:\n" | nail -s "Backup Sarah [`date +'%Y-%m-%d'`]" -a "${LOG_NEW}" $RCPT
+
+# vim: noai : ts=4 fenc=utf-8 filetype=sh : expandtab