From 8d3884fbfa3bffce3fa7bc1b5f98f3c26a9e5a5d Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Tue, 26 May 2020 14:01:01 -0500 Subject: [PATCH 01/15] Starting config creator --- gravity-sync.sh | 53 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/gravity-sync.sh b/gravity-sync.sh index d329f65..8707301 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -2,7 +2,7 @@ # GRAVITY SYNC BY VMSTAN ##################### PROGRAM='Gravity Sync' -VERSION='1.3.4' +VERSION='1.4.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 @@ -539,6 +539,57 @@ case $# in show_crontab ;; + + config) + TASKTYPE='CONFIG' + echo -e "\r${GOOD} ${MESSAGE}" + echo -e "${INFO} Entering ${TASKTYPE} Mode" + + if [ -f $HOME/${LOCAL_FOLDR}/${CONFIG_FILE} ] + then + source $HOME/${LOCAL_FOLDR}/${CONFIG_FILE} + MESSAGE="Configuration File Exists" + echo -e "${WARN} ${MESSAGE}" + + echo -e "========================================================" + echo -e "========================================================" + echo -e "" + cat $HOME/${LOCAL_FOLDR}/${CONFIG_FILE} + echo -e "" + echo -e "========================================================" + echo -e "========================================================" + + MESSAGE="Are you sure you want to erase this configuration?" + echo -e "${WARN} ${MESSAGE}" + + select yn in "Yes" "No"; do + case $yn in + Yes ) + MESSAGE="Erasing Existing Configuration" + echo -en "${STAT} ${MESSAGE}" + rm -f $HOME/${LOCAL_FOLDR}/${CONFIG_FILE} + error_validate + + exit_withchange + ;; + + No ) + exit_nochange + ;; + esac + done + + else + echo -e "\r${FAIL} ${MESSAGE}" + + MESSAGE="${CONFIG_FILE} Missing" + echo -e "${INFO} ${MESSAGE}" + + exit_nochange + fi + + ;; + *) echo -e "\r${FAIL} ${MESSAGE}" From f54dd83595d99d8c96371ef58a243ffb2eea873c Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Tue, 26 May 2020 14:05:28 -0500 Subject: [PATCH 02/15] Creates blank configuration --- gravity-sync.sh | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/gravity-sync.sh b/gravity-sync.sh index 8707301..34ad571 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -580,10 +580,13 @@ case $# in done else - echo -e "\r${FAIL} ${MESSAGE}" - MESSAGE="${CONFIG_FILE} Missing" echo -e "${INFO} ${MESSAGE}" + + MESSAGE="Creating New Configuration" + echo -en "${STAT} ${MESSAGE}" + cp $HOME/${LOCAL_FOLDR}/${CONFIG_FILE}.example $HOME/${LOCAL_FOLDR}/${CONFIG_FILE} + error_validate exit_nochange fi From b336ecb1f3a7dff91e1d5396cf49bc8cdadded1b Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Tue, 26 May 2020 14:39:55 -0500 Subject: [PATCH 03/15] Populate config file --- gravity-sync.sh | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/gravity-sync.sh b/gravity-sync.sh index 34ad571..a2c267a 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -39,6 +39,7 @@ GREEN='\033[0;92m' CYAN='\033[0;96m' YELLOW='\033[0;93m' PURPLE='\033[0;95m' +BLUE='\033[0;94m' NC='\033[0m' # Message Codes @@ -47,6 +48,7 @@ WARN="[${PURPLE}WARN${NC}]" GOOD="[${GREEN}DONE${NC}]" STAT="[${CYAN}EXEC${NC}]" INFO="[${YELLOW}INFO${NC}]" +NEED="[${BLUE}NEED${NC}]" # FUNCTION DEFINITIONS ####################### @@ -583,12 +585,34 @@ case $# in MESSAGE="${CONFIG_FILE} Missing" echo -e "${INFO} ${MESSAGE}" - MESSAGE="Creating New Configuration" + MESSAGE="Creating ${CONFIG_FILE} from Template" echo -en "${STAT} ${MESSAGE}" cp $HOME/${LOCAL_FOLDR}/${CONFIG_FILE}.example $HOME/${LOCAL_FOLDR}/${CONFIG_FILE} error_validate - - exit_nochange + + echo "" + + MESSAGE="Enter IP or DNS of primary Pi-hole server" + echo -e "${NEED} ${MESSAGE}" + read INPUT_REMOTE_HOST + + MESSAGE="Enter User with SUDO rights on primary Pi-hole server" + echo -e "${NEED} ${MESSAGE}" + read INPUT_REMOTE_USER + + echo "" + + MESSAGE="Saving Host to ${CONFIG_FILE}" + echo -en "${STAT} ${MESSAGE}" + sed -i "/REMOTE_HOST='192.168.1.10'/c\REMOTE_HOST='${INPUT_REMOTE_HOST}'" $HOME/${LOCAL_FOLDR}/${CONFIG_FILE} + error_validate + + MESSAGE="Saving User to ${CONFIG_FILE}" + echo -en "${STAT} ${MESSAGE}" + sed -i "/REMOTE_USER='pi'/c\REMOTE_USER='${INPUT_REMOTE_USER}'" $HOME/${LOCAL_FOLDR}/${CONFIG_FILE} + error_validate + + exit_withchange fi ;; From 5e023aa1872c5dba4cd7743c78b208059d1bb1da Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Tue, 26 May 2020 16:51:31 -0500 Subject: [PATCH 04/15] Added SSH port 22, Rouding out config settings --- gravity-sync.sh | 57 +++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 48 insertions(+), 9 deletions(-) diff --git a/gravity-sync.sh b/gravity-sync.sh index a2c267a..29b69ee 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -29,6 +29,9 @@ PIHOLE_DIR='/etc/pihole' # default PH data directory GRAVITY_FI='gravity.db' # this should not change PIHOLE_BIN='/usr/local/bin/pihole' # default PH binary directory +# SSH Configuration +SSH_PORT='22' + ############################################## ### DO NOT CHANGE ANYTHING BELOW THIS LINE ### ############################################## @@ -117,7 +120,7 @@ function pull_gs { MESSAGE="Pulling ${GRAVITY_FI} from ${REMOTE_HOST}" echo -en "${STAT} ${MESSAGE}" - ${SSHPASSWORD} rsync -e 'ssh -p 22' ${REMOTE_USER}@${REMOTE_HOST}:${PIHOLE_DIR}/${GRAVITY_FI} $HOME/${LOCAL_FOLDR}/${BACKUP_FOLD}/${GRAVITY_FI}.pull >/dev/null 2>&1 + ${SSHPASSWORD} rsync -e 'ssh -p ${SSH_PORT}' ${REMOTE_USER}@${REMOTE_HOST}:${PIHOLE_DIR}/${GRAVITY_FI} $HOME/${LOCAL_FOLDR}/${BACKUP_FOLD}/${GRAVITY_FI}.pull >/dev/null 2>&1 error_validate MESSAGE="Replacing ${GRAVITY_FI} on $HOSTNAME" @@ -195,12 +198,12 @@ function push_gs { MESSAGE="Backing Up ${GRAVITY_FI} from ${REMOTE_HOST}" echo -en "${STAT} ${MESSAGE}" - ${SSHPASSWORD} rsync -e 'ssh -p 22' ${REMOTE_USER}@${REMOTE_HOST}:${PIHOLE_DIR}/${GRAVITY_FI} $HOME/${LOCAL_FOLDR}/${BACKUP_FOLD}/${GRAVITY_FI}.push >/dev/null 2>&1 + ${SSHPASSWORD} rsync -e 'ssh -p ${SSH_PORT}' ${REMOTE_USER}@${REMOTE_HOST}:${PIHOLE_DIR}/${GRAVITY_FI} $HOME/${LOCAL_FOLDR}/${BACKUP_FOLD}/${GRAVITY_FI}.push >/dev/null 2>&1 error_validate MESSAGE="Pushing ${GRAVITY_FI} to ${REMOTE_HOST}" echo -en "${STAT} ${MESSAGE}" - ${SSHPASSWORD} rsync --rsync-path="sudo rsync" -e 'ssh -p 22' ${PIHOLE_DIR}/${GRAVITY_FI} ${REMOTE_USER}@${REMOTE_HOST}:${PIHOLE_DIR}/${GRAVITY_FI} >/dev/null 2>&1 + ${SSHPASSWORD} rsync --rsync-path="sudo rsync" -e 'ssh -p ${SSH_PORT}' ${PIHOLE_DIR}/${GRAVITY_FI} ${REMOTE_USER}@${REMOTE_HOST}:${PIHOLE_DIR}/${GRAVITY_FI} >/dev/null 2>&1 error_validate MESSAGE="Setting Permissions on ${GRAVITY_FI}" @@ -590,18 +593,14 @@ case $# in cp $HOME/${LOCAL_FOLDR}/${CONFIG_FILE}.example $HOME/${LOCAL_FOLDR}/${CONFIG_FILE} error_validate - echo "" - MESSAGE="Enter IP or DNS of primary Pi-hole server" echo -e "${NEED} ${MESSAGE}" read INPUT_REMOTE_HOST - MESSAGE="Enter User with SUDO rights on primary Pi-hole server" + MESSAGE="Enter SSH user with SUDO rights on primary Pi-hole server" echo -e "${NEED} ${MESSAGE}" read INPUT_REMOTE_USER - echo "" - MESSAGE="Saving Host to ${CONFIG_FILE}" echo -en "${STAT} ${MESSAGE}" sed -i "/REMOTE_HOST='192.168.1.10'/c\REMOTE_HOST='${INPUT_REMOTE_HOST}'" $HOME/${LOCAL_FOLDR}/${CONFIG_FILE} @@ -611,7 +610,47 @@ case $# in echo -en "${STAT} ${MESSAGE}" sed -i "/REMOTE_USER='pi'/c\REMOTE_USER='${INPUT_REMOTE_USER}'" $HOME/${LOCAL_FOLDR}/${CONFIG_FILE} error_validate - + + if hash sshpass 2>/dev/null + then + echo -e "${INFO} SSHPASS Utility Detected" + MESSAGE="Do you want to configure password based SSH authentication (not reccomended)?" + echo -e "${WARN} ${MESSAGE}" + MESSAGE="Your password will be saved in clear-text in the ${CONFIG_FILE} file!" + echo -e "${WARN} ${MESSAGE}" + MESSAGE="Select NO to use (preferred) SSH Key-Pair Authentication." + echo -e "${WARN} ${MESSAGE}" + + select yn in "Yes" "No"; do + case $yn in + Yes ) + MESSAGE="Enter SSH password for primary Pi-hole server" + echo -e "${NEED} ${MESSAGE}" + read INPUT_REMOTE_PASS + + MESSAGE="Saving Password to ${CONFIG_FILE}" + echo -en "${STAT} ${MESSAGE}" + sed -i "/REMOTE_PASS=''/c\REMOTE_PASS='${INPUT_REMOTE_PASS}'" $HOME/${LOCAL_FOLDR}/${CONFIG_FILE} + error_validate + ;; + + No ) + echo -e "${INFO} Defaulting to SSH Key-Pair Authentication" + ;; + esac + done + + else + MESSAGE="SSHPASS Not Installed" + echo -e "${INFO} ${MESSAGE}" + + MESSAGE="Defaulting to SSH Key-Pair Authentication" + echo -e "${INFO} ${MESSAGE}" + fi + + source $HOME/${LOCAL_FOLDR}/${CONFIG_FILE} + validate_os_sshpass + exit_withchange fi From 584deacf61594349f270f6df495326d7e27e07cc Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Tue, 26 May 2020 18:05:18 -0500 Subject: [PATCH 05/15] simpler prompt --- gravity-sync.sh | 36 ++++++++++++++---------------------- 1 file changed, 14 insertions(+), 22 deletions(-) diff --git a/gravity-sync.sh b/gravity-sync.sh index 29b69ee..3eb3c04 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -613,32 +613,24 @@ case $# in if hash sshpass 2>/dev/null then - echo -e "${INFO} SSHPASS Utility Detected" + MESSAGE="SSHPASS Utility Detected" + echo -e "${INFO} ${MESSAGE}" + MESSAGE="Do you want to configure password based SSH authentication (not reccomended)?" echo -e "${WARN} ${MESSAGE}" MESSAGE="Your password will be saved in clear-text in the ${CONFIG_FILE} file!" echo -e "${WARN} ${MESSAGE}" - MESSAGE="Select NO to use (preferred) SSH Key-Pair Authentication." + MESSAGE="Leave blank to use (preferred) SSH Key-Pair Authentication." echo -e "${WARN} ${MESSAGE}" + MESSAGE="Enter SSH password for primary Pi-hole server (optional)" - select yn in "Yes" "No"; do - case $yn in - Yes ) - MESSAGE="Enter SSH password for primary Pi-hole server" - echo -e "${NEED} ${MESSAGE}" - read INPUT_REMOTE_PASS + echo -e "${NEED} ${MESSAGE}" + read INPUT_REMOTE_PASS - MESSAGE="Saving Password to ${CONFIG_FILE}" - echo -en "${STAT} ${MESSAGE}" - sed -i "/REMOTE_PASS=''/c\REMOTE_PASS='${INPUT_REMOTE_PASS}'" $HOME/${LOCAL_FOLDR}/${CONFIG_FILE} - error_validate - ;; - - No ) - echo -e "${INFO} Defaulting to SSH Key-Pair Authentication" - ;; - esac - done + MESSAGE="Saving Password to ${CONFIG_FILE}" + echo -en "${STAT} ${MESSAGE}" + sed -i "/REMOTE_PASS=''/c\REMOTE_PASS='${INPUT_REMOTE_PASS}'" $HOME/${LOCAL_FOLDR}/${CONFIG_FILE} + error_validate else MESSAGE="SSHPASS Not Installed" @@ -646,11 +638,11 @@ case $# in MESSAGE="Defaulting to SSH Key-Pair Authentication" echo -e "${INFO} ${MESSAGE}" - fi - + fi + source $HOME/${LOCAL_FOLDR}/${CONFIG_FILE} validate_os_sshpass - + exit_withchange fi From 64bf4a2a1d2541b5f8502fb865d3fc334e898ff5 Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Tue, 26 May 2020 21:07:11 -0500 Subject: [PATCH 06/15] Key-Pair Generation/Detection --- gravity-sync.sh | 59 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 57 insertions(+), 2 deletions(-) diff --git a/gravity-sync.sh b/gravity-sync.sh index 3eb3c04..68a033c 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -26,11 +26,12 @@ BACKUP_FOLD='backup' # must exist as subdirectory in LOCAL_FOLD # PH Folder/File Locations PIHOLE_DIR='/etc/pihole' # default PH data directory -GRAVITY_FI='gravity.db' # this should not change +GRAVITY_FI='gravity.db' # default PIHOLE_BIN='/usr/local/bin/pihole' # default PH binary directory # SSH Configuration -SSH_PORT='22' +SSH_PORT='22' # default SSH port +SSH_PKIF='.ssh/id_rsa.pub' # default local SSH key ############################################## ### DO NOT CHANGE ANYTHING BELOW THIS LINE ### @@ -640,7 +641,61 @@ case $# in echo -e "${INFO} ${MESSAGE}" fi + if [ $INPUT_REMOTE_PASS == '' ] + then + if [ -f $HOME/${SSH_PKIF} ] + then + MESSAGE="Using Existing ~/${SSH_PKIF}" + echo -e "${INFO} ${MESSAGE}" + else + MESSAGE="Generating ~/${SSH_PKIF}" + echo -e "${INFO} ${MESSAGE}" + + MESSAGE="Leave Key Passphrase Blank" + echo -e "${WARN} ${MESSAGE}" + + MESSAGE="Complete Key-Pair Creation" + echo -e "${NEED} ${MESSAGE}" + + echo -e "========================================================" + echo -e "========================================================" + echo -e "" + ssh-keygen -t rsa + echo -e "" + echo -e "========================================================" + echo -e "========================================================" + fi + fi + + MESSAGE="Importing New ${CONFIG_FILE}" + echo -en "${STAT} ${MESSAGE}" source $HOME/${LOCAL_FOLDR}/${CONFIG_FILE} + error_validate + + if [ REMOTE_PASS == '' ] + then + if [ -f $HOME/${SSH_PKIF} ] + then + MESSAGE="Registering Key-Pair on ${REMOTE_HOST}" + echo -e "${INFO} ${MESSAGE}" + + MESSAGE="Enter ${REMOTE_USER}@${REMOTE_HOST}" + echo -e "${NEED} ${MESSAGE}" + + echo -e "========================================================" + echo -e "========================================================" + echo -e "" + ssh-copy-id -i $HOME/${SSH_PKIF} ${REMOTE_USER}@${REMOTE_HOST} + echo -e "" + echo -e "========================================================" + echo -e "========================================================" + fi + MESSAGE="Error Creating Key-Pair" + echo -e "${FAIL} ${MESSAGE}" + + exit_withchange + fi + validate_os_sshpass exit_withchange From 914af5cd1c5472bbd172a9711a65d4ca60d53b25 Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Tue, 26 May 2020 21:11:15 -0500 Subject: [PATCH 07/15] Clarified comment --- gravity-sync.conf.example | 2 +- gravity-sync.sh | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/gravity-sync.conf.example b/gravity-sync.conf.example index d089a93..0f14754 100644 --- a/gravity-sync.conf.example +++ b/gravity-sync.conf.example @@ -10,7 +10,7 @@ REMOTE_USER='pi' # Password for REMOTE_USER account # Requires SSHPASS installed on server -# Leave blank to use key-pair SSH auth # Less secure and possibly less reliable +# Leave blank to use (preferred) key-pair SSH auth! REMOTE_PASS='' \ No newline at end of file diff --git a/gravity-sync.sh b/gravity-sync.sh index 68a033c..d4e11f2 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -575,8 +575,6 @@ case $# in echo -en "${STAT} ${MESSAGE}" rm -f $HOME/${LOCAL_FOLDR}/${CONFIG_FILE} error_validate - - exit_withchange ;; No ) @@ -641,7 +639,7 @@ case $# in echo -e "${INFO} ${MESSAGE}" fi - if [ $INPUT_REMOTE_PASS == '' ] + if [ $INPUT_REMOTE_PASS = '' ] then if [ -f $HOME/${SSH_PKIF} ] then From 2204497da6415491abed0128761889891724d815 Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Tue, 26 May 2020 21:21:02 -0500 Subject: [PATCH 08/15] Move config section to functions --- gravity-sync.sh | 291 +++++++++++++++++++++++++----------------------- 1 file changed, 152 insertions(+), 139 deletions(-) diff --git a/gravity-sync.sh b/gravity-sync.sh index d4e11f2..be291a9 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -446,6 +446,155 @@ function md5_compare { } +# Generate Config +function config_generate { + MESSAGE="Creating ${CONFIG_FILE} from Template" + echo -en "${STAT} ${MESSAGE}" + cp $HOME/${LOCAL_FOLDR}/${CONFIG_FILE}.example $HOME/${LOCAL_FOLDR}/${CONFIG_FILE} + error_validate + + MESSAGE="Enter IP or DNS of primary Pi-hole server" + echo -e "${NEED} ${MESSAGE}" + read INPUT_REMOTE_HOST + + MESSAGE="Enter SSH user with SUDO rights on primary Pi-hole server" + echo -e "${NEED} ${MESSAGE}" + read INPUT_REMOTE_USER + + MESSAGE="Saving Host to ${CONFIG_FILE}" + echo -en "${STAT} ${MESSAGE}" + sed -i "/REMOTE_HOST='192.168.1.10'/c\REMOTE_HOST='${INPUT_REMOTE_HOST}'" $HOME/${LOCAL_FOLDR}/${CONFIG_FILE} + error_validate + + MESSAGE="Saving User to ${CONFIG_FILE}" + echo -en "${STAT} ${MESSAGE}" + sed -i "/REMOTE_USER='pi'/c\REMOTE_USER='${INPUT_REMOTE_USER}'" $HOME/${LOCAL_FOLDR}/${CONFIG_FILE} + error_validate + + if hash sshpass 2>/dev/null + then + MESSAGE="SSHPASS Utility Detected" + echo -e "${INFO} ${MESSAGE}" + + MESSAGE="Do you want to configure password based SSH authentication (not reccomended)?" + echo -e "${WARN} ${MESSAGE}" + MESSAGE="Your password will be saved in clear-text in the ${CONFIG_FILE} file!" + echo -e "${WARN} ${MESSAGE}" + MESSAGE="Leave blank to use (preferred) SSH Key-Pair Authentication." + echo -e "${WARN} ${MESSAGE}" + MESSAGE="Enter SSH password for primary Pi-hole server (optional)" + + echo -e "${NEED} ${MESSAGE}" + read INPUT_REMOTE_PASS + + MESSAGE="Saving Password to ${CONFIG_FILE}" + echo -en "${STAT} ${MESSAGE}" + sed -i "/REMOTE_PASS=''/c\REMOTE_PASS='${INPUT_REMOTE_PASS}'" $HOME/${LOCAL_FOLDR}/${CONFIG_FILE} + error_validate + + else + MESSAGE="SSHPASS Not Installed" + echo -e "${INFO} ${MESSAGE}" + + MESSAGE="Defaulting to SSH Key-Pair Authentication" + echo -e "${INFO} ${MESSAGE}" + fi + + if [ $INPUT_REMOTE_PASS = '' ] + then + if [ -f $HOME/${SSH_PKIF} ] + then + MESSAGE="Using Existing ~/${SSH_PKIF}" + echo -e "${INFO} ${MESSAGE}" + else + MESSAGE="Generating ~/${SSH_PKIF}" + echo -e "${INFO} ${MESSAGE}" + + MESSAGE="Leave Key Passphrase Blank" + echo -e "${WARN} ${MESSAGE}" + + MESSAGE="Complete Key-Pair Creation" + echo -e "${NEED} ${MESSAGE}" + + echo -e "========================================================" + echo -e "========================================================" + echo -e "" + ssh-keygen -t rsa + echo -e "" + echo -e "========================================================" + echo -e "========================================================" + fi + fi + + MESSAGE="Importing New ${CONFIG_FILE}" + echo -en "${STAT} ${MESSAGE}" + source $HOME/${LOCAL_FOLDR}/${CONFIG_FILE} + error_validate + + if [ REMOTE_PASS == '' ] + then + if [ -f $HOME/${SSH_PKIF} ] + then + MESSAGE="Registering Key-Pair on ${REMOTE_HOST}" + echo -e "${INFO} ${MESSAGE}" + + MESSAGE="Enter ${REMOTE_USER}@${REMOTE_HOST}" + echo -e "${NEED} ${MESSAGE}" + + echo -e "========================================================" + echo -e "========================================================" + echo -e "" + ssh-copy-id -i $HOME/${SSH_PKIF} ${REMOTE_USER}@${REMOTE_HOST} + echo -e "" + echo -e "========================================================" + echo -e "========================================================" + fi + MESSAGE="Error Creating Key-Pair" + echo -e "${FAIL} ${MESSAGE}" + + exit_withchange + fi + + validate_os_sshpass + + exit_withchange +} + +# Delete Existing Configuration +function config_delete { + source $HOME/${LOCAL_FOLDR}/${CONFIG_FILE} + MESSAGE="Configuration File Exists" + echo -e "${WARN} ${MESSAGE}" + + echo -e "========================================================" + echo -e "========================================================" + echo -e "" + cat $HOME/${LOCAL_FOLDR}/${CONFIG_FILE} + echo -e "" + echo -e "========================================================" + echo -e "========================================================" + + MESSAGE="Are you sure you want to erase this configuration?" + echo -e "${WARN} ${MESSAGE}" + + select yn in "Yes" "No"; do + case $yn in + Yes ) + MESSAGE="Erasing Existing Configuration" + echo -en "${STAT} ${MESSAGE}" + rm -f $HOME/${LOCAL_FOLDR}/${CONFIG_FILE} + error_validate + + config_generate + ;; + + No ) + exit_nochange + ;; + esac + done +} + # SCRIPT EXECUTION ########################### SCRIPT_START=$SECONDS @@ -553,150 +702,14 @@ case $# in if [ -f $HOME/${LOCAL_FOLDR}/${CONFIG_FILE} ] then - source $HOME/${LOCAL_FOLDR}/${CONFIG_FILE} - MESSAGE="Configuration File Exists" - echo -e "${WARN} ${MESSAGE}" - - echo -e "========================================================" - echo -e "========================================================" - echo -e "" - cat $HOME/${LOCAL_FOLDR}/${CONFIG_FILE} - echo -e "" - echo -e "========================================================" - echo -e "========================================================" - - MESSAGE="Are you sure you want to erase this configuration?" - echo -e "${WARN} ${MESSAGE}" - - select yn in "Yes" "No"; do - case $yn in - Yes ) - MESSAGE="Erasing Existing Configuration" - echo -en "${STAT} ${MESSAGE}" - rm -f $HOME/${LOCAL_FOLDR}/${CONFIG_FILE} - error_validate - ;; - - No ) - exit_nochange - ;; - esac - done + config_delete else MESSAGE="${CONFIG_FILE} Missing" echo -e "${INFO} ${MESSAGE}" - MESSAGE="Creating ${CONFIG_FILE} from Template" - echo -en "${STAT} ${MESSAGE}" - cp $HOME/${LOCAL_FOLDR}/${CONFIG_FILE}.example $HOME/${LOCAL_FOLDR}/${CONFIG_FILE} - error_validate - - MESSAGE="Enter IP or DNS of primary Pi-hole server" - echo -e "${NEED} ${MESSAGE}" - read INPUT_REMOTE_HOST - - MESSAGE="Enter SSH user with SUDO rights on primary Pi-hole server" - echo -e "${NEED} ${MESSAGE}" - read INPUT_REMOTE_USER - - MESSAGE="Saving Host to ${CONFIG_FILE}" - echo -en "${STAT} ${MESSAGE}" - sed -i "/REMOTE_HOST='192.168.1.10'/c\REMOTE_HOST='${INPUT_REMOTE_HOST}'" $HOME/${LOCAL_FOLDR}/${CONFIG_FILE} - error_validate - - MESSAGE="Saving User to ${CONFIG_FILE}" - echo -en "${STAT} ${MESSAGE}" - sed -i "/REMOTE_USER='pi'/c\REMOTE_USER='${INPUT_REMOTE_USER}'" $HOME/${LOCAL_FOLDR}/${CONFIG_FILE} - error_validate - - if hash sshpass 2>/dev/null - then - MESSAGE="SSHPASS Utility Detected" - echo -e "${INFO} ${MESSAGE}" - - MESSAGE="Do you want to configure password based SSH authentication (not reccomended)?" - echo -e "${WARN} ${MESSAGE}" - MESSAGE="Your password will be saved in clear-text in the ${CONFIG_FILE} file!" - echo -e "${WARN} ${MESSAGE}" - MESSAGE="Leave blank to use (preferred) SSH Key-Pair Authentication." - echo -e "${WARN} ${MESSAGE}" - MESSAGE="Enter SSH password for primary Pi-hole server (optional)" - - echo -e "${NEED} ${MESSAGE}" - read INPUT_REMOTE_PASS - - MESSAGE="Saving Password to ${CONFIG_FILE}" - echo -en "${STAT} ${MESSAGE}" - sed -i "/REMOTE_PASS=''/c\REMOTE_PASS='${INPUT_REMOTE_PASS}'" $HOME/${LOCAL_FOLDR}/${CONFIG_FILE} - error_validate - - else - MESSAGE="SSHPASS Not Installed" - echo -e "${INFO} ${MESSAGE}" - - MESSAGE="Defaulting to SSH Key-Pair Authentication" - echo -e "${INFO} ${MESSAGE}" - fi - - if [ $INPUT_REMOTE_PASS = '' ] - then - if [ -f $HOME/${SSH_PKIF} ] - then - MESSAGE="Using Existing ~/${SSH_PKIF}" - echo -e "${INFO} ${MESSAGE}" - else - MESSAGE="Generating ~/${SSH_PKIF}" - echo -e "${INFO} ${MESSAGE}" - - MESSAGE="Leave Key Passphrase Blank" - echo -e "${WARN} ${MESSAGE}" - - MESSAGE="Complete Key-Pair Creation" - echo -e "${NEED} ${MESSAGE}" - - echo -e "========================================================" - echo -e "========================================================" - echo -e "" - ssh-keygen -t rsa - echo -e "" - echo -e "========================================================" - echo -e "========================================================" - fi - fi - - MESSAGE="Importing New ${CONFIG_FILE}" - echo -en "${STAT} ${MESSAGE}" - source $HOME/${LOCAL_FOLDR}/${CONFIG_FILE} - error_validate - - if [ REMOTE_PASS == '' ] - then - if [ -f $HOME/${SSH_PKIF} ] - then - MESSAGE="Registering Key-Pair on ${REMOTE_HOST}" - echo -e "${INFO} ${MESSAGE}" - - MESSAGE="Enter ${REMOTE_USER}@${REMOTE_HOST}" - echo -e "${NEED} ${MESSAGE}" - - echo -e "========================================================" - echo -e "========================================================" - echo -e "" - ssh-copy-id -i $HOME/${SSH_PKIF} ${REMOTE_USER}@${REMOTE_HOST} - echo -e "" - echo -e "========================================================" - echo -e "========================================================" - fi - MESSAGE="Error Creating Key-Pair" - echo -e "${FAIL} ${MESSAGE}" - - exit_withchange - fi - - validate_os_sshpass - - exit_withchange + config_generate + fi ;; From d2e390f1c85bbb9cafc81535adde422c73163aff Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Tue, 26 May 2020 21:26:54 -0500 Subject: [PATCH 09/15] -z --- gravity-sync.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gravity-sync.sh b/gravity-sync.sh index be291a9..85bbfc8 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -500,7 +500,7 @@ function config_generate { echo -e "${INFO} ${MESSAGE}" fi - if [ $INPUT_REMOTE_PASS = '' ] + if [ -z $INPUT_REMOTE_PASS ] then if [ -f $HOME/${SSH_PKIF} ] then @@ -531,7 +531,7 @@ function config_generate { source $HOME/${LOCAL_FOLDR}/${CONFIG_FILE} error_validate - if [ REMOTE_PASS == '' ] + if [ -z $REMOTE_PASS ] then if [ -f $HOME/${SSH_PKIF} ] then From 2fede3899f9ecf52a758e00fe62f7d28aac2978a Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Tue, 26 May 2020 21:33:00 -0500 Subject: [PATCH 10/15] Update gravity-sync.sh --- gravity-sync.sh | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/gravity-sync.sh b/gravity-sync.sh index 85bbfc8..8a09dff 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -510,7 +510,7 @@ function config_generate { MESSAGE="Generating ~/${SSH_PKIF}" echo -e "${INFO} ${MESSAGE}" - MESSAGE="Leave Key Passphrase Blank" + MESSAGE="Accept All Defaults" echo -e "${WARN} ${MESSAGE}" MESSAGE="Complete Key-Pair Creation" @@ -544,15 +544,14 @@ function config_generate { echo -e "========================================================" echo -e "========================================================" echo -e "" - ssh-copy-id -i $HOME/${SSH_PKIF} ${REMOTE_USER}@${REMOTE_HOST} + ssh-copy-id -f -i $HOME/${SSH_PKIF} ${REMOTE_USER}@${REMOTE_HOST} echo -e "" echo -e "========================================================" echo -e "========================================================" - fi + else MESSAGE="Error Creating Key-Pair" echo -e "${FAIL} ${MESSAGE}" - - exit_withchange + fi fi validate_os_sshpass From a5dbe689be2c0911e258043911206d1c2fc05594 Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Tue, 26 May 2020 22:20:36 -0500 Subject: [PATCH 11/15] v1.4.0 --- README.md | 45 ++++++---- gravity-sync.conf.example | 9 +- gravity-sync.sh | 169 +++++++++++++++++++------------------- 3 files changed, 119 insertions(+), 104 deletions(-) diff --git a/README.md b/README.md index 7e99d67..fb75503 100644 --- a/README.md +++ b/README.md @@ -50,9 +50,9 @@ Download the latest release from [GitHub](https://github.com/vmstan/gravity-sync ``` cd ~ -wget https://github.com/vmstan/gravity-sync/archive/v1.3.4.zip -unzip v1.3.4.zip -mv ~/gravity-sync-1.3.4 ~/gravity-sync +wget https://github.com/vmstan/gravity-sync/archive/v1.4.0.zip +unzip v1.4.0.zip +mv ~/gravity-sync-1.4.0 ~/gravity-sync cd gravity-sync ``` @@ -60,9 +60,26 @@ Please note the script **must** be run from a folder in your user home directory ## Configuration -After you clone the base configuration, you will need to create a configuration file called `gravity-sync.conf` in the same folder as the script. There will be a file called `gravity-sync.conf.example` that you can use as the basis for your file. +### The Easy Way -Make a copy of the example file and modify it with your site specific settings. +After you install Gravity Sync to your server (reguardless of the option you selected above) you will need to create a configuration file called `gravity-sync.conf` in the same folder as the script. + +``` +./gravity-sync config +``` + +This will guide you through the process of: +- Specifying the IP or DNS name of your primary Pi-hole +- Specifying the SSH username to connect to your primary Pi-hole +- Selecting the SSH authentication mechanism (key-pair or password) +- Configuring your key-pair and applying it to your primary Pi-hole +- Testing your authentication method + +After you've completed your configuration, proceed to the Execution phase. Unless you feel like making this (slightly) harder on yourself. + +### The Less Easy Way + +There will be a file called `gravity-sync.conf.example` that you can use as the basis for your own `gravity-sync.conf` file. Make a copy of the example file and modify it with your site specific settings. ``` cp gravity-sync.conf.example gravity-sync.conf @@ -165,7 +182,7 @@ Your copy of the `gravity-sync.conf` file, logs and backups should not be be imp If you installed via Option 2, download and overwrite the `gravity-sync.sh` file with a newer version. With either version, you should review the contents of the script bundle, specifically the example configuration file, to make sure there are no new required settings. -The goal of Gravity Sync is to be simple, so any additional requirements should also be called out when it's executed. After updating, be sure to manually run a `./gravity-sync.sh compare` or `./gravity-sync.sh pull` to validate things are still working as expected. +The goal of Gravity Sync is to be simple, so any additional requirements should also be called out when it's executed. After updating, be sure to manually run a `./gravity-sync.sh compare` or `./gravity-sync.sh pull` to validate things are still working as expected. You can run a `./gravity-sync.sh config` at any time to generate a new configuration file. ## Automation @@ -192,18 +209,14 @@ If you'd like to see the log of what was run the last crontab, you can view that ## Troubleshooting -If you are unable to run the `gravity-sync.sh` file, make sure it's marked as an executable by Linux. +If you are just straight up unable to run the `gravity-sync.sh` file, make sure it's marked as an executable by Linux. ``` chmod +x gravity-sync.sh ``` -If you'd like to know what version of the script you have running. - -``` -./gravity-sync.sh version -``` - -If the update script fails, make sure you did your original deployment via `git clone` and not a manual install. If it doesn't kick off, you can manually execute a `git pull` while in the `gravity-sync` directory. - -If your script prompts for a password on the remote system, make sure that your user account is setup not to require passwords in the sudoers file. \ No newline at end of file +- If your script prompts for a password on the remote system, make sure that your user account is setup not to require passwords in the sudoers file. +- If you use a non-standard SSH port to connect to your primary Pi-hole, you can add `SSH_PORT='123'` to the bottom of your `gravity-sync.conf` file. (Subsitute 123 for your non-standard port.) This will overwrite the `SSH_PORT=22` at the top of the script as it is imported later in the execution. +- If you'd like to know what version of the script you have running by running `./gravity-sync.sh version` +- If the update script fails, make sure you did your original deployment via `git clone` and not a manual install. +- If it doesn't kick off, you can manually execute a `git pull` while in the `gravity-sync` directory. \ No newline at end of file diff --git a/gravity-sync.conf.example b/gravity-sync.conf.example index 0f14754..b949bf9 100644 --- a/gravity-sync.conf.example +++ b/gravity-sync.conf.example @@ -1,16 +1,17 @@ # REQUIRED SETTINGS ###################### -# Pi-hole Primary Node in IP or DNS +# Primary Pi-hole host (in IP or DNS name) REMOTE_HOST='192.168.1.10' -# User on Primary PH with SUDO rights +# User account on primary with SUDO rights REMOTE_USER='pi' # OPTIONAL SETTING ####################### # Password for REMOTE_USER account -# Requires SSHPASS installed on server +# Requires 'SSHPASS' installed on server +# (ex: sudo apt install sshpass) # Less secure and possibly less reliable -# Leave blank to use (preferred) key-pair SSH auth! +# Leave blank to use (preferred) key-pair REMOTE_PASS='' \ No newline at end of file diff --git a/gravity-sync.sh b/gravity-sync.sh index 8a09dff..cda75f0 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -4,34 +4,34 @@ PROGRAM='Gravity Sync' VERSION='1.4.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 -# Tested against Pihole 5.0 GA on Raspbian Buster and Ubuntu 20.04, but it should work on most configs -# More installation instructions available at https://vmstan.com/gravity-sync -# For the latest version please visit https://github.com/vmstan/gravity-sync under Releases +# Execute from the home folder of the user who own's it (ex: 'cd ~/gravity-sync') +# For documentation or download updates visit https://github.com/vmstan/gravity-sync # REQUIRED SETTINGS ########################## -# You MUST define REMOTE_HOST and REMOTE_USER in a file called 'gravity-sync.conf' -# You can copy the 'gravity-sync.conf.example' file in the script directory to get started +# Run './gravity-sync.sh config' to get started # STANDARD VARIABLES ######################### # GS Folder/File Locations -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 -CRONJOB_LOG='gravity-sync.cron' # only used if cron is configured to output to this file -BACKUP_FOLD='backup' # must exist as subdirectory in LOCAL_FOLD +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 +CRONJOB_LOG='gravity-sync.cron' # only used if cron is configured to output to this file +BACKUP_FOLD='backup' # must exist as subdirectory in LOCAL_FOLDR # PH Folder/File Locations -PIHOLE_DIR='/etc/pihole' # default PH data directory -GRAVITY_FI='gravity.db' # default -PIHOLE_BIN='/usr/local/bin/pihole' # default PH binary directory +PIHOLE_DIR='/etc/pihole' # default PH data directory +GRAVITY_FI='gravity.db' # default PH database file +PIHOLE_BIN='/usr/local/bin/pihole' # default PH binary directory -# SSH Configuration -SSH_PORT='22' # default SSH port -SSH_PKIF='.ssh/id_rsa.pub' # default local SSH key +# SSH CONFIGURATION ########################## + +# Suggested not to replace these values here +# Add replacement variables to gravity-sync.conf + +SSH_PORT='22' # default SSH port +SSH_PKIF='.ssh/id_rsa.pub' # default local SSH key ############################################## ### DO NOT CHANGE ANYTHING BELOW THIS LINE ### @@ -78,7 +78,8 @@ function import_gs { fi } -# Update Function +# GS Update Functions +## Master Branch function update_gs { TASKTYPE='UPDATE' logs_export # dumps log prior to execution because script stops after successful pull @@ -91,7 +92,7 @@ function update_gs { exit } -# Developer Build Update +## Developer Branch function beta_gs { TASKTYPE='BETA' logs_export # dumps log prior to execution because script stops after successful pull @@ -105,7 +106,8 @@ function beta_gs { exit } -# Pull Function +# Gravity Core Functions +## Pull Function function pull_gs { TASKTYPE='PULL' @@ -185,7 +187,7 @@ function pull_gs { exit_withchange } -# Push Function +## Push Function function push_gs { TASKTYPE='PUSH' @@ -243,7 +245,15 @@ function push_gs { } # Logging Functions -## Check Log Function +## Core Logging +### Write Logs Out +function logs_export { + echo -e "${INFO} Logging Timestamps to ${SYNCING_LOG}" + # date >> $HOME/${LOCAL_FOLDR}/${SYNCING_LOG} + echo -e $(date) "[${TASKTYPE}]" >> $HOME/${LOCAL_FOLDR}/${SYNCING_LOG} +} + +### Output Sync Logs function logs_gs { echo -e "========================================================" echo -e "Recent Complete ${YELLOW}PULL${NC} Executions" @@ -256,7 +266,8 @@ function logs_gs { exit_nochange } -## Crontab Logic +## Crontab Logs +### Core Crontab Logs function show_crontab { CRONPATH="$HOME/${LOCAL_FOLDR}/${CRONJOB_LOG}" @@ -281,7 +292,7 @@ function show_crontab { fi } -## Check Last Crontab +### Output Crontab function logs_crontab { echo -e "========================================================" echo -e "========================================================" @@ -292,13 +303,6 @@ function logs_crontab { echo -e "========================================================" } -## Log Out -function logs_export { - echo -e "${INFO} Logging Timestamps to ${SYNCING_LOG}" - # date >> $HOME/${LOCAL_FOLDR}/${SYNCING_LOG} - echo -e $(date) "[${TASKTYPE}]" >> $HOME/${LOCAL_FOLDR}/${SYNCING_LOG} -} - # Validate Functions ## Validate GS Folders function validate_gs_folders { @@ -338,7 +342,8 @@ function validate_ph_folders { ## Validate SSHPASS function validate_os_sshpass { - echo -e "${INFO} Checking SSH Configuration" + MESSAGE="Checking SSH Configuration" + echo -e "${INFO} ${MESSAGE}" if hash sshpass 2>/dev/null then @@ -371,43 +376,7 @@ function validate_os_sshpass { } -# List GS Arguments -function list_gs_arguments { - echo -e "Usage: $0 [options]" - echo -e "Example: '$0 pull'" - echo -e "" - 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 "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 -} - -# Exit Codes -## No Changes Made -function exit_nochange { - echo -e "${INFO} ${PROGRAM} ${TASKTYPE} Aborting" - exit 0 -} - -## Changes Made -function exit_withchange { - SCRIPT_END=$SECONDS - echo -e "${INFO} ${PROGRAM} ${TASKTYPE} Completed in $((SCRIPT_END-SCRIPT_START)) seconds" - exit 0 -} - -# Error Validation +## Error Validation function error_validate { if [ "$?" != "0" ]; then echo -e "\r${FAIL} ${MESSAGE}" @@ -417,12 +386,7 @@ function error_validate { fi } -# Output Version -function show_version { - echo -e "${INFO} ${PROGRAM} ${VERSION}" -} - -# Look for Changes +## Validate Sync Required function md5_compare { echo -e "${INFO} Comparing ${GRAVITY_FI} Changes" @@ -446,7 +410,8 @@ function md5_compare { } -# Generate Config +# Configuration Management +## Generate New Configuration function config_generate { MESSAGE="Creating ${CONFIG_FILE} from Template" echo -en "${STAT} ${MESSAGE}" @@ -518,9 +483,7 @@ function config_generate { echo -e "========================================================" echo -e "========================================================" - echo -e "" ssh-keygen -t rsa - echo -e "" echo -e "========================================================" echo -e "========================================================" fi @@ -538,14 +501,12 @@ function config_generate { MESSAGE="Registering Key-Pair on ${REMOTE_HOST}" echo -e "${INFO} ${MESSAGE}" - MESSAGE="Enter ${REMOTE_USER}@${REMOTE_HOST}" + MESSAGE="Enter ${REMOTE_USER}@${REMOTE_HOST} Password" echo -e "${NEED} ${MESSAGE}" echo -e "========================================================" echo -e "========================================================" - echo -e "" ssh-copy-id -f -i $HOME/${SSH_PKIF} ${REMOTE_USER}@${REMOTE_HOST} - echo -e "" echo -e "========================================================" echo -e "========================================================" else @@ -559,7 +520,7 @@ function config_generate { exit_withchange } -# Delete Existing Configuration +## Delete Existing Configuration function config_delete { source $HOME/${LOCAL_FOLDR}/${CONFIG_FILE} MESSAGE="Configuration File Exists" @@ -594,6 +555,47 @@ function config_delete { done } +# Exit Codes +## No Changes Made +function exit_nochange { + echo -e "${INFO} ${PROGRAM} ${TASKTYPE} Aborting" + exit 0 +} + +## Changes Made +function exit_withchange { + SCRIPT_END=$SECONDS + echo -e "${INFO} ${PROGRAM} ${TASKTYPE} Completed in $((SCRIPT_END-SCRIPT_START)) seconds" + exit 0 +} + +## List GS Arguments +function list_gs_arguments { + echo -e "Usage: $0 [options]" + echo -e "Example: '$0 pull'" + echo -e "" + 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 "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 +} + +# Output Version +function show_version { + echo -e "${INFO} ${PROGRAM} ${VERSION}" +} + # SCRIPT EXECUTION ########################### SCRIPT_START=$SECONDS @@ -708,7 +710,6 @@ case $# in echo -e "${INFO} ${MESSAGE}" config_generate - fi ;; From 63827f40fa4f39777ce1b4f966a32bd2125d16e8 Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Tue, 26 May 2020 22:31:06 -0500 Subject: [PATCH 12/15] Update gravity-sync.sh --- gravity-sync.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gravity-sync.sh b/gravity-sync.sh index cda75f0..8a734a8 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -123,7 +123,7 @@ function pull_gs { MESSAGE="Pulling ${GRAVITY_FI} from ${REMOTE_HOST}" echo -en "${STAT} ${MESSAGE}" - ${SSHPASSWORD} rsync -e 'ssh -p ${SSH_PORT}' ${REMOTE_USER}@${REMOTE_HOST}:${PIHOLE_DIR}/${GRAVITY_FI} $HOME/${LOCAL_FOLDR}/${BACKUP_FOLD}/${GRAVITY_FI}.pull >/dev/null 2>&1 + ${SSHPASSWORD} rsync -e "ssh -p ${SSH_PORT}" ${REMOTE_USER}@${REMOTE_HOST}:${PIHOLE_DIR}/${GRAVITY_FI} $HOME/${LOCAL_FOLDR}/${BACKUP_FOLD}/${GRAVITY_FI}.pull >/dev/null 2>&1 error_validate MESSAGE="Replacing ${GRAVITY_FI} on $HOSTNAME" @@ -201,12 +201,12 @@ function push_gs { MESSAGE="Backing Up ${GRAVITY_FI} from ${REMOTE_HOST}" echo -en "${STAT} ${MESSAGE}" - ${SSHPASSWORD} rsync -e 'ssh -p ${SSH_PORT}' ${REMOTE_USER}@${REMOTE_HOST}:${PIHOLE_DIR}/${GRAVITY_FI} $HOME/${LOCAL_FOLDR}/${BACKUP_FOLD}/${GRAVITY_FI}.push >/dev/null 2>&1 + ${SSHPASSWORD} rsync -e "ssh -p ${SSH_PORT}" ${REMOTE_USER}@${REMOTE_HOST}:${PIHOLE_DIR}/${GRAVITY_FI} $HOME/${LOCAL_FOLDR}/${BACKUP_FOLD}/${GRAVITY_FI}.push >/dev/null 2>&1 error_validate MESSAGE="Pushing ${GRAVITY_FI} to ${REMOTE_HOST}" echo -en "${STAT} ${MESSAGE}" - ${SSHPASSWORD} rsync --rsync-path="sudo rsync" -e 'ssh -p ${SSH_PORT}' ${PIHOLE_DIR}/${GRAVITY_FI} ${REMOTE_USER}@${REMOTE_HOST}:${PIHOLE_DIR}/${GRAVITY_FI} >/dev/null 2>&1 + ${SSHPASSWORD} rsync --rsync-path="sudo rsync" -e "ssh -p ${SSH_PORT}" ${PIHOLE_DIR}/${GRAVITY_FI} ${REMOTE_USER}@${REMOTE_HOST}:${PIHOLE_DIR}/${GRAVITY_FI} >/dev/null 2>&1 error_validate MESSAGE="Setting Permissions on ${GRAVITY_FI}" From 4c9769dcefe4daa46ee1165f6fcc5c43e1644a31 Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Tue, 26 May 2020 22:38:07 -0500 Subject: [PATCH 13/15] Update gravity-sync.sh --- gravity-sync.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gravity-sync.sh b/gravity-sync.sh index 8a734a8..08bf46b 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -225,12 +225,12 @@ function push_gs { MESSAGE="Updating FTLDNS Configuration" echo -en "${STAT} ${MESSAGE}" - ${SSHPASSWORD} ssh ${REMOTE_USER}@${REMOTE_HOST} '${PIHOLE_BIN} restartdns reloadlists' >/dev/null 2>&1 + ${SSHPASSWORD} ssh ${REMOTE_USER}@${REMOTE_HOST} "${PIHOLE_BIN} restartdns reloadlists" >/dev/null 2>&1 error_validate MESSAGE="Reloading FTLDNS Services" echo -en "${STAT} ${MESSAGE}" - ${SSHPASSWORD} ssh ${REMOTE_USER}@${REMOTE_HOST} '${PIHOLE_BIN} restartdns' >/dev/null 2>&1 + ${SSHPASSWORD} ssh ${REMOTE_USER}@${REMOTE_HOST} "${PIHOLE_BIN} restartdns" >/dev/null 2>&1 error_validate logs_export From f85a766319efae42b835d7ea1e74996cdd61ecc9 Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Tue, 26 May 2020 22:44:30 -0500 Subject: [PATCH 14/15] Fix permissions issue --- gravity-sync.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gravity-sync.sh b/gravity-sync.sh index 08bf46b..d57f849 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -154,7 +154,7 @@ function pull_gs { echo -en "${STAT} ${MESSAGE}" GRAVDB_RWE=$(namei -m ${PIHOLE_DIR}/${GRAVITY_FI} | grep -v f: | grep ${GRAVITY_FI} | awk '{print $1}') - if [ $GRAVDB_RWE = "-rw-r--r--" ] + if [ $GRAVDB_RWE = "-rw-rw-r--" ] then echo -e "\r${GOOD} ${MESSAGE}" else @@ -165,7 +165,7 @@ function pull_gs { MESSAGE="Setting Ownership on ${GRAVITY_FI}" echo -en "${STAT} ${MESSAGE}" - sudo chmod 644 ${PIHOLE_DIR}/${GRAVITY_FI} >/dev/null 2>&1 + sudo chmod 664 ${PIHOLE_DIR}/${GRAVITY_FI} >/dev/null 2>&1 error_validate fi @@ -211,7 +211,7 @@ function push_gs { MESSAGE="Setting Permissions on ${GRAVITY_FI}" echo -en "${STAT} ${MESSAGE}" - ${SSHPASSWORD} ssh ${REMOTE_USER}@${REMOTE_HOST} "sudo chmod 644 ${PIHOLE_DIR}/${GRAVITY_FI}" >/dev/null 2>&1 + ${SSHPASSWORD} ssh ${REMOTE_USER}@${REMOTE_HOST} "sudo chmod 664 ${PIHOLE_DIR}/${GRAVITY_FI}" >/dev/null 2>&1 error_validate MESSAGE="Setting Ownership on ${GRAVITY_FI}" From e24bcf661366bd30c9618f06e75a56d3e4b58785 Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Tue, 26 May 2020 23:02:41 -0500 Subject: [PATCH 15/15] v1.4.0 (2) --- gravity-sync.sh | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/gravity-sync.sh b/gravity-sync.sh index d57f849..59d4631 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -82,7 +82,7 @@ function import_gs { ## Master Branch function update_gs { TASKTYPE='UPDATE' - logs_export # dumps log prior to execution because script stops after successful pull + # logs_export # dumps log prior to execution because script stops after successful pull MESSAGE="Requires GitHub Installation" echo -e "${INFO} ${MESSAGE}" @@ -95,7 +95,7 @@ function update_gs { ## Developer Branch function beta_gs { TASKTYPE='BETA' - logs_export # dumps log prior to execution because script stops after successful pull + # logs_export # dumps log prior to execution because script stops after successful pull MESSAGE="Requires GitHub Installation" echo -e "${INFO} ${MESSAGE}" @@ -258,8 +258,8 @@ function logs_gs { echo -e "========================================================" echo -e "Recent Complete ${YELLOW}PULL${NC} Executions" tail -n 10 ${SYNCING_LOG} | grep PULL - echo -e "Recent Complete ${YELLOW}UPDATE${NC} Executions" - tail -n 10 ${SYNCING_LOG} | grep UPDATE + #echo -e "Recent Complete ${YELLOW}UPDATE${NC} Executions" + # tail -n 10 ${SYNCING_LOG} | grep UPDATE echo -e "Recent Complete ${YELLOW}PUSH${NC} Executions" tail -n 10 ${SYNCING_LOG} | grep PUSH echo -e "========================================================" @@ -441,13 +441,11 @@ function config_generate { MESSAGE="SSHPASS Utility Detected" echo -e "${INFO} ${MESSAGE}" - MESSAGE="Do you want to configure password based SSH authentication (not reccomended)?" + MESSAGE="Do you want to configure password based SSH authentication?" echo -e "${WARN} ${MESSAGE}" - MESSAGE="Your password will be saved in clear-text in the ${CONFIG_FILE} file!" + MESSAGE="Your password will be stored clear-text in the ${CONFIG_FILE}!" echo -e "${WARN} ${MESSAGE}" - MESSAGE="Leave blank to use (preferred) SSH Key-Pair Authentication." - echo -e "${WARN} ${MESSAGE}" - MESSAGE="Enter SSH password for primary Pi-hole server (optional)" + MESSAGE="Leave blank to use (preferred) SSH Key-Pair Authentication:" echo -e "${NEED} ${MESSAGE}" read INPUT_REMOTE_PASS @@ -574,18 +572,21 @@ function list_gs_arguments { echo -e "Usage: $0 [options]" echo -e "Example: '$0 pull'" echo -e "" + echo -e "Setup Options:" + echo -e " ${YELLOW}config${NC} Create a new ${CONFIG_FILE} file" + echo -e "" echo -e "Replication Options:" - echo -e " ${YELLOW}pull${NC} Sync the ${GRAVITY_FI} configuration on primary PH to this server" + echo -e " ${YELLOW}pull${NC} Sync the ${GRAVITY_FI} database 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} Just check for differences 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" - echo -e " ${YELLOW}beta${NC} Use GitHub to update this script to the latest beta version available" + echo -e " ${YELLOW}update${NC} Use GitHub to update this script to the latest version" + echo -e " ${YELLOW}beta${NC} Use GitHub to update this script to the latest beta version" 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}version${NC} Display your version of ${PROGRAM}" + echo -e " ${YELLOW}logs${NC} Show recent successful replication jobs" echo -e " ${YELLOW}cron${NC} Display output of last crontab execution" echo -e "" exit_nochange