From 3300c3df60bb2e5fe67cdfc3024c2bb10ce8da48 Mon Sep 17 00:00:00 2001 From: Jeremy Lecour Date: Fri, 29 Mar 2019 18:20:32 +0100 Subject: [PATCH 1/9] Add a check-incs.sh script --- check-incs.sh | 52 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 check-incs.sh diff --git a/check-incs.sh b/check-incs.sh new file mode 100644 index 0000000..3cd6c36 --- /dev/null +++ b/check-incs.sh @@ -0,0 +1,52 @@ +#!/bin/sh + +EVOBACKUP_CONFIGS="/etc/evobackup/*" + +relative_date() { + format=$(echo $1 | cut -d'.' -f1) + time_jump=$(echo $1 | cut -d'.' -f2) + + reference_date=$(date "${format}") + past_date=$(date --date "${reference_date} ${time_jump}" +"%Y-%m-%d") + + echo ${past_date} +} +inc_exists() { + ls -d /backup/incs/$1 > /dev/null 2>&1 +} +jail_exists() { + ls -d /backup/jails/$1 > /dev/null 2>&1 +} +# default return value is 0 (succes) +rc=0 +# loop for each configured jail +for file in ${EVOBACKUP_CONFIGS}; do + jail_name=$(basename $file) + # check if jail is present + if jail_exists ${jail_name}; then + # get jail last configuration date + jail_config_age=$(date --date "$(stat -c %y ${file})" +%s) + # loop for each line in jail configuration + for line in $(cat $file); do + # inc date in ISO format + inc_date=$(relative_date $line) + # inc date in seconds from epoch + inc_age=$(date --date "${inc_date}" +%s) + # check if the configuration changed after the inc date + if [ $jail_config_age -lt $inc_age ]; then + # Error if inc is not found + if ! inc_exists ${jail_name}/${inc_date}*; then + echo "ERROR: inc is missing \`${jail_name}/${inc_date}'" >&2 + rc=1 + fi + else + echo "INFO: no inc expected for ${inc_date} \`${jail_name}'" + fi + done + else + echo "ERROR: jail is missing \`${jail_name}'" >&2 + rc=1 + fi +done + +exit $rc From 02a83c1a761b7e61ea43d7436e4c5aee00660dfa Mon Sep 17 00:00:00 2001 From: Jeremy Lecour Date: Mon, 8 Apr 2019 10:55:41 +0200 Subject: [PATCH 2/9] Remove the leading 0 from the date output --- zzz_evobackup | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zzz_evobackup b/zzz_evobackup index 999bc80..3ca1c88 100755 --- a/zzz_evobackup +++ b/zzz_evobackup @@ -80,7 +80,7 @@ pick_server() { salt=$(hostname | cksum | cut -d' ' -f1) # Pick an integer between 0 and the length of the SERVERS list # It changes each day - item=$(( ($(date +%d) + salt + increment) % list_length )) + item=$(( ($(date +%e) + salt + increment) % list_length )) # cut starts counting fields at 1, not 0. field=$(( item + 1 )) From ead3cc5678756948784bc1ac78e3215678134e58 Mon Sep 17 00:00:00 2001 From: Jeremy Lecour Date: Mon, 8 Apr 2019 11:09:11 +0200 Subject: [PATCH 3/9] extract date variable --- zzz_evobackup | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/zzz_evobackup b/zzz_evobackup index 3ca1c88..7cb41a3 100755 --- a/zzz_evobackup +++ b/zzz_evobackup @@ -75,12 +75,14 @@ pick_server() { return 1 fi + # Extract the day of month, without leading 0 (which would give an octal based number) + today=$(date +%e) # A salt is useful to randomize the starting point in the list # but stay identical each time it's called for a server (based on hostname). salt=$(hostname | cksum | cut -d' ' -f1) # Pick an integer between 0 and the length of the SERVERS list # It changes each day - item=$(( ($(date +%e) + salt + increment) % list_length )) + item=$(( (today + salt + increment) % list_length )) # cut starts counting fields at 1, not 0. field=$(( item + 1 )) From ad82cc7b7af407b386aaf742b801a6bdd4619fee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Lecour?= Date: Wed, 3 Apr 2019 21:02:26 +0200 Subject: [PATCH 4/9] replace netstat by ss on Linux --- zzz_evobackup | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/zzz_evobackup b/zzz_evobackup index 7fb7181..82ab594 100755 --- a/zzz_evobackup +++ b/zzz_evobackup @@ -236,8 +236,8 @@ done ps auwwx >${LOCAL_BACKUP_DIR}/ps.out if [ "${SYSTEM}" = "linux" ]; then - ## Dump network connections with netstat - netstat -taupen > ${LOCAL_BACKUP_DIR}/netstat.out + ## Dump network connections with ss + ss -taupen > ${LOCAL_BACKUP_DIR}/netstat.out ## List Debian packages dpkg -l > ${LOCAL_BACKUP_DIR}/packages From a4ae0b84ed7b6566258be75c06454439774032e1 Mon Sep 17 00:00:00 2001 From: Jeremy Lecour Date: Mon, 3 Jun 2019 14:56:35 +0200 Subject: [PATCH 5/9] zzz_evobackup : SSH timeout at 60 seconds by default --- zzz_evobackup | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zzz_evobackup b/zzz_evobackup index 7fb7181..a8cffd9 100755 --- a/zzz_evobackup +++ b/zzz_evobackup @@ -24,7 +24,7 @@ MAIL=jdoe@example.com SERVERS="node0.backup.example.com:2XXX node1.backup.example.com:2XXX" # timeout (in seconds) for the SSH test -SSH_CONNECT_TIMEOUT=30 +SSH_CONNECT_TIMEOUT=60 ## We use /home/backup : feel free to use your own dir LOCAL_BACKUP_DIR="/home/backup" From f9c9ab61134f0fce1528451e1288cac17587bc9c Mon Sep 17 00:00:00 2001 From: Jeremy Lecour Date: Mon, 3 Jun 2019 15:12:22 +0200 Subject: [PATCH 6/9] zzz_evobackup: add rsync server in logfile --- zzz_evobackup | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/zzz_evobackup b/zzz_evobackup index 7fb7181..95dff5d 100755 --- a/zzz_evobackup +++ b/zzz_evobackup @@ -327,10 +327,10 @@ END=$(/bin/date +"%d-%m-%Y ; %H:%M") ##### REPORTING ####################################################### -echo "EvoBackup - ${HOSTNAME} - START ${BEGINNING}" \ +echo "EvoBackup - ${HOSTNAME} - START ${BEGINNING} ON ${SSH_SERVER}" \ >> /var/log/evobackup.log -echo "EvoBackup - ${HOSTNAME} - STOP ${END}" \ +echo "EvoBackup - ${HOSTNAME} - STOP ${END} ON ${SSH_SERVER}" \ >> /var/log/evobackup.log tail -10 /var/log/evobackup.log | \ From 3d3e235ecceba10c922f19476fb5f59b425f2fd5 Mon Sep 17 00:00:00 2001 From: Victor LABORIE Date: Wed, 5 Jun 2019 11:49:13 +0200 Subject: [PATCH 7/9] Make partitions dump by default on Linux --- zzz_evobackup | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/zzz_evobackup b/zzz_evobackup index becd1c4..ffe9014 100755 --- a/zzz_evobackup +++ b/zzz_evobackup @@ -209,17 +209,6 @@ trap "rm -f ${PIDFILE}" EXIT ## RabbitMQ : export config #rabbitmqadmin export ${LOCAL_BACKUP_DIR}/rabbitmq.config >> /var/log/evobackup.log -## Dump MBR / table partitions with dd and sfdisk -## Linux -#for disk in $(ls /dev/[sv]d[a-z] 2>/dev/null); do -# name=$(basename $disk) -# dd if=$disk of=${LOCAL_BACKUP_DIR}/MBR-$name bs=512 count=1 2>&1 | egrep -v "(records in|records out|512 bytes)" -# fdisk -l $disk > ${LOCAL_BACKUP_DIR}/partitions-$name -#done -#cat ${LOCAL_BACKUP_DIR}/partitions-* > ${LOCAL_BACKUP_DIR}/partitions -## OpenBSD -# disklabel sd0 > ${LOCAL_BACKUP_DIR}/partitions - # backup MegaCli config #megacli -CfgSave -f ${LOCAL_BACKUP_DIR}/megacli_conf.dump -a0 >/dev/null @@ -243,12 +232,23 @@ if [ "${SYSTEM}" = "linux" ]; then dpkg -l > ${LOCAL_BACKUP_DIR}/packages dpkg --get-selections > ${LOCAL_BACKUP_DIR}/packages.getselections apt-cache dumpavail > ${LOCAL_BACKUP_DIR}/packages.available + + ## Dump MBR / table partitions + for disk in /dev/[sv]d[a-z]; do + name=$(basename "${disk}") + dd if="${disk}" of="${LOCAL_BACKUP_DIR}/MBR-${name}" bs=512 count=1 2>&1 | egrep -v "(records in|records out|512 bytes)" + fdisk -l "${disk}" > "${LOCAL_BACKUP_DIR}/partitions-${name}" + done + cat ${LOCAL_BACKUP_DIR}/partitions-* > ${LOCAL_BACKUP_DIR}/partitions else ## Dump network connections with netstat netstat -finet -atn > ${LOCAL_BACKUP_DIR}/netstat.out ## List OpenBSD packages pkg_info -m > ${LOCAL_BACKUP_DIR}/packages + + ## Dump MBR / table partitions + ##disklabel sd0 > ${LOCAL_BACKUP_DIR}/partitions fi ##### REMOTE BACKUP ################################################### From d0afc0089cc77bfc43f330ef2c952fb6b033f12c Mon Sep 17 00:00:00 2001 From: Jeremy Lecour Date: Tue, 11 Jun 2019 11:26:31 +0200 Subject: [PATCH 8/9] zzz_evobackup: better disks detection --- zzz_evobackup | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/zzz_evobackup b/zzz_evobackup index ffe9014..794dd38 100755 --- a/zzz_evobackup +++ b/zzz_evobackup @@ -234,7 +234,8 @@ if [ "${SYSTEM}" = "linux" ]; then apt-cache dumpavail > ${LOCAL_BACKUP_DIR}/packages.available ## Dump MBR / table partitions - for disk in /dev/[sv]d[a-z]; do + disks=$(find /dev/ -regex '/dev/\([sv]d[a-z]\|nvme.*p\)[0-9]') + for disk in ${disks}; do name=$(basename "${disk}") dd if="${disk}" of="${LOCAL_BACKUP_DIR}/MBR-${name}" bs=512 count=1 2>&1 | egrep -v "(records in|records out|512 bytes)" fdisk -l "${disk}" > "${LOCAL_BACKUP_DIR}/partitions-${name}" From aa97d3ea88d40b62558f1aa6f28ca9be08debcca Mon Sep 17 00:00:00 2001 From: Jeremy Lecour Date: Mon, 24 Jun 2019 16:36:36 +0200 Subject: [PATCH 9/9] fix partitions list No need to look for all partitions, only disks are needed. --- zzz_evobackup | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zzz_evobackup b/zzz_evobackup index 794dd38..7fc7d87 100755 --- a/zzz_evobackup +++ b/zzz_evobackup @@ -234,7 +234,7 @@ if [ "${SYSTEM}" = "linux" ]; then apt-cache dumpavail > ${LOCAL_BACKUP_DIR}/packages.available ## Dump MBR / table partitions - disks=$(find /dev/ -regex '/dev/\([sv]d[a-z]\|nvme.*p\)[0-9]') + disks=$(find /dev/ -regex '/dev/\([sv]d[a-z]\|nvme[0-9]+n[0-9]+\)') for disk in ${disks}; do name=$(basename "${disk}") dd if="${disk}" of="${LOCAL_BACKUP_DIR}/MBR-${name}" bs=512 count=1 2>&1 | egrep -v "(records in|records out|512 bytes)"