From 3e92c12b39d8fd06db3f6ad55621eec8c902b422 Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Sat, 23 May 2020 14:07:52 -0500 Subject: [PATCH 01/46] Starting 1.3 --- gravity-sync.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gravity-sync.sh b/gravity-sync.sh index f5a4abc..d82ba74 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -1,7 +1,7 @@ #!/bin/bash # GRAVITY SYNC BY VMSTAN ##################### -VERSION='1.2.5' +VERSION='1.3.0' # Must execute from a location in the home folder of the user who own's it (ex: /home/pi/gravity-sync) # Configure certificate based SSH authentication between the Pi-hole HA nodes - it does not use passwords From 86ee4c2596108a1b5e6877e1cea935695e5c9145 Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Sat, 23 May 2020 14:17:50 -0500 Subject: [PATCH 02/46] Branch test --- gravity-sync.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gravity-sync.sh b/gravity-sync.sh index d82ba74..03abd54 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -11,7 +11,7 @@ VERSION='1.3.0' # REQUIRED SETTINGS ########################## -# You MUST define REMOTE_HOST and REMOTE_USER in a file called 'gravity-sync.conf' +# You MUST define REMOTE_HOST and REMOTE_USER in a file called 'gravity-sync.conf' OK # You can copy the 'gravity-sync.conf.example' file in the script directory to get started # STANDARD VARIABLES ######################### From b8f8262c5ee8ee9a92416bfdf5cc89a6bace7a0d Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Sat, 23 May 2020 14:35:04 -0500 Subject: [PATCH 03/46] Added .cron file to ignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 620b1cd..6d8781a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ gravity-sync.log +gravity-sync.cron gravity.db.last gravity-sync.conf backup/*.last From 4d6c39c9c86bd0edc57afbf189bf2427d13013ce Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Sat, 23 May 2020 16:45:31 -0500 Subject: [PATCH 04/46] added password variable --- README.md | 6 +++--- gravity-sync.conf.example | 12 +++++++++--- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 9820252..02806da 100644 --- a/README.md +++ b/README.md @@ -68,9 +68,9 @@ Download the latest release from [GitHub](https://github.com/vmstan/gravity-sync ``` cd ~ -wget https://github.com/vmstan/gravity-sync/archive/v1.2.5.zip -unzip v1.2.5.zip -mv ~/gravity-sync-1.2.5 ~/gravity-sync +wget https://github.com/vmstan/gravity-sync/archive/v1.3.0.zip +unzip v1.3.0.zip +mv ~/gravity-sync-1.3.0 ~/gravity-sync cd gravity-sync ``` diff --git a/gravity-sync.conf.example b/gravity-sync.conf.example index ec8bfe1..ac0b599 100644 --- a/gravity-sync.conf.example +++ b/gravity-sync.conf.example @@ -1,3 +1,9 @@ -# REQUIRED SETTINGS -REMOTE_HOST='192.168.1.10' # your master Pihole IP or DNS -REMOTE_USER='pi' # user account with sudo rights on master Pihole \ No newline at end of file +# REQUIRED SETTINGS ###################### +# Pi-hole Primary Node in IP or DNS +REMOTE_HOST='192.168.1.10' + +# User on Primary PH with SUDO rights +REMOTE_USER='pi' + +# Password for REMOTE_USER account +REMOTE_PASS=‘password’ \ No newline at end of file From 20963f2f71a9b1c357069fb9fc40d2abd11a147c Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Sat, 23 May 2020 17:32:16 -0500 Subject: [PATCH 05/46] prerequisite --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 02806da..78e8a81 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ The script assumes you have one "primary" PH as the place you make all your conf It will **not** overwrite device specific settings such as local network configuration, admin/API passwords/keys, upstream DNS resolvers, etc. It will also **not** keep DHCP settings or device leases synchronized. -## Prereqs +## Prerequisites You will need to designate one Pi-Hole as primary and one as secondary. The designation is purely at your discretion and depends on your desired use case: From f2e235c88da465f69eb147d12ecebd58e0314a25 Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Sat, 23 May 2020 17:39:02 -0500 Subject: [PATCH 06/46] Testing command validation --- gravity-sync.sh | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/gravity-sync.sh b/gravity-sync.sh index 03abd54..971a106 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -69,6 +69,7 @@ function pull_gs { TASKTYPE='PULL' echo -e "[${CYAN}STAT${NC}] Pulling ${GRAVITY_FI} from ${REMOTE_HOST}" rsync -v -e 'ssh -p 22' ${REMOTE_USER}@${REMOTE_HOST}:${PIHOLE_DIR}/${GRAVITY_FI} $HOME/${LOCAL_FOLDR}/${BACKUP_FOLD}/${GRAVITY_FI}.pull + if_validate echo -e "[${CYAN}STAT${NC}] Backing Up Current ${GRAVITY_FI} on $HOSTNAME" cp -v ${PIHOLE_DIR}/${GRAVITY_FI} $HOME/${LOCAL_FOLDR}/${BACKUP_FOLD}/${GRAVITY_FI}.backup echo -e "[${CYAN}STAT${NC}] Replacing ${GRAVITY_FI} on $HOSTNAME" @@ -200,6 +201,13 @@ function exit_withchange { exit } +function if_validate { + if [ "$?" != "0" ]; then + echo "[${RED}FAIL${NC}] Previous Command Failed" + exit 1 + fi +} + # SCRIPT EXECUTION ########################### echo -e "[${CYAN}STAT${NC}] Evaluating Script Arguments" From c6b5153a87b3a9cf94bc366dde1065ea11eba3c2 Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Sat, 23 May 2020 17:44:08 -0500 Subject: [PATCH 07/46] Update gravity-sync.sh --- gravity-sync.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gravity-sync.sh b/gravity-sync.sh index 971a106..fec077e 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -201,9 +201,10 @@ function exit_withchange { exit } + function if_validate { if [ "$?" != "0" ]; then - echo "[${RED}FAIL${NC}] Previous Command Failed" + echo -e "[${RED}FAIL${NC}] Previous Command Failed" exit 1 fi } From b3df6fcbe41cb6c8d61daa1fd3a926919988ecd1 Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Sat, 23 May 2020 17:54:24 -0500 Subject: [PATCH 08/46] MESSAGE variable test --- gravity-sync.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/gravity-sync.sh b/gravity-sync.sh index fec077e..a666f9d 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -67,7 +67,9 @@ function update_gs { # Pull Function function pull_gs { TASKTYPE='PULL' - echo -e "[${CYAN}STAT${NC}] Pulling ${GRAVITY_FI} from ${REMOTE_HOST}" + + MESSAGE="[${CYAN}STAT${NC}] Pulling ${GRAVITY_FI} from ${REMOTE_HOST}" + echo -e "${MESSAGE}" rsync -v -e 'ssh -p 22' ${REMOTE_USER}@${REMOTE_HOST}:${PIHOLE_DIR}/${GRAVITY_FI} $HOME/${LOCAL_FOLDR}/${BACKUP_FOLD}/${GRAVITY_FI}.pull if_validate echo -e "[${CYAN}STAT${NC}] Backing Up Current ${GRAVITY_FI} on $HOSTNAME" From fe38ec3cd7af227308c8b1fc34e74eb4ded44bb0 Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Sat, 23 May 2020 17:58:06 -0500 Subject: [PATCH 09/46] Update gravity-sync.sh --- gravity-sync.sh | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/gravity-sync.sh b/gravity-sync.sh index a666f9d..fc51b82 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -34,6 +34,12 @@ YELLOW='\033[0;93m' PURPLE='\033[0;95m' NC='\033[0m' +# Message Codes +FAIL="[${RED}FAIL${NC}]" +WARN="[${PURPLE}WARN${NC}]" +GOOD="[${GREEN}GOOD${NC}]" +STAT="[${CYAN}STAT${NC}]" + ############################################## ### DO NOT CHANGE ANYTHING BELOW THIS LINE ### ############################################## @@ -68,8 +74,8 @@ function update_gs { function pull_gs { TASKTYPE='PULL' - MESSAGE="[${CYAN}STAT${NC}] Pulling ${GRAVITY_FI} from ${REMOTE_HOST}" - echo -e "${MESSAGE}" + MESSAGE="Pulling ${GRAVITY_FI} from ${REMOTE_HOST}" + echo -e "${STAT} ${MESSAGE}" rsync -v -e 'ssh -p 22' ${REMOTE_USER}@${REMOTE_HOST}:${PIHOLE_DIR}/${GRAVITY_FI} $HOME/${LOCAL_FOLDR}/${BACKUP_FOLD}/${GRAVITY_FI}.pull if_validate echo -e "[${CYAN}STAT${NC}] Backing Up Current ${GRAVITY_FI} on $HOSTNAME" @@ -206,7 +212,7 @@ function exit_withchange { function if_validate { if [ "$?" != "0" ]; then - echo -e "[${RED}FAIL${NC}] Previous Command Failed" + echo -e "${FAIL} ${MESSAGE}" exit 1 fi } From dfc892e77e7f307cc81dc8764d25ff8b9c15857c Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Sat, 23 May 2020 18:10:18 -0500 Subject: [PATCH 10/46] Else test --- gravity-sync.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/gravity-sync.sh b/gravity-sync.sh index fc51b82..88a072a 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -78,6 +78,7 @@ function pull_gs { echo -e "${STAT} ${MESSAGE}" rsync -v -e 'ssh -p 22' ${REMOTE_USER}@${REMOTE_HOST}:${PIHOLE_DIR}/${GRAVITY_FI} $HOME/${LOCAL_FOLDR}/${BACKUP_FOLD}/${GRAVITY_FI}.pull if_validate + echo -e "[${CYAN}STAT${NC}] Backing Up Current ${GRAVITY_FI} on $HOSTNAME" cp -v ${PIHOLE_DIR}/${GRAVITY_FI} $HOME/${LOCAL_FOLDR}/${BACKUP_FOLD}/${GRAVITY_FI}.backup echo -e "[${CYAN}STAT${NC}] Replacing ${GRAVITY_FI} on $HOSTNAME" @@ -214,6 +215,8 @@ function if_validate { if [ "$?" != "0" ]; then echo -e "${FAIL} ${MESSAGE}" exit 1 + else + echo -e "${GOOD} ${MESSAGE}" fi } From 75f2e5975b841eb46cb2f2ac213f83ecc57d804b Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Sat, 23 May 2020 18:26:12 -0500 Subject: [PATCH 11/46] Rebuilt pull in new style --- gravity-sync.sh | 34 +++++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/gravity-sync.sh b/gravity-sync.sh index 88a072a..3ba7936 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -77,19 +77,35 @@ function pull_gs { MESSAGE="Pulling ${GRAVITY_FI} from ${REMOTE_HOST}" echo -e "${STAT} ${MESSAGE}" rsync -v -e 'ssh -p 22' ${REMOTE_USER}@${REMOTE_HOST}:${PIHOLE_DIR}/${GRAVITY_FI} $HOME/${LOCAL_FOLDR}/${BACKUP_FOLD}/${GRAVITY_FI}.pull - if_validate - - echo -e "[${CYAN}STAT${NC}] Backing Up Current ${GRAVITY_FI} on $HOSTNAME" + error_validate + + MESSAGE="Backing Up ${GRAVITY_FI} on $HOSTNAME" + echo -e "${STAT} ${MESSAGE}" cp -v ${PIHOLE_DIR}/${GRAVITY_FI} $HOME/${LOCAL_FOLDR}/${BACKUP_FOLD}/${GRAVITY_FI}.backup - echo -e "[${CYAN}STAT${NC}] Replacing ${GRAVITY_FI} on $HOSTNAME" + error_validate + + MESSAGE="Replacing ${GRAVITY_FI} on $HOSTNAME" + echo -e "${STAT} ${MESSAGE}" sudo cp -v $HOME/${LOCAL_FOLDR}/${BACKUP_FOLD}/${GRAVITY_FI}.pull ${PIHOLE_DIR}/${GRAVITY_FI} + error_validate + + MESSAGE="Setting Permissions on ${GRAVITY_FI}" + echo -e "${STAT} ${MESSAGE}" sudo chmod 644 ${PIHOLE_DIR}/${GRAVITY_FI} + error_validate + + MESSAGE="Setting Ownership on ${GRAVITY_FI}" + echo -e "${STAT} ${MESSAGE}" sudo chown pihole:pihole ${PIHOLE_DIR}/${GRAVITY_FI} - echo -e "${GRAVITY_FI} ownership and file permissions reset" - echo -e "[${CYAN}STAT${NC}] Reloading FTLDNS Configuration" + error_validate + + MESSAGE="Reloading FTLDNS Configuration" + echo -e "${STAT} ${MESSAGE}" pihole restartdns reloadlists pihole restartdns - logs_export + error_validate + + logs_export exit_withchange } @@ -210,8 +226,8 @@ function exit_withchange { exit } - -function if_validate { +# Error Validation +function error_validate { if [ "$?" != "0" ]; then echo -e "${FAIL} ${MESSAGE}" exit 1 From 9f34aca8c6828efe9801db9e6f87635bd6a18822 Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Sat, 23 May 2020 18:37:08 -0500 Subject: [PATCH 12/46] Update gravity-sync.sh --- gravity-sync.sh | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/gravity-sync.sh b/gravity-sync.sh index 3ba7936..53c5387 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -1,6 +1,7 @@ #!/bin/bash # GRAVITY SYNC BY VMSTAN ##################### +PROGRAM='Gravity Sync' VERSION='1.3.0' # Must execute from a location in the home folder of the user who own's it (ex: /home/pi/gravity-sync) @@ -39,6 +40,7 @@ FAIL="[${RED}FAIL${NC}]" WARN="[${PURPLE}WARN${NC}]" GOOD="[${GREEN}GOOD${NC}]" STAT="[${CYAN}STAT${NC}]" +INFO="[${YELLOW}INFO${NC}]" ############################################## ### DO NOT CHANGE ANYTHING BELOW THIS LINE ### @@ -112,7 +114,7 @@ function pull_gs { # Push Function function push_gs { TASKTYPE='PUSH' - echo -e "[${PURPLE}WARN${NC}] DATA LOSS IS POSSIBLE" + echo -e "${WARN} DATA LOSS IS POSSIBLE" echo -e "The standard use of this script is to ${YELLOW}PULL${NC} data from the" echo -e "primary PH server to the secondary. By issuing a ${YELLOW}PUSH${NC}, we" echo -e "will instead overwrite the ${GRAVITY_FI} on ${YELLOW}${REMOTE_HOST}${NC}" @@ -216,14 +218,14 @@ function list_gs_arguments { # Exit Codes ## No Changes Made function exit_nochange { - echo -e "[${CYAN}STAT${NC}] Exiting Without Making Changes" - exit + echo -e "${INFO} ${PROGRAM} ${YELLOW}${TASKTYPE}${NC} Exiting Without Changes" + exit 0 } ## Changes Made function exit_withchange { - echo -e "[${CYAN}STAT${NC}] ${GRAVITY_FI} ${TASKTYPE} Completed" - exit + echo -e "${GOOD} ${PROGRAM} ${YELLOW}${TASKTYPE}${NC} Completed" + exit 0 } # Error Validation @@ -238,6 +240,7 @@ function error_validate { # SCRIPT EXECUTION ########################### +echo -e "${INFO} ${PROGRAM} ${VERSION}" echo -e "[${CYAN}STAT${NC}] Evaluating Script Arguments" case $# in From 11752bac3f47adf37223dd7e0581a20a797b8447 Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Sat, 23 May 2020 18:50:29 -0500 Subject: [PATCH 13/46] New style push validate --- gravity-sync.sh | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/gravity-sync.sh b/gravity-sync.sh index 53c5387..5c00696 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -126,18 +126,34 @@ function push_gs { select yn in "Yes" "No"; do case $yn in Yes ) - # echo "Replacing gravity.db on primary" - echo -e "[${CYAN}STAT${NC}] Backing Up ${GRAVITY_FI} from ${REMOTE_HOST}" + + MESSAGE="Backing Up ${GRAVITY_FI} from ${REMOTE_HOST}" + echo -e "${STAT} ${MESSAGE}" rsync -v -e 'ssh -p 22' ${REMOTE_USER}@${REMOTE_HOST}:${PIHOLE_DIR}/${GRAVITY_FI} $HOME/${LOCAL_FOLDR}/${BACKUP_FOLD}/${GRAVITY_FI}.push - echo -e "[${CYAN}STAT${NC}] Pushing ${GRAVITY_FI} to ${REMOTE_HOST}" + error_validate + + MESSAGE="Pushing ${GRAVITY_FI} to ${REMOTE_HOST}" + echo -e "${STAT} ${MESSAGE}" rsync --rsync-path="sudo rsync" -v -e 'ssh -p 22' ${PIHOLE_DIR}/${GRAVITY_FI} ${REMOTE_USER}@${REMOTE_HOST}:${PIHOLE_DIR}/${GRAVITY_FI} - echo -e "[${CYAN}STAT${NC}] Applying Permissions to Remote ${GRAVITY_FI}" + error_validate + + MESSAGE="Setting Permissions on ${GRAVITY_FI}" + echo -e "${STAT} ${MESSAGE}" ssh ${REMOTE_USER}@${REMOTE_HOST} "sudo chmod 644 ${PIHOLE_DIR}/${GRAVITY_FI}" + error_validate + + MESSAGE="Setting Ownership on ${GRAVITY_FI}" + echo -e "${STAT} ${MESSAGE}" ssh ${REMOTE_USER}@${REMOTE_HOST} "sudo chown pihole:pihole ${PIHOLE_DIR}/${GRAVITY_FI}" - echo -e "[${CYAN}STAT${NC}] Reloading FTLDNS Configuration" + error_validate + + MESSAGE="Reloading FTLDNS Configuration" + echo -e "${STAT} ${MESSAGE}" ssh ${REMOTE_USER}@${REMOTE_HOST} 'pihole restartdns reloadlists' ssh ${REMOTE_USER}@${REMOTE_HOST} 'pihole restartdns' - logs_export + error_validate + + logs_export exit_withchange ;; From ff0c8c5fd51dd8fd3237bc0dcfee64f9d9e3815b Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Sun, 24 May 2020 13:39:21 -0500 Subject: [PATCH 14/46] Update gravity-sync.sh --- gravity-sync.sh | 61 ++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 48 insertions(+), 13 deletions(-) diff --git a/gravity-sync.sh b/gravity-sync.sh index 5c00696..052a600 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -21,12 +21,17 @@ VERSION='1.3.0' LOCAL_FOLDR='gravity-sync' # must exist in running user home folder CONFIG_FILE='gravity-sync.conf' # must exist as explained above SYNCING_LOG='gravity-sync.log' # will be created in above folder +CRONTAB_LOG='gravity-sync.cron' BACKUP_FOLD='backup' # PH Folder/File Locations PIHOLE_DIR='/etc/pihole' # default install directory GRAVITY_FI='gravity.db' # this should not change +############################################## +### DO NOT CHANGE ANYTHING BELOW THIS LINE ### +############################################## + # Script Colors RED='\033[0;91m' GREEN='\033[0;92m' @@ -39,13 +44,9 @@ NC='\033[0m' FAIL="[${RED}FAIL${NC}]" WARN="[${PURPLE}WARN${NC}]" GOOD="[${GREEN}GOOD${NC}]" -STAT="[${CYAN}STAT${NC}]" +STAT="[${CYAN}EXEC${NC}]" INFO="[${YELLOW}INFO${NC}]" -############################################## -### DO NOT CHANGE ANYTHING BELOW THIS LINE ### -############################################## - # FUNCTION DEFINITIONS ####################### # Import Settings @@ -176,6 +177,17 @@ function logs_gs { exit_nochange } +## Check Last Crontab +function logs_crontab { + echo -e "========================================================" + echo -e "========================================================" + echo -e "" + cat ${CRONTAB_LOG} + echo -e "" + echo -e "========================================================" + echo -e "========================================================" +} + ## Log Out function logs_export { echo -e "[${CYAN}STAT${NC}] Logging Timestamps to ${SYNCING_LOG}" @@ -257,19 +269,24 @@ function error_validate { # SCRIPT EXECUTION ########################### echo -e "${INFO} ${PROGRAM} ${VERSION}" -echo -e "[${CYAN}STAT${NC}] Evaluating Script Arguments" + + MESSAGE="Evaluating Script Arguments" + echo -e "${STAT} ${MESSAGE}" case $# in 0) - echo -e "[${RED}FAIL${NC}] Missing Required Arguments" + echo -e "${FAIL} ${MESSAGE}" list_gs_arguments ;; 1) case $1 in pull) - echo -e "[${GREEN}GOOD${NC}] Pull Requested" + echo -e "${GOOD} ${MESSAGE}" + + MESSAGE="Pull Requested" + echo -e "${STAT} ${MESSAGE}" import_gs echo -e "[${CYAN}STAT${NC}] Validating Folder Configuration" @@ -304,20 +321,38 @@ case $# in ;; logs) - echo -e "[${GREEN}GOOD${NC}] Logs Requested" + MESSAGE="Logs Requested" + echo -e "${GOOD} ${MESSAGE}" logs_gs ;; + + cron) + if [ -f $HOME/${LOCAL_FOLDR}/${CRONJOB_LOG} ] + then + MESSAGE="Replaying Last Cronjob" + echo -e "${GOOD} ${MESSAGE}" + logs_crontab + else + MESSAGE="Replaying Last Cronjob" + echo -e "${FAIL} ${MESSAGE}" + exit_nochange + fi + + exit_nochange + ;; *) - echo -e "[${RED}FAIL${NC}] '${YELLOW}$1${NC}' is Invalid Argument" + MESSAGE="'${YELLOW}$1${NC}' is an Invalid Argument" + echo -e "${FAIL} ${MESSAGE}" list_gs_arguments + exit_nochange ;; esac ;; *) - echo -e "[${RED}FAIL${NC}] Too Many Arguments" - list_gs_arguments - exit_nochange + echo -e "${FAIL} Too Many Arguments" + list_gs_arguments + exit_nochange ;; esac \ No newline at end of file From 8965fadcc7163ca64b54c8f9858098410f44a058 Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Sun, 24 May 2020 17:30:33 -0500 Subject: [PATCH 15/46] Validate cron log existance --- gravity-sync.sh | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/gravity-sync.sh b/gravity-sync.sh index 052a600..6950e71 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -327,15 +327,25 @@ case $# in ;; cron) - if [ -f $HOME/${LOCAL_FOLDR}/${CRONJOB_LOG} ] + CRONPATH="$HOME/${LOCAL_FOLDR}/${CRONJOB_LOG}" + + MESSAGE="Replaying Last Cronjob" + echo -e "${STAT} ${MESSAGE}" + + if [ -f ${CRONPATH} ] then - MESSAGE="Replaying Last Cronjob" - echo -e "${GOOD} ${MESSAGE}" + if [ -s ${CRONPATH} ] + echo -e "${GOOD} ${MESSAGE}" logs_crontab + then + echo -e "${FAIL} ${MESSAGE}" + echo -e "${YELLOW}${CRONPATH}${NC} appears empty" + exit_nochange + fi else - MESSAGE="Replaying Last Cronjob" echo -e "${FAIL} ${MESSAGE}" - exit_nochange + echo -e "${YELLOW}${CRONPATH}${NC} cannot be located" + exit_nochange fi exit_nochange @@ -351,7 +361,8 @@ case $# in ;; *) - echo -e "${FAIL} Too Many Arguments" + MESSAGE="Too Many Arguments" + echo -e "${FAIL} ${MESSAGE}" list_gs_arguments exit_nochange ;; From 9a5b9ef353222081f3d2a5ccef33d58f453beaec Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Sun, 24 May 2020 17:33:42 -0500 Subject: [PATCH 16/46] Show version function --- gravity-sync.sh | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/gravity-sync.sh b/gravity-sync.sh index 6950e71..d8fa3cb 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -266,9 +266,14 @@ function error_validate { fi } +# Output Version +function show_version { + echo -e "${INFO} ${PROGRAM} ${VERSION}" +} + # SCRIPT EXECUTION ########################### -echo -e "${INFO} ${PROGRAM} ${VERSION}" +show_version MESSAGE="Evaluating Script Arguments" echo -e "${STAT} ${MESSAGE}" @@ -310,7 +315,7 @@ case $# in ;; version) - echo -e "[ ${PURPLE}INFO${NC} ] Gravity Sync ${VERSION}" + show_version exit_nochange ;; @@ -336,7 +341,8 @@ case $# in then if [ -s ${CRONPATH} ] echo -e "${GOOD} ${MESSAGE}" - logs_crontab + logs_crontab + exit_nochange then echo -e "${FAIL} ${MESSAGE}" echo -e "${YELLOW}${CRONPATH}${NC} appears empty" @@ -348,7 +354,6 @@ case $# in exit_nochange fi - exit_nochange ;; *) From c26bbec364c9ec6abe99e0c9a3d94c078bca5ce9 Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Sun, 24 May 2020 19:38:43 -0500 Subject: [PATCH 17/46] Changing more headers --- gravity-sync.sh | 82 +++++++++++++++++++++++++++++-------------------- 1 file changed, 48 insertions(+), 34 deletions(-) diff --git a/gravity-sync.sh b/gravity-sync.sh index d8fa3cb..79fe825 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -51,14 +51,17 @@ INFO="[${YELLOW}INFO${NC}]" # Import Settings function import_gs { - echo -e "[${CYAN}STAT${NC}] Importing ${CONFIG_FILE} Settings" + MESSAGE="Importing ${CONFIG_FILE} Settings" + echo -e "${STAT} $MESSAGE" if [ -f $HOME/${LOCAL_FOLDR}/${CONFIG_FILE} ] then source $HOME/${LOCAL_FOLDR}/${CONFIG_FILE} - echo -e "[${GREEN}GOOD${NC}] Using ${REMOTE_USER}@${REMOTE_HOST}" + if_validate + + MESSAGE="Using ${REMOTE_USER}@${REMOTE_HOST}" + echo -e "${INFO} ${MESSAGE}" else echo -e "[${RED}FAIL${NC}] Required ${CONFIG_FILE} Missing" - echo -e "Please review installation documentation for more information" exit_nochange fi } @@ -67,9 +70,12 @@ function import_gs { function update_gs { TASKTYPE='UPDATE' logs_export # dumps log prior to execution because script stops after successful pull - echo -e "[${PURPLE}WARN${NC}] Requires GitHub Installation" + + MESSAGE="Requires GitHub Installation" + echo -e "${INFO} Requires GitHub Installation" git reset --hard git pull + exit } @@ -77,6 +83,8 @@ function update_gs { function pull_gs { TASKTYPE='PULL' + echo -e "${INFO} ${TASKTYPE} Requested" + MESSAGE="Pulling ${GRAVITY_FI} from ${REMOTE_HOST}" echo -e "${STAT} ${MESSAGE}" rsync -v -e 'ssh -p 22' ${REMOTE_USER}@${REMOTE_HOST}:${PIHOLE_DIR}/${GRAVITY_FI} $HOME/${LOCAL_FOLDR}/${BACKUP_FOLD}/${GRAVITY_FI}.pull @@ -198,32 +206,38 @@ function logs_export { # Validate Functions ## Validate GS Folders function validate_gs_folders { - if [ -d $HOME/${LOCAL_FOLDR} ] - then - echo -e "[${GREEN}GOOD${NC}] Required $HOME/${LOCAL_FOLDR} Located" - else - echo -e "[${RED}FAIL${NC}] Required $HOME/${LOCAL_FOLDR} Missing" - exit_nochange - fi + MESSAGE="Locating $HOME/${LOCAL_FOLDR}" + echo -e "${STAT} ${MESSAGE}" + if [ -d $HOME/${LOCAL_FOLDR} ] + then + echo -e "${GOOD} ${MESSAGE}" + else + echo -e "${FAIL} ${MESSAGE}" + exit_nochange + fi - if [ -d $HOME/${LOCAL_FOLDR}/${BACKUP_FOLD} ] - then - echo -e "[${GREEN}GOOD${NC}] Required $HOME/${LOCAL_FOLDR}/${BACKUP_FOLD} Located" - else - echo -e "[${RED}FAIL${NC}] Required $HOME/${LOCAL_FOLDR}/${BACKUP_FOLD} Missing" - exit_nochange - fi + MESSAGE="Locating $HOME/${LOCAL_FOLDR}/${BACKUP_FOLD}" + echo -e "${STAT} ${MESSAGE}" + if [ -d $HOME/${LOCAL_FOLDR}/${BACKUP_FOLD} ] + then + echo -e "${GOOD} ${MESSAGE}" + else + echo -e "${FAIL} ${MESSAGE}" + exit_nochange + fi } ## Validate PH Folders function validate_ph_folders { - if [ -d ${PIHOLE_DIR} ] - then - echo -e "[${GREEN}GOOD${NC}] Required ${PIHOLE_DIR} Located" - else - echo -e "[${RED}FAIL${NC}] Required ${PIHOLE_DIR} Missing" - exit_nochange - fi + MESSAGE="Locating ${PIHOLE_DIR}" + echo -e "${STAT} ${MESSAGE}" + if [ -d ${PIHOLE_DIR} ] + then + echo -e "${GOOD} ${MESSAGE}" + else + echo -e "${FAIL} ${MESSAGE}" + exit_nochange + fi } # List GS Arguments @@ -246,7 +260,7 @@ function list_gs_arguments { # Exit Codes ## No Changes Made function exit_nochange { - echo -e "${INFO} ${PROGRAM} ${YELLOW}${TASKTYPE}${NC} Exiting Without Changes" + echo -e "${INFO} ${PROGRAM} ${YELLOW}${TASKTYPE}${NC} Aborting" exit 0 } @@ -290,11 +304,10 @@ case $# in pull) echo -e "${GOOD} ${MESSAGE}" - MESSAGE="Pull Requested" - echo -e "${STAT} ${MESSAGE}" - import_gs - - echo -e "[${CYAN}STAT${NC}] Validating Folder Configuration" + import_gs + + MESSAGE="Validating Folder Configuration" + echo -e "${INFO} ${MESSAGE}" validate_gs_folders validate_ph_folders @@ -303,10 +316,11 @@ case $# in ;; push) - echo -e "[${GREEN}GOOD${NC}] Push Requested" - import_gs + echo -e "${GOOD} ${MESSAGE}" + + import_gs - echo -e "[${CYAN}STAT${NC}] Validating Folder Configuration" + echo -e "${INFO} Validating Folder Configuration" validate_gs_folders validate_ph_folders From 7fd89703e3164481a7b18ea60365742d394aa10d Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Sun, 24 May 2020 19:40:09 -0500 Subject: [PATCH 18/46] error_validate --- gravity-sync.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gravity-sync.sh b/gravity-sync.sh index 79fe825..2c26dfd 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -56,7 +56,7 @@ function import_gs { if [ -f $HOME/${LOCAL_FOLDR}/${CONFIG_FILE} ] then source $HOME/${LOCAL_FOLDR}/${CONFIG_FILE} - if_validate + error_validate MESSAGE="Using ${REMOTE_USER}@${REMOTE_HOST}" echo -e "${INFO} ${MESSAGE}" From b5d2593628455c46f01970335e0f2a31562b654a Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Sun, 24 May 2020 19:45:05 -0500 Subject: [PATCH 19/46] Update gravity-sync.sh --- gravity-sync.sh | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/gravity-sync.sh b/gravity-sync.sh index 2c26dfd..de3d536 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -21,7 +21,7 @@ VERSION='1.3.0' LOCAL_FOLDR='gravity-sync' # must exist in running user home folder CONFIG_FILE='gravity-sync.conf' # must exist as explained above SYNCING_LOG='gravity-sync.log' # will be created in above folder -CRONTAB_LOG='gravity-sync.cron' +CRONJOB_LOG='gravity-sync.cron' BACKUP_FOLD='backup' # PH Folder/File Locations @@ -260,13 +260,13 @@ function list_gs_arguments { # Exit Codes ## No Changes Made function exit_nochange { - echo -e "${INFO} ${PROGRAM} ${YELLOW}${TASKTYPE}${NC} Aborting" + echo -e "${INFO} ${PROGRAM} ${TASKTYPE} Aborting" exit 0 } ## Changes Made function exit_withchange { - echo -e "${GOOD} ${PROGRAM} ${YELLOW}${TASKTYPE}${NC} Completed" + echo -e "${INFO} ${PROGRAM} ${TASKTYPE} Completed" exit 0 } @@ -346,6 +346,8 @@ case $# in ;; cron) + echo -e "${GOOD} ${MESSAGE}" + CRONPATH="$HOME/${LOCAL_FOLDR}/${CRONJOB_LOG}" MESSAGE="Replaying Last Cronjob" @@ -359,7 +361,7 @@ case $# in exit_nochange then echo -e "${FAIL} ${MESSAGE}" - echo -e "${YELLOW}${CRONPATH}${NC} appears empty" + echo -e "${INFO} ${CRONPATH} appears empty" exit_nochange fi else From b06bce796b308a05da0dca20beb809261cb22eb6 Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Sun, 24 May 2020 19:48:35 -0500 Subject: [PATCH 20/46] Tail instead of cat --- gravity-sync.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gravity-sync.sh b/gravity-sync.sh index de3d536..709ba3d 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -190,7 +190,7 @@ function logs_crontab { echo -e "========================================================" echo -e "========================================================" echo -e "" - cat ${CRONTAB_LOG} + tail -n 1000 ${CRONTAB_LOG} echo -e "" echo -e "========================================================" echo -e "========================================================" From d676a0df7559a0a7c4e6f3ed8de0019c136e3f49 Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Sun, 24 May 2020 19:49:34 -0500 Subject: [PATCH 21/46] Wrong variable name --- gravity-sync.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gravity-sync.sh b/gravity-sync.sh index 709ba3d..c73bee5 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -190,7 +190,7 @@ function logs_crontab { echo -e "========================================================" echo -e "========================================================" echo -e "" - tail -n 1000 ${CRONTAB_LOG} + cat ${CRONJOB_LOG} echo -e "" echo -e "========================================================" echo -e "========================================================" From 87afb838dbe00fd3d876ee21a449b7d3b2eea7ab Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Sun, 24 May 2020 19:56:55 -0500 Subject: [PATCH 22/46] Waiting before restarting services --- gravity-sync.sh | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/gravity-sync.sh b/gravity-sync.sh index c73bee5..40b0c7c 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -61,7 +61,12 @@ function import_gs { MESSAGE="Using ${REMOTE_USER}@${REMOTE_HOST}" echo -e "${INFO} ${MESSAGE}" else - echo -e "[${RED}FAIL${NC}] Required ${CONFIG_FILE} Missing" + + echo -e "${FAIL} ${MESSAGE}" + + MESSAGE="${CONFIG_FILE} Missing" + echo -e "${INFO} ${MESSAGE}" + exit_nochange fi } @@ -72,7 +77,7 @@ function update_gs { logs_export # dumps log prior to execution because script stops after successful pull MESSAGE="Requires GitHub Installation" - echo -e "${INFO} Requires GitHub Installation" + echo -e "${INFO} ${MESSAGE}" git reset --hard git pull @@ -108,7 +113,9 @@ function pull_gs { MESSAGE="Setting Ownership on ${GRAVITY_FI}" echo -e "${STAT} ${MESSAGE}" sudo chown pihole:pihole ${PIHOLE_DIR}/${GRAVITY_FI} - error_validate + error_validate + + wait 3 MESSAGE="Reloading FTLDNS Configuration" echo -e "${STAT} ${MESSAGE}" From 07ffe5d0bf1eb849f7c07d2d215658594af3568b Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Sun, 24 May 2020 19:59:03 -0500 Subject: [PATCH 23/46] Update gravity-sync.sh --- gravity-sync.sh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/gravity-sync.sh b/gravity-sync.sh index 40b0c7c..bcf01fd 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -117,9 +117,13 @@ function pull_gs { wait 3 - MESSAGE="Reloading FTLDNS Configuration" + MESSAGE="Updating FTLDNS Configuration" echo -e "${STAT} ${MESSAGE}" pihole restartdns reloadlists + error_validate + + MESSAGE="Reloading FTLDNS Services" + echo -e "${STAT} ${MESSAGE}" pihole restartdns error_validate From 7dff206d55e296a0a382f22d813a52358bcd9ce8 Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Sun, 24 May 2020 20:03:04 -0500 Subject: [PATCH 24/46] Sleep not wait --- gravity-sync.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gravity-sync.sh b/gravity-sync.sh index bcf01fd..257de04 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -115,7 +115,7 @@ function pull_gs { sudo chown pihole:pihole ${PIHOLE_DIR}/${GRAVITY_FI} error_validate - wait 3 + sleep 3 MESSAGE="Updating FTLDNS Configuration" echo -e "${STAT} ${MESSAGE}" From a64e31f0cb6c9dae97f9293e0ab8bae7b3ced690 Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Sun, 24 May 2020 20:06:11 -0500 Subject: [PATCH 25/46] TASKTYPES for everyone --- gravity-sync.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/gravity-sync.sh b/gravity-sync.sh index 257de04..5e8df45 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -340,23 +340,27 @@ case $# in ;; version) + TASKTYPE='VERSION' show_version exit_nochange ;; update) + TASKTYPE='UPDATE' echo -e "[${GREEN}GOOD${NC}] Update Requested" update_gs exit_nochange ;; logs) + TASKTYPE='LOGS' MESSAGE="Logs Requested" echo -e "${GOOD} ${MESSAGE}" logs_gs ;; cron) + TASKTYPE='CRON' echo -e "${GOOD} ${MESSAGE}" CRONPATH="$HOME/${LOCAL_FOLDR}/${CRONJOB_LOG}" From 1b4d73ebb5d2ea818e54ab86a842d227e76c14f2 Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Sun, 24 May 2020 20:19:40 -0500 Subject: [PATCH 26/46] Add md5 comparison function --- gravity-sync.sh | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/gravity-sync.sh b/gravity-sync.sh index 5e8df45..6588474 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -296,6 +296,21 @@ function show_version { echo -e "${INFO} ${PROGRAM} ${VERSION}" } +# Look for Changes +function md5_compare { + primaryMD5=$(ssh ${REMOTE_USER}@${REMOTE_HOST} 'md5sum ${PIHOLE_DIR}/${GRAVITY_FI}') + secondMD5=$(md5sum ${PIHOLE_DIR}/${GRAVITY_FI}) + + if [ "$primaryMD5" == "$secondMD5" ] + then + echo "MD5 Match" + else + echo "MD5 Changed" + fi + + exit_nochange +} + # SCRIPT EXECUTION ########################### show_version @@ -359,6 +374,11 @@ case $# in logs_gs ;; + compare) + TASKTYPE='COMPARE' + echo -e "${GOOD} ${MESSAGE}" + md5_compare + cron) TASKTYPE='CRON' echo -e "${GOOD} ${MESSAGE}" From 1faab012d786bd5d9845a7194daf43622bd765f0 Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Sun, 24 May 2020 20:20:52 -0500 Subject: [PATCH 27/46] Tick me off --- gravity-sync.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/gravity-sync.sh b/gravity-sync.sh index 6588474..d980e08 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -378,6 +378,7 @@ case $# in TASKTYPE='COMPARE' echo -e "${GOOD} ${MESSAGE}" md5_compare + ;; cron) TASKTYPE='CRON' From 7f38d43256fd8854e26a4202ce16e72607e1c4e7 Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Sun, 24 May 2020 20:23:19 -0500 Subject: [PATCH 28/46] Beta branch update --- gravity-sync.sh | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/gravity-sync.sh b/gravity-sync.sh index d980e08..6cac9e1 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -84,6 +84,20 @@ function update_gs { exit } +# Developer Build Update +function beta_gs { + TASKTYPE='UPDATE' + logs_export # dumps log prior to execution because script stops after successful pull + + MESSAGE="Requires GitHub Installation" + echo -e "${INFO} ${MESSAGE}" + git reset --hard + git pull + git checkout origin/development + + exit +} + # Pull Function function pull_gs { TASKTYPE='PULL' @@ -366,6 +380,13 @@ case $# in update_gs exit_nochange ;; + + beta) + TASKTYPE='BETA' + echo -e "[${GREEN}GOOD${NC}] Beta Update Requested" + beta_gs + exit_nochange + ;; logs) TASKTYPE='LOGS' From 8ed7bda376671917a26f50e9227e8c7abcd139ef Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Sun, 24 May 2020 20:29:32 -0500 Subject: [PATCH 29/46] Escape characters? --- gravity-sync.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/gravity-sync.sh b/gravity-sync.sh index 6cac9e1..caab71e 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -86,7 +86,7 @@ function update_gs { # Developer Build Update function beta_gs { - TASKTYPE='UPDATE' + TASKTYPE='BETA' logs_export # dumps log prior to execution because script stops after successful pull MESSAGE="Requires GitHub Installation" @@ -312,7 +312,7 @@ function show_version { # Look for Changes function md5_compare { - primaryMD5=$(ssh ${REMOTE_USER}@${REMOTE_HOST} 'md5sum ${PIHOLE_DIR}/${GRAVITY_FI}') + primaryMD5=$(ssh ${REMOTE_USER}@${REMOTE_HOST} \'md5sum ${PIHOLE_DIR}/${GRAVITY_FI}\') secondMD5=$(md5sum ${PIHOLE_DIR}/${GRAVITY_FI}) if [ "$primaryMD5" == "$secondMD5" ] @@ -375,14 +375,14 @@ case $# in ;; update) - TASKTYPE='UPDATE' + # TASKTYPE='UPDATE' echo -e "[${GREEN}GOOD${NC}] Update Requested" update_gs exit_nochange ;; beta) - TASKTYPE='BETA' + # TASKTYPE='BETA' echo -e "[${GREEN}GOOD${NC}] Beta Update Requested" beta_gs exit_nochange From 4d41c3bff9caceffb303aed8dc3ef43ab2fd5649 Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Sun, 24 May 2020 20:35:12 -0500 Subject: [PATCH 30/46] No variables --- gravity-sync.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gravity-sync.sh b/gravity-sync.sh index caab71e..5fa62d4 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -312,7 +312,7 @@ function show_version { # Look for Changes function md5_compare { - primaryMD5=$(ssh ${REMOTE_USER}@${REMOTE_HOST} \'md5sum ${PIHOLE_DIR}/${GRAVITY_FI}\') + primaryMD5=$(ssh ubuntu@192.168.7.5 'md5sum /etc/pihole/gravity.db') secondMD5=$(md5sum ${PIHOLE_DIR}/${GRAVITY_FI}) if [ "$primaryMD5" == "$secondMD5" ] From 1b88c541351a628ef57635f5b6eb37e733648790 Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Sun, 24 May 2020 20:37:24 -0500 Subject: [PATCH 31/46] Update gravity-sync.sh --- gravity-sync.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gravity-sync.sh b/gravity-sync.sh index 5fa62d4..ab6239a 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -312,7 +312,7 @@ function show_version { # Look for Changes function md5_compare { - primaryMD5=$(ssh ubuntu@192.168.7.5 'md5sum /etc/pihole/gravity.db') + primaryMD5=$(ssh ${REMOTE_USER}@${REMOTE_HOST} 'md5sum /etc/pihole/gravity.db') secondMD5=$(md5sum ${PIHOLE_DIR}/${GRAVITY_FI}) if [ "$primaryMD5" == "$secondMD5" ] From 5eaf3070aad7f62a798aeba7603884a6fb0d789c Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Sun, 24 May 2020 20:37:51 -0500 Subject: [PATCH 32/46] Update gravity-sync.sh --- gravity-sync.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gravity-sync.sh b/gravity-sync.sh index ab6239a..9595a6f 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -312,7 +312,7 @@ function show_version { # Look for Changes function md5_compare { - primaryMD5=$(ssh ${REMOTE_USER}@${REMOTE_HOST} 'md5sum /etc/pihole/gravity.db') + primaryMD5=$(ssh \${REMOTE_USER}@\${REMOTE_HOST} 'md5sum /etc/pihole/gravity.db') secondMD5=$(md5sum ${PIHOLE_DIR}/${GRAVITY_FI}) if [ "$primaryMD5" == "$secondMD5" ] From 20a2cb88fe2a6d0edbf0f026559368ad9852c90f Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Sun, 24 May 2020 20:39:06 -0500 Subject: [PATCH 33/46] Update gravity-sync.sh --- gravity-sync.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/gravity-sync.sh b/gravity-sync.sh index 9595a6f..abd5aaa 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -312,7 +312,7 @@ function show_version { # Look for Changes function md5_compare { - primaryMD5=$(ssh \${REMOTE_USER}@\${REMOTE_HOST} 'md5sum /etc/pihole/gravity.db') + primaryMD5=$(ssh ${REMOTE_USER}@${REMOTE_HOST} 'md5sum /etc/pihole/gravity.db') secondMD5=$(md5sum ${PIHOLE_DIR}/${GRAVITY_FI}) if [ "$primaryMD5" == "$secondMD5" ] @@ -397,6 +397,9 @@ case $# in compare) TASKTYPE='COMPARE' + + import_gs + echo -e "${GOOD} ${MESSAGE}" md5_compare ;; From 68aa883c5f747664becad74388fc78dbbef945b6 Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Sun, 24 May 2020 20:48:18 -0500 Subject: [PATCH 34/46] Flesh out compare --- gravity-sync.sh | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/gravity-sync.sh b/gravity-sync.sh index abd5aaa..84115dc 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -312,17 +312,26 @@ function show_version { # Look for Changes function md5_compare { + echo -e "${INFO} Looking for Changes" + + MESSAGE="Analyzing Remote ${GRAVITY_FI}" + echo -e "${STAT} ${MESSAGE}" primaryMD5=$(ssh ${REMOTE_USER}@${REMOTE_HOST} 'md5sum /etc/pihole/gravity.db') + error_validate + + MESSAGE="Analyzing Local ${GRAVITY_FI}" + echo -e "${STAT} ${MESSAGE}" secondMD5=$(md5sum ${PIHOLE_DIR}/${GRAVITY_FI}) + error_validate if [ "$primaryMD5" == "$secondMD5" ] then - echo "MD5 Match" + echo -e "${INFO} No Changes in ${GRAVITY_FI}" + exit_nochange else - echo "MD5 Changed" + echo -e "${INFO} Changes Detected in ${GRAVITY_FI}" fi - exit_nochange } # SCRIPT EXECUTION ########################### @@ -376,14 +385,18 @@ case $# in update) # TASKTYPE='UPDATE' - echo -e "[${GREEN}GOOD${NC}] Update Requested" + echo -e "${GOOD} ${MESSAGE}" + + echo -e "${INFO} Update Requested" update_gs exit_nochange ;; beta) # TASKTYPE='BETA' - echo -e "[${GREEN}GOOD${NC}] Beta Update Requested" + echo -e "${GOOD} ${MESSAGE}" + + echo -e "${INFO} Beta Update Requested" beta_gs exit_nochange ;; @@ -398,9 +411,8 @@ case $# in compare) TASKTYPE='COMPARE' - import_gs - echo -e "${GOOD} ${MESSAGE}" + import_gs md5_compare ;; From badb3fe0a51f2db67c6bb497c46624c76766a54b Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Sun, 24 May 2020 20:54:02 -0500 Subject: [PATCH 35/46] Added hash checking to pull and push --- gravity-sync.sh | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/gravity-sync.sh b/gravity-sync.sh index 84115dc..a946a9b 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -103,6 +103,7 @@ function pull_gs { TASKTYPE='PULL' echo -e "${INFO} ${TASKTYPE} Requested" + md5_compare MESSAGE="Pulling ${GRAVITY_FI} from ${REMOTE_HOST}" echo -e "${STAT} ${MESSAGE}" @@ -148,15 +149,11 @@ function pull_gs { # Push Function function push_gs { TASKTYPE='PUSH' - echo -e "${WARN} DATA LOSS IS POSSIBLE" - echo -e "The standard use of this script is to ${YELLOW}PULL${NC} data from the" - echo -e "primary PH server to the secondary. By issuing a ${YELLOW}PUSH${NC}, we" - echo -e "will instead overwrite the ${GRAVITY_FI} on ${YELLOW}${REMOTE_HOST}${NC}" - echo -e "with ${YELLOW}$HOSTNAME${NC} server data. A copy of the remote ${GRAVITY_FI}" - echo -e "will be saved to this server at:" - echo -e "${YELLOW}$HOME/${LOCAL_FOLDR}/${BACKUP_FOLD}/${GRAVITY_FI}.push${NC}" - echo -e "" - echo -e "Are you sure you want to overwrite the primary node configuration on ${REMOTE_HOST}?" + + echo -e "${INFO} ${TASKTYPE} Requested" + md5_compare + + echo -e "${WARN} Are you sure you want to overwrite the primary node configuration on ${REMOTE_HOST}?" select yn in "Yes" "No"; do case $yn in Yes ) @@ -181,9 +178,16 @@ function push_gs { ssh ${REMOTE_USER}@${REMOTE_HOST} "sudo chown pihole:pihole ${PIHOLE_DIR}/${GRAVITY_FI}" error_validate - MESSAGE="Reloading FTLDNS Configuration" + sleep 3 + + MESSAGE="Updating FTLDNS Configuration" echo -e "${STAT} ${MESSAGE}" ssh ${REMOTE_USER}@${REMOTE_HOST} 'pihole restartdns reloadlists' + error_validate + + MESSAGE="Reloading FTLDNS Services" + echo -e "${STAT} ${MESSAGE}" + ssh ${REMOTE_USER}@${REMOTE_HOST} 'pihole restartdns' error_validate @@ -312,7 +316,7 @@ function show_version { # Look for Changes function md5_compare { - echo -e "${INFO} Looking for Changes" + echo -e "${INFO} Comparing ${GRAVITY_FI} Changes" MESSAGE="Analyzing Remote ${GRAVITY_FI}" echo -e "${STAT} ${MESSAGE}" From 104d8e282c6e1feba939436d6b81898c4bda327d Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Sun, 24 May 2020 20:57:56 -0500 Subject: [PATCH 36/46] Update argument list --- gravity-sync.sh | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/gravity-sync.sh b/gravity-sync.sh index a946a9b..c0b00c2 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -277,11 +277,16 @@ function list_gs_arguments { echo -e "Replication Options:" echo -e " ${YELLOW}pull${NC} Sync the ${GRAVITY_FI} configuration on primary PH to this server" echo -e " ${YELLOW}push${NC} Force any changes made on this server back to the primary PH" + echo -e " ${YELLOW}compare${NC} Check to see if there is any variance between primary and secondary" echo -e "" - echo -e "Debugging Options:" + echo -e "Update Options:" echo -e " ${YELLOW}update${NC} Use GitHub to update this script to the latest version available" + echo -e " ${YELLOW}beta${NC} Use GitHub to update this script to the latest beta version available" + echo -e "" + echo -e "Debug Options:" echo -e " ${YELLOW}version${NC} Display the version of the current installed script" echo -e " ${YELLOW}logs${NC} Show recent successful jobs" + echo -e " ${YELLOW}cron${NC} Display output of last crontab execution" echo -e "" exit_nochange } From b87c6c2e703a18190cc4f8ee59cfb16c86eec1ab Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Sun, 24 May 2020 20:58:44 -0500 Subject: [PATCH 37/46] One tab less --- gravity-sync.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gravity-sync.sh b/gravity-sync.sh index c0b00c2..e3fbc95 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -277,7 +277,7 @@ function list_gs_arguments { echo -e "Replication Options:" echo -e " ${YELLOW}pull${NC} Sync the ${GRAVITY_FI} configuration on primary PH to this server" echo -e " ${YELLOW}push${NC} Force any changes made on this server back to the primary PH" - echo -e " ${YELLOW}compare${NC} Check to see if there is any variance between primary and secondary" + echo -e " ${YELLOW}compare${NC} Check to see if there is any variance between primary and secondary" echo -e "" echo -e "Update Options:" echo -e " ${YELLOW}update${NC} Use GitHub to update this script to the latest version available" From 7ab04ea424face6e0ffa2c3d45a0ad0d9de21938 Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Sun, 24 May 2020 21:15:08 -0500 Subject: [PATCH 38/46] Add SSHPASS validation --- gravity-sync.sh | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/gravity-sync.sh b/gravity-sync.sh index e3fbc95..a68a0cf 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -205,12 +205,14 @@ function push_gs { # Logging Functions ## Check Log Function function logs_gs { - echo -e "Recent ${YELLOW}PULL${NC} attempts" + echo -e "========================================================" + echo -e "Recent Complete ${YELLOW}PULL${NC} Executions" tail -n 10 ${SYNCING_LOG} | grep PULL - echo -e "Recent ${YELLOW}UPDATE${NC} attempts" + echo -e "Recent Complete ${YELLOW}UPDATE${NC} Executions" tail -n 10 ${SYNCING_LOG} | grep UPDATE - echo -e "Recent ${YELLOW}PUSH${NC} attempts" + echo -e "Recent Complete ${YELLOW}PUSH${NC} Executions" tail -n 10 ${SYNCING_LOG} | grep PUSH + echo -e "========================================================" exit_nochange } @@ -269,6 +271,21 @@ function validate_ph_folders { fi } +## Validate SSHPASS +function validate_os_sshpass { + if hash sshpass 2>/dev/null + then + if ${REMOTE_PASS} != '' + then + sshpassword="sshpass -p ${REMOTE_PASS}" + else + sshpassword='' + fi + else + sshpassword='' + fi +} + # List GS Arguments function list_gs_arguments { echo -e "Usage: $0 [options]" @@ -345,7 +362,7 @@ function md5_compare { # SCRIPT EXECUTION ########################### -show_version +validate_os_sshpass MESSAGE="Evaluating Script Arguments" echo -e "${STAT} ${MESSAGE}" From 7ee691bda5f24aead468594c02829c45443a7259 Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Sun, 24 May 2020 21:17:17 -0500 Subject: [PATCH 39/46] Update gravity-sync.sh --- gravity-sync.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gravity-sync.sh b/gravity-sync.sh index a68a0cf..65c80e1 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -275,7 +275,7 @@ function validate_ph_folders { function validate_os_sshpass { if hash sshpass 2>/dev/null then - if ${REMOTE_PASS} != '' + if [ ${REMOTE_PASS} != '' ] then sshpassword="sshpass -p ${REMOTE_PASS}" else From 84855c9284b87a2c334b9a6a3bd43e2998e7226d Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Sun, 24 May 2020 21:18:29 -0500 Subject: [PATCH 40/46] Update gravity-sync.sh --- gravity-sync.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gravity-sync.sh b/gravity-sync.sh index 65c80e1..24965cd 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -275,7 +275,7 @@ function validate_ph_folders { function validate_os_sshpass { if hash sshpass 2>/dev/null then - if [ ${REMOTE_PASS} != '' ] + if $REMOTE_PASS != '' then sshpassword="sshpass -p ${REMOTE_PASS}" else From d7ac7219a2fc62026b4a0b234f9d40f7e211cf15 Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Sun, 24 May 2020 21:21:22 -0500 Subject: [PATCH 41/46] Proper bash value --- gravity-sync.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gravity-sync.sh b/gravity-sync.sh index 24965cd..6d57b2d 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -275,11 +275,11 @@ function validate_ph_folders { function validate_os_sshpass { if hash sshpass 2>/dev/null then - if $REMOTE_PASS != '' + if [-z "$REMOTE_PASS" ] then - sshpassword="sshpass -p ${REMOTE_PASS}" - else sshpassword='' + else + sshpassword="sshpass -p ${REMOTE_PASS}" fi else sshpassword='' From 82e2a474a7c8c53f9b3db42bb7771654cc25fccb Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Sun, 24 May 2020 21:25:07 -0500 Subject: [PATCH 42/46] Update gravity-sync.sh --- gravity-sync.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gravity-sync.sh b/gravity-sync.sh index 6d57b2d..35f76f5 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -275,7 +275,7 @@ function validate_ph_folders { function validate_os_sshpass { if hash sshpass 2>/dev/null then - if [-z "$REMOTE_PASS" ] + if test -z "$REMOTE_PASS" then sshpassword='' else From f61c8fa257c6d24a9a6ce8ebf91712cf7d5c804a Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Sun, 24 May 2020 21:29:23 -0500 Subject: [PATCH 43/46] Alert for SSH type --- gravity-sync.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/gravity-sync.sh b/gravity-sync.sh index 35f76f5..8d8e34b 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -278,12 +278,17 @@ function validate_os_sshpass { if test -z "$REMOTE_PASS" then sshpassword='' + MESSAGE="Using SSH Key-Pair Authentication" else sshpassword="sshpass -p ${REMOTE_PASS}" + MESSAGE="Using SSH Password Authentication" fi else sshpassword='' + MESSAGE="Using SSH Key-Pair Authentication" fi + + echo -e "$INFO $MESSAGE" } # List GS Arguments From 3b4934398a7e0082accd8a7d10d5f185232dadcd Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Sun, 24 May 2020 21:51:04 -0500 Subject: [PATCH 44/46] Testing password auth --- gravity-sync.sh | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/gravity-sync.sh b/gravity-sync.sh index 8d8e34b..753ceda 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -280,7 +280,7 @@ function validate_os_sshpass { sshpassword='' MESSAGE="Using SSH Key-Pair Authentication" else - sshpassword="sshpass -p ${REMOTE_PASS}" + sshpassword="sshpass -p ${REMOTE_PASS} " MESSAGE="Using SSH Password Authentication" fi else @@ -347,7 +347,7 @@ function md5_compare { MESSAGE="Analyzing Remote ${GRAVITY_FI}" echo -e "${STAT} ${MESSAGE}" - primaryMD5=$(ssh ${REMOTE_USER}@${REMOTE_HOST} 'md5sum /etc/pihole/gravity.db') + primaryMD5=$(${sshpassword}ssh ${REMOTE_USER}@${REMOTE_HOST} 'md5sum /etc/pihole/gravity.db') error_validate MESSAGE="Analyzing Local ${GRAVITY_FI}" @@ -366,8 +366,6 @@ function md5_compare { } # SCRIPT EXECUTION ########################### - -validate_os_sshpass MESSAGE="Evaluating Script Arguments" echo -e "${STAT} ${MESSAGE}" @@ -390,6 +388,7 @@ case $# in echo -e "${INFO} ${MESSAGE}" validate_gs_folders validate_ph_folders + validate_os_sshpass pull_gs exit @@ -403,6 +402,7 @@ case $# in echo -e "${INFO} Validating Folder Configuration" validate_gs_folders validate_ph_folders + validate_os_sshpass push_gs exit @@ -444,7 +444,11 @@ case $# in echo -e "${GOOD} ${MESSAGE}" import_gs - md5_compare + + echo -e "${INFO} Validating Folder Configuration" + validate_gs_folders + validate_ph_folders + validate_os_sshpass ;; cron) From 26ff9fec292f688de72cd220dfacfb544472b634 Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Sun, 24 May 2020 21:53:20 -0500 Subject: [PATCH 45/46] Update gravity-sync.sh --- gravity-sync.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/gravity-sync.sh b/gravity-sync.sh index 753ceda..97a9df5 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -449,6 +449,8 @@ case $# in validate_gs_folders validate_ph_folders validate_os_sshpass + + md5_compare ;; cron) From bbc3d8c8f30d6186ca39c0f319888df1173d8e11 Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Sun, 24 May 2020 22:20:11 -0500 Subject: [PATCH 46/46] v1.3.0 --- README.md | 6 +++--- gravity-sync.conf.example | 3 ++- gravity-sync.sh | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 78e8a81..7947742 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ For more information visit [https://vmstan.com/gravity-sync/](https://vmstan.com/gravity-sync/) -![Pull execution](https://user-images.githubusercontent.com/3002053/82719284-c396d880-9c6e-11ea-859c-b316357a495c.png) +![Pull execution](https://user-images.githubusercontent.com/3002053/82774990-f88c6200-9e0b-11ea-97e5-23c8b38f32e3.png) ## Background @@ -108,7 +108,7 @@ The script, when functioning in `pull` mode, will not prompt for user input afte ./gravity-sync.sh pull ``` -If the execution completes, you will now have overwritten your running gravity.db on the secondary PH after creating a copy (`gravity.db.backup`) in the `backup` directory located with your script. The script will also keep a copy of the last sync'd gravity.db from the master, in the `backup` folder called `gravity.db.last` should you need it for some reason. +If the execution completes, you will now have overwritten your running gravity.db on the secondary PH after creating a copy (`gravity.db.backup`) in the `backup` directory located with your script. The script will also keep a copy of the last sync'd gravity.db from the master, in the `backup` folder called `gravity.db.pull` should you need it for some reason. Finally, a file called `gravity-sync.log` will be created in the `gravity-sync` folder along side the script, with the date the script was last executed appended to the bottom. Over time I intend for this logging function to become more helpful. @@ -144,7 +144,7 @@ I've automated my synchronization using Crontab. If you'd like to keep this a ma ``` crontab -e -*/30 * * * * /home/USER/gravity-sync/gravity-sync.sh pull >/dev/null 2>&1 +*/30 * * * * /bin/bash /home/USER/gravity-sync/gravity-sync.sh pull > /home/USER/gravity-sync/gravity-sync.cron ``` Now, make another small adjustment to your primary settings. Now just wait until the annointed hour, and see if your changes have been synchronized. If so, profit! diff --git a/gravity-sync.conf.example b/gravity-sync.conf.example index ac0b599..d2bce9f 100644 --- a/gravity-sync.conf.example +++ b/gravity-sync.conf.example @@ -6,4 +6,5 @@ REMOTE_HOST='192.168.1.10' REMOTE_USER='pi' # Password for REMOTE_USER account -REMOTE_PASS=‘password’ \ No newline at end of file +# Leave blank to use key-pair SSH auth +REMOTE_PASS='' \ No newline at end of file diff --git a/gravity-sync.sh b/gravity-sync.sh index 97a9df5..a077eff 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -347,7 +347,7 @@ function md5_compare { MESSAGE="Analyzing Remote ${GRAVITY_FI}" echo -e "${STAT} ${MESSAGE}" - primaryMD5=$(${sshpassword}ssh ${REMOTE_USER}@${REMOTE_HOST} 'md5sum /etc/pihole/gravity.db') + primaryMD5=$(ssh ${REMOTE_USER}@${REMOTE_HOST} 'md5sum /etc/pihole/gravity.db') error_validate MESSAGE="Analyzing Local ${GRAVITY_FI}"