mirror of
				https://github.com/vmstan/gravity-sync.git
				synced 2025-10-31 17:07:00 -04:00 
			
		
		
		
	3.4.6 (#244)
* Delete all backups * Remove push/pull files * Maybe rusty on my Bash * Don't delete backups if running a backup job * AND THEN * different if style * Just don't delete anything * Change messages * BACKUP * exempt cleanup from backup task * deactivate sameline * remove sameline * Cleanup samelines * More cleanup * More sameline cleanup * Increase timeout * 3.4.6 * Variables not marked * MATH * MATH? * more math in more places * NEW MATH * MAAAAATH * I don't even know * Keep trying * PLEASE * PLEASE * Too many tested variables finally worked * Add backup integrity wait * silent_error_validate * silent_error_validate removal
This commit is contained in:
		
							parent
							
								
									295b237da9
								
							
						
					
					
						commit
						73ffc9eef1
					
				| @ -3,7 +3,7 @@ SCRIPT_START=$SECONDS | |||||||
| 
 | 
 | ||||||
| # GRAVITY SYNC BY VMSTAN ##################### | # GRAVITY SYNC BY VMSTAN ##################### | ||||||
| PROGRAM='Gravity Sync' | PROGRAM='Gravity Sync' | ||||||
| VERSION='3.4.5' | VERSION='3.4.6' | ||||||
| 
 | 
 | ||||||
| # For documentation or downloading updates visit https://github.com/vmstan/gravity-sync | # 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 | # Requires Pi-Hole 5.x or higher already be installed, for help visit https://pi-hole.net | ||||||
| @ -52,7 +52,8 @@ ROOT_CHECK_AVOID='0'				# replace in gravity-sync.conf to overwrite | |||||||
| 
 | 
 | ||||||
| # Backup Customization | # Backup Customization | ||||||
| BACKUP_RETAIN='3'					# replace in gravity-sync.conf to overwrite | BACKUP_RETAIN='3'					# replace in gravity-sync.conf to overwrite | ||||||
| BACKUP_TIMEOUT='60'                 # replace in gravity-sync.conf to overwrite | BACKUP_TIMEOUT='240'                # replace in gravity-sync.conf to overwrite | ||||||
|  | BACKUP_INTEGRITY_WAIT='5'           # replace in gravity-sync.conf to overwrite | ||||||
| 
 | 
 | ||||||
| # SSH Customization | # SSH Customization | ||||||
| SSH_PORT='22' 						# default SSH port | SSH_PORT='22' 						# default SSH port | ||||||
|  | |||||||
| @ -1,3 +1,4 @@ | |||||||
|  | 
 | ||||||
| # GRAVITY SYNC BY VMSTAN ##################### | # GRAVITY SYNC BY VMSTAN ##################### | ||||||
| # gs-backup.sh ############################### | # gs-backup.sh ############################### | ||||||
| 
 | 
 | ||||||
| @ -15,7 +16,7 @@ function task_backup() { | |||||||
|     backup_local_gravity_integrity |     backup_local_gravity_integrity | ||||||
|     backup_local_custom |     backup_local_custom | ||||||
|     backup_local_cname |     backup_local_cname | ||||||
|     backup_cleanup |     # backup_cleanup | ||||||
|      |      | ||||||
|     logs_export |     logs_export | ||||||
|     exit_withchange |     exit_withchange | ||||||
| @ -37,6 +38,7 @@ function backup_local_gravity_integrity() { | |||||||
|     MESSAGE="${UI_BACKUP_INTEGRITY}" |     MESSAGE="${UI_BACKUP_INTEGRITY}" | ||||||
|     echo_stat |     echo_stat | ||||||
|      |      | ||||||
|  |     sleep $BACKUP_INTEGRITY_WAIT | ||||||
|     secondaryIntegrity=$(sqlite3 ${LOCAL_FOLDR}/${BACKUP_FOLD}/${BACKUPTIMESTAMP}-${GRAVITY_FI}.backup 'PRAGMA integrity_check;' | sed 's/\s.*$//') |     secondaryIntegrity=$(sqlite3 ${LOCAL_FOLDR}/${BACKUP_FOLD}/${BACKUPTIMESTAMP}-${GRAVITY_FI}.backup 'PRAGMA integrity_check;' | sed 's/\s.*$//') | ||||||
|     error_validate |     error_validate | ||||||
|      |      | ||||||
| @ -102,6 +104,7 @@ function backup_remote_gravity_integrity() { | |||||||
|     MESSAGE="${UI_BACKUP_INTEGRITY}" |     MESSAGE="${UI_BACKUP_INTEGRITY}" | ||||||
|     echo_stat |     echo_stat | ||||||
|      |      | ||||||
|  |     sleep $BACKUP_INTEGRITY_WAIT | ||||||
|     primaryIntegrity=$(${SSHPASSWORD} ${SSH_CMD} -p ${SSH_PORT} -i "$HOME/${SSH_PKIF}" ${REMOTE_USER}@${REMOTE_HOST} "sqlite3 ${RIHOLE_DIR}/${GRAVITY_FI}.backup 'PRAGMA integrity_check;'" | sed 's/\s.*$//') |     primaryIntegrity=$(${SSHPASSWORD} ${SSH_CMD} -p ${SSH_PORT} -i "$HOME/${SSH_PKIF}" ${REMOTE_USER}@${REMOTE_HOST} "sqlite3 ${RIHOLE_DIR}/${GRAVITY_FI}.backup 'PRAGMA integrity_check;'" | sed 's/\s.*$//') | ||||||
|     error_validate |     error_validate | ||||||
|      |      | ||||||
| @ -148,12 +151,27 @@ function backup_remote_cname() { | |||||||
| function backup_cleanup() { | function backup_cleanup() { | ||||||
|     MESSAGE="${UI_BACKUP_PURGE}" |     MESSAGE="${UI_BACKUP_PURGE}" | ||||||
|     echo_stat |     echo_stat | ||||||
|  | 
 | ||||||
|  |     rm -f ${LOCAL_FOLDR}/${BACKUP_FOLD}/*.pull | ||||||
|  |     rm -f ${LOCAL_FOLDR}/${BACKUP_FOLD}/*.push | ||||||
|      |      | ||||||
|     find ${LOCAL_FOLDR}/${BACKUP_FOLD}/ -name "*.backup*" -mtime +${BACKUP_RETAIN} -type f -delete |     if [ "${TASKTYPE}" != "BACKUP" ] | ||||||
|     error_validate |     then | ||||||
|  |         if [ "${BACKUP_RETAIN}" == '0' ] | ||||||
|  |         then | ||||||
|  |             rm -f ${LOCAL_FOLDR}/${BACKUP_FOLD}/*.backup | ||||||
|  |             error_validate | ||||||
|  | 
 | ||||||
|  |             MESSAGE="${UI_BACKUP_DELETE_ALL}" | ||||||
|  |             echo_info | ||||||
|  |         else | ||||||
|  |             find ${LOCAL_FOLDR}/${BACKUP_FOLD}/ -name "*.backup*" -mtime +${BACKUP_RETAIN} -type f -delete | ||||||
|  |             error_validate | ||||||
|  | 
 | ||||||
|  |             BACKUP_FOLDER_SIZE=$(du -h ${LOCAL_FOLDR}/${BACKUP_FOLD}  | sed 's/\s.*$//') | ||||||
|      |      | ||||||
|     BACKUP_FOLDER_SIZE=$(du -h ${LOCAL_FOLDR}/${BACKUP_FOLD}  | sed 's/\s.*$//') |             MESSAGE="${BACKUP_RETAIN} ${UI_BACKUP_REMAIN} (${BACKUP_FOLDER_SIZE})" | ||||||
|      |             echo_info | ||||||
|     MESSAGE="${BACKUP_RETAIN} ${UI_BACKUP_REMAIN} (${BACKUP_FOLDER_SIZE})" |         fi | ||||||
|     echo_info |     fi | ||||||
| } | } | ||||||
| @ -7,12 +7,13 @@ | |||||||
| ## No Changes Made | ## No Changes Made | ||||||
| function exit_nochange { | function exit_nochange { | ||||||
|     SCRIPT_END=$SECONDS |     SCRIPT_END=$SECONDS | ||||||
|  |     let SCRIPT_RUN=SCRIPT_END-SCRIPT_START | ||||||
|      |      | ||||||
|     if [ "${TASKTYPE}" == "" ] |     if [ "${TASKTYPE}" == "" ] | ||||||
|     then |     then | ||||||
|         MESSAGE="${PROGRAM} ${UI_EXIT_ABORT} ${UI_EXIT_CALC_END}" |         MESSAGE="${PROGRAM} ${UI_EXIT_ABORT} ${UI_EXIT_CALC_END} ${SCRIPT_RUN} ${UI_EXIT_CALC_TIMER}" | ||||||
|     else |     else | ||||||
|         MESSAGE="${PROGRAM} ${TASKTYPE} ${UI_EXIT_ABORT} ${UI_EXIT_CALC_END}" |         MESSAGE="${PROGRAM} ${TASKTYPE} ${UI_EXIT_ABORT} ${UI_EXIT_CALC_END} ${SCRIPT_RUN} ${UI_EXIT_CALC_TIMER}" | ||||||
|     fi |     fi | ||||||
|      |      | ||||||
|     echo_grav |     echo_grav | ||||||
| @ -22,12 +23,13 @@ function exit_nochange { | |||||||
| ## Changes Made | ## Changes Made | ||||||
| function exit_withchange { | function exit_withchange { | ||||||
|     SCRIPT_END=$SECONDS |     SCRIPT_END=$SECONDS | ||||||
|  |     let SCRIPT_RUN=SCRIPT_END-SCRIPT_START | ||||||
|      |      | ||||||
|     if [ "${TASKTYPE}" == "" ] |     if [ "${TASKTYPE}" == "" ] | ||||||
|     then |     then | ||||||
|         MESSAGE="${PROGRAM} ${UI_EXIT_COMPLETE} ${UI_EXIT_CALC_END}" |         MESSAGE="${PROGRAM} ${UI_EXIT_COMPLETE} ${UI_EXIT_CALC_END} ${SCRIPT_RUN} ${UI_EXIT_CALC_TIMER}" | ||||||
|     else |     else | ||||||
|         MESSAGE="${PROGRAM} ${TASKTYPE} ${UI_EXIT_COMPLETE} ${UI_EXIT_CALC_END}" |         MESSAGE="${PROGRAM} ${TASKTYPE} ${UI_EXIT_COMPLETE} ${UI_EXIT_CALC_END} ${SCRIPT_RUN} ${UI_EXIT_CALC_TIMER}" | ||||||
|     fi |     fi | ||||||
|      |      | ||||||
|     echo_grav |     echo_grav | ||||||
|  | |||||||
| @ -158,12 +158,12 @@ function md5_recheck { | |||||||
|     MESSAGE="${UI_HASHING_REHASHING} ${UI_GRAVITY_NAME}" |     MESSAGE="${UI_HASHING_REHASHING} ${UI_GRAVITY_NAME}" | ||||||
|     echo_stat |     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.*$//') |     primaryDBMD5=$(${SSHPASSWORD} ${SSH_CMD} -p ${SSH_PORT} -i "$HOME/${SSH_PKIF}" ${REMOTE_USER}@${REMOTE_HOST} "md5sum ${RIHOLE_DIR}/${GRAVITY_FI}" | sed 's/\s.*$//') | ||||||
|     silent_error_validate |     error_validate | ||||||
|      |      | ||||||
|     MESSAGE="${UI_HASHING_RECOMPARING} ${UI_GRAVITY_NAME}" |     MESSAGE="${UI_HASHING_RECOMPARING} ${UI_GRAVITY_NAME}" | ||||||
|     echo_stat |     echo_stat | ||||||
|     secondDBMD5=$(md5sum ${PIHOLE_DIR}/${GRAVITY_FI} | sed 's/\s.*$//') |     secondDBMD5=$(md5sum ${PIHOLE_DIR}/${GRAVITY_FI} | sed 's/\s.*$//') | ||||||
|     silent_error_validate |     error_validate | ||||||
|      |      | ||||||
|     if [ "$SKIP_CUSTOM" != '1' ] |     if [ "$SKIP_CUSTOM" != '1' ] | ||||||
|     then |     then | ||||||
| @ -176,12 +176,12 @@ function md5_recheck { | |||||||
|                 echo_stat |                 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.*$//'") |                 primaryCLMD5=$(${SSHPASSWORD} ${SSH_CMD} -p ${SSH_PORT} -i "$HOME/${SSH_PKIF}" ${REMOTE_USER}@${REMOTE_HOST} "md5sum ${RIHOLE_DIR}/${CUSTOM_DNS} | sed 's/\s.*$//'") | ||||||
|                 silent_error_validate |                 error_validate | ||||||
|                  |                  | ||||||
|                 MESSAGE="${UI_HASHING_RECOMPARING} ${UI_CUSTOM_NAME}" |                 MESSAGE="${UI_HASHING_RECOMPARING} ${UI_CUSTOM_NAME}" | ||||||
|                 echo_stat |                 echo_stat | ||||||
|                 secondCLMD5=$(md5sum ${PIHOLE_DIR}/${CUSTOM_DNS} | sed 's/\s.*$//') |                 secondCLMD5=$(md5sum ${PIHOLE_DIR}/${CUSTOM_DNS} | sed 's/\s.*$//') | ||||||
|                 silent_error_validate |                 error_validate | ||||||
|             else |             else | ||||||
|                 MESSAGE="${UI_CUSTOM_NAME} ${UI_HASHING_NOTDETECTED} ${UI_HASHING_PRIMARY}" |                 MESSAGE="${UI_CUSTOM_NAME} ${UI_HASHING_NOTDETECTED} ${UI_HASHING_PRIMARY}" | ||||||
|                 echo_info |                 echo_info | ||||||
| @ -211,12 +211,12 @@ function md5_recheck { | |||||||
|                     echo_stat |                     echo_stat | ||||||
|                      |                      | ||||||
|                     primaryCNMD5=$(${SSHPASSWORD} ${SSH_CMD} -p ${SSH_PORT} -i "$HOME/${SSH_PKIF}" ${REMOTE_USER}@${REMOTE_HOST} "md5sum ${RNSMAQ_DIR}/${CNAME_CONF} | sed 's/\s.*$//'") |                     primaryCNMD5=$(${SSHPASSWORD} ${SSH_CMD} -p ${SSH_PORT} -i "$HOME/${SSH_PKIF}" ${REMOTE_USER}@${REMOTE_HOST} "md5sum ${RNSMAQ_DIR}/${CNAME_CONF} | sed 's/\s.*$//'") | ||||||
|                     silent_error_validate |                     error_validate | ||||||
|                      |                      | ||||||
|                     MESSAGE="${UI_HASHING_RECOMPARING} ${UI_CNAME_NAME}" |                     MESSAGE="${UI_HASHING_RECOMPARING} ${UI_CNAME_NAME}" | ||||||
|                     echo_stat |                     echo_stat | ||||||
|                     secondCNMD5=$(md5sum ${DNSMAQ_DIR}/${CNAME_CONF} | sed 's/\s.*$//') |                     secondCNMD5=$(md5sum ${DNSMAQ_DIR}/${CNAME_CONF} | sed 's/\s.*$//') | ||||||
|                     silent_error_validate |                     error_validate | ||||||
|                 else |                 else | ||||||
|                     MESSAGE="${UI_CNAME_NAME} ${UI_HASHING_NOTDETECTED} ${UI_HASHING_PRIMARY}" |                     MESSAGE="${UI_CNAME_NAME} ${UI_HASHING_NOTDETECTED} ${UI_HASHING_PRIMARY}" | ||||||
|                     echo_info |                     echo_info | ||||||
|  | |||||||
| @ -41,7 +41,7 @@ function detect_sshkeygen { | |||||||
|      |      | ||||||
|     if hash ssh-keygen >/dev/null 2>&1 |     if hash ssh-keygen >/dev/null 2>&1 | ||||||
|     then |     then | ||||||
|         echo_sameline |         echo_good | ||||||
|     else |     else | ||||||
|         echo_fail |         echo_fail | ||||||
|         MESSAGE="SSH-KEYGEN is required on $HOSTNAME" |         MESSAGE="SSH-KEYGEN is required on $HOSTNAME" | ||||||
| @ -99,7 +99,7 @@ function detect_ssh { | |||||||
|     if hash ssh 2>/dev/null |     if hash ssh 2>/dev/null | ||||||
|     then |     then | ||||||
|         MESSAGE="${MESSAGE} (OpenSSH)" |         MESSAGE="${MESSAGE} (OpenSSH)" | ||||||
|         echo_sameline |         echo_good | ||||||
|         SSH_CMD='ssh' |         SSH_CMD='ssh' | ||||||
|     elif hash dbclient 2>/dev/null |     elif hash dbclient 2>/dev/null | ||||||
|     then |     then | ||||||
| @ -127,7 +127,7 @@ function detect_ssh { | |||||||
|      |      | ||||||
|     if hash rsync 2>/dev/null |     if hash rsync 2>/dev/null | ||||||
|     then |     then | ||||||
|         echo_sameline |         echo_good | ||||||
|     else |     else | ||||||
|         echo_fail |         echo_fail | ||||||
|          |          | ||||||
|  | |||||||
| @ -19,9 +19,10 @@ UI_CORE_INIT="Initalizing ${PROGRAM} (${VERSION})" | |||||||
| UI_CORE_RELOCATING='Relocating' | UI_CORE_RELOCATING='Relocating' | ||||||
| 
 | 
 | ||||||
| # Exit | # Exit | ||||||
| UI_EXIT_CALC_END="after $((SCRIPT_END-SCRIPT_START)) seconds" | UI_EXIT_CALC_END='after' | ||||||
| UI_EXIT_ABORT='aborted' | UI_EXIT_ABORT='aborted' | ||||||
| UI_EXIT_COMPLETE='completed' | UI_EXIT_COMPLETE='completed' | ||||||
|  | UI_EXIT_CALC_TIMER='seconds' | ||||||
| 
 | 
 | ||||||
| # Hashing | # Hashing | ||||||
| UI_HASHING_HASHING='Hashing the primary' | UI_HASHING_HASHING='Hashing the primary' | ||||||
| @ -84,6 +85,7 @@ UI_BACKUP_REMAIN='days of backups remain' | |||||||
| UI_BACKUP_INTEGRITY="Checking ${UI_GRAVITY_NAME} backup integrity" | UI_BACKUP_INTEGRITY="Checking ${UI_GRAVITY_NAME} backup integrity" | ||||||
| UI_BACKUP_INTEGRITY_FAILED='Integrity check has failed for the primary' | UI_BACKUP_INTEGRITY_FAILED='Integrity check has failed for the primary' | ||||||
| UI_BACKUP_INTEGRITY_DELETE='Removing failed backup' | UI_BACKUP_INTEGRITY_DELETE='Removing failed backup' | ||||||
|  | UI_BACKUP_DELETE_ALL='All backup files purged' | ||||||
| 
 | 
 | ||||||
| # Restore | # Restore | ||||||
| UI_RESTORE_WARNING="This will overwrite your current Pi-hole settings on $HOSTNAME with a previous version!" | UI_RESTORE_WARNING="This will overwrite your current Pi-hole settings on $HOSTNAME with a previous version!" | ||||||
|  | |||||||
| @ -127,6 +127,7 @@ function show_info() { | |||||||
|     echo -e "Local Pi-hole Type: ${PH_IN_TYPE}" |     echo -e "Local Pi-hole Type: ${PH_IN_TYPE}" | ||||||
|     echo -e "Local Pi-hole Config Directory: ${PIHOLE_DIR}" |     echo -e "Local Pi-hole Config Directory: ${PIHOLE_DIR}" | ||||||
|     echo -e "Local DNSMASQ Config Directory: ${DNSMAQ_DIR}" |     echo -e "Local DNSMASQ Config Directory: ${DNSMAQ_DIR}" | ||||||
|  |     echo -e "Local Gravity Sync Directory: ${LOCAL_FOLDR}"  | ||||||
|      |      | ||||||
|     if [ "${PH_IN_TYPE}" == "default" ] |     if [ "${PH_IN_TYPE}" == "default" ] | ||||||
|     then |     then | ||||||
| @ -192,6 +193,9 @@ function show_info() { | |||||||
|     else |     else | ||||||
|         echo -e "Backup Retention: ${BACKUP_RETAIN} days (custom)" |         echo -e "Backup Retention: ${BACKUP_RETAIN} days (custom)" | ||||||
|     fi |     fi | ||||||
|  | 
 | ||||||
|  |     BACKUP_FOLDER_SIZE=$(du -h ${LOCAL_FOLDR}/${BACKUP_FOLD}  | sed 's/\s.*$//') | ||||||
|  |     echo -e "Backup Folder Size: ${BACKUP_FOLDER_SIZE}" | ||||||
|          |          | ||||||
|     echo -e "" |     echo -e "" | ||||||
|     echo -e "${YELLOW}Remote/Primary Instance Settings${NC}" |     echo -e "${YELLOW}Remote/Primary Instance Settings${NC}" | ||||||
|  | |||||||
| @ -16,7 +16,7 @@ function validate_gs_folders { | |||||||
|         exit_nochange |         exit_nochange | ||||||
|     fi |     fi | ||||||
|      |      | ||||||
|     echo_sameline |     echo_good | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| ## Validate Pi-hole Folders | ## Validate Pi-hole Folders | ||||||
| @ -59,7 +59,7 @@ function validate_ph_folders { | |||||||
|         exit_nochange |         exit_nochange | ||||||
|     fi |     fi | ||||||
|      |      | ||||||
|     echo_sameline |     echo_good | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| ## Validate DNSMASQ Folders | ## Validate DNSMASQ Folders | ||||||
| @ -73,7 +73,7 @@ function validate_dns_folders { | |||||||
|         echo_fail |         echo_fail | ||||||
|         exit_nochange |         exit_nochange | ||||||
|     fi |     fi | ||||||
|     echo_sameline |     echo_good | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| ## Validate SQLite3 | ## Validate SQLite3 | ||||||
| @ -83,7 +83,7 @@ function validate_sqlite3 { | |||||||
|     if hash sqlite3 2>/dev/null |     if hash sqlite3 2>/dev/null | ||||||
|     then |     then | ||||||
|         # MESSAGE="SQLITE3 Utility Detected" |         # MESSAGE="SQLITE3 Utility Detected" | ||||||
|         echo_sameline |         echo_good | ||||||
|     else |     else | ||||||
|         MESSAGE="${UI_VALIDATING_FAIL_BINARY} ${UI_CORE_APP_SQL}" |         MESSAGE="${UI_VALIDATING_FAIL_BINARY} ${UI_CORE_APP_SQL}" | ||||||
|         echo_warn |         echo_warn | ||||||
|  | |||||||
| @ -45,6 +45,7 @@ REMOTE_USER='pi' | |||||||
| ### Backup Customization | ### Backup Customization | ||||||
| # BACKUP_RETAIN=''			# replace in gravity-sync.conf to overwrite | # BACKUP_RETAIN=''			# replace in gravity-sync.conf to overwrite | ||||||
| # BACKUP_TIMEOUT=''			# replace in gravity-sync.conf to overwrite | # BACKUP_TIMEOUT=''			# replace in gravity-sync.conf to overwrite | ||||||
|  | # BACKUP_INTEGRITY_WAIT=''  # time to wait after backup for integrity check | ||||||
| 
 | 
 | ||||||
| ### SSH Customization | ### SSH Customization | ||||||
| # SSH_PORT='' 				# default SSH port | # SSH_PORT='' 				# default SSH port | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user