diff --git a/CHANGELOG.md b/CHANGELOG.md index 25659cd..d1e56f0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,10 @@ An example would be setting different caching options for Pi-hole, or specifying - Changes application of permissions for Docker instances to UID:GID instead of names. (#99/#128) - Adds `./gravity-sync info` function to help with troubleshooting installation/configuration settings. +#### 3.2.2 + +- Restore process completely revamped. You can now choose to ignore any of the three elements during restore. The prompts are clearer and more consistent with Gravity Sync script styling. Importantly, lack of backup files in an element will not cause the restoration to fail. + ## 3.1 ### The Container Release diff --git a/VERSION b/VERSION index 0444f32..acf9bf0 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -3.2.1 \ No newline at end of file +3.2.2 \ No newline at end of file diff --git a/gravity-sync.sh b/gravity-sync.sh index 16763dc..e187ac5 100755 --- a/gravity-sync.sh +++ b/gravity-sync.sh @@ -3,7 +3,7 @@ SCRIPT_START=$SECONDS # GRAVITY SYNC BY VMSTAN ##################### PROGRAM='Gravity Sync' -VERSION='3.2.1' +VERSION='3.2.2' # For documentation or downloading updates visit https://github.com/vmstan/gravity-sync # Requires Pi-Hole 5.x or higher already be installed, for help visit https://pi-hole.net diff --git a/includes/gs-colors.sh b/includes/gs-colors.sh index b593e42..10eff5f 100644 --- a/includes/gs-colors.sh +++ b/includes/gs-colors.sh @@ -51,4 +51,9 @@ function echo_fail { ### Request function echo_need { echo -en "${NEED} ${MESSAGE}: " -} \ No newline at end of file +} + +### Lines +function echo_lines { + echo -e "========================================================" +} diff --git a/includes/gs-config.sh b/includes/gs-config.sh index c02b134..b4a50fa 100644 --- a/includes/gs-config.sh +++ b/includes/gs-config.sh @@ -394,9 +394,9 @@ function config_delete { MESSAGE="Configuration File Exists" echo_warn - echo -e "========================================================" + echo_lines cat ${LOCAL_FOLDR}/${CONFIG_FILE} - echo -e "========================================================" + echo_lines MESSAGE="Are you sure you want to erase this configuration?" echo_warn diff --git a/includes/gs-restore.sh b/includes/gs-restore.sh index 5870e35..3a69f5a 100644 --- a/includes/gs-restore.sh +++ b/includes/gs-restore.sh @@ -30,76 +30,152 @@ function restore_gs { 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 + GRAVITY_DATE_LIST=$(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 - - if [ -f ${LOCAL_FOLDR}/${BACKUP_FOLD}/${INPUT_BACKUP_DATE}-${GRAVITY_FI}.backup ] + if [ "${GRAVITY_DATE_LIST}" != "" ] then - MESSAGE="Backup File Selected" - else - MESSAGE="Invalid Request" + MESSAGE="Previous ${GRAVITY_FI} Versions Available to Restore" echo_info - exit_nochange + echo_lines + ls ${LOCAL_FOLDR}/${BACKUP_FOLD} | grep $(date +%Y) | grep ${GRAVITY_FI} | colrm 18 + echo -e "IGNORE-GRAVITY" + echo_lines + + MESSAGE="Select backup date to restore ${GRAVITY_FI} from" + echo_need + read INPUT_BACKUP_DATE + + if [ "$INPUT_BACKUP_DATE" == "IGNORE-GRAVITY" ] + then + MESSAGE="Skipping Gravity" + echo_warn + elif [ -f ${LOCAL_FOLDR}/${BACKUP_FOLD}/${INPUT_BACKUP_DATE}-${GRAVITY_FI}.backup ] + then + MESSAGE="Backup Selected" + echo_good + + DO_GRAVITY_RESTORE='1' + else + MESSAGE="Invalid Request" + echo_info + + exit_nochange + fi fi 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 + CUSTOM_DATE_LIST=$(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 - - if [ -f ${LOCAL_FOLDR}/${BACKUP_FOLD}/${INPUT_DNSBACKUP_DATE}-${CUSTOM_DNS}.backup ] + if [ "${CUSTOM_DATE_LIST}" != "" ] then - MESSAGE="Backup File Selected" - else - MESSAGE="Invalid Request" + MESSAGE="Previous ${CUSTOM_DNS} Versions Available to Restore" echo_info - exit_nochange + echo_lines + ls ${LOCAL_FOLDR}/${BACKUP_FOLD} | grep $(date +%Y) | grep ${CUSTOM_DNS} | colrm 18 + echo -e "IGNORE-CUSTOM" + echo_lines + + MESSAGE="Select backup date to restore ${CUSTOM_DNS} from" + echo_need + read INPUT_DNSBACKUP_DATE + + if [ "$INPUT_DNSBACKUP_DATE" == "IGNORE-CUSTOM" ] + then + MESSAGE="Skipping DNS" + echo_warn + elif [ -f ${LOCAL_FOLDR}/${BACKUP_FOLD}/${INPUT_DNSBACKUP_DATE}-${CUSTOM_DNS}.backup ] + then + MESSAGE="Backup Selected" + echo_good + + DO_CUSTOM_RESTORE='1' + else + MESSAGE="Invalid Request" + echo_fail + + exit_nochange + fi + else + MESSAGE="No ${CUSTOM_DNS} Backups" + echo_info fi fi fi if [ "$INCLUDE_CNAME" == '1' ] then - if [ -f ${DNSMAQ_DIR}/${CNAME_CONF} ] then - ls ${LOCAL_FOLDR}/${BACKUP_FOLD} | grep $(date +%Y) | grep ${CNAME_CONF} | colrm 18 + CNAME_DATE_LIST=$(ls ${LOCAL_FOLDR}/${BACKUP_FOLD} | grep $(date +%Y) | grep ${CNAME_CONF} | colrm 18) - MESSAGE="Select backup date to restore ${CNAME_CONF} from" - echo_need - read INPUT_CNAMEBACKUP_DATE - - if [ -f ${LOCAL_FOLDR}/${BACKUP_FOLD}/${INPUT_CNAMEBACKUP_DATE}-${CNAME_CONF}.backup ] + if [ "${CNAME_DATE_LIST}" != "" ] then - MESSAGE="Backup File Selected" - else - MESSAGE="Invalid Request" + MESSAGE="Previous ${CNAME_CONF} Versions Available to Restore" echo_info - exit_nochange + echo_lines + ls ${LOCAL_FOLDR}/${BACKUP_FOLD} | grep $(date +%Y) | grep ${CNAME_CONF} | colrm 18 + echo -e "IGNORE-CNAME" + echo_lines + + MESSAGE="Select backup date to restore ${CNAME_CONF} from" + echo_need + read INPUT_CNAMEBACKUP_DATE + + if [ "$INPUT_CNAMEBACKUP_DATE" == "IGNORE-CNAME" ] + then + MESSAGE="Skipping CNAME" + echo_warn + elif [ -f ${LOCAL_FOLDR}/${BACKUP_FOLD}/${INPUT_CNAMEBACKUP_DATE}-${CNAME_CONF}.backup ] + then + MESSAGE="Backup Selected" + echo_good + + DO_CNAME_RESTORE='1' + else + MESSAGE="Invalid Request" + echo_fail + + exit_nochange + fi + else + MESSAGE="No ${CNAME_CONF} Backups" + echo_info fi fi fi - MESSAGE="${GRAVITY_FI} from ${INPUT_BACKUP_DATE} Selected" - echo_info - MESSAGE="${CUSTOM_DNS} from ${INPUT_DNSBACKUP_DATE} Selected" - echo_info - MESSAGE="${CNAME_CONF} from ${INPUT_CNAMEBACKUP_DATE} Selected" - echo_info + if [ "$DO_GRAVITY_RESTORE" == "1" ] + then + MESSAGE="${GRAVITY_FI} from ${INPUT_BACKUP_DATE} Selected" + echo_info + else + MESSAGE="${GRAVITY_FI} Restore Unavailable" + echo_info + fi + + if [ "$DO_CUSTOM_RESTORE" == "1" ] + then + MESSAGE="${CUSTOM_DNS} from ${INPUT_DNSBACKUP_DATE} Selected" + echo_info + else + MESSAGE="${CUSTOM_DNS} Restore Unavailable" + echo_info + fi + + if [ "$DO_CNAME_RESTORE" == "1" ] + then + MESSAGE="${CNAME_CONF} from ${INPUT_CNAMEBACKUP_DATE} Selected" + echo_info + else + MESSAGE="${CNAME_CONF} Restore Unavailable" + echo_info + fi intent_validate @@ -109,53 +185,56 @@ function restore_gs { MESSAGE="Stopping Pi-hole Services" echo_stat - sudo service pihole-FTL stop >/dev/null 2>&1 + ${PH_EXEC} 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" ] + if [ "$DO_CUSTOM_RESTORE" == "1" ] then - echo_good - else - echo_fail - - MESSAGE="Attempting to Compensate" - echo_warn - - MESSAGE="Setting Ownership on ${GRAVITY_FI}" + MESSAGE="Restoring ${GRAVITY_FI} on $HOSTNAME" echo_stat - sudo chown ${FILE_OWNER} ${PIHOLE_DIR}/${GRAVITY_FI} >/dev/null 2>&1 + 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 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' ] + if [ "$DO_CUSTOM_RESTORE" == '1' ] then if [ -f ${LOCAL_FOLDR}/${BACKUP_FOLD}/${INPUT_DNSBACKUP_DATE}-${CUSTOM_DNS}.backup ] then @@ -204,7 +283,7 @@ function restore_gs { fi fi - if [ "$INCLUDE_CNAME" == '1' ] + if [ "$DO_CNAME_RESTORE" == '1' ] then if [ -f ${LOCAL_FOLDR}/${BACKUP_FOLD}/${INPUT_CNAMEBACKUP_DATE}-${CNAME_CONF}.backup ] then diff --git a/includes/gs-update.sh b/includes/gs-update.sh index 4b1e2a2..dc8eca1 100644 --- a/includes/gs-update.sh +++ b/includes/gs-update.sh @@ -39,7 +39,7 @@ function update_gs { ## Show Version function show_version { - echo -e "========================================================" + echo_lines MESSAGE="${BOLD}${PROGRAM}${NC} by ${CYAN}@vmstan${NC}" echo_info @@ -72,7 +72,7 @@ function show_version { fi fi echo_info - echo -e "========================================================" + echo_lines } function show_info() { @@ -87,7 +87,7 @@ function show_info() { DEVVERSION="" fi - echo -e "========================================================" + echo_lines echo -e "${YELLOW}Local Software Versions${NC}" echo -e "${RED}Gravity Sync${NC} ${VERSION}${DEVVERSION}" echo -e "${BLUE}Pi-hole${NC}" @@ -199,7 +199,7 @@ function show_info() { fi echo -e "Remote File Owner Settings: ${RILE_OWNER}" - echo -e "========================================================" + echo_lines } ## Devmode Task