From 9313200b9444388d1f457d5a8951e7307cb6ce90 Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Thu, 31 Dec 2020 02:45:47 +0000 Subject: [PATCH] indention change --- CHANGELOG.md | 1 + README.md | 2 +- gravity-sync.sh | 152 +++++----- includes/gs-automate.sh | 174 +++++------ includes/gs-backup.sh | 90 +++--- includes/gs-colors.sh | 12 +- includes/gs-compare.sh | 22 +- includes/gs-config.sh | 624 ++++++++++++++++++++-------------------- includes/gs-core.sh | 118 ++++---- includes/gs-exit.sh | 62 ++-- includes/gs-hashing.sh | 252 ++++++++-------- includes/gs-intent.sh | 60 ++-- includes/gs-logging.sh | 122 ++++---- includes/gs-pull.sh | 288 +++++++++---------- includes/gs-purge.sh | 108 +++---- includes/gs-push.sh | 160 +++++------ includes/gs-restore.sh | 306 ++++++++++---------- includes/gs-root.sh | 102 +++---- includes/gs-smart.sh | 230 +++++++-------- includes/gs-ssh.sh | 272 +++++++++--------- includes/gs-update.sh | 270 ++++++++--------- includes/gs-validate.sh | 246 ++++++++-------- prep/gs-install.sh | 16 +- 23 files changed, 1845 insertions(+), 1844 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 354241f..a6fab8a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -66,6 +66,7 @@ You can now use a standard Pi-hole install as your primary, or your secondary. Y #### 3.1.2 - Adds `./gravity-sync.sh info` screen to show output of settings and component versions. +- Convert all bash files from mix of tabs and spaces to 4 space indentation. ## 3.0 diff --git a/README.md b/README.md index 6a38b4a..188946c 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@

- Gravity Sync + Gravity Sync

