diff --git a/bin/backup b/bin/backup new file mode 100755 index 0000000..28d9614 --- /dev/null +++ b/bin/backup @@ -0,0 +1,117 @@ +#! /bin/bash +set -uo pipefail + +#backup li run +#backup li + +display_usage() { + echo -e "Usage: ./backup (local|monitor |restic arguments) \n" +} + +if [ "$#" -lt 2 ]; then + display_usage + exit 1 +fi + + +TARGET=$1 +ACTION=$2 +RESTIC=$(which restic) + +check_config() { + CONFIG=/etc/backup/$1.repo + if [ ! -f $CONFIG ]; then + echo "Repo config file $CONFIG not found!" + exit 1 + else + set -a + source $CONFIG + set +a + fi + + + if [[ ! -e $RESTIC ]]; then + echo "Restic binary not found" + exit 1 + fi + + +} + +handle_params () { + + if [ $2 == "local" ]; then + do_local_backup + elif [ $2 == "monitor" ]; then + do_monitor $@ + else + shift 1 + $RESTIC $@ + fi +} + + +do_local_backup () { + if [ ! -f /etc/backup/local.config ]; then + echo "local backup config file $/etc/backup/local.config not found!" + exit 1 + fi + + . /etc/backup/local.config + $RESTIC --exclude-file /etc/backup/local.exclude backup --hostname $BACKUP_HOSTNAME $BACKUP_DIR +} + +do_monitor () { + if [ $# -lt 5 ]; then + display_usage + exit 1; + fi + WARN=$4 + CRIT=$5 + + # Get last line and parse into variables. Removes header and is empty when no snapshot exists for host + LAST=`$RESTIC snapshots -H $3 | sed 1,2d | tail -n 1` + if [ ! $? -eq 0 ]; then + exit 1; + fi + + IFS=' ' read HASH DATE TIME HOST DIR <<< "$LAST" + + if [ -z "$HASH" ]; then + echo "UNKNOWN - No snapshot found for $3" + exit 4; + fi + + + # Compute time difference since last snapshot + BACKUP_TST=$(date -d "$DATE $TIME" +"%s" ) + NOW_TST=$(date +%s) + DIFF_S=`expr $NOW_TST - $BACKUP_TST` + + DIFF_H=`expr $DIFF_S / 3600` + + MESSAGE="Last snapshot #$HASH ${DIFF_H}h ago" + RET=0 + RET_H="OK" + + if [ $DIFF_H -lt $WARN ]; then + RET=0 + RET_H="OK" + elif [ $DIFF_H -lt $CRIT ]; then + RET=1 + RET_H="WARNING" + else + RET=2 + RET_H="CRITICAL" + + fi + echo "$RET_H - $MESSAGE" + return $RET +} + + + +check_config $@ +handle_params $@ + + diff --git a/etc/backup/example.repo b/etc/backup/example.repo new file mode 100755 index 0000000..200f243 --- /dev/null +++ b/etc/backup/example.repo @@ -0,0 +1,4 @@ +RESTIC_REPOSITORY=s3:http://example.org:9000/restic +RESTIC_PASSWORD=REPO_PASSWORD +AWS_SECRET_ACCESS_KEY=ACCESS_KEY +AWS_ACCESS_KEY_ID=ACCESS_KEY_ID diff --git a/etc/backup/local.config b/etc/backup/local.config new file mode 100644 index 0000000..a1b2f0c --- /dev/null +++ b/etc/backup/local.config @@ -0,0 +1,2 @@ +BACKUP_HOSTNAME="backuphost.example.org" +BACKUP_DIR="/" diff --git a/etc/backup/local.exclude b/etc/backup/local.exclude new file mode 100644 index 0000000..39b8b32 --- /dev/null +++ b/etc/backup/local.exclude @@ -0,0 +1,22 @@ +/dev +/lost+found +/media +/mnt +/proc +/run +/sys +/tmp +/var/spool +/var/run +/var/tmp +/var/log +/tmp +*.swp +/boot +/lib +/lib64 +/bin/ +/sbin/ +/usr/sbin +.cache +cache