Merge pull request #11 from vmstan/development

v1.3.2
This commit is contained in:
Michael Stanclift 2020-05-25 21:43:56 -05:00 committed by GitHub
commit c558d961c9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 91 additions and 83 deletions

View File

@ -6,9 +6,9 @@ What is better than a [Pi-hole](https://github.com/pi-hole/pi-hole) blocking ads
That's Gravity Sync. That's Gravity Sync.
![Pull execution](https://user-images.githubusercontent.com/3002053/82774990-f88c6200-9e0b-11ea-97e5-23c8b38f32e3.png) ![Pull execution](https://user-images.githubusercontent.com/3002053/82855198-4074bd00-9ed0-11ea-96ca-65e0f3d9b71a.gif)
Gravity Sync 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. Gravity Sync will **not** overwrite device specific settings such as local network configuration, admin/API passwords/keys, local hostfiles, upstream DNS resolvers, etc. It will also **not** keep DHCP settings or device leases synchronized.
## Prerequisites ## Prerequisites
@ -50,9 +50,9 @@ Download the latest release from [GitHub](https://github.com/vmstan/gravity-sync
``` ```
cd ~ cd ~
wget https://github.com/vmstan/gravity-sync/archive/v1.3.1.zip wget https://github.com/vmstan/gravity-sync/archive/v1.3.2.zip
unzip v1.3.1.zip unzip v1.3.2.zip
mv ~/gravity-sync-1.3.1 ~/gravity-sync mv ~/gravity-sync-1.3.2 ~/gravity-sync
cd gravity-sync cd gravity-sync
``` ```

View File

@ -52,7 +52,7 @@ INFO="[${YELLOW}INFO${NC}]"
# Import Settings # Import Settings
function import_gs { function import_gs {
MESSAGE="Importing ${CONFIG_FILE} Settings" MESSAGE="Importing ${CONFIG_FILE} Settings"
echo -e "${STAT} $MESSAGE" echo -en "${STAT} $MESSAGE"
if [ -f $HOME/${LOCAL_FOLDR}/${CONFIG_FILE} ] if [ -f $HOME/${LOCAL_FOLDR}/${CONFIG_FILE} ]
then then
source $HOME/${LOCAL_FOLDR}/${CONFIG_FILE} source $HOME/${LOCAL_FOLDR}/${CONFIG_FILE}
@ -62,7 +62,7 @@ function import_gs {
echo -e "${INFO} ${MESSAGE}" echo -e "${INFO} ${MESSAGE}"
else else
echo -e "${FAIL} ${MESSAGE}" echo -e "\r${FAIL} ${MESSAGE}"
MESSAGE="${CONFIG_FILE} Missing" MESSAGE="${CONFIG_FILE} Missing"
echo -e "${INFO} ${MESSAGE}" echo -e "${INFO} ${MESSAGE}"
@ -106,40 +106,40 @@ function pull_gs {
md5_compare md5_compare
MESSAGE="Pulling ${GRAVITY_FI} from ${REMOTE_HOST}" MESSAGE="Pulling ${GRAVITY_FI} from ${REMOTE_HOST}"
echo -e "${STAT} ${MESSAGE}" echo -en "${STAT} ${MESSAGE}"
${SSHPASSWORD} rsync -v -e 'ssh -p 22' ${REMOTE_USER}@${REMOTE_HOST}:${PIHOLE_DIR}/${GRAVITY_FI} $HOME/${LOCAL_FOLDR}/${BACKUP_FOLD}/${GRAVITY_FI}.pull ${SSHPASSWORD} rsync -v -e 'ssh -p 22' ${REMOTE_USER}@${REMOTE_HOST}:${PIHOLE_DIR}/${GRAVITY_FI} $HOME/${LOCAL_FOLDR}/${BACKUP_FOLD}/${GRAVITY_FI}.pull >/dev/null 2>&1
error_validate error_validate
MESSAGE="Backing Up ${GRAVITY_FI} on $HOSTNAME" MESSAGE="Backing Up ${GRAVITY_FI} on $HOSTNAME"
echo -e "${STAT} ${MESSAGE}" echo -en "${STAT} ${MESSAGE}"
cp -v ${PIHOLE_DIR}/${GRAVITY_FI} $HOME/${LOCAL_FOLDR}/${BACKUP_FOLD}/${GRAVITY_FI}.backup cp -v ${PIHOLE_DIR}/${GRAVITY_FI} $HOME/${LOCAL_FOLDR}/${BACKUP_FOLD}/${GRAVITY_FI}.backup >/dev/null 2>&1
error_validate error_validate
MESSAGE="Replacing ${GRAVITY_FI} on $HOSTNAME" MESSAGE="Replacing ${GRAVITY_FI} on $HOSTNAME"
echo -e "${STAT} ${MESSAGE}" echo -en "${STAT} ${MESSAGE}"
sudo cp -v $HOME/${LOCAL_FOLDR}/${BACKUP_FOLD}/${GRAVITY_FI}.pull ${PIHOLE_DIR}/${GRAVITY_FI} sudo cp -v $HOME/${LOCAL_FOLDR}/${BACKUP_FOLD}/${GRAVITY_FI}.pull ${PIHOLE_DIR}/${GRAVITY_FI} >/dev/null 2>&1
error_validate error_validate
MESSAGE="Setting Permissions on ${GRAVITY_FI}" MESSAGE="Setting Permissions on ${GRAVITY_FI}"
echo -e "${STAT} ${MESSAGE}" echo -en "${STAT} ${MESSAGE}"
sudo chmod 644 ${PIHOLE_DIR}/${GRAVITY_FI} sudo chmod 644 ${PIHOLE_DIR}/${GRAVITY_FI} >/dev/null 2>&1
error_validate error_validate
MESSAGE="Setting Ownership on ${GRAVITY_FI}" MESSAGE="Setting Ownership on ${GRAVITY_FI}"
echo -e "${STAT} ${MESSAGE}" echo -en "${STAT} ${MESSAGE}"
sudo chown pihole:pihole ${PIHOLE_DIR}/${GRAVITY_FI} sudo chown pihole:pihole ${PIHOLE_DIR}/${GRAVITY_FI} >/dev/null 2>&1
error_validate error_validate
sleep 3 sleep 3
MESSAGE="Updating FTLDNS Configuration" MESSAGE="Updating FTLDNS Configuration"
echo -e "${STAT} ${MESSAGE}" echo -en "${STAT} ${MESSAGE}"
pihole restartdns reloadlists pihole restartdns reloadlists >/dev/null 2>&1
error_validate error_validate
MESSAGE="Reloading FTLDNS Services" MESSAGE="Reloading FTLDNS Services"
echo -e "${STAT} ${MESSAGE}" echo -en "${STAT} ${MESSAGE}"
pihole restartdns pihole restartdns >/dev/null 2>&1
error_validate error_validate
logs_export logs_export
@ -159,35 +159,35 @@ function push_gs {
Yes ) Yes )
MESSAGE="Backing Up ${GRAVITY_FI} from ${REMOTE_HOST}" MESSAGE="Backing Up ${GRAVITY_FI} from ${REMOTE_HOST}"
echo -e "${STAT} ${MESSAGE}" echo -en "${STAT} ${MESSAGE}"
${SSHPASSWORD} rsync -v -e 'ssh -p 22' ${REMOTE_USER}@${REMOTE_HOST}:${PIHOLE_DIR}/${GRAVITY_FI} $HOME/${LOCAL_FOLDR}/${BACKUP_FOLD}/${GRAVITY_FI}.push ${SSHPASSWORD} rsync -v -e 'ssh -p 22' ${REMOTE_USER}@${REMOTE_HOST}:${PIHOLE_DIR}/${GRAVITY_FI} $HOME/${LOCAL_FOLDR}/${BACKUP_FOLD}/${GRAVITY_FI}.push >/dev/null 2>&1
error_validate error_validate
MESSAGE="Pushing ${GRAVITY_FI} to ${REMOTE_HOST}" MESSAGE="Pushing ${GRAVITY_FI} to ${REMOTE_HOST}"
echo -e "${STAT} ${MESSAGE}" echo -en "${STAT} ${MESSAGE}"
${SSHPASSWORD} rsync --rsync-path="sudo rsync" -v -e 'ssh -p 22' ${PIHOLE_DIR}/${GRAVITY_FI} ${REMOTE_USER}@${REMOTE_HOST}:${PIHOLE_DIR}/${GRAVITY_FI} ${SSHPASSWORD} rsync --rsync-path="sudo rsync" -v -e 'ssh -p 22' ${PIHOLE_DIR}/${GRAVITY_FI} ${REMOTE_USER}@${REMOTE_HOST}:${PIHOLE_DIR}/${GRAVITY_FI} >/dev/null 2>&1
error_validate error_validate
MESSAGE="Setting Permissions on ${GRAVITY_FI}" MESSAGE="Setting Permissions on ${GRAVITY_FI}"
echo -e "${STAT} ${MESSAGE}" echo -en "${STAT} ${MESSAGE}"
${SSHPASSWORD} ssh ${REMOTE_USER}@${REMOTE_HOST} "sudo chmod 644 ${PIHOLE_DIR}/${GRAVITY_FI}" ${SSHPASSWORD} ssh ${REMOTE_USER}@${REMOTE_HOST} "sudo chmod 644 ${PIHOLE_DIR}/${GRAVITY_FI}" >/dev/null 2>&1
error_validate error_validate
MESSAGE="Setting Ownership on ${GRAVITY_FI}" MESSAGE="Setting Ownership on ${GRAVITY_FI}"
echo -e "${STAT} ${MESSAGE}" echo -en "${STAT} ${MESSAGE}"
${SSHPASSWORD} ssh ${REMOTE_USER}@${REMOTE_HOST} "sudo chown pihole:pihole ${PIHOLE_DIR}/${GRAVITY_FI}" ${SSHPASSWORD} ssh ${REMOTE_USER}@${REMOTE_HOST} "sudo chown pihole:pihole ${PIHOLE_DIR}/${GRAVITY_FI}" >/dev/null 2>&1
error_validate error_validate
sleep 3 sleep 3
MESSAGE="Updating FTLDNS Configuration" MESSAGE="Updating FTLDNS Configuration"
echo -e "${STAT} ${MESSAGE}" echo -en "${STAT} ${MESSAGE}"
${SSHPASSWORD} ssh ${REMOTE_USER}@${REMOTE_HOST} 'pihole restartdns reloadlists' ${SSHPASSWORD} ssh ${REMOTE_USER}@${REMOTE_HOST} 'pihole restartdns reloadlists' >/dev/null 2>&1
error_validate error_validate
MESSAGE="Reloading FTLDNS Services" MESSAGE="Reloading FTLDNS Services"
echo -e "${STAT} ${MESSAGE}" echo -en "${STAT} ${MESSAGE}"
${SSHPASSWORD} ssh ${REMOTE_USER}@${REMOTE_HOST} 'pihole restartdns' ${SSHPASSWORD} ssh ${REMOTE_USER}@${REMOTE_HOST} 'pihole restartdns' >/dev/null 2>&1
error_validate error_validate
logs_export logs_export
@ -215,6 +215,31 @@ function logs_gs {
exit_nochange exit_nochange
} }
## Crontab Logic
function show_crontab {
CRONPATH="$HOME/${LOCAL_FOLDR}/${CRONJOB_LOG}"
MESSAGE="Replaying Last Cronjob"
echo -e "${STAT} ${MESSAGE}"
if [ -f ${CRONPATH} ]
then
if [ -s ${CRONPATH} ]
echo -e "${GOOD} ${MESSAGE}"
logs_crontab
exit_nochange
then
echo -e "${FAIL} ${MESSAGE}"
echo -e "${INFO} ${CRONPATH} appears empty"
exit_nochange
fi
else
echo -e "${FAIL} ${MESSAGE}"
echo -e "${YELLOW}${CRONPATH}${NC} cannot be located"
exit_nochange
fi
}
## Check Last Crontab ## Check Last Crontab
function logs_crontab { function logs_crontab {
echo -e "========================================================" echo -e "========================================================"
@ -237,22 +262,22 @@ function logs_export {
## Validate GS Folders ## Validate GS Folders
function validate_gs_folders { function validate_gs_folders {
MESSAGE="Locating $HOME/${LOCAL_FOLDR}" MESSAGE="Locating $HOME/${LOCAL_FOLDR}"
echo -e "${STAT} ${MESSAGE}" echo -en "${STAT} ${MESSAGE}"
if [ -d $HOME/${LOCAL_FOLDR} ] if [ -d $HOME/${LOCAL_FOLDR} ]
then then
echo -e "${GOOD} ${MESSAGE}" echo -e "\r${GOOD} ${MESSAGE}"
else else
echo -e "${FAIL} ${MESSAGE}" echo -e "\r${FAIL} ${MESSAGE}"
exit_nochange exit_nochange
fi fi
MESSAGE="Locating $HOME/${LOCAL_FOLDR}/${BACKUP_FOLD}" MESSAGE="Locating $HOME/${LOCAL_FOLDR}/${BACKUP_FOLD}"
echo -e "${STAT} ${MESSAGE}" echo -en "${STAT} ${MESSAGE}"
if [ -d $HOME/${LOCAL_FOLDR}/${BACKUP_FOLD} ] if [ -d $HOME/${LOCAL_FOLDR}/${BACKUP_FOLD} ]
then then
echo -e "${GOOD} ${MESSAGE}" echo -e "\r${GOOD} ${MESSAGE}"
else else
echo -e "${FAIL} ${MESSAGE}" echo -e "\r${FAIL} ${MESSAGE}"
exit_nochange exit_nochange
fi fi
} }
@ -260,12 +285,12 @@ function validate_gs_folders {
## Validate PH Folders ## Validate PH Folders
function validate_ph_folders { function validate_ph_folders {
MESSAGE="Locating ${PIHOLE_DIR}" MESSAGE="Locating ${PIHOLE_DIR}"
echo -e "${STAT} ${MESSAGE}" echo -en "${STAT} ${MESSAGE}"
if [ -d ${PIHOLE_DIR} ] if [ -d ${PIHOLE_DIR} ]
then then
echo -e "${GOOD} ${MESSAGE}" echo -e "\r${GOOD} ${MESSAGE}"
else else
echo -e "${FAIL} ${MESSAGE}" echo -e "\r${FAIL} ${MESSAGE}"
exit_nochange exit_nochange
fi fi
} }
@ -299,8 +324,8 @@ function validate_os_sshpass {
echo -e "${INFO} ${MESSAGE}" echo -e "${INFO} ${MESSAGE}"
MESSAGE="Testing SSH Connection" MESSAGE="Testing SSH Connection"
echo -e "${STAT} ${MESSAGE}" echo -en "${STAT} ${MESSAGE}"
timeout 5 ${SSHPASSWORD} ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} 'exit' timeout 5 ${SSHPASSWORD} ssh -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} 'exit' >/dev/null 2>&1
error_validate error_validate
} }
@ -336,17 +361,18 @@ function exit_nochange {
## Changes Made ## Changes Made
function exit_withchange { function exit_withchange {
echo -e "${INFO} ${PROGRAM} ${TASKTYPE} Completed" SCRIPT_END=$SECONDS
echo -e "${INFO} ${PROGRAM} ${TASKTYPE} Completed in $((SCRIPT_END-SCRIPT_START)) seconds"
exit 0 exit 0
} }
# Error Validation # Error Validation
function error_validate { function error_validate {
if [ "$?" != "0" ]; then if [ "$?" != "0" ]; then
echo -e "${FAIL} ${MESSAGE}" echo -e "\r${FAIL} ${MESSAGE}"
exit 1 exit 1
else else
echo -e "${GOOD} ${MESSAGE}" echo -e "\r${GOOD} ${MESSAGE}"
fi fi
} }
@ -360,12 +386,12 @@ function md5_compare {
echo -e "${INFO} Comparing ${GRAVITY_FI} Changes" echo -e "${INFO} Comparing ${GRAVITY_FI} Changes"
MESSAGE="Analyzing Remote ${GRAVITY_FI}" MESSAGE="Analyzing Remote ${GRAVITY_FI}"
echo -e "${STAT} ${MESSAGE}" echo -en "${STAT} ${MESSAGE}"
primaryMD5=$(${SSHPASSWORD} ssh ${REMOTE_USER}@${REMOTE_HOST} 'md5sum /etc/pihole/gravity.db') primaryMD5=$(${SSHPASSWORD} ssh ${REMOTE_USER}@${REMOTE_HOST} 'md5sum /etc/pihole/gravity.db')
error_validate error_validate
MESSAGE="Analyzing Local ${GRAVITY_FI}" MESSAGE="Analyzing Local ${GRAVITY_FI}"
echo -e "${STAT} ${MESSAGE}" echo -en "${STAT} ${MESSAGE}"
secondMD5=$(md5sum ${PIHOLE_DIR}/${GRAVITY_FI}) secondMD5=$(md5sum ${PIHOLE_DIR}/${GRAVITY_FI})
error_validate error_validate
@ -380,21 +406,22 @@ function md5_compare {
} }
# SCRIPT EXECUTION ########################### # SCRIPT EXECUTION ###########################
SCRIPT_START=$SECONDS
MESSAGE="Evaluating Script Arguments" MESSAGE="Evaluating Script Arguments"
echo -e "${STAT} ${MESSAGE}" echo -en "${STAT} ${MESSAGE}"
case $# in case $# in
0) 0)
echo -e "${FAIL} ${MESSAGE}" echo -e "\r${FAIL} ${MESSAGE}"
list_gs_arguments list_gs_arguments
;; ;;
1) 1)
case $1 in case $1 in
pull) pull)
echo -e "${GOOD} ${MESSAGE}" echo -e "\r${GOOD} ${MESSAGE}"
import_gs import_gs
@ -409,7 +436,7 @@ case $# in
;; ;;
push) push)
echo -e "${GOOD} ${MESSAGE}" echo -e "\r${GOOD} ${MESSAGE}"
import_gs import_gs
@ -430,7 +457,7 @@ case $# in
update) update)
# TASKTYPE='UPDATE' # TASKTYPE='UPDATE'
echo -e "${GOOD} ${MESSAGE}" echo -e "\r${GOOD} ${MESSAGE}"
echo -e "${INFO} Update Requested" echo -e "${INFO} Update Requested"
update_gs update_gs
@ -439,7 +466,7 @@ case $# in
beta) beta)
# TASKTYPE='BETA' # TASKTYPE='BETA'
echo -e "${GOOD} ${MESSAGE}" echo -e "\r${GOOD} ${MESSAGE}"
echo -e "${INFO} Beta Update Requested" echo -e "${INFO} Beta Update Requested"
beta_gs beta_gs
@ -448,15 +475,18 @@ case $# in
logs) logs)
TASKTYPE='LOGS' TASKTYPE='LOGS'
echo -e "\r${GOOD} ${MESSAGE}"
MESSAGE="Logs Requested" MESSAGE="Logs Requested"
echo -e "${GOOD} ${MESSAGE}" echo -e "${INFO} ${MESSAGE}"
logs_gs logs_gs
;; ;;
compare) compare)
TASKTYPE='COMPARE' TASKTYPE='COMPARE'
echo -e "${GOOD} ${MESSAGE}" echo -e "\r${GOOD} ${MESSAGE}"
import_gs import_gs
echo -e "${INFO} Validating Folder Configuration" echo -e "${INFO} Validating Folder Configuration"
@ -469,35 +499,14 @@ case $# in
cron) cron)
TASKTYPE='CRON' TASKTYPE='CRON'
echo -e "${GOOD} ${MESSAGE}" echo -e "\r${GOOD} ${MESSAGE}"
CRONPATH="$HOME/${LOCAL_FOLDR}/${CRONJOB_LOG}" show_crontab
MESSAGE="Replaying Last Cronjob"
echo -e "${STAT} ${MESSAGE}"
if [ -f ${CRONPATH} ]
then
if [ -s ${CRONPATH} ]
echo -e "${GOOD} ${MESSAGE}"
logs_crontab
exit_nochange
then
echo -e "${FAIL} ${MESSAGE}"
echo -e "${INFO} ${CRONPATH} appears empty"
exit_nochange
fi
else
echo -e "${FAIL} ${MESSAGE}"
echo -e "${YELLOW}${CRONPATH}${NC} cannot be located"
exit_nochange
fi
;; ;;
*) *)
MESSAGE="'${YELLOW}$1${NC}' is an Invalid Argument" echo -e "\r${FAIL} ${MESSAGE}"
echo -e "${FAIL} ${MESSAGE}"
list_gs_arguments list_gs_arguments
exit_nochange exit_nochange
;; ;;
@ -505,8 +514,7 @@ case $# in
;; ;;
*) *)
MESSAGE="Too Many Arguments" echo -e "\r${FAIL} ${MESSAGE}"
echo -e "${FAIL} ${MESSAGE}"
list_gs_arguments list_gs_arguments
exit_nochange exit_nochange
;; ;;