# GRAVITY SYNC BY VMSTAN ##################### # gs-ui.sh ################################### # For documentation or downloading updates visit https://github.com/vmstan/gravity-sync # This code is called from the main gravity-sync.sh file and should not execute directly! # Interface Settings UI_GRAVITY_NAME='Domain Database' UI_CUSTOM_NAME='Local DNS Records' UI_CNAME_NAME='Local DNS CNAMEs' # Core UI_INVALID_SELECTION='Invalid selection' UI_INVALID_DNS_CONFIG='Invalid DNS replication settings in' UI_CORE_MISSING='Missing' UI_CORE_LOADING='Loading' UI_CORE_EVALUATING='Evaluating arguments' UI_CORE_INIT="Initalizing ${PROGRAM} (${VERSION})" UI_CORE_RELOCATING='Relocating' UI_CORE_APP='Pi-hole' UI_CORE_APP_DNS='DNSMASQ' UI_CORE_APP_SQL='SQLITE3' UI_CORE_OPENSSH='OpenSSH' UI_CORE_RSYNC='RSYNC' UI_CORE_DOCKER='Docker' UI_CORE_PODMAN='Podman' UI_CORE_UC_PRIMARY='Primary' UI_CORE_UC_SECONDARY='Secondary' # Exit UI_EXIT_CALC_END='after' UI_EXIT_ABORT='exited' UI_EXIT_COMPLETE='completed' UI_EXIT_CALC_TIMER='seconds' # Hashing UI_HASHING_HASHING='Hashing the primary' UI_HASHING_COMPARING='Comparing to the secondary' UI_HASHING_DIFFERNCE='Differences detected in the' UI_HASHING_DETECTED='has been detected on the' UI_HASHING_NOTDETECTED='not detected on the' UI_HASHING_PRIMARY='primary host' UI_HASHING_SECONDARY='secondary host' UI_HASHING_REQUIRED='Replication of Pi-hole settings is required' UI_HASHING_NOREP='No replication is required at this time' UI_HASHING_DIAGNOSTICS='Performing replicator diagnostics' UI_HASHING_REHASHING='Rehashing the primary' UI_HASHING_RECOMPARING='Recomparing to the secondary' # Validation UI_VALIDATING='Validating configuration of' UI_VALIDATING_FAIL_CONTAINER='Unable to validate running container instance of' UI_VALIDATING_FAIL_FOLDER='Unable to validate configuration folder for' UI_VALIDATING_FAIL_BINARY='Unable to validate the availibility of' UI_COMPENSATE='Attempting to compensate' UI_SET_FILE_OWNERSHIP='Setting file ownership on' UI_SET_FILE_PERMISSION='Setting file permissions on' UI_VAL_FILE_OWNERSHIP='Validating file ownership on' UI_VAL_FILE_PERMISSION='Validating file permissions on' UI_VAL_GS_FOLDERS="Validating ${PROGRAM} folders on $HOSTNAME" UI_VAL_GS_FOLDERS_FAIL="Unable to validate ${PROGRAM} folders on $HOSTNAME" # Configuration UI_DROPBEAR_DEP='Dropbear support has been deprecated' # Pull/Push UI_PULL_PRIMARY='Pulling the primary' UI_PUSH_SECONDARY='Pushing the secondary' UI_REPLACE_SECONDARY='Replacing the secondary' UI_PULL_RELOAD_WAIT='Isolating regeneration pathways' UI_PUSH_RELOAD_WAIT='Inverting tachyon pulses' UI_FTLDNS_CONFIG_UPDATE='Updating secondary FTLDNS configuration' UI_FTLDNS_CONFIG_RELOAD='Reloading secondary FTLDNS services' UI_FTLDNS_CONFIG_PUSH_UPDATE='Updating primary FTLDNS configuration' UI_FTLDNS_CONFIG_PUSH_RELOAD='Reloading primary FTLDNS services' # Logging UI_LOGGING_SUCCESS='Logging successful' UI_LOGGING_HASHES='Saving the updated hashes from this replication' UI_LOGGING_DISPLAY='Displaying output of previous jobs' UI_LOGGING_EMPTY='is empty' UI_LOGGING_MISSING='is missing' UI_LOGGING_RECENT_COMPLETE='Recent complete executions of' # Backup UI_BACKUP_PRIMARY='Performing copy of primary' UI_BACKUP_COPY='Pulling copy of primary' UI_BACKUP_SECONDARY='Performing copy of secondary' UI_BACKUP_PURGE='Purging unused data files from this Pi-hole instance' UI_BACKUP_REMAIN='days of backups remain' UI_BACKUP_INTEGRITY="Checking ${UI_GRAVITY_NAME} copy integrity" UI_BACKUP_INTEGRITY_FAILED='Integrity check has failed for the primary' UI_BACKUP_INTEGRITY_DELETE='Removing failed copies' UI_BACKUP_DELETE_ALL='All unused data files purged' # Restore UI_RESTORE_WARNING="This will overwrite your current Pi-hole settings on $HOSTNAME with a previous version!" UI_RESTORE_INVALID='Invalid restoration request' UI_RESTORE_SELECT_DATE='Select backup date from which to restore the' UI_RESTORE_SKIPPING='Skipping restore of' UI_RESTORE_BACKUP_SELECTED='backup selected for restoration' UI_RESTORE_BACKUP_UNAVAILABLE='backups are unavailable' UI_RESTORE_FROM='restoring from' UI_RESTORE_TIME_TRAVEL='Preparing calculations for time travel' UI_RESTORE_SECONDARY='Restoring the secondary' UI_RESTORE_PUSH_PROMPT='Do you want to push the restored configuration to the primary Pi-hole? (Y/N)' UI_RESTORE_PUSH_NOPUSH="Configuration will not be pushed to the primaryp Pi-hole" # Purge UI_PURGE_MATRIX_ALIGNMENT='Realigning dilithium crystal matrix' UI_PURGE_DELETE_SSH_KEYS='Deleting SSH key-files' UI_PURGE_CLEANING_DIR="Purging ${PROGRAM} directory" # Automation UI_AUTO_CRON_EXISTS='Automation task exists in crontab' UI_AUTO_CRON_DISPLAY_FREQ='Select synchronization frequency (in minutes)' UI_AUTO_CRON_SELECT_FREQ='Valid options are 5, 10, 15, 30 or 0 to disable (default: 15)' UI_AUTO_CRON_SAVING='Saving new synchronization task to crontab' UI_AUTO_CRON_DISABLED='Automation with crontab has been disabled' # Configuration UI_CONFIG_YESNOY="'Yes' or 'No', blank is default 'Yes'" UI_CONFIG_YESNON="'Yes' or 'No', blank is default 'No'" UI_CONFIG_ALREADY='already exists' UI_ENABLE_REPLICATION_QUEST='Enable replication of' UI_CONFIG_PREF_SAVED='preference saved to' UI_CONFIG_AREYOUSURE='Proceeding will wipe out your existing configuration' UI_CONFIG_DOADVANCED='Do you want to enable advanced installation options' UI_CONFIG_ERASING='Erasing existing' UI_CONFIG_CREATING='Creating new' UI_CONFIG_BASH='Creating gravity-sync alias in Bash config' UI_CONFIG_ALIAS="You must reload your session for 'gravity-sync' alias to function" UI_CONFIG_ICMP_TEST='Testing network connection to' UI_CONFIG_REQUIRED='required settings' UI_CONFIG_ADVANCED='advanced settings' UI_CONFIG_REMOTE='remote host' UI_CONFIG_LOCAL='local host' UI_CONFIG_HOSTREQ='address required' UI_CONFIG_USERREQ='SSH user required' UI_CONFIG_CONT_LOOKUP='Looking for container engines' UI_CONFIG_CONT_DETECT='Docker or Podman container engine' UI_CONFIG_CONT_DETECTED='detected' UI_CONFIG_CONT_DETECTNA='not detected' UI_CONFIG_SSH_KEYPAIR='Key-pair registered to' UI_CONFIG_LOCALSEC='Local/secondary' UI_CONFIG_REMOTEPRI='Remote/primary' UI_CONFIG_INSTANCEREQ='instance type required' UI_CONFIG_INSTANCENAME='instance name required' UI_CONFIG_INSTANCETYPE="'docker' or 'podman' container, or blank for default install" UI_CONFIG_CONTAINER_TYPE='container type' UI_CONFIG_CONTAINER_NAME='container name' UI_CONFIG_INSTANCE_ERROR="${UI_CONFIG_CONTAINER_TYPE} must either be 'docker' or 'podman'" UI_CONFIG_IMAGES='running instances' UI_CONFIG_SAVING='Saving' UI_CONFIG_PIHOLE_DEFAULT="Container name or blank for default 'pihole'" UI_CONFIG_ETC_VOLPATH="'etc' volume path" UI_CONFIG_ETC_VOLPATH_EXAMPLE="Example, '/opt/pihole/etc-pihole'" UI_CONFIG_ETC_VOLDNSQ_EXAMPLE="Example, '/opt/pihole/etc-dnsmasq.d'" UI_CONFIG_SETTING_REQUIRED='This setting is required!' UI_CONFIG_SETTING_DIR_PATH='settings directory path' UI_CONFIG_VOLUME_OWNER='volume ownership' UI_CONFIG_DEFAULT_LEAVE="Leave blank for default" UI_CONFIG_DEFAULT_DNSMASQ_ETC="'/etc/dnsmasq.d'" UI_CONFIG_DEFAULT_PIHOLE_ETC="'/etc/pihole'"