What is better than a [Pi-hole](https://github.com/pi-hole/pi-hole) blocking ads via DNS on your network? That's right, two Pi-hole blocking ads on your network! diff --git a/gravity-sync.sh b/gravity-sync.sh index b2dbc84..58a6273 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -107,84 +107,84 @@ source ${LOCAL_FOLDR}/includes/gs-exit.sh # SCRIPT EXECUTION ########################### case $# in - 0) - start_gs - task_smart ;; - 1) - case $1 in - smart|sync) - start_gs - task_smart ;; - pull) - start_gs - task_pull ;; - push) - start_gs - task_push ;; - restore) - start_gs - task_restore ;; - version) - start_gs_noconfig - task_version ;; - update|upgrade) - start_gs_noconfig - task_update ;; - dev|devmode|development|develop) - start_gs_noconfig - task_devmode ;; - logs|log) - start_gs - task_logs ;; - compare) - start_gs - task_compare ;; - cron) - start_gs - task_cron ;; - config|configure) - start_gs_noconfig - task_configure ;; - auto|automate) - start_gs - task_automate ;; - backup) - start_gs - task_backup ;; - purge) - start_gs - task_purge ;; - sudo) - start_gs - task_sudo ;; - info) - start_gs - task_info ;; - *) - start_gs - task_invalid ;; - esac - ;; + 0) + start_gs + task_smart ;; + 1) + case $1 in + smart|sync) + start_gs + task_smart ;; + pull) + start_gs + task_pull ;; + push) + start_gs + task_push ;; + restore) + start_gs + task_restore ;; + version) + start_gs_noconfig + task_version ;; + update|upgrade) + start_gs_noconfig + task_update ;; + dev|devmode|development|develop) + start_gs_noconfig + task_devmode ;; + logs|log) + start_gs + task_logs ;; + compare) + start_gs + task_compare ;; + cron) + start_gs + task_cron ;; + config|configure) + start_gs_noconfig + task_configure ;; + auto|automate) + start_gs + task_automate ;; + backup) + start_gs + task_backup ;; + purge) + start_gs + task_purge ;; + sudo) + start_gs + task_sudo ;; + info) + start_gs + task_info ;; + *) + start_gs + task_invalid ;; + esac + ;; - 2) - case $1 in - auto|automate) - start_gs - task_automate ;; - esac - ;; + 2) + case $1 in + auto|automate) + start_gs + task_automate ;; + esac + ;; - 3) - case $1 in - auto|automate) - start_gs - task_automate $2 $3 ;; - esac - ;; - - *) - start_gs - task_invalid ;; + 3) + case $1 in + auto|automate) + start_gs + task_automate $2 $3 ;; + esac + ;; + + *) + start_gs + task_invalid ;; esac # END OF SCRIPT ############################## \ No newline at end of file diff --git a/includes/gs-automate.sh b/includes/gs-automate.sh index a10746e..2588fa4 100644 --- a/includes/gs-automate.sh +++ b/includes/gs-automate.sh @@ -6,109 +6,109 @@ ## Automate Task function task_automate { - TASKTYPE='AUTOMATE' - MESSAGE="${MESSAGE}: ${TASKTYPE} Requested" - echo_good + TASKTYPE='AUTOMATE' + MESSAGE="${MESSAGE}: ${TASKTYPE} Requested" + echo_good - CRON_EXIST='0' - CRON_CHECK=$(crontab -l | grep -q "${GS_FILENAME}" && echo '1' || echo '0') - if [ ${CRON_CHECK} == 1 ] - then - MESSAGE="Automation Task Already Exists" - echo_info - CRON_EXIST='1' - fi - - MESSAGE="Configuring Hourly Smart Sync" - echo_info + CRON_EXIST='0' + CRON_CHECK=$(crontab -l | grep -q "${GS_FILENAME}" && echo '1' || echo '0') + if [ ${CRON_CHECK} == 1 ] + then + MESSAGE="Automation Task Already Exists" + echo_info + CRON_EXIST='1' + fi + + MESSAGE="Configuring Hourly Smart Sync" + echo_info - if [[ $1 =~ ^[0-9][0-9]?$ ]] - then - INPUT_AUTO_FREQ=$1 - else - MESSAGE="Sync Frequency in Minutes (1-30) or 0 to Disable" - echo_need - read INPUT_AUTO_FREQ - fi + if [[ $1 =~ ^[0-9][0-9]?$ ]] + then + INPUT_AUTO_FREQ=$1 + else + MESSAGE="Sync Frequency in Minutes (1-30) or 0 to Disable" + echo_need + read INPUT_AUTO_FREQ + fi - if [ $INPUT_AUTO_FREQ -gt 30 ] - then - MESSAGE="Invalid Frequency Range" - echo_fail - exit_nochange - elif [ $INPUT_AUTO_FREQ -lt 1 ] - then - if [ $CRON_EXIST == 1 ] - then - clear_cron + if [ $INPUT_AUTO_FREQ -gt 30 ] + then + MESSAGE="Invalid Frequency Range" + echo_fail + exit_nochange + elif [ $INPUT_AUTO_FREQ -lt 1 ] + then + if [ $CRON_EXIST == 1 ] + then + clear_cron - MESSAGE="Sync Automation Disabled" - echo_warn - else - MESSAGE="No Sync Automation Scheduled" - echo_warn - fi - else - if [ $CRON_EXIST == 1 ] - then - clear_cron - fi + MESSAGE="Sync Automation Disabled" + echo_warn + else + MESSAGE="No Sync Automation Scheduled" + echo_warn + fi + else + if [ $CRON_EXIST == 1 ] + then + clear_cron + fi - MESSAGE="Saving New Sync Automation" - echo_stat - (crontab -l 2>/dev/null; echo "*/${INPUT_AUTO_FREQ} * * * * ${BASH_PATH} ${LOCAL_FOLDR}/${GS_FILENAME} smart > ${LOG_PATH}/${CRONJOB_LOG}") | crontab - - error_validate - fi + MESSAGE="Saving New Sync Automation" + echo_stat + (crontab -l 2>/dev/null; echo "*/${INPUT_AUTO_FREQ} * * * * ${BASH_PATH} ${LOCAL_FOLDR}/${GS_FILENAME} smart > ${LOG_PATH}/${CRONJOB_LOG}") | crontab - + error_validate + fi - MESSAGE="Configuring Daily Backup Frequency" - echo_info + MESSAGE="Configuring Daily Backup Frequency" + echo_info - if [[ $2 =~ ^[0-9][0-9]?$ ]] - then - INPUT_AUTO_BACKUP=$2 - else - MESSAGE="Hour of Day to Backup (1-24) or 0 to Disable" - echo_need - read INPUT_AUTO_BACKUP - fi + if [[ $2 =~ ^[0-9][0-9]?$ ]] + then + INPUT_AUTO_BACKUP=$2 + else + MESSAGE="Hour of Day to Backup (1-24) or 0 to Disable" + echo_need + read INPUT_AUTO_BACKUP + fi - if [ $INPUT_AUTO_BACKUP -gt 24 ] - then - MESSAGE="Invalid Frequency Range" - echo_fail - exit_nochange - elif [ $INPUT_AUTO_BACKUP -lt 1 ] - then - MESSAGE="No Backup Automation Scheduled" - echo_warn - else - MESSAGE="Saving New Backup Automation" - echo_stat - (crontab -l 2>/dev/null; echo "0 ${INPUT_AUTO_BACKUP} * * * ${BASH_PATH} ${LOCAL_FOLDR}/${GS_FILENAME} backup >/dev/null 2>&1") | crontab - - error_validate - fi + if [ $INPUT_AUTO_BACKUP -gt 24 ] + then + MESSAGE="Invalid Frequency Range" + echo_fail + exit_nochange + elif [ $INPUT_AUTO_BACKUP -lt 1 ] + then + MESSAGE="No Backup Automation Scheduled" + echo_warn + else + MESSAGE="Saving New Backup Automation" + echo_stat + (crontab -l 2>/dev/null; echo "0 ${INPUT_AUTO_BACKUP} * * * ${BASH_PATH} ${LOCAL_FOLDR}/${GS_FILENAME} backup >/dev/null 2>&1") | crontab - + error_validate + fi - exit_withchange + exit_withchange } ## Clear Existing Automation Settings function clear_cron { - MESSAGE="Removing Existing Automation" - echo_stat + MESSAGE="Removing Existing Automation" + echo_stat - crontab -l > cronjob-old.tmp - sed "/${GS_FILENAME}/d" cronjob-old.tmp > cronjob-new.tmp - crontab cronjob-new.tmp 2>/dev/null - error_validate - rm cronjob-old.tmp - rm cronjob-new.tmp + crontab -l > cronjob-old.tmp + sed "/${GS_FILENAME}/d" cronjob-old.tmp > cronjob-new.tmp + crontab cronjob-new.tmp 2>/dev/null + error_validate + rm cronjob-old.tmp + rm cronjob-new.tmp } ## Cron Task function task_cron { - TASKTYPE='CRON' - MESSAGE="${MESSAGE}: ${TASKTYPE} Requested" - echo_good - - show_crontab + TASKTYPE='CRON' + MESSAGE="${MESSAGE}: ${TASKTYPE} Requested" + echo_good + + show_crontab } \ No newline at end of file diff --git a/includes/gs-backup.sh b/includes/gs-backup.sh index 4987606..3ff69a7 100644 --- a/includes/gs-backup.sh +++ b/includes/gs-backup.sh @@ -6,70 +6,70 @@ ## Backup Task function task_backup { - TASKTYPE='BACKUP' - MESSAGE="${MESSAGE}: ${TASKTYPE} Requested" - echo_good + TASKTYPE='BACKUP' + MESSAGE="${MESSAGE}: ${TASKTYPE} Requested" + echo_good - backup_settime - backup_local_gravity - backup_local_custom - backup_cleanup - - logs_export - exit_withchange + backup_settime + backup_local_gravity + backup_local_custom + backup_cleanup + + logs_export + exit_withchange } function backup_settime { - BACKUPTIMESTAMP=$(date +%F-%H%M%S) + BACKUPTIMESTAMP=$(date +%F-%H%M%S) } function backup_local_gravity { - MESSAGE="Performing Backup of Local ${GRAVITY_FI}" - echo_stat - - sqlite3 ${PIHOLE_DIR}/${GRAVITY_FI} ".backup '${LOCAL_FOLDR}/${BACKUP_FOLD}/${BACKUPTIMESTAMP}-${GRAVITY_FI}.backup'" - error_validate + MESSAGE="Performing Backup of Local ${GRAVITY_FI}" + echo_stat + + sqlite3 ${PIHOLE_DIR}/${GRAVITY_FI} ".backup '${LOCAL_FOLDR}/${BACKUP_FOLD}/${BACKUPTIMESTAMP}-${GRAVITY_FI}.backup'" + error_validate } function backup_local_custom { - if [ "$SKIP_CUSTOM" != '1' ] - then - if [ -f ${PIHOLE_DIR}/${CUSTOM_DNS} ] - then - MESSAGE="Performing Backup Up Local ${CUSTOM_DNS}" - echo_stat + if [ "$SKIP_CUSTOM" != '1' ] + then + if [ -f ${PIHOLE_DIR}/${CUSTOM_DNS} ] + then + MESSAGE="Performing Backup Up Local ${CUSTOM_DNS}" + echo_stat - cp ${PIHOLE_DIR}/${CUSTOM_DNS} ${LOCAL_FOLDR}/${BACKUP_FOLD}/${BACKUPTIMESTAMP}-${CUSTOM_DNS}.backup - error_validate - fi - fi + cp ${PIHOLE_DIR}/${CUSTOM_DNS} ${LOCAL_FOLDR}/${BACKUP_FOLD}/${BACKUPTIMESTAMP}-${CUSTOM_DNS}.backup + error_validate + fi + fi } function backup_remote_gravity { - MESSAGE="Performing Backup of Remote ${GRAVITY_FI}" - echo_stat - - CMD_TIMEOUT='60' - CMD_REQUESTED="sudo sqlite3 ${RIHOLE_DIR}/${GRAVITY_FI} \".backup '${RIHOLE_DIR}/${GRAVITY_FI}.backup'\"" - create_sshcmd + MESSAGE="Performing Backup of Remote ${GRAVITY_FI}" + echo_stat + + CMD_TIMEOUT='60' + CMD_REQUESTED="sudo sqlite3 ${RIHOLE_DIR}/${GRAVITY_FI} \".backup '${RIHOLE_DIR}/${GRAVITY_FI}.backup'\"" + create_sshcmd } function backup_remote_custom { - if [ "$SKIP_CUSTOM" != '1' ] - then - MESSAGE="Performing Backup of Remote ${CUSTOM_DNS}" - echo_stat - - CMD_TIMEOUT='15' - CMD_REQUESTED="sudo cp ${RIHOLE_DIR}/${CUSTOM_DNS} ${RIHOLE_DIR}/${CUSTOM_DNS}.backup" - create_sshcmd - fi + if [ "$SKIP_CUSTOM" != '1' ] + then + MESSAGE="Performing Backup of Remote ${CUSTOM_DNS}" + echo_stat + + CMD_TIMEOUT='15' + CMD_REQUESTED="sudo cp ${RIHOLE_DIR}/${CUSTOM_DNS} ${RIHOLE_DIR}/${CUSTOM_DNS}.backup" + create_sshcmd + fi } function backup_cleanup { - MESSAGE="Cleaning Up Old Backups" - echo_stat + MESSAGE="Cleaning Up Old Backups" + echo_stat - find ${LOCAL_FOLDR}/${BACKUP_FOLD}/$(date +%Y)*.backup -mtime +${BACKUP_RETAIN} -type f -delete - error_validate + find ${LOCAL_FOLDR}/${BACKUP_FOLD}/$(date +%Y)*.backup -mtime +${BACKUP_RETAIN} -type f -delete + error_validate } \ No newline at end of file diff --git a/includes/gs-colors.sh b/includes/gs-colors.sh index 36e5a2f..7aa0ef2 100644 --- a/includes/gs-colors.sh +++ b/includes/gs-colors.sh @@ -25,30 +25,30 @@ NEED="[${BLUE}?${NC}]" ## Echo Stack ### Informative function echo_info { - echo -e "${INFO} ${YELLOW}${MESSAGE}${NC}" + echo -e "${INFO} ${YELLOW}${MESSAGE}${NC}" } ### Warning function echo_warn { - echo -e "${WARN} ${PURPLE}${MESSAGE}${NC}" + echo -e "${WARN} ${PURPLE}${MESSAGE}${NC}" } ### Executing function echo_stat { - echo -en "${STAT} ${MESSAGE}" + echo -en "${STAT} ${MESSAGE}" } ### Success function echo_good { - echo -e "\r${GOOD} ${MESSAGE}" + echo -e "\r${GOOD} ${MESSAGE}" } ### Failure function echo_fail { - echo -e "\r${FAIL} ${MESSAGE}" + echo -e "\r${FAIL} ${MESSAGE}" } ### Request function echo_need { - echo -en "${NEED} ${MESSAGE}: " + echo -en "${NEED} ${MESSAGE}: " } \ No newline at end of file diff --git a/includes/gs-compare.sh b/includes/gs-compare.sh index dba1f7d..bb9e862 100644 --- a/includes/gs-compare.sh +++ b/includes/gs-compare.sh @@ -1,15 +1,15 @@ ## Compare Task function task_compare { - TASKTYPE='COMPARE' - MESSAGE="${MESSAGE}: ${TASKTYPE} Requested" - echo_good + TASKTYPE='COMPARE' + MESSAGE="${MESSAGE}: ${TASKTYPE} Requested" + echo_good - show_target - validate_gs_folders - validate_ph_folders - validate_os_sshpass - - previous_md5 - md5_compare - exit_withchange + show_target + validate_gs_folders + validate_ph_folders + validate_os_sshpass + + previous_md5 + md5_compare + exit_withchange } \ No newline at end of file diff --git a/includes/gs-config.sh b/includes/gs-config.sh index f66c659..a4aa16d 100644 --- a/includes/gs-config.sh +++ b/includes/gs-config.sh @@ -6,346 +6,346 @@ ## Configure Task function task_configure { - TASKTYPE='CONFIGURE' - MESSAGE="${MESSAGE}: ${TASKTYPE} Requested" - echo_good - - if [ -f ${LOCAL_FOLDR}/${CONFIG_FILE} ] - then - config_delete - else - config_generate - fi + TASKTYPE='CONFIGURE' + MESSAGE="${MESSAGE}: ${TASKTYPE} Requested" + echo_good + + if [ -f ${LOCAL_FOLDR}/${CONFIG_FILE} ] + then + config_delete + else + config_generate + fi - # backup_settime - # backup_local_gravity - # backup_local_custom - # backup_cleanup - - create_alias - - exit_withchange + # backup_settime + # backup_local_gravity + # backup_local_custom + # backup_cleanup + + create_alias + + exit_withchange } ## Generate New Configuration function config_generate { - # detect_ssh - - MESSAGE="Creating New ${CONFIG_FILE} from Template" - echo_stat - cp ${LOCAL_FOLDR}/${CONFIG_FILE}.example ${LOCAL_FOLDR}/${CONFIG_FILE} - error_validate - - docker_detect - if [ "${DOCKERREADY}" == "1" ] - then - MESSAGE="Advanced Configuration Required" - echo_info - advanced_config_generate - else - MESSAGE="Use Advanced Installation Options? (Leave blank for default 'No')" - echo_need - read INPUT_ADVANCED_INSTALL - INPUT_ADVANCED_INSTALL="${INPUT_ADVANCED_INSTALL:-N}" - - if [ "${INPUT_ADVANCED_INSTALL}" != "N" ] - then - MESSAGE="Advanced Configuration Selected" - echo_info - - advanced_config_generate - fi - fi - - MESSAGE="Standard Settings" - echo_info + # detect_ssh + + MESSAGE="Creating New ${CONFIG_FILE} from Template" + echo_stat + cp ${LOCAL_FOLDR}/${CONFIG_FILE}.example ${LOCAL_FOLDR}/${CONFIG_FILE} + error_validate + + docker_detect + if [ "${DOCKERREADY}" == "1" ] + then + MESSAGE="Advanced Configuration Required" + echo_info + advanced_config_generate + else + MESSAGE="Use Advanced Installation Options? (Leave blank for default 'No')" + echo_need + read INPUT_ADVANCED_INSTALL + INPUT_ADVANCED_INSTALL="${INPUT_ADVANCED_INSTALL:-N}" + + if [ "${INPUT_ADVANCED_INSTALL}" != "N" ] + then + MESSAGE="Advanced Configuration Selected" + echo_info + + advanced_config_generate + fi + fi + + MESSAGE="Standard Settings" + echo_info - MESSAGE="Primary Pi-hole Address (IP or DNS)" - echo_need - read INPUT_REMOTE_HOST + MESSAGE="Primary Pi-hole Address (IP or DNS)" + echo_need + read INPUT_REMOTE_HOST - if [ "${PING_AVOID}" != "1" ] - then - MESSAGE="Testing Network Connection (ICMP)" - echo_stat - ping -c 3 ${INPUT_REMOTE_HOST} >/dev/null 2>&1 - error_validate - else - MESSAGE="Bypassing Network Testing (ICMP)" - echo_warn - fi - - MESSAGE="SSH User for ${INPUT_REMOTE_HOST}" - echo_need - read INPUT_REMOTE_USER - - MESSAGE="Saving Host to ${CONFIG_FILE}" - echo_stat - sed -i "/REMOTE_HOST='192.168.1.10'/c\REMOTE_HOST='${INPUT_REMOTE_HOST}'" ${LOCAL_FOLDR}/${CONFIG_FILE} - error_validate - - MESSAGE="Saving User to ${CONFIG_FILE}" - echo_stat - sed -i "/REMOTE_USER='pi'/c\REMOTE_USER='${INPUT_REMOTE_USER}'" ${LOCAL_FOLDR}/${CONFIG_FILE} - error_validate + if [ "${PING_AVOID}" != "1" ] + then + MESSAGE="Testing Network Connection (ICMP)" + echo_stat + ping -c 3 ${INPUT_REMOTE_HOST} >/dev/null 2>&1 + error_validate + else + MESSAGE="Bypassing Network Testing (ICMP)" + echo_warn + fi + + MESSAGE="SSH User for ${INPUT_REMOTE_HOST}" + echo_need + read INPUT_REMOTE_USER + + MESSAGE="Saving Host to ${CONFIG_FILE}" + echo_stat + sed -i "/REMOTE_HOST='192.168.1.10'/c\REMOTE_HOST='${INPUT_REMOTE_HOST}'" ${LOCAL_FOLDR}/${CONFIG_FILE} + error_validate + + MESSAGE="Saving User to ${CONFIG_FILE}" + echo_stat + sed -i "/REMOTE_USER='pi'/c\REMOTE_USER='${INPUT_REMOTE_USER}'" ${LOCAL_FOLDR}/${CONFIG_FILE} + error_validate - generate_sshkey - - MESSAGE="Importing New ${CONFIG_FILE}" - echo_stat - source ${LOCAL_FOLDR}/${CONFIG_FILE} - error_validate + generate_sshkey + + MESSAGE="Importing New ${CONFIG_FILE}" + echo_stat + source ${LOCAL_FOLDR}/${CONFIG_FILE} + error_validate - export_sshkey - - # MESSAGE="Testing Configuration" - # echo_info + export_sshkey + + # MESSAGE="Testing Configuration" + # echo_info - # validate_os_sshpass - # validate_sqlite3 + # validate_os_sshpass + # validate_sqlite3 - # detect_remotersync + # detect_remotersync } ## Advanced Configuration Options function advanced_config_generate { - MESSAGE="Local Pi-hole in Docker Container? (Leave blank for default 'No')" - echo_need - read INPUT_PH_IN_TYPE - INPUT_PH_IN_TYPE="${INPUT_PH_IN_TYPE:-N}" - - if [ "${INPUT_PH_IN_TYPE}" != "N" ] - then - MESSAGE="Saving Local Docker Setting to ${CONFIG_FILE}" - echo_stat - sed -i "/# PH_IN_TYPE=''/c\PH_IN_TYPE='docker'" ${LOCAL_FOLDR}/${CONFIG_FILE} - error_validate - - MESSAGE="Local Docker Container Name? (Leave blank for default 'pihole')" - echo_need - read INPUT_DOCKER_CON - INPUT_DOCKER_CON="${INPUT_DOCKER_CON:-pihole}" - - if [ "${INPUT_DOCKER_CON}" != "pihole" ] - then - MESSAGE="Saving Local Container Name to ${CONFIG_FILE}" - echo_stat - sed -i "/# DOCKER_CON=''/c\DOCKER_CON='${INPUT_DOCKER_CON}'" ${LOCAL_FOLDR}/${CONFIG_FILE} - error_validate - fi - - MESSAGE="Local Pi-hole 'etc' Volume Path? (Required, no trailing slash)" - echo_need - read INPUT_PIHOLE_DIR - - if [ "${INPUT_PIHOLE_DIR}" != "" ] - then - MESSAGE="Saving Local Pi-hole Volume to ${CONFIG_FILE}" - echo_stat - sed -i "/# PIHOLE_DIR=''/c\PIHOLE_DIR='${INPUT_PIHOLE_DIR}'" ${LOCAL_FOLDR}/${CONFIG_FILE} - error_validate - SKIP_PIHOLE_DIR="1" - else - MESSAGE="This setting is required!" - echo_warn - exit_withchanges - fi - - MESSAGE="Saving Local Volume Ownership to ${CONFIG_FILE}" - echo_stat - sed -i "/# FILE_OWNER=''/c\FILE_OWNER='named:docker'" ${LOCAL_FOLDR}/${CONFIG_FILE} - error_validate - fi - - MESSAGE="Remote Pi-hole in Docker Container? (Leave blank for default 'No')" - echo_need - read INPUT_RH_IN_TYPE - INPUT_RH_IN_TYPE="${INPUT_RH_IN_TYPE:-N}" - - if [ "${INPUT_RH_IN_TYPE}" != "N" ] - then - MESSAGE="Saving Remote Docker Setting to ${CONFIG_FILE}" - echo_stat - sed -i "/# RH_IN_TYPE=''/c\RH_IN_TYPE='docker'" ${LOCAL_FOLDR}/${CONFIG_FILE} - error_validate - - MESSAGE="Remote Docker Container Name? (Leave blank for default 'pihole')" - echo_need - read INPUT_ROCKER_CON - INPUT_ROCKER_CON="${INPUT_ROCKER_CON:-pihole}" - - if [ "${INPUT_ROCKER_CON}" != "pihole" ] - then - MESSAGE="Saving Remote Container Name to ${CONFIG_FILE}" - echo_stat - sed -i "/# ROCKER_CON=''/c\ROCKER_CON='${INPUT_ROCKER_CON}'" ${LOCAL_FOLDR}/${CONFIG_FILE} - error_validate - fi - - MESSAGE="Remote Pi-hole 'etc' Volume Path? (Required, no trailing slash)" - echo_need - read INPUT_RIHOLE_DIR - - if [ "${INPUT_RIHOLE_DIR}" != "" ] - then - MESSAGE="Saving Remote Pi-hole Volume to ${CONFIG_FILE}" - echo_stat - sed -i "/# RIHOLE_DIR=''/c\RIHOLE_DIR='${INPUT_RIHOLE_DIR}'" ${LOCAL_FOLDR}/${CONFIG_FILE} - error_validate - SKIP_RIHOLE_DIR="1" - else - MESSAGE="This setting is required!" - echo_warn - exit_withchanges - fi - - MESSAGE="Saving Remote Volume Ownership to ${CONFIG_FILE}" - echo_stat - sed -i "/# RILE_OWNER=''/c\RILE_OWNER='named:docker'" ${LOCAL_FOLDR}/${CONFIG_FILE} - error_validate - fi - - - if [ $SKIP_PIHOLE_DIR != "1" ] - then - MESSAGE="Local Pi-hole Settings Directory Path? (Leave blank for default '/etc/pihole')" - echo_need - read INPUT_PIHOLE_DIR - INPUT_PIHOLE_DIR="${INPUT_PIHOLE_DIR:-/etc/pihole}" - - if [ "${INPUT_PIHOLE_DIR}" != "/etc/pihole" ] - then - MESSAGE="Saving Local Pi-hole Settings Directory Path to ${CONFIG_FILE}" - echo_stat - sed -i "/# PIHOLE_DIR=''/c\PIHOLE_DIR='${INPUT_PIHOLE_DIR}'" ${LOCAL_FOLDR}/${CONFIG_FILE} - error_validate - fi - fi - - if [ "$SKIP_RIHOLE_DIR" != "1" ] - then - MESSAGE="Remote Pi-hole Settings Directory Path? (Leave blank for default '/etc/pihole')" - echo_need - read INPUT_RIHOLE_DIR - INPUT_RIHOLE_DIR="${INPUT_RIHOLE_DIR:-/etc/pihole}" - - if [ "${INPUT_RIHOLE_DIR}" != "/etc/pihole" ] - then - MESSAGE="Saving Remote Pi-hole Settings Directory Path to ${CONFIG_FILE}" - echo_stat - sed -i "/# RIHOLE_DIR=''/c\RIHOLE_DIR='${INPUT_RIHOLE_DIR}'" ${LOCAL_FOLDR}/${CONFIG_FILE} - error_validate - fi - fi - - MESSAGE="Use Custom SSH Port? (Leave blank for default '22')" - echo_need - read INPUT_SSH_PORT - INPUT_SSH_PORT="${INPUT_SSH_PORT:-22}" - SSH_PORT="${INPUT_SSH_PORT}" - - if [ "${INPUT_SSH_PORT}" != "22" ] - then - MESSAGE="Saving Custom SSH Port to ${CONFIG_FILE}" - echo_stat - sed -i "/# SSH_PORT=''/c\SSH_PORT='${INPUT_SSH_PORT}'" ${LOCAL_FOLDR}/${CONFIG_FILE} - error_validate - fi - - MESSAGE="Enable ICMP Check? (Leave blank for default 'Yes')" - echo_need - read INPUT_PING_AVOID - INPUT_PING_AVOID="${INPUT_PING_AVOID:-Y}" - - if [ "${INPUT_PING_AVOID}" != "Y" ] - then - MESSAGE="Saving ICMP Avoidance to ${CONFIG_FILE}" - echo_stat - sed -i "/# PING_AVOID=''/c\PING_AVOID='1'" ${LOCAL_FOLDR}/${CONFIG_FILE} - error_validate - PING_AVOID=1 - fi - - MESSAGE="Use Custom SSH PKIF Location? (Leave blank for default '.ssh/id_rsa')" - echo_need - read INPUT_CUSTOM_PKIF - INPUT_CUSTOM_PKIF="${INPUT_CUSTOM_PKIF:-.ssh/id_rsa}" - - if [ "${INPUT_CUSTOM_PKIF}" != ".ssh/id_rsa" ] - then - MESSAGE="Saving Custom PKIF to ${CONFIG_FILE}" - echo_stat - sed -i "/# SSH_PKIF=''/c\SSH_PKIF='${INPUT_CUSTOM_PKIF}'" ${LOCAL_FOLDR}/${CONFIG_FILE} - error_validate - fi - - MESSAGE="Enable Replicate 'Local DNS Records' Feature? (Leave blank for default 'Yes')" - echo_need - read INPUT_SKIP_CUSTOM - INPUT_SKIP_CUSTOM="${INPUT_SKIP_CUSTOM:-Y}" - - if [ "${INPUT_SKIP_CUSTOM}" != "Y" ] - then - MESSAGE="Saving Local DNS Preference to ${CONFIG_FILE}" - echo_stat - sed -i "/# SKIP_CUSTOM=''/c\SKIP_CUSTOM='1'" ${LOCAL_FOLDR}/${CONFIG_FILE} - error_validate - fi - - MESSAGE="Change Backup Retention in Days? (Leave blank for default '7')" - echo_need - read INPUT_BACKUP_RETAIN - INPUT_BACKUP_RETAIN="${INPUT_BACKUP_RETAIN:-7}" - - if [ "${INPUT_BACKUP_RETAIN}" != "7" ] - then - MESSAGE="Saving Backup Retention to ${CONFIG_FILE}" - echo_stat - sed -i "/# BACKUP_RETAIN=''/c\BACKUP_RETAIN='1'" ${LOCAL_FOLDR}/${CONFIG_FILE} - error_validate - fi + MESSAGE="Local Pi-hole in Docker Container? (Leave blank for default 'No')" + echo_need + read INPUT_PH_IN_TYPE + INPUT_PH_IN_TYPE="${INPUT_PH_IN_TYPE:-N}" + + if [ "${INPUT_PH_IN_TYPE}" != "N" ] + then + MESSAGE="Saving Local Docker Setting to ${CONFIG_FILE}" + echo_stat + sed -i "/# PH_IN_TYPE=''/c\PH_IN_TYPE='docker'" ${LOCAL_FOLDR}/${CONFIG_FILE} + error_validate + + MESSAGE="Local Docker Container Name? (Leave blank for default 'pihole')" + echo_need + read INPUT_DOCKER_CON + INPUT_DOCKER_CON="${INPUT_DOCKER_CON:-pihole}" + + if [ "${INPUT_DOCKER_CON}" != "pihole" ] + then + MESSAGE="Saving Local Container Name to ${CONFIG_FILE}" + echo_stat + sed -i "/# DOCKER_CON=''/c\DOCKER_CON='${INPUT_DOCKER_CON}'" ${LOCAL_FOLDR}/${CONFIG_FILE} + error_validate + fi + + MESSAGE="Local Pi-hole 'etc' Volume Path? (Required, no trailing slash)" + echo_need + read INPUT_PIHOLE_DIR + + if [ "${INPUT_PIHOLE_DIR}" != "" ] + then + MESSAGE="Saving Local Pi-hole Volume to ${CONFIG_FILE}" + echo_stat + sed -i "/# PIHOLE_DIR=''/c\PIHOLE_DIR='${INPUT_PIHOLE_DIR}'" ${LOCAL_FOLDR}/${CONFIG_FILE} + error_validate + SKIP_PIHOLE_DIR="1" + else + MESSAGE="This setting is required!" + echo_warn + exit_withchanges + fi + + MESSAGE="Saving Local Volume Ownership to ${CONFIG_FILE}" + echo_stat + sed -i "/# FILE_OWNER=''/c\FILE_OWNER='named:docker'" ${LOCAL_FOLDR}/${CONFIG_FILE} + error_validate + fi + + MESSAGE="Remote Pi-hole in Docker Container? (Leave blank for default 'No')" + echo_need + read INPUT_RH_IN_TYPE + INPUT_RH_IN_TYPE="${INPUT_RH_IN_TYPE:-N}" + + if [ "${INPUT_RH_IN_TYPE}" != "N" ] + then + MESSAGE="Saving Remote Docker Setting to ${CONFIG_FILE}" + echo_stat + sed -i "/# RH_IN_TYPE=''/c\RH_IN_TYPE='docker'" ${LOCAL_FOLDR}/${CONFIG_FILE} + error_validate + + MESSAGE="Remote Docker Container Name? (Leave blank for default 'pihole')" + echo_need + read INPUT_ROCKER_CON + INPUT_ROCKER_CON="${INPUT_ROCKER_CON:-pihole}" + + if [ "${INPUT_ROCKER_CON}" != "pihole" ] + then + MESSAGE="Saving Remote Container Name to ${CONFIG_FILE}" + echo_stat + sed -i "/# ROCKER_CON=''/c\ROCKER_CON='${INPUT_ROCKER_CON}'" ${LOCAL_FOLDR}/${CONFIG_FILE} + error_validate + fi + + MESSAGE="Remote Pi-hole 'etc' Volume Path? (Required, no trailing slash)" + echo_need + read INPUT_RIHOLE_DIR + + if [ "${INPUT_RIHOLE_DIR}" != "" ] + then + MESSAGE="Saving Remote Pi-hole Volume to ${CONFIG_FILE}" + echo_stat + sed -i "/# RIHOLE_DIR=''/c\RIHOLE_DIR='${INPUT_RIHOLE_DIR}'" ${LOCAL_FOLDR}/${CONFIG_FILE} + error_validate + SKIP_RIHOLE_DIR="1" + else + MESSAGE="This setting is required!" + echo_warn + exit_withchanges + fi + + MESSAGE="Saving Remote Volume Ownership to ${CONFIG_FILE}" + echo_stat + sed -i "/# RILE_OWNER=''/c\RILE_OWNER='named:docker'" ${LOCAL_FOLDR}/${CONFIG_FILE} + error_validate + fi + + + if [ $SKIP_PIHOLE_DIR != "1" ] + then + MESSAGE="Local Pi-hole Settings Directory Path? (Leave blank for default '/etc/pihole')" + echo_need + read INPUT_PIHOLE_DIR + INPUT_PIHOLE_DIR="${INPUT_PIHOLE_DIR:-/etc/pihole}" + + if [ "${INPUT_PIHOLE_DIR}" != "/etc/pihole" ] + then + MESSAGE="Saving Local Pi-hole Settings Directory Path to ${CONFIG_FILE}" + echo_stat + sed -i "/# PIHOLE_DIR=''/c\PIHOLE_DIR='${INPUT_PIHOLE_DIR}'" ${LOCAL_FOLDR}/${CONFIG_FILE} + error_validate + fi + fi + + if [ "$SKIP_RIHOLE_DIR" != "1" ] + then + MESSAGE="Remote Pi-hole Settings Directory Path? (Leave blank for default '/etc/pihole')" + echo_need + read INPUT_RIHOLE_DIR + INPUT_RIHOLE_DIR="${INPUT_RIHOLE_DIR:-/etc/pihole}" + + if [ "${INPUT_RIHOLE_DIR}" != "/etc/pihole" ] + then + MESSAGE="Saving Remote Pi-hole Settings Directory Path to ${CONFIG_FILE}" + echo_stat + sed -i "/# RIHOLE_DIR=''/c\RIHOLE_DIR='${INPUT_RIHOLE_DIR}'" ${LOCAL_FOLDR}/${CONFIG_FILE} + error_validate + fi + fi + + MESSAGE="Use Custom SSH Port? (Leave blank for default '22')" + echo_need + read INPUT_SSH_PORT + INPUT_SSH_PORT="${INPUT_SSH_PORT:-22}" + SSH_PORT="${INPUT_SSH_PORT}" + + if [ "${INPUT_SSH_PORT}" != "22" ] + then + MESSAGE="Saving Custom SSH Port to ${CONFIG_FILE}" + echo_stat + sed -i "/# SSH_PORT=''/c\SSH_PORT='${INPUT_SSH_PORT}'" ${LOCAL_FOLDR}/${CONFIG_FILE} + error_validate + fi + + MESSAGE="Enable ICMP Check? (Leave blank for default 'Yes')" + echo_need + read INPUT_PING_AVOID + INPUT_PING_AVOID="${INPUT_PING_AVOID:-Y}" + + if [ "${INPUT_PING_AVOID}" != "Y" ] + then + MESSAGE="Saving ICMP Avoidance to ${CONFIG_FILE}" + echo_stat + sed -i "/# PING_AVOID=''/c\PING_AVOID='1'" ${LOCAL_FOLDR}/${CONFIG_FILE} + error_validate + PING_AVOID=1 + fi + + MESSAGE="Use Custom SSH PKIF Location? (Leave blank for default '.ssh/id_rsa')" + echo_need + read INPUT_CUSTOM_PKIF + INPUT_CUSTOM_PKIF="${INPUT_CUSTOM_PKIF:-.ssh/id_rsa}" + + if [ "${INPUT_CUSTOM_PKIF}" != ".ssh/id_rsa" ] + then + MESSAGE="Saving Custom PKIF to ${CONFIG_FILE}" + echo_stat + sed -i "/# SSH_PKIF=''/c\SSH_PKIF='${INPUT_CUSTOM_PKIF}'" ${LOCAL_FOLDR}/${CONFIG_FILE} + error_validate + fi + + MESSAGE="Enable Replicate 'Local DNS Records' Feature? (Leave blank for default 'Yes')" + echo_need + read INPUT_SKIP_CUSTOM + INPUT_SKIP_CUSTOM="${INPUT_SKIP_CUSTOM:-Y}" + + if [ "${INPUT_SKIP_CUSTOM}" != "Y" ] + then + MESSAGE="Saving Local DNS Preference to ${CONFIG_FILE}" + echo_stat + sed -i "/# SKIP_CUSTOM=''/c\SKIP_CUSTOM='1'" ${LOCAL_FOLDR}/${CONFIG_FILE} + error_validate + fi + + MESSAGE="Change Backup Retention in Days? (Leave blank for default '7')" + echo_need + read INPUT_BACKUP_RETAIN + INPUT_BACKUP_RETAIN="${INPUT_BACKUP_RETAIN:-7}" + + if [ "${INPUT_BACKUP_RETAIN}" != "7" ] + then + MESSAGE="Saving Backup Retention to ${CONFIG_FILE}" + echo_stat + sed -i "/# BACKUP_RETAIN=''/c\BACKUP_RETAIN='1'" ${LOCAL_FOLDR}/${CONFIG_FILE} + error_validate + fi } ## Delete Existing Configuration function config_delete { - source ${LOCAL_FOLDR}/${CONFIG_FILE} - MESSAGE="Configuration File Exists" - echo_warn - - echo -e "========================================================" - cat ${LOCAL_FOLDR}/${CONFIG_FILE} - echo -e "========================================================" - - MESSAGE="Are you sure you want to erase this configuration?" - echo_warn + source ${LOCAL_FOLDR}/${CONFIG_FILE} + MESSAGE="Configuration File Exists" + echo_warn + + echo -e "========================================================" + cat ${LOCAL_FOLDR}/${CONFIG_FILE} + echo -e "========================================================" + + MESSAGE="Are you sure you want to erase this configuration?" + echo_warn - intent_validate + intent_validate - MESSAGE="Erasing Existing Configuration" - echo_stat - rm -f ${LOCAL_FOLDR}/${CONFIG_FILE} - error_validate + MESSAGE="Erasing Existing Configuration" + echo_stat + rm -f ${LOCAL_FOLDR}/${CONFIG_FILE} + error_validate - config_generate + config_generate } ## Detect Docker function docker_detect { - if hash docker 2>/dev/null - then - FTLCHECK=$(sudo docker container ls | grep 'pihole/pihole') - if [ "$FTLCHECK" != "" ] - then - DOCKERREADY="1" - fi - fi + if hash docker 2>/dev/null + then + FTLCHECK=$(sudo docker container ls | grep 'pihole/pihole') + if [ "$FTLCHECK" != "" ] + then + DOCKERREADY="1" + fi + fi } ## Create Bash Alias function create_alias { - MESSAGE="Creating Bash Alias" - echo_stat - - echo -e "alias gravity-sync='${GS_FILEPATH}'" | sudo tee -a /etc/bash.bashrc > /dev/null - error_validate + MESSAGE="Creating Bash Alias" + echo_stat + + echo -e "alias gravity-sync='${GS_FILEPATH}'" | sudo tee -a /etc/bash.bashrc > /dev/null + error_validate } \ No newline at end of file diff --git a/includes/gs-core.sh b/includes/gs-core.sh index 6abad37..faf3806 100644 --- a/includes/gs-core.sh +++ b/includes/gs-core.sh @@ -6,87 +6,87 @@ ## Import Settings function import_gs { - MESSAGE="Importing ${CONFIG_FILE} Settings" - echo -en "${STAT} $MESSAGE" - if [ -f ${LOCAL_FOLDR}/${CONFIG_FILE} ] - then - source ${LOCAL_FOLDR}/${CONFIG_FILE} - error_validate - - # MESSAGE="Targeting ${REMOTE_USER}@${REMOTE_HOST}" - # echo_info + MESSAGE="Importing ${CONFIG_FILE} Settings" + echo -en "${STAT} $MESSAGE" + if [ -f ${LOCAL_FOLDR}/${CONFIG_FILE} ] + then + source ${LOCAL_FOLDR}/${CONFIG_FILE} + error_validate + + # MESSAGE="Targeting ${REMOTE_USER}@${REMOTE_HOST}" + # echo_info - # detect_ssh - else - echo_fail - - MESSAGE="${CONFIG_FILE} Missing" - echo_info + # detect_ssh + else + echo_fail + + MESSAGE="${CONFIG_FILE} Missing" + echo_info - TASKTYPE='CONFIG' - config_generate - fi + TASKTYPE='CONFIG' + config_generate + fi } ## Invalid Tasks function task_invalid { - echo_fail - list_gs_arguments + echo_fail + list_gs_arguments } ## Error Validation function error_validate { - if [ "$?" != "0" ] - then - echo_fail - exit 1 - else - echo_good - fi + if [ "$?" != "0" ] + then + echo_fail + exit 1 + else + echo_good + fi } function ph_type { - if [ "$PH_IN_TYPE" == "default" ] - then - PH_EXEC="${PIHOLE_BIN}" - elif [ "$PH_IN_TYPE" == "docker" ] - then - PH_EXEC="${DOCKER_BIN} exec ${DOCKER_CON} pihole" - fi - - if [ "$RH_IN_TYPE" == "default" ] - then - RH_EXEC="${RIHOLE_BIN}" - elif [ "$RH_IN_TYPE" == "docker" ] - then - RH_EXEC="${ROCKER_BIN} exec ${DOCKER_CON} pihole" - fi + if [ "$PH_IN_TYPE" == "default" ] + then + PH_EXEC="${PIHOLE_BIN}" + elif [ "$PH_IN_TYPE" == "docker" ] + then + PH_EXEC="${DOCKER_BIN} exec ${DOCKER_CON} pihole" + fi + + if [ "$RH_IN_TYPE" == "default" ] + then + RH_EXEC="${RIHOLE_BIN}" + elif [ "$RH_IN_TYPE" == "docker" ] + then + RH_EXEC="${ROCKER_BIN} exec ${DOCKER_CON} pihole" + fi } # Standard Output function start_gs { - MESSAGE="${PROGRAM} ${VERSION} Executing" - echo_info - cd ${LOCAL_FOLDR} - - import_gs - ph_type + MESSAGE="${PROGRAM} ${VERSION} Executing" + echo_info + cd ${LOCAL_FOLDR} + + import_gs + ph_type - MESSAGE="Evaluating Arguments" - echo_stat + MESSAGE="Evaluating Arguments" + echo_stat - if [ "${ROOT_CHECK_AVOID}" != "1" ] - then - new_root_check - fi + if [ "${ROOT_CHECK_AVOID}" != "1" ] + then + new_root_check + fi } # Standard Output No Config function start_gs_noconfig { - MESSAGE="${PROGRAM} ${VERSION} Executing" - echo_info - cd ${LOCAL_FOLDR} + MESSAGE="${PROGRAM} ${VERSION} Executing" + echo_info + cd ${LOCAL_FOLDR} - MESSAGE="Evaluating Arguments" - echo_stat + MESSAGE="Evaluating Arguments" + echo_stat } \ No newline at end of file diff --git a/includes/gs-exit.sh b/includes/gs-exit.sh index 52198d5..e4fcf44 100644 --- a/includes/gs-exit.sh +++ b/includes/gs-exit.sh @@ -6,43 +6,43 @@ ## No Changes Made function exit_nochange { - SCRIPT_END=$SECONDS - MESSAGE="${PROGRAM} ${TASKTYPE} Aborting ($((SCRIPT_END-SCRIPT_START)) seconds)" - echo_info - exit 0 + SCRIPT_END=$SECONDS + MESSAGE="${PROGRAM} ${TASKTYPE} Aborting ($((SCRIPT_END-SCRIPT_START)) seconds)" + echo_info + exit 0 } ## Changes Made function exit_withchange { - SCRIPT_END=$SECONDS - MESSAGE="${PROGRAM} ${TASKTYPE} Completed ($((SCRIPT_END-SCRIPT_START)) seconds)" - echo_info - exit 0 + SCRIPT_END=$SECONDS + MESSAGE="${PROGRAM} ${TASKTYPE} Completed ($((SCRIPT_END-SCRIPT_START)) seconds)" + echo_info + exit 0 } ## List GS Arguments 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 " ${YELLOW}automate${NC} Add a scheduled pull task to crontab" - echo -e " ${YELLOW}update${NC} Update ${PROGRAM} to the latest version" - echo -e " ${YELLOW}version${NC} Display installed version of ${PROGRAM}" - echo -e " ${YELLOW}sudo${NC} Configure passwordless sudo for current user" - echo -e "" - echo -e "Replication Options:" - echo -e " ${YELLOW}smart${NC} Detect changes on each side and bring them together" - echo -e " ${YELLOW}pull${NC} Force remote configuration changes to this server" - echo -e " ${YELLOW}push${NC} Force local configuration made on this server back" - echo -e " ${YELLOW}restore${NC} Restore the ${GRAVITY_FI} on this server" - echo -e " ${YELLOW}backup${NC} Backup the ${GRAVITY_FI} on this server" - echo -e " ${YELLOW}compare${NC} Just check for differences" - echo -e "" - echo -e "Debug Options:" - 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 + 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 " ${YELLOW}automate${NC} Add a scheduled pull task to crontab" + echo -e " ${YELLOW}update${NC} Update ${PROGRAM} to the latest version" + echo -e " ${YELLOW}version${NC} Display installed version of ${PROGRAM}" + echo -e " ${YELLOW}sudo${NC} Configure passwordless sudo for current user" + echo -e "" + echo -e "Replication Options:" + echo -e " ${YELLOW}smart${NC} Detect changes on each side and bring them together" + echo -e " ${YELLOW}pull${NC} Force remote configuration changes to this server" + echo -e " ${YELLOW}push${NC} Force local configuration made on this server back" + echo -e " ${YELLOW}restore${NC} Restore the ${GRAVITY_FI} on this server" + echo -e " ${YELLOW}backup${NC} Backup the ${GRAVITY_FI} on this server" + echo -e " ${YELLOW}compare${NC} Just check for differences" + echo -e "" + echo -e "Debug Options:" + 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 } \ No newline at end of file diff --git a/includes/gs-hashing.sh b/includes/gs-hashing.sh index 8eed765..d4f8f0b 100644 --- a/includes/gs-hashing.sh +++ b/includes/gs-hashing.sh @@ -6,143 +6,143 @@ ## Validate Sync Required function md5_compare { - HASHMARK='0' + HASHMARK='0' - MESSAGE="Analyzing ${GRAVITY_FI} on ${REMOTE_HOST}" - echo_stat - primaryDBMD5=$(${SSHPASSWORD} ${SSH_CMD} -p ${SSH_PORT} -i "$HOME/${SSH_PKIF}" ${REMOTE_USER}@${REMOTE_HOST} "md5sum ${RIHOLE_DIR}/${GRAVITY_FI}" | sed 's/\s.*$//') - error_validate - - MESSAGE="Analyzing ${GRAVITY_FI} on $HOSTNAME" - echo_stat - secondDBMD5=$(md5sum ${PIHOLE_DIR}/${GRAVITY_FI} | sed 's/\s.*$//') - error_validate - - if [ "$primaryDBMD5" == "$last_primaryDBMD5" ] && [ "$secondDBMD5" == "$last_secondDBMD5" ] - then - HASHMARK=$((HASHMARK+0)) - else - MESSAGE="Differenced ${GRAVITY_FI} Detected" - echo_warn - HASHMARK=$((HASHMARK+1)) - fi + MESSAGE="Analyzing ${GRAVITY_FI} on ${REMOTE_HOST}" + echo_stat + primaryDBMD5=$(${SSHPASSWORD} ${SSH_CMD} -p ${SSH_PORT} -i "$HOME/${SSH_PKIF}" ${REMOTE_USER}@${REMOTE_HOST} "md5sum ${RIHOLE_DIR}/${GRAVITY_FI}" | sed 's/\s.*$//') + error_validate + + MESSAGE="Analyzing ${GRAVITY_FI} on $HOSTNAME" + echo_stat + secondDBMD5=$(md5sum ${PIHOLE_DIR}/${GRAVITY_FI} | sed 's/\s.*$//') + error_validate + + if [ "$primaryDBMD5" == "$last_primaryDBMD5" ] && [ "$secondDBMD5" == "$last_secondDBMD5" ] + then + HASHMARK=$((HASHMARK+0)) + else + MESSAGE="Differenced ${GRAVITY_FI} Detected" + echo_warn + HASHMARK=$((HASHMARK+1)) + fi - if [ "$SKIP_CUSTOM" != '1' ] - then - if [ -f ${PIHOLE_DIR}/${CUSTOM_DNS} ] - then - if ${SSHPASSWORD} ${SSH_CMD} -p ${SSH_PORT} -i "$HOME/${SSH_PKIF}" ${REMOTE_USER}@${REMOTE_HOST} test -e ${RIHOLE_DIR}/${CUSTOM_DNS} - then - REMOTE_CUSTOM_DNS="1" - MESSAGE="Analyzing ${CUSTOM_DNS} on ${REMOTE_HOST}" - echo_stat + if [ "$SKIP_CUSTOM" != '1' ] + then + if [ -f ${PIHOLE_DIR}/${CUSTOM_DNS} ] + then + if ${SSHPASSWORD} ${SSH_CMD} -p ${SSH_PORT} -i "$HOME/${SSH_PKIF}" ${REMOTE_USER}@${REMOTE_HOST} test -e ${RIHOLE_DIR}/${CUSTOM_DNS} + then + REMOTE_CUSTOM_DNS="1" + MESSAGE="Analyzing ${CUSTOM_DNS} on ${REMOTE_HOST}" + echo_stat - primaryCLMD5=$(${SSHPASSWORD} ${SSH_CMD} -p ${SSH_PORT} -i "$HOME/${SSH_PKIF}" ${REMOTE_USER}@${REMOTE_HOST} "md5sum ${RIHOLE_DIR}/${CUSTOM_DNS} | sed 's/\s.*$//'") - error_validate - - MESSAGE="Analyzing ${CUSTOM_DNS} on $HOSTNAME" - echo_stat - secondCLMD5=$(md5sum ${PIHOLE_DIR}/${CUSTOM_DNS} | sed 's/\s.*$//') - error_validate - - if [ "$primaryCLMD5" == "$last_primaryCLMD5" ] && [ "$secondCLMD5" == "$last_secondCLMD5" ] - then - HASHMARK=$((HASHMARK+0)) - else - MESSAGE="Differenced ${CUSTOM_DNS} Detected" - echo_warn - HASHMARK=$((HASHMARK+1)) - fi - else - MESSAGE="No ${CUSTOM_DNS} Detected on ${REMOTE_HOST}" - echo_info - fi - else - if ${SSHPASSWORD} ${SSH_CMD} -p ${SSH_PORT} -i "$HOME/${SSH_PKIF}" ${REMOTE_USER}@${REMOTE_HOST} test -e ${RIHOLE_DIR}/${CUSTOM_DNS} - then - REMOTE_CUSTOM_DNS="1" - MESSAGE="${REMOTE_HOST} has ${CUSTOM_DNS}" - HASHMARK=$((HASHMARK+1)) - echo_info - fi - MESSAGE="No ${CUSTOM_DNS} Detected on $HOSTNAME" - echo_info - fi - fi + primaryCLMD5=$(${SSHPASSWORD} ${SSH_CMD} -p ${SSH_PORT} -i "$HOME/${SSH_PKIF}" ${REMOTE_USER}@${REMOTE_HOST} "md5sum ${RIHOLE_DIR}/${CUSTOM_DNS} | sed 's/\s.*$//'") + error_validate + + MESSAGE="Analyzing ${CUSTOM_DNS} on $HOSTNAME" + echo_stat + secondCLMD5=$(md5sum ${PIHOLE_DIR}/${CUSTOM_DNS} | sed 's/\s.*$//') + error_validate + + if [ "$primaryCLMD5" == "$last_primaryCLMD5" ] && [ "$secondCLMD5" == "$last_secondCLMD5" ] + then + HASHMARK=$((HASHMARK+0)) + else + MESSAGE="Differenced ${CUSTOM_DNS} Detected" + echo_warn + HASHMARK=$((HASHMARK+1)) + fi + else + MESSAGE="No ${CUSTOM_DNS} Detected on ${REMOTE_HOST}" + echo_info + fi + else + if ${SSHPASSWORD} ${SSH_CMD} -p ${SSH_PORT} -i "$HOME/${SSH_PKIF}" ${REMOTE_USER}@${REMOTE_HOST} test -e ${RIHOLE_DIR}/${CUSTOM_DNS} + then + REMOTE_CUSTOM_DNS="1" + MESSAGE="${REMOTE_HOST} has ${CUSTOM_DNS}" + HASHMARK=$((HASHMARK+1)) + echo_info + fi + MESSAGE="No ${CUSTOM_DNS} Detected on $HOSTNAME" + echo_info + fi + fi - if [ "$HASHMARK" != "0" ] - then - MESSAGE="Replication Required" - echo_warn - HASHMARK=$((HASHMARK+0)) - else - MESSAGE="No Replication Required" - echo_info - exit_nochange - fi + if [ "$HASHMARK" != "0" ] + then + MESSAGE="Replication Required" + echo_warn + HASHMARK=$((HASHMARK+0)) + else + MESSAGE="No Replication Required" + echo_info + exit_nochange + fi } function previous_md5 { - if [ -f "${LOG_PATH}/${HISTORY_MD5}" ] - then - last_primaryDBMD5=$(sed "1q;d" ${LOG_PATH}/${HISTORY_MD5}) - last_secondDBMD5=$(sed "2q;d" ${LOG_PATH}/${HISTORY_MD5}) - last_primaryCLMD5=$(sed "3q;d" ${LOG_PATH}/${HISTORY_MD5}) - last_secondCLMD5=$(sed "4q;d" ${LOG_PATH}/${HISTORY_MD5}) - else - last_primaryDBMD5="0" - last_secondDBMD5="0" - last_primaryCLMD5="0" - last_secondCLMD5="0" - fi + if [ -f "${LOG_PATH}/${HISTORY_MD5}" ] + then + last_primaryDBMD5=$(sed "1q;d" ${LOG_PATH}/${HISTORY_MD5}) + last_secondDBMD5=$(sed "2q;d" ${LOG_PATH}/${HISTORY_MD5}) + last_primaryCLMD5=$(sed "3q;d" ${LOG_PATH}/${HISTORY_MD5}) + last_secondCLMD5=$(sed "4q;d" ${LOG_PATH}/${HISTORY_MD5}) + else + last_primaryDBMD5="0" + last_secondDBMD5="0" + last_primaryCLMD5="0" + last_secondCLMD5="0" + fi } function md5_recheck { - MESSAGE="Performing Replicator Diagnostics" - echo_info - - HASHMARK='0' + MESSAGE="Performing Replicator Diagnostics" + echo_info + + HASHMARK='0' - MESSAGE="Reanalyzing ${GRAVITY_FI} on ${REMOTE_HOST}" - echo_stat - primaryDBMD5=$(${SSHPASSWORD} ${SSH_CMD} -p ${SSH_PORT} -i "$HOME/${SSH_PKIF}" ${REMOTE_USER}@${REMOTE_HOST} "md5sum ${RIHOLE_DIR}/${GRAVITY_FI}" | sed 's/\s.*$//') - error_validate - - MESSAGE="Reanalyzing ${GRAVITY_FI} on $HOSTNAME" - echo_stat - secondDBMD5=$(md5sum ${PIHOLE_DIR}/${GRAVITY_FI} | sed 's/\s.*$//') - error_validate + MESSAGE="Reanalyzing ${GRAVITY_FI} on ${REMOTE_HOST}" + echo_stat + primaryDBMD5=$(${SSHPASSWORD} ${SSH_CMD} -p ${SSH_PORT} -i "$HOME/${SSH_PKIF}" ${REMOTE_USER}@${REMOTE_HOST} "md5sum ${RIHOLE_DIR}/${GRAVITY_FI}" | sed 's/\s.*$//') + error_validate + + MESSAGE="Reanalyzing ${GRAVITY_FI} on $HOSTNAME" + echo_stat + secondDBMD5=$(md5sum ${PIHOLE_DIR}/${GRAVITY_FI} | sed 's/\s.*$//') + error_validate - if [ "$SKIP_CUSTOM" != '1' ] - then - if [ -f ${PIHOLE_DIR}/${CUSTOM_DNS} ] - then - if ${SSHPASSWORD} ${SSH_CMD} -p ${SSH_PORT} -i "$HOME/${SSH_PKIF}" ${REMOTE_USER}@${REMOTE_HOST} test -e ${RIHOLE_DIR}/${CUSTOM_DNS} - then - REMOTE_CUSTOM_DNS="1" - MESSAGE="Reanalyzing ${CUSTOM_DNS} on ${REMOTE_HOST}" - echo_stat + if [ "$SKIP_CUSTOM" != '1' ] + then + if [ -f ${PIHOLE_DIR}/${CUSTOM_DNS} ] + then + if ${SSHPASSWORD} ${SSH_CMD} -p ${SSH_PORT} -i "$HOME/${SSH_PKIF}" ${REMOTE_USER}@${REMOTE_HOST} test -e ${RIHOLE_DIR}/${CUSTOM_DNS} + then + REMOTE_CUSTOM_DNS="1" + MESSAGE="Reanalyzing ${CUSTOM_DNS} on ${REMOTE_HOST}" + echo_stat - primaryCLMD5=$(${SSHPASSWORD} ${SSH_CMD} -p ${SSH_PORT} -i "$HOME/${SSH_PKIF}" ${REMOTE_USER}@${REMOTE_HOST} "md5sum ${RIHOLE_DIR}/${CUSTOM_DNS} | sed 's/\s.*$//'") - error_validate - - MESSAGE="Reanalyzing ${CUSTOM_DNS} on $HOSTNAME" - echo_stat - secondCLMD5=$(md5sum ${PIHOLE_DIR}/${CUSTOM_DNS} | sed 's/\s.*$//') - error_validate - else - MESSAGE="No ${CUSTOM_DNS} Detected on ${REMOTE_HOST}" - echo_info - fi - else - if ${SSHPASSWORD} ${SSH_CMD} -p ${SSH_PORT} -i "$HOME/${SSH_PKIF}" ${REMOTE_USER}@${REMOTE_HOST} test -e ${RIHOLE_DIR}/${CUSTOM_DNS} - then - REMOTE_CUSTOM_DNS="1" - MESSAGE="${REMOTE_HOST} has ${CUSTOM_DNS}" - echo_info - fi - MESSAGE="No ${CUSTOM_DNS} Detected on $HOSTNAME" - echo_info - fi - fi + primaryCLMD5=$(${SSHPASSWORD} ${SSH_CMD} -p ${SSH_PORT} -i "$HOME/${SSH_PKIF}" ${REMOTE_USER}@${REMOTE_HOST} "md5sum ${RIHOLE_DIR}/${CUSTOM_DNS} | sed 's/\s.*$//'") + error_validate + + MESSAGE="Reanalyzing ${CUSTOM_DNS} on $HOSTNAME" + echo_stat + secondCLMD5=$(md5sum ${PIHOLE_DIR}/${CUSTOM_DNS} | sed 's/\s.*$//') + error_validate + else + MESSAGE="No ${CUSTOM_DNS} Detected on ${REMOTE_HOST}" + echo_info + fi + else + if ${SSHPASSWORD} ${SSH_CMD} -p ${SSH_PORT} -i "$HOME/${SSH_PKIF}" ${REMOTE_USER}@${REMOTE_HOST} test -e ${RIHOLE_DIR}/${CUSTOM_DNS} + then + REMOTE_CUSTOM_DNS="1" + MESSAGE="${REMOTE_HOST} has ${CUSTOM_DNS}" + echo_info + fi + MESSAGE="No ${CUSTOM_DNS} Detected on $HOSTNAME" + echo_info + fi + fi } \ No newline at end of file diff --git a/includes/gs-intent.sh b/includes/gs-intent.sh index 399b2be..1435e9f 100644 --- a/includes/gs-intent.sh +++ b/includes/gs-intent.sh @@ -6,36 +6,36 @@ ## Validate Intent function intent_validate { - if [ "$VERIFY_PASS" == "0" ] - then - PHASER=$((( RANDOM % 4 ) + 1 )) - if [ "$PHASER" = "1" ] - then - INTENT="FIRE PHOTON TORPEDOS" - elif [ "$PHASER" = "2" ] - then - INTENT="FIRE ALL PHASERS" - elif [ "$PHASER" = "3" ] - then - INTENT="EJECT THE WARPCORE" - elif [ "$PHASER" = "4" ] - then - INTENT="ENGAGE TRACTOR BEAM" - fi - - MESSAGE="Type ${INTENT} to Confirm" - echo_need + if [ "$VERIFY_PASS" == "0" ] + then + PHASER=$((( RANDOM % 4 ) + 1 )) + if [ "$PHASER" = "1" ] + then + INTENT="FIRE PHOTON TORPEDOS" + elif [ "$PHASER" = "2" ] + then + INTENT="FIRE ALL PHASERS" + elif [ "$PHASER" = "3" ] + then + INTENT="EJECT THE WARPCORE" + elif [ "$PHASER" = "4" ] + then + INTENT="ENGAGE TRACTOR BEAM" + fi + + MESSAGE="Type ${INTENT} to Confirm" + echo_need - read INPUT_INTENT + read INPUT_INTENT - if [ "${INPUT_INTENT}" != "${INTENT}" ] - then - MESSAGE="${TASKTYPE} Aborted" - echo_info - exit_nochange - fi - else - MESSAGE="Verification Bypassed" - echo_warn - fi + if [ "${INPUT_INTENT}" != "${INTENT}" ] + then + MESSAGE="${TASKTYPE} Aborted" + echo_info + exit_nochange + fi + else + MESSAGE="Verification Bypassed" + echo_warn + fi } \ No newline at end of file diff --git a/includes/gs-logging.sh b/includes/gs-logging.sh index 5d20b4d..10134d5 100644 --- a/includes/gs-logging.sh +++ b/includes/gs-logging.sh @@ -6,89 +6,89 @@ ## Logs Task function task_logs { - TASKTYPE='LOGS' - MESSAGE="${MESSAGE}: ${TASKTYPE} Requested" - echo_good + TASKTYPE='LOGS' + MESSAGE="${MESSAGE}: ${TASKTYPE} Requested" + echo_good - logs_gs + logs_gs } ## Core Logging ### Write Logs Out function logs_export { - if [ "${TASKTYPE}" != "BACKUP" ] - then - MESSAGE="Saving File Hashes" - echo_stat - rm -f ${LOG_PATH}/${HISTORY_MD5} - echo -e ${primaryDBMD5} >> ${LOG_PATH}/${HISTORY_MD5} - echo -e ${secondDBMD5} >> ${LOG_PATH}/${HISTORY_MD5} - echo -e ${primaryCLMD5} >> ${LOG_PATH}/${HISTORY_MD5} - echo -e ${secondCLMD5} >> ${LOG_PATH}/${HISTORY_MD5} - error_validate - fi + if [ "${TASKTYPE}" != "BACKUP" ] + then + MESSAGE="Saving File Hashes" + echo_stat + rm -f ${LOG_PATH}/${HISTORY_MD5} + echo -e ${primaryDBMD5} >> ${LOG_PATH}/${HISTORY_MD5} + echo -e ${secondDBMD5} >> ${LOG_PATH}/${HISTORY_MD5} + echo -e ${primaryCLMD5} >> ${LOG_PATH}/${HISTORY_MD5} + echo -e ${secondCLMD5} >> ${LOG_PATH}/${HISTORY_MD5} + error_validate + fi - MESSAGE="Logging Successful ${TASKTYPE}" - echo_stat - echo -e $(date) "[${TASKTYPE}]" >> ${LOG_PATH}/${SYNCING_LOG} - error_validate + MESSAGE="Logging Successful ${TASKTYPE}" + echo_stat + echo -e $(date) "[${TASKTYPE}]" >> ${LOG_PATH}/${SYNCING_LOG} + error_validate } ### Output Sync Logs function logs_gs { - MESSAGE="Tailing ${LOG_PATH}/${SYNCING_LOG}" - echo_info + MESSAGE="Tailing ${LOG_PATH}/${SYNCING_LOG}" + echo_info - echo -e "========================================================" - echo -e "Recent Complete ${YELLOW}SMART${NC} Executions" - tail -n 7 "${LOG_PATH}/${SYNCING_LOG}" | grep SMART - echo -e "Recent Complete ${YELLOW}PULL${NC} Executions" - tail -n 7 "${LOG_PATH}/${SYNCING_LOG}" | grep PULL - echo -e "Recent Complete ${YELLOW}PUSH${NC} Executions" - tail -n 7 "${LOG_PATH}/${SYNCING_LOG}" | grep PUSH - echo -e "Recent Complete ${YELLOW}BACKUP${NC} Executions" - tail -n 7 "${LOG_PATH}/${SYNCING_LOG}" | grep BACKUP - echo -e "Recent Complete ${YELLOW}RESTORE${NC} Executions" - tail -n 7 "${LOG_PATH}/${SYNCING_LOG}" | grep RESTORE - echo -e "========================================================" + echo -e "========================================================" + echo -e "Recent Complete ${YELLOW}SMART${NC} Executions" + tail -n 7 "${LOG_PATH}/${SYNCING_LOG}" | grep SMART + echo -e "Recent Complete ${YELLOW}PULL${NC} Executions" + tail -n 7 "${LOG_PATH}/${SYNCING_LOG}" | grep PULL + echo -e "Recent Complete ${YELLOW}PUSH${NC} Executions" + tail -n 7 "${LOG_PATH}/${SYNCING_LOG}" | grep PUSH + echo -e "Recent Complete ${YELLOW}BACKUP${NC} Executions" + tail -n 7 "${LOG_PATH}/${SYNCING_LOG}" | grep BACKUP + echo -e "Recent Complete ${YELLOW}RESTORE${NC} Executions" + tail -n 7 "${LOG_PATH}/${SYNCING_LOG}" | grep RESTORE + echo -e "========================================================" - exit_nochange + exit_nochange } ## Crontab Logs ### Core Crontab Logs function show_crontab { - MESSAGE="Replaying Last Cronjob" - echo_stat - - if [ -f ${LOG_PATH}/${CRONJOB_LOG} ] - then - if [ -s ${LOG_PATH}/${CRONJOB_LOG} ] - echo_good - - MESSAGE="Tailing ${LOG_PATH}/${CRONJOB_LOG}" - echo_info + MESSAGE="Replaying Last Cronjob" + echo_stat + + if [ -f ${LOG_PATH}/${CRONJOB_LOG} ] + then + if [ -s ${LOG_PATH}/${CRONJOB_LOG} ] + echo_good + + MESSAGE="Tailing ${LOG_PATH}/${CRONJOB_LOG}" + echo_info - echo -e "========================================================" - date -r ${LOG_PATH}/${CRONJOB_LOG} - cat ${LOG_PATH}/${CRONJOB_LOG} - echo -e "========================================================" + echo -e "========================================================" + date -r ${LOG_PATH}/${CRONJOB_LOG} + cat ${LOG_PATH}/${CRONJOB_LOG} + echo -e "========================================================" - exit_nochange - then - echo_fail + exit_nochange + then + echo_fail - MESSAGE="${LOG_PATH}/${CRONJOB_LOG} is Empty" - echo_info + MESSAGE="${LOG_PATH}/${CRONJOB_LOG} is Empty" + echo_info - exit_nochange - fi - else - echo_fail + exit_nochange + fi + else + echo_fail - MESSAGE="${LOG_PATH}/${CRONJOB_LOG} is Missing" - echo_info + MESSAGE="${LOG_PATH}/${CRONJOB_LOG} is Missing" + echo_info - exit_nochange - fi + exit_nochange + fi } diff --git a/includes/gs-pull.sh b/includes/gs-pull.sh index def9d0b..f5c7e17 100644 --- a/includes/gs-pull.sh +++ b/includes/gs-pull.sh @@ -23,165 +23,165 @@ function task_pull { ## Pull Gravity function pull_gs_grav { - backup_local_gravity - backup_remote_gravity - - MESSAGE="Pulling ${GRAVITY_FI} from ${REMOTE_HOST}" - echo_stat - RSYNC_REPATH="rsync" - RSYNC_SOURCE="${REMOTE_USER}@${REMOTE_HOST}:${RIHOLE_DIR}/${GRAVITY_FI}.backup" - RSYNC_TARGET="${LOCAL_FOLDR}/${BACKUP_FOLD}/${GRAVITY_FI}.pull" - create_rsynccmd - - MESSAGE="Replacing ${GRAVITY_FI} on $HOSTNAME" - echo_stat - sudo cp ${LOCAL_FOLDR}/${BACKUP_FOLD}/${GRAVITY_FI}.pull ${PIHOLE_DIR}/${GRAVITY_FI} >/dev/null 2>&1 - error_validate - - if [ "$FILE_OWNER" != "named:docker" ] - then - MESSAGE="Validating Settings of ${GRAVITY_FI}" - echo_stat - - GRAVDB_OWN=$(ls -ld ${PIHOLE_DIR}/${GRAVITY_FI} | awk 'OFS=":" {print $3,$4}') - if [ "$GRAVDB_OWN" != "$FILE_OWNER" ] - then - MESSAGE="Validating Ownership on ${GRAVITY_FI}" - echo_fail - - MESSAGE="Attempting to Compensate" - echo_warn - - MESSAGE="Setting Ownership on ${GRAVITY_FI}" - echo_stat - sudo chown ${FILE_OWNER} ${PIHOLE_DIR}/${GRAVITY_FI} >/dev/null 2>&1 - error_validate - - MESSAGE="Continuing Validation of ${GRAVITY_FI}" - echo_stat - fi - else - MESSAGE="Setting Ownership on ${GRAVITY_FI}" - echo_stat - sudo chown ${FILE_OWNER} ${PIHOLE_DIR}/${GRAVITY_FI} >/dev/null 2>&1 - error_validate - fi - - - GRAVDB_RWE=$(namei -m ${PIHOLE_DIR}/${GRAVITY_FI} | grep -v f: | grep ${GRAVITY_FI} | awk '{print $1}') - if [ "$GRAVDB_RWE" != "-rw-rw-r--" ] - then - MESSAGE="Validating Permissions on ${GRAVITY_FI}" - echo_fail - - MESSAGE="Attempting to Compensate" - echo_warn - - MESSAGE="Setting Permissions on ${GRAVITY_FI}" - echo_stat - sudo chmod 664 ${PIHOLE_DIR}/${GRAVITY_FI} >/dev/null 2>&1 - error_validate + backup_local_gravity + backup_remote_gravity + + MESSAGE="Pulling ${GRAVITY_FI} from ${REMOTE_HOST}" + echo_stat + RSYNC_REPATH="rsync" + RSYNC_SOURCE="${REMOTE_USER}@${REMOTE_HOST}:${RIHOLE_DIR}/${GRAVITY_FI}.backup" + RSYNC_TARGET="${LOCAL_FOLDR}/${BACKUP_FOLD}/${GRAVITY_FI}.pull" + create_rsynccmd + + MESSAGE="Replacing ${GRAVITY_FI} on $HOSTNAME" + echo_stat + sudo cp ${LOCAL_FOLDR}/${BACKUP_FOLD}/${GRAVITY_FI}.pull ${PIHOLE_DIR}/${GRAVITY_FI} >/dev/null 2>&1 + error_validate + + if [ "$FILE_OWNER" != "named:docker" ] + then + MESSAGE="Validating Settings of ${GRAVITY_FI}" + echo_stat + + GRAVDB_OWN=$(ls -ld ${PIHOLE_DIR}/${GRAVITY_FI} | awk 'OFS=":" {print $3,$4}') + if [ "$GRAVDB_OWN" != "$FILE_OWNER" ] + then + MESSAGE="Validating Ownership on ${GRAVITY_FI}" + echo_fail + + MESSAGE="Attempting to Compensate" + echo_warn + + MESSAGE="Setting Ownership on ${GRAVITY_FI}" + echo_stat + sudo chown ${FILE_OWNER} ${PIHOLE_DIR}/${GRAVITY_FI} >/dev/null 2>&1 + error_validate + + MESSAGE="Continuing Validation of ${GRAVITY_FI}" + echo_stat + fi + else + MESSAGE="Setting Ownership on ${GRAVITY_FI}" + echo_stat + sudo chown ${FILE_OWNER} ${PIHOLE_DIR}/${GRAVITY_FI} >/dev/null 2>&1 + error_validate + fi + + + GRAVDB_RWE=$(namei -m ${PIHOLE_DIR}/${GRAVITY_FI} | grep -v f: | grep ${GRAVITY_FI} | awk '{print $1}') + if [ "$GRAVDB_RWE" != "-rw-rw-r--" ] + then + MESSAGE="Validating Permissions on ${GRAVITY_FI}" + echo_fail + + MESSAGE="Attempting to Compensate" + echo_warn + + MESSAGE="Setting Permissions on ${GRAVITY_FI}" + echo_stat + sudo chmod 664 ${PIHOLE_DIR}/${GRAVITY_FI} >/dev/null 2>&1 + error_validate - MESSAGE="Continuing Validation of ${GRAVITY_FI}" - echo_stat - fi + MESSAGE="Continuing Validation of ${GRAVITY_FI}" + echo_stat + fi - echo_good + echo_good } ## Pull Custom function pull_gs_cust { - if [ "$SKIP_CUSTOM" != '1' ] - then - if [ "$REMOTE_CUSTOM_DNS" == "1" ] - then - backup_local_custom - backup_remote_custom + if [ "$SKIP_CUSTOM" != '1' ] + then + if [ "$REMOTE_CUSTOM_DNS" == "1" ] + then + backup_local_custom + backup_remote_custom - MESSAGE="Pulling ${CUSTOM_DNS} from ${REMOTE_HOST}" - echo_stat - RSYNC_REPATH="rsync" - RSYNC_SOURCE="${REMOTE_USER}@${REMOTE_HOST}:${RIHOLE_DIR}/${CUSTOM_DNS}.backup" - RSYNC_TARGET="${LOCAL_FOLDR}/${BACKUP_FOLD}/${CUSTOM_DNS}.pull" - create_rsynccmd - - MESSAGE="Replacing ${CUSTOM_DNS} on $HOSTNAME" - echo_stat - sudo cp ${LOCAL_FOLDR}/${BACKUP_FOLD}/${CUSTOM_DNS}.pull ${PIHOLE_DIR}/${CUSTOM_DNS} >/dev/null 2>&1 - error_validate - - MESSAGE="Validating Settings on ${CUSTOM_DNS}" - echo_stat - - CUSTOMLS_OWN=$(ls -ld ${PIHOLE_DIR}/${CUSTOM_DNS} | awk '{print $3 $4}') - if [ "$CUSTOMLS_OWN" != "rootroot" ] - then - MESSAGE="Validating Ownership on ${CUSTOM_DNS}" - echo_fail - - MESSAGE="Attempting to Compensate" - echo_warn - - MESSAGE="Setting Ownership on ${CUSTOM_DNS}" - echo_stat - sudo chown root:root ${PIHOLE_DIR}/${CUSTOM_DNS} >/dev/null 2>&1 - error_validate + MESSAGE="Pulling ${CUSTOM_DNS} from ${REMOTE_HOST}" + echo_stat + RSYNC_REPATH="rsync" + RSYNC_SOURCE="${REMOTE_USER}@${REMOTE_HOST}:${RIHOLE_DIR}/${CUSTOM_DNS}.backup" + RSYNC_TARGET="${LOCAL_FOLDR}/${BACKUP_FOLD}/${CUSTOM_DNS}.pull" + create_rsynccmd + + MESSAGE="Replacing ${CUSTOM_DNS} on $HOSTNAME" + echo_stat + sudo cp ${LOCAL_FOLDR}/${BACKUP_FOLD}/${CUSTOM_DNS}.pull ${PIHOLE_DIR}/${CUSTOM_DNS} >/dev/null 2>&1 + error_validate + + MESSAGE="Validating Settings on ${CUSTOM_DNS}" + echo_stat + + CUSTOMLS_OWN=$(ls -ld ${PIHOLE_DIR}/${CUSTOM_DNS} | awk '{print $3 $4}') + if [ "$CUSTOMLS_OWN" != "rootroot" ] + then + MESSAGE="Validating Ownership on ${CUSTOM_DNS}" + echo_fail + + MESSAGE="Attempting to Compensate" + echo_warn + + MESSAGE="Setting Ownership on ${CUSTOM_DNS}" + echo_stat + sudo chown root:root ${PIHOLE_DIR}/${CUSTOM_DNS} >/dev/null 2>&1 + error_validate - MESSAGE="Continuing Validation of ${GRAVITY_FI}" - echo_stat - fi - - CUSTOMLS_RWE=$(namei -m ${PIHOLE_DIR}/${CUSTOM_DNS} | grep -v f: | grep ${CUSTOM_DNS} | awk '{print $1}') - if [ "$CUSTOMLS_RWE" != "-rw-r--r--" ] - then - MESSAGE="Validating Permissions on ${CUSTOM_DNS}" - echo_fail - - MESSAGE="Attempting to Compensate" - echo_warn - - MESSAGE="Setting Ownership on ${CUSTOM_DNS}" - echo_stat - sudo chmod 644 ${PIHOLE_DIR}/${CUSTOM_DNS} >/dev/null 2>&1 - error_validate - - MESSAGE="Continuing Validation of ${GRAVITY_FI}" - echo_stat - fi + MESSAGE="Continuing Validation of ${GRAVITY_FI}" + echo_stat + fi + + CUSTOMLS_RWE=$(namei -m ${PIHOLE_DIR}/${CUSTOM_DNS} | grep -v f: | grep ${CUSTOM_DNS} | awk '{print $1}') + if [ "$CUSTOMLS_RWE" != "-rw-r--r--" ] + then + MESSAGE="Validating Permissions on ${CUSTOM_DNS}" + echo_fail + + MESSAGE="Attempting to Compensate" + echo_warn + + MESSAGE="Setting Ownership on ${CUSTOM_DNS}" + echo_stat + sudo chmod 644 ${PIHOLE_DIR}/${CUSTOM_DNS} >/dev/null 2>&1 + error_validate + + MESSAGE="Continuing Validation of ${GRAVITY_FI}" + echo_stat + fi - echo_good - fi - fi + echo_good + fi + fi } ## Pull Reload function pull_gs_reload { - MESSAGE="Isolating Regeneration Pathways" - echo_info - sleep 1 - - MESSAGE="Updating FTLDNS Configuration" - echo_stat - ${PH_EXEC} restartdns reloadlists >/dev/null 2>&1 - error_validate - - MESSAGE="Reloading FTLDNS Services" - echo_stat - ${PH_EXEC} restartdns >/dev/null 2>&1 - error_validate + MESSAGE="Isolating Regeneration Pathways" + echo_info + sleep 1 + + MESSAGE="Updating FTLDNS Configuration" + echo_stat + ${PH_EXEC} restartdns reloadlists >/dev/null 2>&1 + error_validate + + MESSAGE="Reloading FTLDNS Services" + echo_stat + ${PH_EXEC} restartdns >/dev/null 2>&1 + error_validate } ## Pull Function function pull_gs { - previous_md5 - md5_compare - - backup_settime - pull_gs_grav - pull_gs_cust - pull_gs_reload - md5_recheck - - logs_export - exit_withchange + previous_md5 + md5_compare + + backup_settime + pull_gs_grav + pull_gs_cust + pull_gs_reload + md5_recheck + + logs_export + exit_withchange } \ No newline at end of file diff --git a/includes/gs-purge.sh b/includes/gs-purge.sh index 0cd00bc..b1f51b6 100644 --- a/includes/gs-purge.sh +++ b/includes/gs-purge.sh @@ -6,73 +6,73 @@ ## Purge Task function task_purge { - TASKTYPE="THE-PURGE" - MESSAGE="${MESSAGE}: ${TASKTYPE} Requested" - echo_good + TASKTYPE="THE-PURGE" + MESSAGE="${MESSAGE}: ${TASKTYPE} Requested" + echo_good - MESSAGE="THIS WILL RESET YOUR ENTIRE GRAVITY SYNC INSTALLATION" - echo_warn - MESSAGE="This will remove:" - echo_warn - MESSAGE="- All backups files." - echo_warn - MESSAGE="- Your ${CONFIG_FILE} file." - echo_warn + MESSAGE="THIS WILL RESET YOUR ENTIRE GRAVITY SYNC INSTALLATION" + echo_warn + MESSAGE="This will remove:" + echo_warn + MESSAGE="- All backups files." + echo_warn + MESSAGE="- Your ${CONFIG_FILE} file." + echo_warn - if [ -f "${LOCAL_FOLDR}/dev" ] - then - MESSAGE="- Your development branch updater." - elif [ -f "${LOCAL_FOLDR}/beta" ] - then - MESSAGE="- Your beta branch updater." - fi - echo_warn + if [ -f "${LOCAL_FOLDR}/dev" ] + then + MESSAGE="- Your development branch updater." + elif [ -f "${LOCAL_FOLDR}/beta" ] + then + MESSAGE="- Your beta branch updater." + fi + echo_warn - MESSAGE="- All cronjob/automation tasks." - echo_warn - MESSAGE="- All job history/logs." - echo_warn - MESSAGE="- Associated SSH id_rsa keys." - echo_warn - MESSAGE="This function cannot be undone!" - echo_warn + MESSAGE="- All cronjob/automation tasks." + echo_warn + MESSAGE="- All job history/logs." + echo_warn + MESSAGE="- Associated SSH id_rsa keys." + echo_warn + MESSAGE="This function cannot be undone!" + echo_warn - MESSAGE="YOU WILL NEED TO REBUILD GRAVITY SYNC AFTER EXECUTION" - echo_warn + MESSAGE="YOU WILL NEED TO REBUILD GRAVITY SYNC AFTER EXECUTION" + echo_warn - MESSAGE="Pi-hole binaries, configuration and services ARE NOT impacted!" - echo_info - MESSAGE="Your device will continue to resolve and block DNS requests," - echo_info - MESSAGE="but your ${GRAVITY_FI} and ${CUSTOM_DNS} WILL NOT sync anymore," - echo_info - MESSAGE="until you reconfigure Gravity Sync on this device." - echo_info + MESSAGE="Pi-hole binaries, configuration and services ARE NOT impacted!" + echo_info + MESSAGE="Your device will continue to resolve and block DNS requests," + echo_info + MESSAGE="but your ${GRAVITY_FI} and ${CUSTOM_DNS} WILL NOT sync anymore," + echo_info + MESSAGE="until you reconfigure Gravity Sync on this device." + echo_info - intent_validate + intent_validate - MESSAGE="Cleaning Gravity Sync Directory" - echo_stat + MESSAGE="Cleaning Gravity Sync Directory" + echo_stat - git clean -f -X -d >/dev/null 2>&1 - error_validate + git clean -f -X -d >/dev/null 2>&1 + error_validate - clear_cron + clear_cron - MESSAGE="Deleting SSH Key-files" - echo_stat + MESSAGE="Deleting SSH Key-files" + echo_stat - rm -f $HOME/${SSH_PKIF} >/dev/null 2>&1 - rm -f $HOME/${SSH_PKIF}.pub >/dev/null 2>&1 - error_validate + rm -f $HOME/${SSH_PKIF} >/dev/null 2>&1 + rm -f $HOME/${SSH_PKIF}.pub >/dev/null 2>&1 + error_validate - MESSAGE="Realigning Dilithium Matrix" - echo_stat + MESSAGE="Realigning Dilithium Matrix" + echo_stat - sleep 1 + sleep 1 - MESSAGE="Realigning Dilithium Matrix" - echo_good + MESSAGE="Realigning Dilithium Matrix" + echo_good - update_gs + update_gs } \ No newline at end of file diff --git a/includes/gs-push.sh b/includes/gs-push.sh index 4fccbf1..ae0d13a 100644 --- a/includes/gs-push.sh +++ b/includes/gs-push.sh @@ -22,106 +22,106 @@ function task_push { ## Push Gravity function push_gs_grav { - backup_remote_gravity - backup_local_gravity - - MESSAGE="Copying ${GRAVITY_FI} from ${REMOTE_HOST}" - echo_stat - RSYNC_REPATH="rsync" - RSYNC_SOURCE="${REMOTE_USER}@${REMOTE_HOST}:${RIHOLE_DIR}/${GRAVITY_FI}.backup" - RSYNC_TARGET="${LOCAL_FOLDR}/${BACKUP_FOLD}/${GRAVITY_FI}.push" - create_rsynccmd + backup_remote_gravity + backup_local_gravity + + MESSAGE="Copying ${GRAVITY_FI} from ${REMOTE_HOST}" + echo_stat + RSYNC_REPATH="rsync" + RSYNC_SOURCE="${REMOTE_USER}@${REMOTE_HOST}:${RIHOLE_DIR}/${GRAVITY_FI}.backup" + RSYNC_TARGET="${LOCAL_FOLDR}/${BACKUP_FOLD}/${GRAVITY_FI}.push" + create_rsynccmd - MESSAGE="Pushing ${GRAVITY_FI} to ${REMOTE_HOST}" - echo_stat - RSYNC_REPATH="sudo rsync" - RSYNC_SOURCE="${LOCAL_FOLDR}/${BACKUP_FOLD}/${BACKUPTIMESTAMP}-${GRAVITY_FI}.backup" - RSYNC_TARGET="${REMOTE_USER}@${REMOTE_HOST}:${RIHOLE_DIR}/${GRAVITY_FI}" - create_rsynccmd + MESSAGE="Pushing ${GRAVITY_FI} to ${REMOTE_HOST}" + echo_stat + RSYNC_REPATH="sudo rsync" + RSYNC_SOURCE="${LOCAL_FOLDR}/${BACKUP_FOLD}/${BACKUPTIMESTAMP}-${GRAVITY_FI}.backup" + RSYNC_TARGET="${REMOTE_USER}@${REMOTE_HOST}:${RIHOLE_DIR}/${GRAVITY_FI}" + create_rsynccmd - MESSAGE="Setting Permissions on ${GRAVITY_FI}" - echo_stat - CMD_TIMEOUT='15' - CMD_REQUESTED="sudo chmod 664 ${RIHOLE_DIR}/${GRAVITY_FI}" - create_sshcmd + MESSAGE="Setting Permissions on ${GRAVITY_FI}" + echo_stat + CMD_TIMEOUT='15' + CMD_REQUESTED="sudo chmod 664 ${RIHOLE_DIR}/${GRAVITY_FI}" + create_sshcmd - MESSAGE="Setting Ownership on ${GRAVITY_FI}" - echo_stat - CMD_TIMEOUT='15' - CMD_REQUESTED="sudo chown ${RILE_OWNER} ${RIHOLE_DIR}/${GRAVITY_FI}" - create_sshcmd + MESSAGE="Setting Ownership on ${GRAVITY_FI}" + echo_stat + CMD_TIMEOUT='15' + CMD_REQUESTED="sudo chown ${RILE_OWNER} ${RIHOLE_DIR}/${GRAVITY_FI}" + create_sshcmd } ## Push Custom function push_gs_cust { - if [ "$SKIP_CUSTOM" != '1' ] - then - if [ "$REMOTE_CUSTOM_DNS" == "1" ] - then - backup_remote_custom - backup_local_custom + if [ "$SKIP_CUSTOM" != '1' ] + then + if [ "$REMOTE_CUSTOM_DNS" == "1" ] + then + backup_remote_custom + backup_local_custom - MESSAGE="Copying ${CUSTOM_DNS} from ${REMOTE_HOST}" - echo_stat - RSYNC_REPATH="rsync" - RSYNC_SOURCE="${REMOTE_USER}@${REMOTE_HOST}:${RIHOLE_DIR}/${CUSTOM_DNS}.backup" - RSYNC_TARGET="${LOCAL_FOLDR}/${BACKUP_FOLD}/${CUSTOM_DNS}.push" - create_rsynccmd + MESSAGE="Copying ${CUSTOM_DNS} from ${REMOTE_HOST}" + echo_stat + RSYNC_REPATH="rsync" + RSYNC_SOURCE="${REMOTE_USER}@${REMOTE_HOST}:${RIHOLE_DIR}/${CUSTOM_DNS}.backup" + RSYNC_TARGET="${LOCAL_FOLDR}/${BACKUP_FOLD}/${CUSTOM_DNS}.push" + create_rsynccmd - MESSAGE="Pushing ${CUSTOM_DNS} to ${REMOTE_HOST}" - echo_stat - RSYNC_REPATH="sudo rsync" - RSYNC_SOURCE="${LOCAL_FOLDR}/${BACKUP_FOLD}/${BACKUPTIMESTAMP}-${CUSTOM_DNS}.backup" - RSYNC_TARGET="${REMOTE_USER}@${REMOTE_HOST}:${RIHOLE_DIR}/${CUSTOM_DNS}" - create_rsynccmd + MESSAGE="Pushing ${CUSTOM_DNS} to ${REMOTE_HOST}" + echo_stat + RSYNC_REPATH="sudo rsync" + RSYNC_SOURCE="${LOCAL_FOLDR}/${BACKUP_FOLD}/${BACKUPTIMESTAMP}-${CUSTOM_DNS}.backup" + RSYNC_TARGET="${REMOTE_USER}@${REMOTE_HOST}:${RIHOLE_DIR}/${CUSTOM_DNS}" + create_rsynccmd - MESSAGE="Setting Permissions on ${CUSTOM_DNS}" - echo_stat - CMD_TIMEOUT='15' - CMD_REQUESTED="sudo chmod 644 ${RIHOLE_DIR}/${CUSTOM_DNS}" - create_sshcmd + MESSAGE="Setting Permissions on ${CUSTOM_DNS}" + echo_stat + CMD_TIMEOUT='15' + CMD_REQUESTED="sudo chmod 644 ${RIHOLE_DIR}/${CUSTOM_DNS}" + create_sshcmd - MESSAGE="Setting Ownership on ${CUSTOM_DNS}" - echo_stat - CMD_TIMEOUT='15' - CMD_REQUESTED="sudo chown root:root ${RIHOLE_DIR}/${CUSTOM_DNS}" - create_sshcmd - fi - fi + MESSAGE="Setting Ownership on ${CUSTOM_DNS}" + echo_stat + CMD_TIMEOUT='15' + CMD_REQUESTED="sudo chown root:root ${RIHOLE_DIR}/${CUSTOM_DNS}" + create_sshcmd + fi + fi } ## Push Reload function push_gs_reload { - MESSAGE="Inverting Tachyon Pulses" - echo_info - sleep 1 + MESSAGE="Inverting Tachyon Pulses" + echo_info + sleep 1 - MESSAGE="Updating Remote FTLDNS Configuration" - echo_stat - CMD_TIMEOUT='15' - CMD_REQUESTED="${RH_EXEC} restartdns reloadlists" - create_sshcmd - - MESSAGE="Reloading Remote FTLDNS Services" - echo_stat - CMD_TIMEOUT='15' - CMD_REQUESTED="${RH_EXEC} restartdns" - create_sshcmd + MESSAGE="Updating Remote FTLDNS Configuration" + echo_stat + CMD_TIMEOUT='15' + CMD_REQUESTED="${RH_EXEC} restartdns reloadlists" + create_sshcmd + + MESSAGE="Reloading Remote FTLDNS Services" + echo_stat + CMD_TIMEOUT='15' + CMD_REQUESTED="${RH_EXEC} restartdns" + create_sshcmd } ## Push Function function push_gs { - previous_md5 - md5_compare - backup_settime - - intent_validate + previous_md5 + md5_compare + backup_settime + + intent_validate - push_gs_grav - push_gs_cust - push_gs_reload + push_gs_grav + push_gs_cust + push_gs_reload - md5_recheck - logs_export - exit_withchange + md5_recheck + logs_export + exit_withchange } \ No newline at end of file diff --git a/includes/gs-restore.sh b/includes/gs-restore.sh index de3558d..138ed46 100644 --- a/includes/gs-restore.sh +++ b/includes/gs-restore.sh @@ -21,176 +21,176 @@ function task_restore { ## Restore Gravity function restore_gs { - MESSAGE="This will restore your settings on $HOSTNAME with a previous version!" - echo_warn + MESSAGE="This will restore your settings on $HOSTNAME with a previous version!" + echo_warn - MESSAGE="PREVIOUS BACKUPS AVAILABLE FOR RESTORATION" - echo_info - ls ${LOCAL_FOLDR}/${BACKUP_FOLD} | grep $(date +%Y) | grep ${GRAVITY_FI} | colrm 18 + MESSAGE="PREVIOUS BACKUPS AVAILABLE FOR RESTORATION" + echo_info + ls ${LOCAL_FOLDR}/${BACKUP_FOLD} | grep $(date +%Y) | grep ${GRAVITY_FI} | colrm 18 - MESSAGE="Select backup date to restore ${GRAVITY_FI} from" - echo_need - read INPUT_BACKUP_DATE + MESSAGE="Select backup date to restore ${GRAVITY_FI} from" + echo_need + read INPUT_BACKUP_DATE - if [ -f ${LOCAL_FOLDR}/${BACKUP_FOLD}/${INPUT_BACKUP_DATE}-${GRAVITY_FI}.backup ] - then - MESSAGE="Backup File Selected" - else - MESSAGE="Invalid Request" - echo_info + if [ -f ${LOCAL_FOLDR}/${BACKUP_FOLD}/${INPUT_BACKUP_DATE}-${GRAVITY_FI}.backup ] + then + MESSAGE="Backup File Selected" + else + MESSAGE="Invalid Request" + echo_info - exit_nochange - fi + exit_nochange + fi - if [ "$SKIP_CUSTOM" != '1' ] - then + if [ "$SKIP_CUSTOM" != '1' ] + then - if [ -f ${PIHOLE_DIR}/${CUSTOM_DNS} ] - then - ls ${LOCAL_FOLDR}/${BACKUP_FOLD} | grep $(date +%Y) | grep ${CUSTOM_DNS} | colrm 18 + if [ -f ${PIHOLE_DIR}/${CUSTOM_DNS} ] + then + ls ${LOCAL_FOLDR}/${BACKUP_FOLD} | grep $(date +%Y) | grep ${CUSTOM_DNS} | colrm 18 - MESSAGE="Select backup date to restore ${CUSTOM_DNS} from" - echo_need - read INPUT_DNSBACKUP_DATE + MESSAGE="Select backup date to restore ${CUSTOM_DNS} from" + echo_need + read INPUT_DNSBACKUP_DATE - if [ -f ${LOCAL_FOLDR}/${BACKUP_FOLD}/${INPUT_DNSBACKUP_DATE}-${CUSTOM_DNS}.backup ] - then - MESSAGE="Backup File Selected" - else - MESSAGE="Invalid Request" - echo_info + if [ -f ${LOCAL_FOLDR}/${BACKUP_FOLD}/${INPUT_DNSBACKUP_DATE}-${CUSTOM_DNS}.backup ] + then + MESSAGE="Backup File Selected" + else + MESSAGE="Invalid Request" + echo_info - exit_nochange - fi - fi - fi + exit_nochange + fi + fi + fi - MESSAGE="${GRAVITY_FI} from ${INPUT_BACKUP_DATE} Selected" - echo_info - MESSAGE="${CUSTOM_DNS} from ${INPUT_DNSBACKUP_DATE} Selected" - echo_info - - intent_validate + MESSAGE="${GRAVITY_FI} from ${INPUT_BACKUP_DATE} Selected" + echo_info + MESSAGE="${CUSTOM_DNS} from ${INPUT_DNSBACKUP_DATE} Selected" + echo_info + + intent_validate - MESSAGE="Making Time Warp Calculations" - echo_info + MESSAGE="Making Time Warp Calculations" + echo_info - MESSAGE="Stopping Pi-hole Services" - echo_stat + MESSAGE="Stopping Pi-hole Services" + echo_stat - sudo service pihole-FTL stop >/dev/null 2>&1 - error_validate + sudo service pihole-FTL stop >/dev/null 2>&1 + error_validate - MESSAGE="Restoring ${GRAVITY_FI} on $HOSTNAME" - echo_stat - sudo cp ${LOCAL_FOLDR}/${BACKUP_FOLD}/${INPUT_BACKUP_DATE}-${GRAVITY_FI}.backup ${PIHOLE_DIR}/${GRAVITY_FI} >/dev/null 2>&1 - error_validate - - MESSAGE="Validating Ownership on ${GRAVITY_FI}" - echo_stat - - GRAVDB_OWN=$(ls -ld ${PIHOLE_DIR}/${GRAVITY_FI} | awk 'OFS=":" {print $3,$4}') - if [ "$GRAVDB_OWN" == "$FILE_OWNER" ] - then - echo_good - else - echo_fail - - MESSAGE="Attempting to Compensate" - echo_warn - - MESSAGE="Setting Ownership on ${GRAVITY_FI}" - echo_stat - sudo chown ${FILE_OWNER} ${PIHOLE_DIR}/${GRAVITY_FI} >/dev/null 2>&1 - error_validate - fi - - MESSAGE="Validating Permissions on ${GRAVITY_FI}" - echo_stat - - GRAVDB_RWE=$(namei -m ${PIHOLE_DIR}/${GRAVITY_FI} | grep -v f: | grep ${GRAVITY_FI} | awk '{print $1}') - if [ "$GRAVDB_RWE" = "-rw-rw-r--" ] - then - echo_good - else - echo_fail - - MESSAGE="Attempting to Compensate" - echo_warn - - MESSAGE="Setting Ownership on ${GRAVITY_FI}" - echo_stat - sudo chmod 664 ${PIHOLE_DIR}/${GRAVITY_FI} >/dev/null 2>&1 - error_validate - fi + MESSAGE="Restoring ${GRAVITY_FI} on $HOSTNAME" + echo_stat + sudo cp ${LOCAL_FOLDR}/${BACKUP_FOLD}/${INPUT_BACKUP_DATE}-${GRAVITY_FI}.backup ${PIHOLE_DIR}/${GRAVITY_FI} >/dev/null 2>&1 + error_validate + + MESSAGE="Validating Ownership on ${GRAVITY_FI}" + echo_stat + + GRAVDB_OWN=$(ls -ld ${PIHOLE_DIR}/${GRAVITY_FI} | awk 'OFS=":" {print $3,$4}') + if [ "$GRAVDB_OWN" == "$FILE_OWNER" ] + then + echo_good + else + echo_fail + + MESSAGE="Attempting to Compensate" + echo_warn + + MESSAGE="Setting Ownership on ${GRAVITY_FI}" + echo_stat + sudo chown ${FILE_OWNER} ${PIHOLE_DIR}/${GRAVITY_FI} >/dev/null 2>&1 + error_validate + fi + + MESSAGE="Validating Permissions on ${GRAVITY_FI}" + echo_stat + + GRAVDB_RWE=$(namei -m ${PIHOLE_DIR}/${GRAVITY_FI} | grep -v f: | grep ${GRAVITY_FI} | awk '{print $1}') + if [ "$GRAVDB_RWE" = "-rw-rw-r--" ] + then + echo_good + else + echo_fail + + MESSAGE="Attempting to Compensate" + echo_warn + + MESSAGE="Setting Ownership on ${GRAVITY_FI}" + echo_stat + sudo chmod 664 ${PIHOLE_DIR}/${GRAVITY_FI} >/dev/null 2>&1 + error_validate + fi - if [ "$SKIP_CUSTOM" != '1' ] - then - if [ -f ${LOCAL_FOLDR}/${BACKUP_FOLD}/${INPUT_DNSBACKUP_DATE}-${CUSTOM_DNS}.backup ] - then - MESSAGE="Restoring ${CUSTOM_DNS} on $HOSTNAME" - echo_stat - sudo cp ${LOCAL_FOLDR}/${BACKUP_FOLD}/${INPUT_DNSBACKUP_DATE}-${CUSTOM_DNS}.backup ${PIHOLE_DIR}/${CUSTOM_DNS} >/dev/null 2>&1 - error_validate - - MESSAGE="Validating Ownership on ${CUSTOM_DNS}" - echo_stat - - CUSTOMLS_OWN=$(ls -ld ${PIHOLE_DIR}/${CUSTOM_DNS} | awk '{print $3 $4}') - if [ "$CUSTOMLS_OWN" == "rootroot" ] - then - echo_good - else - echo_fail - - MESSAGE="Attempting to Compensate" - echo_warn - - MESSAGE="Setting Ownership on ${CUSTOM_DNS}" - echo_stat - sudo chown root:root ${PIHOLE_DIR}/${CUSTOM_DNS} >/dev/null 2>&1 - error_validate - fi - - MESSAGE="Validating Permissions on ${CUSTOM_DNS}" - echo_stat - - CUSTOMLS_RWE=$(namei -m ${PIHOLE_DIR}/${CUSTOM_DNS} | grep -v f: | grep ${CUSTOM_DNS} | awk '{print $1}') - if [ "$CUSTOMLS_RWE" == "-rw-r--r--" ] - then - echo_good - else - echo_fail - - MESSAGE="Attempting to Compensate" - echo_warn - - MESSAGE="Setting Ownership on ${CUSTOM_DNS}" - echo_stat - sudo chmod 644 ${PIHOLE_DIR}/${CUSTOM_DNS} >/dev/null 2>&1 - error_validate - fi - fi - fi + if [ "$SKIP_CUSTOM" != '1' ] + then + if [ -f ${LOCAL_FOLDR}/${BACKUP_FOLD}/${INPUT_DNSBACKUP_DATE}-${CUSTOM_DNS}.backup ] + then + MESSAGE="Restoring ${CUSTOM_DNS} on $HOSTNAME" + echo_stat + sudo cp ${LOCAL_FOLDR}/${BACKUP_FOLD}/${INPUT_DNSBACKUP_DATE}-${CUSTOM_DNS}.backup ${PIHOLE_DIR}/${CUSTOM_DNS} >/dev/null 2>&1 + error_validate + + MESSAGE="Validating Ownership on ${CUSTOM_DNS}" + echo_stat + + CUSTOMLS_OWN=$(ls -ld ${PIHOLE_DIR}/${CUSTOM_DNS} | awk '{print $3 $4}') + if [ "$CUSTOMLS_OWN" == "rootroot" ] + then + echo_good + else + echo_fail + + MESSAGE="Attempting to Compensate" + echo_warn + + MESSAGE="Setting Ownership on ${CUSTOM_DNS}" + echo_stat + sudo chown root:root ${PIHOLE_DIR}/${CUSTOM_DNS} >/dev/null 2>&1 + error_validate + fi + + MESSAGE="Validating Permissions on ${CUSTOM_DNS}" + echo_stat + + CUSTOMLS_RWE=$(namei -m ${PIHOLE_DIR}/${CUSTOM_DNS} | grep -v f: | grep ${CUSTOM_DNS} | awk '{print $1}') + if [ "$CUSTOMLS_RWE" == "-rw-r--r--" ] + then + echo_good + else + echo_fail + + MESSAGE="Attempting to Compensate" + echo_warn + + MESSAGE="Setting Ownership on ${CUSTOM_DNS}" + echo_stat + sudo chmod 644 ${PIHOLE_DIR}/${CUSTOM_DNS} >/dev/null 2>&1 + error_validate + fi + fi + fi - pull_gs_reload + pull_gs_reload - MESSAGE="Do you want to push the restored configuration to the primary Pi-hole? (yes/no)" - echo_need - read PUSH_TO_PRIMARY + MESSAGE="Do you want to push the restored configuration to the primary Pi-hole? (yes/no)" + echo_need + read PUSH_TO_PRIMARY - if [ "${PUSH_TO_PRIMARY}" == "Yes" ] || [ "${PUSH_TO_PRIMARY}" == "yes" ] || [ "${PUSH_TO_PRIMARY}" == "Y" ] || [ "${PUSH_TO_PRIMARY}" == "y" ] - then - push_gs - elif [ "${PUSH_TO_PRIMARY}" == "No" ] || [ "${PUSH_TO_PRIMARY}" == "no" ] || [ "${PUSH_TO_PRIMARY}" == "N" ] || [ "${PUSH_TO_PRIMARY}" == "n" ] - then - logs_export - exit_withchange - else - MESSAGE="Invalid Selection - Defaulting No" - echo_warn + if [ "${PUSH_TO_PRIMARY}" == "Yes" ] || [ "${PUSH_TO_PRIMARY}" == "yes" ] || [ "${PUSH_TO_PRIMARY}" == "Y" ] || [ "${PUSH_TO_PRIMARY}" == "y" ] + then + push_gs + elif [ "${PUSH_TO_PRIMARY}" == "No" ] || [ "${PUSH_TO_PRIMARY}" == "no" ] || [ "${PUSH_TO_PRIMARY}" == "N" ] || [ "${PUSH_TO_PRIMARY}" == "n" ] + then + logs_export + exit_withchange + else + MESSAGE="Invalid Selection - Defaulting No" + echo_warn - logs_export - exit_withchange - fi + logs_export + exit_withchange + fi } \ No newline at end of file diff --git a/includes/gs-root.sh b/includes/gs-root.sh index 7c6b1d0..2d9b478 100644 --- a/includes/gs-root.sh +++ b/includes/gs-root.sh @@ -6,66 +6,66 @@ ## Sudo Creation Task function task_sudo { - TASKTYPE='SUDO' - MESSAGE="${MESSAGE}: ${TASKTYPE} Requested" - echo_good + TASKTYPE='SUDO' + MESSAGE="${MESSAGE}: ${TASKTYPE} Requested" + echo_good - MESSAGE="Creating Sudoer.d Template" - echo_stat + MESSAGE="Creating Sudoer.d Template" + echo_stat - NEW_SUDO_USER=$(whoami) - echo -e "${NEW_SUDO_USER} ALL=(ALL) NOPASSWD: ALL" > ${LOCAL_FOLDR}/templates/gs-nopasswd.sudo - error_validate + NEW_SUDO_USER=$(whoami) + echo -e "${NEW_SUDO_USER} ALL=(ALL) NOPASSWD: ALL" > ${LOCAL_FOLDR}/templates/gs-nopasswd.sudo + error_validate - MESSAGE="Installing Sudoer.d File" - echo_stat + MESSAGE="Installing Sudoer.d File" + echo_stat - sudo install -m 0440 ${LOCAL_FOLDR}/templates/gs-nopasswd.sudo /etc/sudoers.d/gs-nopasswd - error_validate - - exit_withchange + sudo install -m 0440 ${LOCAL_FOLDR}/templates/gs-nopasswd.sudo /etc/sudoers.d/gs-nopasswd + error_validate + + exit_withchange } ## Root Check function root_check { - if [ ! "$EUID" -ne 0 ] - then - TASKTYPE='ROOT' - MESSAGE="${MESSAGE} ${TASKTYPE}" - echo_fail - - MESSAGE="${PROGRAM} Should Not Run As 'root'" - echo_warn - - exit_nochange - fi + if [ ! "$EUID" -ne 0 ] + then + TASKTYPE='ROOT' + MESSAGE="${MESSAGE} ${TASKTYPE}" + echo_fail + + MESSAGE="${PROGRAM} Should Not Run As 'root'" + echo_warn + + exit_nochange + fi } function new_root_check { - CURRENTUSER=$(whoami) - if [ ! "$EUID" -ne 0 ] - then - LOCALADMIN="" - else - # Check Sudo - SUDOCHECK=$(groups ${CURRENTUSER} | grep -e 'sudo' -e 'wheel') - if [ "$SUDOCHECK" == "" ] - then - LOCALADMIN="nosudo" - else - LOCALADMIN="sudo" - fi - fi - - if [ "$LOCALADMIN" == "nosudo" ] - then - TASKTYPE='ROOT' - MESSAGE="${MESSAGE} ${TASKTYPE}" - echo_fail - - MESSAGE="Insufficent User Rights" - echo_warn - - exit_nochange - fi + CURRENTUSER=$(whoami) + if [ ! "$EUID" -ne 0 ] + then + LOCALADMIN="" + else + # Check Sudo + SUDOCHECK=$(groups ${CURRENTUSER} | grep -e 'sudo' -e 'wheel') + if [ "$SUDOCHECK" == "" ] + then + LOCALADMIN="nosudo" + else + LOCALADMIN="sudo" + fi + fi + + if [ "$LOCALADMIN" == "nosudo" ] + then + TASKTYPE='ROOT' + MESSAGE="${MESSAGE} ${TASKTYPE}" + echo_fail + + MESSAGE="Insufficent User Rights" + echo_warn + + exit_nochange + fi } \ No newline at end of file diff --git a/includes/gs-smart.sh b/includes/gs-smart.sh index ed3a03c..c7123de 100644 --- a/includes/gs-smart.sh +++ b/includes/gs-smart.sh @@ -7,8 +7,8 @@ ## Smart Task function task_smart { TASKTYPE='SMART' - MESSAGE="${MESSAGE}: ${TASKTYPE} Requested" - echo_good + MESSAGE="${MESSAGE}: ${TASKTYPE} Requested" + echo_good show_target validate_gs_folders @@ -22,135 +22,135 @@ function task_smart { ## Smart Sync Function function smart_gs { - MESSAGE="Starting ${TASKTYPE} Analysis" - echo_info - - previous_md5 - md5_compare - backup_settime + MESSAGE="Starting ${TASKTYPE} Analysis" + echo_info + + previous_md5 + md5_compare + backup_settime - PRIDBCHANGE="0" - SECDBCHANGE="0" - PRICLCHANGE="0" - SECCLCHANGE="0" - - if [ "${primaryDBMD5}" != "${last_primaryDBMD5}" ] - then - PRIDBCHANGE="1" - fi - - if [ "${secondDBMD5}" != "${last_secondDBMD5}" ] - then - SECDBCHANGE="1" - fi + PRIDBCHANGE="0" + SECDBCHANGE="0" + PRICLCHANGE="0" + SECCLCHANGE="0" + + if [ "${primaryDBMD5}" != "${last_primaryDBMD5}" ] + then + PRIDBCHANGE="1" + fi + + if [ "${secondDBMD5}" != "${last_secondDBMD5}" ] + then + SECDBCHANGE="1" + fi - if [ "${PRIDBCHANGE}" == "${SECDBCHANGE}" ] - then - if [ "${PRIDBCHANGE}" != "0" ] - then - MESSAGE="Both ${GRAVITY_FI} Have Changed" - echo_warn + if [ "${PRIDBCHANGE}" == "${SECDBCHANGE}" ] + then + if [ "${PRIDBCHANGE}" != "0" ] + then + MESSAGE="Both ${GRAVITY_FI} Have Changed" + echo_warn - PRIDBDATE=$(${SSHPASSWORD} ${SSH_CMD} -p ${SSH_PORT} -i "$HOME/${SSH_PKIF}" ${REMOTE_USER}@${REMOTE_HOST} "stat -c %Y ${RIHOLE_DIR}/${GRAVITY_FI}") - SECDBDATE=$(stat -c %Y ${PIHOLE_DIR}/${GRAVITY_FI}) + PRIDBDATE=$(${SSHPASSWORD} ${SSH_CMD} -p ${SSH_PORT} -i "$HOME/${SSH_PKIF}" ${REMOTE_USER}@${REMOTE_HOST} "stat -c %Y ${RIHOLE_DIR}/${GRAVITY_FI}") + SECDBDATE=$(stat -c %Y ${PIHOLE_DIR}/${GRAVITY_FI}) - if (( "$PRIDBDATE" >= "$SECDBDATE" )) - then - MESSAGE="Primary ${GRAVITY_FI} Last Changed" - echo_warn + if (( "$PRIDBDATE" >= "$SECDBDATE" )) + then + MESSAGE="Primary ${GRAVITY_FI} Last Changed" + echo_warn - pull_gs_grav - PULLRESTART="1" - else - MESSAGE="Secondary ${GRAVITY_FI} Last Changed" - echo_warn + pull_gs_grav + PULLRESTART="1" + else + MESSAGE="Secondary ${GRAVITY_FI} Last Changed" + echo_warn - push_gs_grav - PUSHRESTART="1" - fi - fi - else - if [ "${PRIDBCHANGE}" != "0" ] - then - pull_gs_grav - PULLRESTART="1" - elif [ "${SECDBCHANGE}" != "0" ] - then - push_gs_grav - PUSHRESTART="1" - fi - fi + push_gs_grav + PUSHRESTART="1" + fi + fi + else + if [ "${PRIDBCHANGE}" != "0" ] + then + pull_gs_grav + PULLRESTART="1" + elif [ "${SECDBCHANGE}" != "0" ] + then + push_gs_grav + PUSHRESTART="1" + fi + fi - if [ "${primaryCLMD5}" != "${last_primaryCLMD5}" ] - then - PRICLCHANGE="1" - fi - - if [ "${secondCLMD5}" != "${last_secondCLMD5}" ] - then - SECCLCHANGE="1" - fi + if [ "${primaryCLMD5}" != "${last_primaryCLMD5}" ] + then + PRICLCHANGE="1" + fi + + if [ "${secondCLMD5}" != "${last_secondCLMD5}" ] + then + SECCLCHANGE="1" + fi - if [ "$SKIP_CUSTOM" != '1' ] - then + if [ "$SKIP_CUSTOM" != '1' ] + then - if [ -f "${PIHOLE_DIR}/${CUSTOM_DNS}" ] - then + if [ -f "${PIHOLE_DIR}/${CUSTOM_DNS}" ] + then - if [ "${PRICLCHANGE}" == "${SECCLCHANGE}" ] - then - if [ "${PRICLCHANGE}" != "0" ] - then - MESSAGE="Both ${CUSTOM_DNS} Have Changed" - echo_warn + if [ "${PRICLCHANGE}" == "${SECCLCHANGE}" ] + then + if [ "${PRICLCHANGE}" != "0" ] + then + MESSAGE="Both ${CUSTOM_DNS} Have Changed" + echo_warn - PRICLDATE=$(${SSHPASSWORD} ${SSH_CMD} -p ${SSH_PORT} -i "$HOME/${SSH_PKIF}" ${REMOTE_USER}@${REMOTE_HOST} "stat -c %Y ${RIHOLE_DIR}/${CUSTOM_DNS}") - SECCLDATE=$(stat -c %Y ${PIHOLE_DIR}/${CUSTOM_DNS}) + PRICLDATE=$(${SSHPASSWORD} ${SSH_CMD} -p ${SSH_PORT} -i "$HOME/${SSH_PKIF}" ${REMOTE_USER}@${REMOTE_HOST} "stat -c %Y ${RIHOLE_DIR}/${CUSTOM_DNS}") + SECCLDATE=$(stat -c %Y ${PIHOLE_DIR}/${CUSTOM_DNS}) - if (( "$PRICLDATE" >= "$SECCLDATE" )) - then - MESSAGE="Primary ${CUSTOM_DNS} Last Changed" - echo_warn + if (( "$PRICLDATE" >= "$SECCLDATE" )) + then + MESSAGE="Primary ${CUSTOM_DNS} Last Changed" + echo_warn - pull_gs_cust - PULLRESTART="1" - else - MESSAGE="Secondary ${CUSTOM_DNS} Last Changed" - echo_warn + pull_gs_cust + PULLRESTART="1" + else + MESSAGE="Secondary ${CUSTOM_DNS} Last Changed" + echo_warn - push_gs_cust - PUSHRESTART="1" - fi - fi - else - if [ "${PRICLCHANGE}" != "0" ] - then - pull_gs_cust - PULLRESTART="1" - elif [ "${SECCLCHANGE}" != "0" ] - then - push_gs_cust - PUSHRESTART="1" - fi - fi - else - pull_gs_cust - PULLRESTART="1" - fi - fi + push_gs_cust + PUSHRESTART="1" + fi + fi + else + if [ "${PRICLCHANGE}" != "0" ] + then + pull_gs_cust + PULLRESTART="1" + elif [ "${SECCLCHANGE}" != "0" ] + then + push_gs_cust + PUSHRESTART="1" + fi + fi + else + pull_gs_cust + PULLRESTART="1" + fi + fi - if [ "$PULLRESTART" == "1" ] - then - pull_gs_reload - fi + if [ "$PULLRESTART" == "1" ] + then + pull_gs_reload + fi - if [ "$PUSHRESTART" == "1" ] - then - push_gs_reload - fi + if [ "$PUSHRESTART" == "1" ] + then + push_gs_reload + fi - md5_recheck + md5_recheck - logs_export - exit_withchange + logs_export + exit_withchange } \ No newline at end of file diff --git a/includes/gs-ssh.sh b/includes/gs-ssh.sh index 324df16..44acd7d 100644 --- a/includes/gs-ssh.sh +++ b/includes/gs-ssh.sh @@ -6,180 +6,180 @@ ## Determine SSH Pathways function create_sshcmd { - # if hash ssh 2>/dev/null - # then - # if [ -z "$SSHPASSWORD" ] - # then - timeout --preserve-status ${CMD_TIMEOUT} ${SSH_CMD} -p ${SSH_PORT} -i $HOME/${SSH_PKIF} -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} "${CMD_REQUESTED}" - error_validate - # else - # timeout --preserve-status ${CMD_TIMEOUT} ${SSHPASSWORD} ${SSH_CMD} -p ${SSH_PORT} -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} "${CMD_REQUESTED}" - # error_validate - # fi - # fi + # if hash ssh 2>/dev/null + # then + # if [ -z "$SSHPASSWORD" ] + # then + timeout --preserve-status ${CMD_TIMEOUT} ${SSH_CMD} -p ${SSH_PORT} -i $HOME/${SSH_PKIF} -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} "${CMD_REQUESTED}" + error_validate + # else + # timeout --preserve-status ${CMD_TIMEOUT} ${SSHPASSWORD} ${SSH_CMD} -p ${SSH_PORT} -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} "${CMD_REQUESTED}" + # error_validate + # fi + # fi } ## Determine SSH Pathways function create_rsynccmd { - # if hash ssh 2>/dev/null - # then - # if [ -z "$SSHPASSWORD" ] - # then - rsync --rsync-path="${RSYNC_REPATH}" -e "${SSH_CMD} -p ${SSH_PORT} -i $HOME/${SSH_PKIF}" ${RSYNC_SOURCE} ${RSYNC_TARGET} >/dev/null 2>&1 - error_validate - # else - # rsync --rsync-path="${RSYNC_REPATH}" -e "${SSHPASSWORD} ${SSH_CMD} -p ${SSH_PORT} -i $HOME/${SSH_PKIF}" ${RSYNC_SOURCE} ${RSYNC_TARGET} >/dev/null 2>&1 - # error_validate - # fi - # fi + # if hash ssh 2>/dev/null + # then + # if [ -z "$SSHPASSWORD" ] + # then + rsync --rsync-path="${RSYNC_REPATH}" -e "${SSH_CMD} -p ${SSH_PORT} -i $HOME/${SSH_PKIF}" ${RSYNC_SOURCE} ${RSYNC_TARGET} >/dev/null 2>&1 + error_validate + # else + # rsync --rsync-path="${RSYNC_REPATH}" -e "${SSHPASSWORD} ${SSH_CMD} -p ${SSH_PORT} -i $HOME/${SSH_PKIF}" ${RSYNC_SOURCE} ${RSYNC_TARGET} >/dev/null 2>&1 + # error_validate + # fi + # fi } ## Detect SSH-KEYGEN function detect_sshkeygen { - MESSAGE="Validating SSH-KEYGEN install on $HOSTNAME" - echo_stat - - if hash ssh-keygen >/dev/null 2>&1 - then - echo_good - else - echo_fail - MESSAGE="SSH-KEYGEN is Required" - echo_info - - exit_nochange - fi + MESSAGE="Validating SSH-KEYGEN install on $HOSTNAME" + echo_stat + + if hash ssh-keygen >/dev/null 2>&1 + then + echo_good + else + echo_fail + MESSAGE="SSH-KEYGEN is Required" + echo_info + + exit_nochange + fi } function generate_sshkey { - if [ -z $INPUT_REMOTE_PASS ] - then - if [ -f $HOME/${SSH_PKIF} ] - then - MESSAGE="Using Existing ~/${SSH_PKIF}" - echo_info - else - if hash ssh-keygen >/dev/null 2>&1 - then - MESSAGE="Generating ~/${SSH_PKIF} (SSH-KEYGEN)" - echo_stat - - ssh-keygen -q -P "" -t rsa -f $HOME/${SSH_PKIF} >/dev/null 2>&1 - error_validate - else - MESSAGE="No SSH Key Generator Located" - echo_warn - exit_nochange - fi - fi - fi + if [ -z $INPUT_REMOTE_PASS ] + then + if [ -f $HOME/${SSH_PKIF} ] + then + MESSAGE="Using Existing ~/${SSH_PKIF}" + echo_info + else + if hash ssh-keygen >/dev/null 2>&1 + then + MESSAGE="Generating ~/${SSH_PKIF} (SSH-KEYGEN)" + echo_stat + + ssh-keygen -q -P "" -t rsa -f $HOME/${SSH_PKIF} >/dev/null 2>&1 + error_validate + else + MESSAGE="No SSH Key Generator Located" + echo_warn + exit_nochange + fi + fi + fi } function export_sshkey { - if [ -z $REMOTE_PASS ] - then - if [ -f $HOME/${SSH_PKIF} ] - then - MESSAGE="Registering Key-Pair on ${REMOTE_HOST}" - echo_info - - ssh-copy-id -f -p ${SSH_PORT} -i $HOME/${SSH_PKIF}.pub ${REMOTE_USER}@${REMOTE_HOST} - else - MESSAGE="Error Registering Key-Pair" - echo_warn - fi - fi + if [ -z $REMOTE_PASS ] + then + if [ -f $HOME/${SSH_PKIF} ] + then + MESSAGE="Registering Key-Pair on ${REMOTE_HOST}" + echo_info + + ssh-copy-id -f -p ${SSH_PORT} -i $HOME/${SSH_PKIF}.pub ${REMOTE_USER}@${REMOTE_HOST} + else + MESSAGE="Error Registering Key-Pair" + echo_warn + fi + fi } ## Detect SSH & RSYNC function detect_ssh { - MESSAGE="Validating SSH Client on $HOSTNAME" - echo_stat + MESSAGE="Validating SSH Client on $HOSTNAME" + echo_stat - if hash ssh 2>/dev/null - then - MESSAGE="${MESSAGE} (OpenSSH)" - echo_good - SSH_CMD='ssh' - elif hash dbclient 2>/dev/null - then - MESSAGE="${MESSAGE} (Dropbear)" - echo_fail + if hash ssh 2>/dev/null + then + MESSAGE="${MESSAGE} (OpenSSH)" + echo_good + SSH_CMD='ssh' + elif hash dbclient 2>/dev/null + then + MESSAGE="${MESSAGE} (Dropbear)" + echo_fail - MESSAGE="Dropbear not supported in GS ${VERSION}" - echo_info - exit_nochange - else - echo_fail - - MESSAGE="Attempting to Compensate" - echo_warn - MESSAGE="Installing SSH Client with ${PKG_MANAGER}" - echo_stat - - ${PKG_INSTALL} ssh-client >/dev/null 2>&1 - error_validate - fi + MESSAGE="Dropbear not supported in GS ${VERSION}" + echo_info + exit_nochange + else + echo_fail + + MESSAGE="Attempting to Compensate" + echo_warn + MESSAGE="Installing SSH Client with ${PKG_MANAGER}" + echo_stat + + ${PKG_INSTALL} ssh-client >/dev/null 2>&1 + error_validate + fi - MESSAGE="Validating RSYNC Installed on $HOSTNAME" - echo_stat + MESSAGE="Validating RSYNC Installed on $HOSTNAME" + echo_stat - if hash rsync 2>/dev/null - then - echo_good - else - echo_fail - MESSAGE="RSYNC is Required" - echo_warn + if hash rsync 2>/dev/null + then + echo_good + else + echo_fail + MESSAGE="RSYNC is Required" + echo_warn - distro_check + distro_check - MESSAGE="Attempting to Compensate" - echo_warn + MESSAGE="Attempting to Compensate" + echo_warn - MESSAGE="Installing RSYNC with ${PKG_MANAGER}" - echo_stat - ${PKG_INSTALL} rsync >/dev/null 2>&1 - error_validate - fi + MESSAGE="Installing RSYNC with ${PKG_MANAGER}" + echo_stat + ${PKG_INSTALL} rsync >/dev/null 2>&1 + error_validate + fi } function detect_remotersync { - MESSAGE="Creating Test File on ${REMOTE_HOST}" - echo_stat + MESSAGE="Creating Test File on ${REMOTE_HOST}" + echo_stat - CMD_TIMEOUT='15' - CMD_REQUESTED="touch ~/gs.test" - create_sshcmd + CMD_TIMEOUT='15' + CMD_REQUESTED="touch ~/gs.test" + create_sshcmd - MESSAGE="If pull test fails ensure RSYNC is installed on ${REMOTE_HOST}" - echo_warn + MESSAGE="If pull test fails ensure RSYNC is installed on ${REMOTE_HOST}" + echo_warn - MESSAGE="Pulling Test File to $HOSTNAME" - echo_stat + MESSAGE="Pulling Test File to $HOSTNAME" + echo_stat - RSYNC_REPATH="rsync" - RSYNC_SOURCE="${REMOTE_USER}@${REMOTE_HOST}:~/gs.test" - RSYNC_TARGET="${LOCAL_FOLDR}/gs.test" - create_rsynccmd + RSYNC_REPATH="rsync" + RSYNC_SOURCE="${REMOTE_USER}@${REMOTE_HOST}:~/gs.test" + RSYNC_TARGET="${LOCAL_FOLDR}/gs.test" + create_rsynccmd - MESSAGE="Cleaning Up Local Test File" - echo_stat + MESSAGE="Cleaning Up Local Test File" + echo_stat - rm ${LOCAL_FOLDR}/gs.test - error_validate + rm ${LOCAL_FOLDR}/gs.test + error_validate - MESSAGE="Cleaning Up Remote Test File" - echo_stat + MESSAGE="Cleaning Up Remote Test File" + echo_stat - CMD_TIMEOUT='15' - CMD_REQUESTED="rm ~/gs.test" - create_sshcmd + CMD_TIMEOUT='15' + CMD_REQUESTED="rm ~/gs.test" + create_sshcmd } function show_target { - MESSAGE="Targeting ${REMOTE_USER}@${REMOTE_HOST}" - echo_info + MESSAGE="Targeting ${REMOTE_USER}@${REMOTE_HOST}" + echo_info - detect_ssh + detect_ssh } \ No newline at end of file diff --git a/includes/gs-update.sh b/includes/gs-update.sh index 86395e8..4055761 100644 --- a/includes/gs-update.sh +++ b/includes/gs-update.sh @@ -6,174 +6,174 @@ ## Master Branch function update_gs { - if [ -f "${LOCAL_FOLDR}/dev" ] - then - source ${LOCAL_FOLDR}/dev - else - BRANCH='origin/master' - fi + if [ -f "${LOCAL_FOLDR}/dev" ] + then + source ${LOCAL_FOLDR}/dev + else + BRANCH='origin/master' + fi - if [ "$BRANCH" != "origin/master" ] - then - MESSAGE="Pulling from ${BRANCH}" - echo_info - fi + if [ "$BRANCH" != "origin/master" ] + then + MESSAGE="Pulling from ${BRANCH}" + echo_info + fi - GIT_CHECK=$(git status | awk '{print $1}') - if [ "$GIT_CHECK" == "fatal:" ] - then - MESSAGE="Requires GitHub Installation" - echo_warn - exit_nochange - else - MESSAGE="Updating Cache" - echo_stat - git fetch --all >/dev/null 2>&1 - error_validate - MESSAGE="Applying Update" - echo_stat - git reset --hard ${BRANCH} >/dev/null 2>&1 - error_validate - fi + GIT_CHECK=$(git status | awk '{print $1}') + if [ "$GIT_CHECK" == "fatal:" ] + then + MESSAGE="Requires GitHub Installation" + echo_warn + exit_nochange + else + MESSAGE="Updating Cache" + echo_stat + git fetch --all >/dev/null 2>&1 + error_validate + MESSAGE="Applying Update" + echo_stat + git reset --hard ${BRANCH} >/dev/null 2>&1 + error_validate + fi } ## Show Version function show_version { - echo -e "========================================================" - MESSAGE="${BOLD}${PROGRAM}${NC} by ${CYAN}@vmstan${NC}" - echo_info + echo -e "========================================================" + MESSAGE="${BOLD}${PROGRAM}${NC} by ${CYAN}@vmstan${NC}" + echo_info - MESSAGE="${BLUE}https://github.com/vmstan/gravity-sync${NC}" - echo_info + MESSAGE="${BLUE}https://github.com/vmstan/gravity-sync${NC}" + echo_info - if [ -f ${LOCAL_FOLDR}/dev ] - then - DEVVERSION="dev" - elif [ -f ${LOCAL_FOLDR}/beta ] - then - DEVVERSION="beta" - else - DEVVERSION="" - fi - - MESSAGE="Running Version: ${GREEN}${VERSION}${NC} ${DEVVERSION}" - echo_info + if [ -f ${LOCAL_FOLDR}/dev ] + then + DEVVERSION="dev" + elif [ -f ${LOCAL_FOLDR}/beta ] + then + DEVVERSION="beta" + else + DEVVERSION="" + fi + + MESSAGE="Running Version: ${GREEN}${VERSION}${NC} ${DEVVERSION}" + echo_info - GITVERSION=$(curl -sf https://raw.githubusercontent.com/vmstan/gravity-sync/master/VERSION) - if [ -z "$GITVERSION" ] - then - MESSAGE="Latest Version: ${RED}Unknown${NC}" - else - if [ "$GITVERSION" != "$VERSION" ] - then - MESSAGE="Update Available: ${PURPLE}${GITVERSION}${NC}" - else - MESSAGE="Latest Version: ${GREEN}${GITVERSION}${NC}" - fi - fi - echo_info - echo -e "========================================================" + GITVERSION=$(curl -sf https://raw.githubusercontent.com/vmstan/gravity-sync/master/VERSION) + if [ -z "$GITVERSION" ] + then + MESSAGE="Latest Version: ${RED}Unknown${NC}" + else + if [ "$GITVERSION" != "$VERSION" ] + then + MESSAGE="Update Available: ${PURPLE}${GITVERSION}${NC}" + else + MESSAGE="Latest Version: ${GREEN}${GITVERSION}${NC}" + fi + fi + echo_info + echo -e "========================================================" } function show_info() { - echo -e "========================================================" - echo -e "${YELLOW}Local Pi-hole Settings${NC}" - echo -e "Local Pi-hole Type: ${PH_IN_TYPE}" - echo -e "Local Pi-hole Config Directory: ${PIHOLE_DIR}" - echo -e "Local Pi-hole Binary Directory: ${PIHOLE_BIN}" - echo -e "Local Docker Binary Directory: ${DOCKER_BIN}" - echo -e "Local File Owner Settings: ${DOCKER_BIN}" - echo -e "Local Docker Container Name: ${DOCKER_CON}" - echo -e "" - echo -e "${YELLOW}Remote Pi-hole Settings${NC}" - echo -e "Remote Pi-hole Type: ${RH_IN_TYPE}" - echo -e "Remote Pi-hole Config Directory: ${RIHOLE_DIR}" - echo -e "Remote Pi-hole Binary Directory: ${RIHOLE_BIN}" - echo -e "Remote Docker Binary Directory: ${DOCKER_BIN}" - echo -e "Remote File Owner Settings: ${DOCKER_BIN}" - echo -e "Remote Docker Container Name: ${DOCKER_CON}" - echo -e "========================================================" + echo -e "========================================================" + echo -e "${YELLOW}Local Pi-hole Settings${NC}" + echo -e "Local Pi-hole Type: ${PH_IN_TYPE}" + echo -e "Local Pi-hole Config Directory: ${PIHOLE_DIR}" + echo -e "Local Pi-hole Binary Directory: ${PIHOLE_BIN}" + echo -e "Local Docker Binary Directory: ${DOCKER_BIN}" + echo -e "Local File Owner Settings: ${DOCKER_BIN}" + echo -e "Local Docker Container Name: ${DOCKER_CON}" + echo -e "" + echo -e "${YELLOW}Remote Pi-hole Settings${NC}" + echo -e "Remote Pi-hole Type: ${RH_IN_TYPE}" + echo -e "Remote Pi-hole Config Directory: ${RIHOLE_DIR}" + echo -e "Remote Pi-hole Binary Directory: ${RIHOLE_BIN}" + echo -e "Remote Docker Binary Directory: ${DOCKER_BIN}" + echo -e "Remote File Owner Settings: ${DOCKER_BIN}" + echo -e "Remote Docker Container Name: ${DOCKER_CON}" + echo -e "========================================================" } ## Devmode Task function task_devmode { - TASKTYPE='DEV' - MESSAGE="${MESSAGE}: ${TASKTYPE} Requested" - echo_good - - if [ -f ${LOCAL_FOLDR}/dev ] - then - MESSAGE="Disabling ${TASKTYPE}" - echo_stat - rm -f ${LOCAL_FOLDR}/dev - error_validate - elif [ -f ${LOCAL_FOLDR}/beta ] - then - MESSAGE="Disabling BETA" - echo_stat - rm -f ${LOCAL_FOLDR}/beta - error_validate - - MESSAGE="Enabling ${TASKTYPE}" - echo_stat - touch ${LOCAL_FOLDR}/dev - error_validate - else - MESSAGE="Enabling ${TASKTYPE}" - echo_stat - touch ${LOCAL_FOLDR}/dev - error_validate + TASKTYPE='DEV' + MESSAGE="${MESSAGE}: ${TASKTYPE} Requested" + echo_good + + if [ -f ${LOCAL_FOLDR}/dev ] + then + MESSAGE="Disabling ${TASKTYPE}" + echo_stat + rm -f ${LOCAL_FOLDR}/dev + error_validate + elif [ -f ${LOCAL_FOLDR}/beta ] + then + MESSAGE="Disabling BETA" + echo_stat + rm -f ${LOCAL_FOLDR}/beta + error_validate + + MESSAGE="Enabling ${TASKTYPE}" + echo_stat + touch ${LOCAL_FOLDR}/dev + error_validate + else + MESSAGE="Enabling ${TASKTYPE}" + echo_stat + touch ${LOCAL_FOLDR}/dev + error_validate - MESSAGE="Updating Cache" - echo_stat - git fetch --all >/dev/null 2>&1 - error_validate - - git branch -r + MESSAGE="Updating Cache" + echo_stat + git fetch --all >/dev/null 2>&1 + error_validate + + git branch -r - MESSAGE="Select Branch to Update Against" - echo_need - read INPUT_BRANCH + MESSAGE="Select Branch to Update Against" + echo_need + read INPUT_BRANCH - echo -e "BRANCH='${INPUT_BRANCH}'" >> ${LOCAL_FOLDR}/dev - fi - - update_gs - - exit_withchange + echo -e "BRANCH='${INPUT_BRANCH}'" >> ${LOCAL_FOLDR}/dev + fi + + update_gs + + exit_withchange } ## Update Task function task_update { - TASKTYPE='UPDATE' - MESSAGE="${MESSAGE}: ${TASKTYPE} Requested" - echo_good + TASKTYPE='UPDATE' + MESSAGE="${MESSAGE}: ${TASKTYPE} Requested" + echo_good - dbclient_warning - - update_gs + dbclient_warning + + update_gs - exit_withchange + exit_withchange } ## Version Task function task_version { - TASKTYPE='VERSION' - MESSAGE="${MESSAGE}: ${TASKTYPE} Requested" - echo_good + TASKTYPE='VERSION' + MESSAGE="${MESSAGE}: ${TASKTYPE} Requested" + echo_good - show_version - exit_nochange + show_version + exit_nochange } ## Info Task function task_info() { - TASKTYPE='INFO' - MESSAGE="${MESSAGE}: ${TASKTYPE} Requested" - echo_good - - show_info - - exit_nochange + TASKTYPE='INFO' + MESSAGE="${MESSAGE}: ${TASKTYPE} Requested" + echo_good + + show_info + + exit_nochange } \ No newline at end of file diff --git a/includes/gs-validate.sh b/includes/gs-validate.sh index fb4810f..663c990 100644 --- a/includes/gs-validate.sh +++ b/includes/gs-validate.sh @@ -6,156 +6,156 @@ ## Validate GS Folders function validate_gs_folders { - MESSAGE="Validating ${PROGRAM} Folders on $HOSTNAME" - echo_stat - if [ ! -d ${LOCAL_FOLDR} ] - then - MESSAGE="Unable to Validate ${PROGRAM} Folders on $HOSTNAME" - echo_fail - exit_nochange - fi - - if [ ! -d ${LOCAL_FOLDR}/${BACKUP_FOLD} ] - then - MESSAGE="Unable to Validate ${PROGRAM} Backup Folder on $HOSTNAME" - echo_fail - exit_nochange - fi - echo_good + MESSAGE="Validating ${PROGRAM} Folders on $HOSTNAME" + echo_stat + if [ ! -d ${LOCAL_FOLDR} ] + then + MESSAGE="Unable to Validate ${PROGRAM} Folders on $HOSTNAME" + echo_fail + exit_nochange + fi + + if [ ! -d ${LOCAL_FOLDR}/${BACKUP_FOLD} ] + then + MESSAGE="Unable to Validate ${PROGRAM} Backup Folder on $HOSTNAME" + echo_fail + exit_nochange + fi + echo_good } ## Validate Pi-hole Folders function validate_ph_folders { - MESSAGE="Validating Pi-hole Configuration" - echo_stat - - if [ "$PH_IN_TYPE" == "default" ] - then - if [ ! -f ${PIHOLE_BIN} ] - then - MESSAGE="Unable to Validate that Pi-Hole is Installed" - echo_fail - exit_nochange - fi - elif [ "$PH_IN_TYPE" == "docker" ] - then - FTLCHECK=$(sudo docker container ls | grep 'pihole/pihole') - if [ "$FTLCHECK" == "" ] - then - MESSAGE="Unable to Validate that Pi-Hole is Installed" - echo_fail - exit_nochange - fi - fi + MESSAGE="Validating Pi-hole Configuration" + echo_stat + + if [ "$PH_IN_TYPE" == "default" ] + then + if [ ! -f ${PIHOLE_BIN} ] + then + MESSAGE="Unable to Validate that Pi-Hole is Installed" + echo_fail + exit_nochange + fi + elif [ "$PH_IN_TYPE" == "docker" ] + then + FTLCHECK=$(sudo docker container ls | grep 'pihole/pihole') + if [ "$FTLCHECK" == "" ] + then + MESSAGE="Unable to Validate that Pi-Hole is Installed" + echo_fail + exit_nochange + fi + fi - if [ ! -d ${PIHOLE_DIR} ] - then - MESSAGE="Unable to Validate Pi-Hole Configuration Directory" - echo_fail - exit_nochange - fi - echo_good + if [ ! -d ${PIHOLE_DIR} ] + then + MESSAGE="Unable to Validate Pi-Hole Configuration Directory" + echo_fail + exit_nochange + fi + echo_good } ## Validate SQLite3 function validate_sqlite3 { - MESSAGE="Validating SQLITE Installed on $HOSTNAME" - echo_stat - if hash sqlite3 2>/dev/null - then - # MESSAGE="SQLITE3 Utility Detected" - echo_good - else - MESSAGE="Unable to Validate SQLITE Install on $HOSTNAME" - echo_warn + MESSAGE="Validating SQLITE Installed on $HOSTNAME" + echo_stat + if hash sqlite3 2>/dev/null + then + # MESSAGE="SQLITE3 Utility Detected" + echo_good + else + MESSAGE="Unable to Validate SQLITE Install on $HOSTNAME" + echo_warn - MESSAGE="Installing SQLLITE3 with ${PKG_MANAGER}" - echo_stat - - ${PKG_INSTALL} sqllite3 >/dev/null 2>&1 - error_validate - fi + MESSAGE="Installing SQLLITE3 with ${PKG_MANAGER}" + echo_stat + + ${PKG_INSTALL} sqllite3 >/dev/null 2>&1 + error_validate + fi } ## Validate SSHPASS function validate_os_sshpass { - # SSHPASSWORD='' + # SSHPASSWORD='' - # if hash sshpass 2>/dev/null + # if hash sshpass 2>/dev/null # then - # MESSAGE="SSHPASS Utility Detected" - # echo_warn - # if [ -z "$REMOTE_PASS" ] - # then - # MESSAGE="Using SSH Key-Pair Authentication" - # echo_info - # else - # MESSAGE="Testing Authentication Options" - # echo_stat + # MESSAGE="SSHPASS Utility Detected" + # echo_warn + # if [ -z "$REMOTE_PASS" ] + # then + # MESSAGE="Using SSH Key-Pair Authentication" + # echo_info + # else + # MESSAGE="Testing Authentication Options" + # echo_stat - # timeout 5 ssh -p ${SSH_PORT} -i "$HOME/${SSH_PKIF}" -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} 'exit' >/dev/null 2>&1 - # if [ "$?" != "0" ] - # then - # SSHPASSWORD="sshpass -p ${REMOTE_PASS}" - # MESSAGE="Using SSH Password Authentication" - # echo_warn - # else - # MESSAGE="Valid Key-Pair Detected ${NC}(${RED}Password Ignored${NC})" - # echo_info - # fi - # fi + # timeout 5 ssh -p ${SSH_PORT} -i "$HOME/${SSH_PKIF}" -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} 'exit' >/dev/null 2>&1 + # if [ "$?" != "0" ] + # then + # SSHPASSWORD="sshpass -p ${REMOTE_PASS}" + # MESSAGE="Using SSH Password Authentication" + # echo_warn + # else + # MESSAGE="Valid Key-Pair Detected ${NC}(${RED}Password Ignored${NC})" + # echo_info + # fi + # fi # else # SSHPASSWORD='' - # MESSAGE="Using SSH Key-Pair Authentication" - # echo_info + # MESSAGE="Using SSH Key-Pair Authentication" + # echo_info # fi - - MESSAGE="Validating Connection to ${REMOTE_HOST}" - echo_stat + + MESSAGE="Validating Connection to ${REMOTE_HOST}" + echo_stat - CMD_TIMEOUT='5' - CMD_REQUESTED="exit" - create_sshcmd - + CMD_TIMEOUT='5' + CMD_REQUESTED="exit" + create_sshcmd + } ## Detect Package Manager function distro_check { - if hash apt-get 2>/dev/null - then - PKG_MANAGER="apt-get" - PKG_INSTALL="sudo apt-get --yes --no-install-recommends --quiet install" - elif hash rpm 2>/dev/null - then - if hash dnf 2>/dev/null - then - PKG_MANAGER="dnf" - elif hash yum 2>/dev/null - then - PKG_MANAGER="yum" - else - MESSAGE="Unable to find OS Package Manager" - echo_info - exit_nochange - fi - PKG_INSTALL="sudo ${PKG_MANAGER} install -y" - else - MESSAGE="Unable to find OS Package Manager" - echo_info - exit_nochange - fi + if hash apt-get 2>/dev/null + then + PKG_MANAGER="apt-get" + PKG_INSTALL="sudo apt-get --yes --no-install-recommends --quiet install" + elif hash rpm 2>/dev/null + then + if hash dnf 2>/dev/null + then + PKG_MANAGER="dnf" + elif hash yum 2>/dev/null + then + PKG_MANAGER="yum" + else + MESSAGE="Unable to find OS Package Manager" + echo_info + exit_nochange + fi + PKG_INSTALL="sudo ${PKG_MANAGER} install -y" + else + MESSAGE="Unable to find OS Package Manager" + echo_info + exit_nochange + fi } ## Dropbear Warning function dbclient_warning { - if hash dbclient 2>/dev/null - then - if hash ssh 2>/dev/null - then - NOEMPTYBASHIF="1" - else - MESSAGE="Dropbear support has been deprecated - please convert to OpenSSH" - echo_warn - fi - fi + if hash dbclient 2>/dev/null + then + if hash ssh 2>/dev/null + then + NOEMPTYBASHIF="1" + else + MESSAGE="Dropbear support has been deprecated - please convert to OpenSSH" + echo_warn + fi + fi } \ No newline at end of file diff --git a/prep/gs-install.sh b/prep/gs-install.sh index 0d53fce..3e0fa23 100644 --- a/prep/gs-install.sh +++ b/prep/gs-install.sh @@ -209,22 +209,22 @@ else sudo install -m 0440 /tmp/gs-nopasswd.sudo /etc/sudoers.d/gs-nopasswd fi - if [ "$GS_INSTALL" != "secondary" ] - then - echo -e "[${YELLOW}i${NC}] Gravity Sync Preperation Complete" + if [ "$GS_INSTALL" != "secondary" ] + then + echo -e "[${YELLOW}i${NC}] Gravity Sync Preperation Complete" echo -e "[${YELLOW}i${NC}] Execute on Installer on Secondary" echo -e "[${YELLOW}i${NC}] Check Documentation for Instructions" - echo -e "[${YELLOW}i${NC}] Installation Exiting (without changes)" + echo -e "[${YELLOW}i${NC}] Installation Exiting (without changes)" else echo -e "[${BLUE}>${NC}] Creating Gravity Sync Directories" git clone https://github.com/vmstan/gravity-sync.git - echo -e "[${BLUE}>${NC}] Starting Gravity Sync Configuration" - echo -e "========================================================" - ./gravity-sync/gravity-sync.sh configure <&1 + echo -e "[${BLUE}>${NC}] Starting Gravity Sync Configuration" + echo -e "========================================================" + ./gravity-sync/gravity-sync.sh configure <&1 # echo -e "[${YELLOW}i${NC}] This host is now prepared to configure Gravity Sync!" # echo -e "[${YELLOW}i${NC}] Please run './gravity-sync configure' from $HOME/gravity-sync" # echo -e "[${YELLOW}i${NC}] Visit https://github.com/vmstan/gravity-sync for more instructions." - fi + fi fi