* Catch up 3.3 (#142)

* 3.2.5 (#140)

Co-authored-by: Michael Stanclift <vmstan@mstanclift-a03.vmware.com>

* Adds backup cleanup back to process

* Add backup cleanup to compare script when no changes are detected.

* Trek reference

* Redundant

* 3.2.6

* 3.2.6

Co-authored-by: Michael Stanclift <vmstan@mstanclift-a03.vmware.com>
Co-authored-by: Michael Stanclift <vmstan@mstanclift-a03.local>

* Beginning 3.3.0 work

* Podman support

* Support for pihole running in a podman container (#138)

* add support for pihole running in a podman container

* revert renaming of DOCKER_CON to CON_NAME to avoid breaking existing installations

Co-authored-by: Michael Stanclift <mstanclift@vmware.com>

* Add sudo to call of Pihole container version

* Use dev branch pipe

* Without origin

* ascii

* rotate logo

* Move config files to settings folder

* MIssed an important one

* Relocate logs files

* Filling empty directory

* Regression of sudo fix

* Logs

* More words

* Change sync frequency options

* Remove backup automation

* Bold questions

* name

* elif

* BACKUP_RETAIN=3

* Remove automation flag

* == not !=

* Rearrange

* IF

* Default to 0

* 15 default

* More words!

* ELSE

* tighter columns

* Instance type

* Y/N

Co-authored-by: Michael Stanclift <vmstan@mstanclift-a03.vmware.com>
Co-authored-by: Michael Stanclift <vmstan@mstanclift-a03.local>
Co-authored-by: Martin F. Schumann <mfs@mfs.name>
This commit is contained in:
Michael Stanclift 2021-02-09 16:05:17 -06:00 committed by GitHub
parent 21893687e2
commit 97735f19f1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 363 additions and 143 deletions

3
.gitignore vendored
View File

@ -1,12 +1,13 @@
gravity-sync.log gravity-sync.log
gravity-sync.cron gravity-sync.cron
gravity.db.last
gravity-sync.conf gravity-sync.conf
gravity-sync.md5 gravity-sync.md5
backup/*.last backup/*.last
backup/*.backup backup/*.backup
backup/*.push backup/*.push
backup/*.pull backup/*.pull
logs/*
settings/gravity-sync.conf
dev dev
.vscode .vscode
.DS_Store .DS_Store

View File

@ -1,5 +1,25 @@
# The Changelog # The Changelog
## 3.3
### The Podman Release
For this release, "beta" support for [Podman](https://podman.io) based container deployments has been added. (Thanks to work by [@mfschumann](https://github.com/vmstan/gravity-sync/pull/138)) This is marked as beta because at the moment, Gravity Sync may not be regularly tested with this container engine and so regular support may be limited. Use of the official Pi-hole container image is still required.
This release also removes automated nightly backups as a function of the automation script. You can still execute a manual `./gravity-sync.sh backup` anytime. Automating this function was made redundant by the primary synchronization functions backing up the database files prior to execution in later versions, resulting in multiple backups or backing up unchanged data. Existing users will continue to backup each night unless you run `./gravity-sync.sh automate` again to configure a new schedule, at which time the existing backup job will be deleted.
Additionally, this release focuses on making some of the prompts and messages in Gravity Sync easier to understand. Starting with the initial install and configuration wizard. As the script has grown, added features, and become more complex... more options are necessary during install and it wasn't always clear what to do. This release adds some clarification to various components and will change over time.
#### Configuration Changes
- The first time you execute Gravity Sync after upgrading to 3.3, your `gravity-sync.conf` file will be moved into a `settings` folder in the same directory.
- The first time you execute Gravity Sync after upgrading to 3.3, your existing `gravity-sync.md5`, `gravity-sync.log`, and `gravity-sync.cron` files will be moved into a `logs` folder in the same directory.
- The default number days for which backups are retained has been reduced from 7 to 3.
#### Bug Fixes
- Docker Swarm use for the Pi-hole container should be supported by a change in the execution command.
## 3.2 ## 3.2
### The Alias Release ### The Alias Release

View File

@ -1 +1 @@
3.2.6 3.3.0

View File

@ -3,7 +3,8 @@ SCRIPT_START=$SECONDS
# GRAVITY SYNC BY VMSTAN ##################### # GRAVITY SYNC BY VMSTAN #####################
PROGRAM='Gravity Sync' PROGRAM='Gravity Sync'
VERSION='3.2.6' VERSION='3.3.0'
# 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
@ -17,8 +18,8 @@ VERSION='3.2.6'
# STANDARD VARIABLES ######################### # STANDARD VARIABLES #########################
# Installation Types # Installation Types
PH_IN_TYPE='default' # Pi-hole install type, `default` or `docker` (local) PH_IN_TYPE='default' # Pi-hole install type, `default`, `docker`, or `podman` (local)
RH_IN_TYPE='default' # Pi-hole install type, `default` or `docker` (remote) RH_IN_TYPE='default' # Pi-hole install type, `default`, `docker`, or `podman` (remote)
# Pi-hole Folder/File Customization # Pi-hole Folder/File Customization
PIHOLE_DIR='/etc/pihole' # default Pi-hole data directory (local) PIHOLE_DIR='/etc/pihole' # default Pi-hole data directory (local)
@ -29,10 +30,12 @@ PIHOLE_BIN='/usr/local/bin/pihole' # default Pi-hole binary directory (local)
RIHOLE_BIN='/usr/local/bin/pihole' # default Pi-hole binary directory (remote) RIHOLE_BIN='/usr/local/bin/pihole' # default Pi-hole binary directory (remote)
DOCKER_BIN='/usr/bin/docker' # default Docker binary directory (local) DOCKER_BIN='/usr/bin/docker' # default Docker binary directory (local)
ROCKER_BIN='/usr/bin/docker' # default Docker binary directory (remote) ROCKER_BIN='/usr/bin/docker' # default Docker binary directory (remote)
PODMAN_BIN='/usr/bin/podman' # default Podman binary directory (local)
RODMAN_BIN='/usr/bin/podman' # default Podman binary directory (remote)
FILE_OWNER='pihole:pihole' # default Pi-hole file owner and group (local) FILE_OWNER='pihole:pihole' # default Pi-hole file owner and group (local)
RILE_OWNER='pihole:pihole' # default Pi-hole file owner and group (remote) RILE_OWNER='pihole:pihole' # default Pi-hole file owner and group (remote)
DOCKER_CON='pihole' # default Pi-hole Docker container name (local) DOCKER_CON='pihole' # default Pi-hole container name (local)
ROCKER_CON='pihole' # default Pi-hole Docker container name (remote) ROCKER_CON='pihole' # default Pi-hole container name (remote)
GRAVITY_FI='gravity.db' # default Pi-hole database file GRAVITY_FI='gravity.db' # default Pi-hole database file
CUSTOM_DNS='custom.list' # default Pi-hole local DNS lookups CUSTOM_DNS='custom.list' # default Pi-hole local DNS lookups
@ -48,7 +51,7 @@ PING_AVOID='0' # replace in gravity-sync.conf to overwrite
ROOT_CHECK_AVOID='0' # replace in gravity-sync.conf to overwrite ROOT_CHECK_AVOID='0' # replace in gravity-sync.conf to overwrite
# Backup Customization # Backup Customization
BACKUP_RETAIN='7' # replace in gravity-sync.conf to overwrite BACKUP_RETAIN='3' # replace in gravity-sync.conf to overwrite
# SSH Customization # SSH Customization
SSH_PORT='22' # default SSH port SSH_PORT='22' # default SSH port
@ -60,7 +63,7 @@ LOCAL_FOLDR=$(dirname $GS_FILEPATH) # auto determined - do not change!
CONFIG_FILE='gravity-sync.conf' # must exist with primary host/user configured CONFIG_FILE='gravity-sync.conf' # must exist with primary host/user configured
GS_FILENAME='gravity-sync.sh' # must exist because it's this script GS_FILENAME='gravity-sync.sh' # must exist because it's this script
BACKUP_FOLD='backup' # must exist as subdirectory in LOCAL_FOLDR BACKUP_FOLD='backup' # must exist as subdirectory in LOCAL_FOLDR
LOG_PATH="${LOCAL_FOLDR}" # replace in gravity-sync.conf to overwrite LOG_PATH="${LOCAL_FOLDR}/logs" # replace in gravity-sync.conf to overwrite
SYNCING_LOG='gravity-sync.log' # replace in gravity-sync.conf to overwrite SYNCING_LOG='gravity-sync.log' # replace in gravity-sync.conf to overwrite
CRONJOB_LOG='gravity-sync.cron' # replace in gravity-sync.conf to overwrite CRONJOB_LOG='gravity-sync.cron' # replace in gravity-sync.conf to overwrite
HISTORY_MD5='gravity-sync.md5' # replace in gravity-sync.conf to overwrite HISTORY_MD5='gravity-sync.md5' # replace in gravity-sync.conf to overwrite
@ -183,7 +186,7 @@ case $# in
case $1 in case $1 in
auto|automate) auto|automate)
start_gs start_gs
task_automate $2 $3 ;; task_automate $2 ;;
esac esac
;; ;;

View File

@ -19,75 +19,76 @@ function task_automate {
CRON_EXIST='1' CRON_EXIST='1'
fi fi
MESSAGE="Configuring Hourly Smart Sync" MESSAGE="Configuring Automated Synchronization"
echo_info echo_info
if [[ $1 =~ ^[0-9][0-9]?$ ]] if [[ $1 =~ ^[0-9][0-9]?$ ]]
then then
INPUT_AUTO_FREQ=$1 INPUT_AUTO_FREQ=$1
else else
MESSAGE="Sync Frequency in Minutes (1-30) or 0 to Disable" MESSAGE="Synchronization Frequency in Minutes (5, 10, 15, 30) or 0 to Disable (default 15)"
echo_need echo_need
read INPUT_AUTO_FREQ read INPUT_AUTO_FREQ
INPUT_AUTO_FREQ="${INPUT_AUTO_FREQ:-15}"
fi fi
if [ $INPUT_AUTO_FREQ -gt 30 ] if [ $INPUT_AUTO_FREQ == 5 ] || [ $INPUT_AUTO_FREQ == 10 ] || [ $INPUT_AUTO_FREQ == 15 ] || [ $INPUT_AUTO_FREQ == 30 ]
then 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 ] if [ $CRON_EXIST == 1 ]
then then
clear_cron clear_cron
fi fi
MESSAGE="Saving New Sync Automation" MESSAGE="Saving New Synchronization Automation"
echo_stat echo_stat
(crontab -l 2>/dev/null; echo "*/${INPUT_AUTO_FREQ} * * * * ${BASH_PATH} ${LOCAL_FOLDR}/${GS_FILENAME} smart > ${LOG_PATH}/${CRONJOB_LOG}") | crontab - (crontab -l 2>/dev/null; echo "*/${INPUT_AUTO_FREQ} * * * * ${BASH_PATH} ${LOCAL_FOLDR}/${GS_FILENAME} smart > ${LOG_PATH}/${CRONJOB_LOG}") | crontab -
error_validate error_validate
fi elif [ $INPUT_AUTO_FREQ == 0 ]
MESSAGE="Configuring Daily Backup Frequency"
echo_info
if [[ $2 =~ ^[0-9][0-9]?$ ]]
then then
INPUT_AUTO_BACKUP=$2 if [ $CRON_EXIST == 1 ]
then
clear_cron
MESSAGE="Synchronization Automation Disabled"
echo_warn
else else
MESSAGE="Hour of Day to Backup (1-24) or 0 to Disable" MESSAGE="No Synchronization Automation Scheduled"
echo_need echo_warn
read INPUT_AUTO_BACKUP
fi fi
else
if [ $INPUT_AUTO_BACKUP -gt 24 ]
then
MESSAGE="Invalid Frequency Range" MESSAGE="Invalid Frequency Range"
echo_fail echo_fail
exit_nochange 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 fi
# 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 [ $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
} }

View File

@ -51,7 +51,7 @@ function echo_fail {
### Request ### Request
function echo_need { function echo_need {
echo -en "${NEED} ${MESSAGE}: " echo -en "${NEED} ${BOLD}${MESSAGE}:${NC} "
} }
### Gravity Sync Logo ### Gravity Sync Logo

View File

@ -10,7 +10,9 @@ function task_configure {
MESSAGE="${MESSAGE}: ${TASKTYPE} Requested" MESSAGE="${MESSAGE}: ${TASKTYPE} Requested"
echo_good echo_good
if [ -f ${LOCAL_FOLDR}/${CONFIG_FILE} ] relocate_config_gs
if [ -f ${LOCAL_FOLDR}/settings/${CONFIG_FILE} ]
then then
config_delete config_delete
else else
@ -33,34 +35,64 @@ function config_generate {
MESSAGE="Creating New ${CONFIG_FILE} from Template" MESSAGE="Creating New ${CONFIG_FILE} from Template"
echo_stat echo_stat
cp ${LOCAL_FOLDR}/${CONFIG_FILE}.example ${LOCAL_FOLDR}/${CONFIG_FILE} cp ${LOCAL_FOLDR}/settings/${CONFIG_FILE}.example ${LOCAL_FOLDR}/settings/${CONFIG_FILE}
error_validate error_validate
echo_lines
echo -e "Welcome to the ${PURPLE}Gravity Sync${NC} Configuration Wizard"
echo -e "Please read through ${BLUE}https://github.com/vmstan/gravity-sync/wiki${NC} before you continue!"
echo_blank
echo -e "If the installer detects that you have a supported container engine (Docker or Podman) installed,"
echo -e "you will be directed to the advanced installation options. Otherwise you can manually enable this"
echo -e "to adjust settings such as custom Pi-hole binary or configuration directories, SSH options, CNAME"
echo -e "replication, and backup retention."
echo_blank
echo -e "Gravity Sync uses a primary/secondary model for replication, and normally syncs changes from the "
echo -e "primary to the secondary. The LOCAL Pi-hole where you are running this configuration script is"
echo -e "considered the the SECONDARY Pi-hole! The REMOTE Pi-hole where you will normally make configuration"
echo -e "changes is considered the PRIMARY Pi-hole."
echo_blank
echo -e "Confused? Refer back to the documentation."
echo_lines
docker_detect docker_detect
if [ "${DOCKERREADY}" == "1" ] podman_detect
if [ "${DOCKERREADY}" == "1" ] || [ "${PODMANREADY}" == "1" ]
then then
MESSAGE="Container Engine Detected"
echo_good
MESSAGE="Advanced Configuration Required" MESSAGE="Advanced Configuration Required"
echo_info echo_info
advanced_config_generate advanced_config_generate
else else
MESSAGE="Use Advanced Installation Options? (Leave blank for default 'No')" MESSAGE="Use Advanced Installation Options? (Y/N, default N)"
echo_need echo_need
read INPUT_ADVANCED_INSTALL read INPUT_ADVANCED_INSTALL
INPUT_ADVANCED_INSTALL="${INPUT_ADVANCED_INSTALL:-N}" INPUT_ADVANCED_INSTALL="${INPUT_ADVANCED_INSTALL:-N}"
if [ "${INPUT_ADVANCED_INSTALL}" != "N" ] if [ "${INPUT_ADVANCED_INSTALL}" == "N" ]
then then
MESSAGE="Advanced Configuration Selected" MESSAGE="Advanced Configuration Selected"
echo_info echo_info
advanced_config_generate advanced_config_generate
elif [ "${INPUT_ADVANCED_INSTALL}" == "Y" ]
then
MESSAGE="Standard Configuration Selected"
echo_info
else
MESSAGE="Invalid Selection"
echo_warn
exit_nochange
fi fi
fi fi
MESSAGE="Standard Settings" MESSAGE="Required Gravity Sync Settings"
echo_info echo_info
MESSAGE="Primary Pi-hole Address (IP or DNS)" MESSAGE="Primary/Remote Pi-hole Address (IP or DNS)"
echo_need echo_need
read INPUT_REMOTE_HOST read INPUT_REMOTE_HOST
@ -75,25 +107,25 @@ function config_generate {
echo_warn echo_warn
fi fi
MESSAGE="SSH User for ${INPUT_REMOTE_HOST}" MESSAGE="Saving Primary/Remote Host to ${CONFIG_FILE}"
echo_stat
sed -i "/REMOTE_HOST='192.168.1.10'/c\REMOTE_HOST='${INPUT_REMOTE_HOST}'" ${LOCAL_FOLDR}/settings/${CONFIG_FILE}
error_validate
MESSAGE="Existing SSH User for ${INPUT_REMOTE_HOST}"
echo_need echo_need
read INPUT_REMOTE_USER read INPUT_REMOTE_USER
MESSAGE="Saving Host to ${CONFIG_FILE}" MESSAGE="Saving User "${INPUT_REMOTE_USER}" to ${CONFIG_FILE}"
echo_stat echo_stat
sed -i "/REMOTE_HOST='192.168.1.10'/c\REMOTE_HOST='${INPUT_REMOTE_HOST}'" ${LOCAL_FOLDR}/${CONFIG_FILE} sed -i "/REMOTE_USER='pi'/c\REMOTE_USER='${INPUT_REMOTE_USER}'" ${LOCAL_FOLDR}/settings/${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 error_validate
generate_sshkey generate_sshkey
MESSAGE="Importing New ${CONFIG_FILE}" MESSAGE="Importing New ${CONFIG_FILE}"
echo_stat echo_stat
source ${LOCAL_FOLDR}/${CONFIG_FILE} source ${LOCAL_FOLDR}/settings/${CONFIG_FILE}
error_validate error_validate
export_sshkey export_sshkey
@ -109,40 +141,61 @@ function config_generate {
## Advanced Configuration Options ## Advanced Configuration Options
function advanced_config_generate { function advanced_config_generate {
MESSAGE="Local Pi-hole in Docker Container? (Leave blank for default 'No')" MESSAGE="Local/Secondary Pi-hole Instance Type? (Allowed: 'docker' or 'podman' or 'default')"
echo_need echo_need
read INPUT_PH_IN_TYPE read INPUT_PH_IN_TYPE
INPUT_PH_IN_TYPE="${INPUT_PH_IN_TYPE:-N}" INPUT_PH_IN_TYPE="${INPUT_PH_IN_TYPE:-default}"
if [ "${INPUT_PH_IN_TYPE}" != "N" ] if [ "${INPUT_PH_IN_TYPE}" != "default" ]
then then
MESSAGE="Saving Local Docker Setting to ${CONFIG_FILE}" if [ "${INPUT_PH_IN_TYPE}" != "docker" ] && [ "${INPUT_PH_IN_TYPE}" != "podman" ]
then
MESSAGE="Local/Secondary Container Type must either be 'docker' or 'podman'"
echo_warn
exit_withchanges
fi
MESSAGE="Saving Local/Secondary Container Type Setting to ${CONFIG_FILE}"
echo_stat echo_stat
sed -i "/# PH_IN_TYPE=''/c\PH_IN_TYPE='docker'" ${LOCAL_FOLDR}/${CONFIG_FILE} sed -i "/# PH_IN_TYPE=''/c\PH_IN_TYPE='${INPUT_PH_IN_TYPE}'" ${LOCAL_FOLDR}/settings/${CONFIG_FILE}
error_validate error_validate
MESSAGE="Local Docker Container Name? (Leave blank for default 'pihole')"
MESSAGE="Displaying Currently Running Container Images"
echo_info
echo_lines
if [ "${INPUT_PH_IN_TYPE}" == "docker" ]
then
sudo docker container ls
elif [ "${INPUT_PH_IN_TYPE}" == "podman" ]
then
sudo podman container ls
fi
echo_lines
MESSAGE="Local/Secondary Container Name? (Leave blank for default 'pihole')"
echo_need echo_need
read INPUT_DOCKER_CON read INPUT_DOCKER_CON
INPUT_DOCKER_CON="${INPUT_DOCKER_CON:-pihole}" INPUT_DOCKER_CON="${INPUT_DOCKER_CON:-pihole}"
if [ "${INPUT_DOCKER_CON}" != "pihole" ] if [ "${INPUT_DOCKER_CON}" != "pihole" ]
then then
MESSAGE="Saving Local Container Name to ${CONFIG_FILE}" MESSAGE="Saving Local/Secondary Container Name to ${CONFIG_FILE}"
echo_stat echo_stat
sed -i "/# DOCKER_CON=''/c\DOCKER_CON='${INPUT_DOCKER_CON}'" ${LOCAL_FOLDR}/${CONFIG_FILE} sed -i "/# DOCKER_CON=''/c\DOCKER_CON='${INPUT_DOCKER_CON}'" ${LOCAL_FOLDR}/settings/${CONFIG_FILE}
error_validate error_validate
fi fi
MESSAGE="Local Pi-hole 'etc' Volume Path? (Required, no trailing slash)" MESSAGE="Local/Secondary Pi-hole 'etc' Volume Path? (Required, no trailing slash)"
echo_need echo_need
read INPUT_PIHOLE_DIR read INPUT_PIHOLE_DIR
if [ "${INPUT_PIHOLE_DIR}" != "" ] if [ "${INPUT_PIHOLE_DIR}" != "" ]
then then
MESSAGE="Saving Local Pi-hole Volume to ${CONFIG_FILE}" MESSAGE="Saving Local/Secondary Pi-hole Volume to ${CONFIG_FILE}"
echo_stat echo_stat
sed -i "/# PIHOLE_DIR=''/c\PIHOLE_DIR='${INPUT_PIHOLE_DIR}'" ${LOCAL_FOLDR}/${CONFIG_FILE} sed -i "/# PIHOLE_DIR=''/c\PIHOLE_DIR='${INPUT_PIHOLE_DIR}'" ${LOCAL_FOLDR}/settings/${CONFIG_FILE}
error_validate error_validate
SKIP_PIHOLE_DIR="1" SKIP_PIHOLE_DIR="1"
else else
@ -151,15 +204,15 @@ function advanced_config_generate {
exit_withchanges exit_withchanges
fi fi
MESSAGE="Local DNSMASQ 'etc' Volume Path? (Required, no trailing slash)" MESSAGE="Local/Secondary DNSMASQ 'etc' Volume Path? (Required, no trailing slash)"
echo_need echo_need
read INPUT_DNSMAQ_DIR read INPUT_DNSMAQ_DIR
if [ "${INPUT_DNSMAQ_DIR}" != "" ] if [ "${INPUT_DNSMAQ_DIR}" != "" ]
then then
MESSAGE="Saving Local DNSMASQ Volume to ${CONFIG_FILE}" MESSAGE="Saving Local/Secondary DNSMASQ Volume to ${CONFIG_FILE}"
echo_stat echo_stat
sed -i "/# DNSMAQ_DIR=''/c\DNSMAQ_DIR='${INPUT_DNSMAQ_DIR}'" ${LOCAL_FOLDR}/${CONFIG_FILE} sed -i "/# DNSMAQ_DIR=''/c\DNSMAQ_DIR='${INPUT_DNSMAQ_DIR}'" ${LOCAL_FOLDR}/settings/${CONFIG_FILE}
error_validate error_validate
SKIP_DNSMASQ_DIR="1" SKIP_DNSMASQ_DIR="1"
else else
@ -168,46 +221,52 @@ function advanced_config_generate {
exit_withchanges exit_withchanges
fi fi
MESSAGE="Saving Local Volume Ownership to ${CONFIG_FILE}" MESSAGE="Saving Local/Secondary Volume Ownership to ${CONFIG_FILE}"
echo_stat echo_stat
sed -i "/# FILE_OWNER=''/c\FILE_OWNER='999:999'" ${LOCAL_FOLDR}/${CONFIG_FILE} sed -i "/# FILE_OWNER=''/c\FILE_OWNER='999:999'" ${LOCAL_FOLDR}/settings/${CONFIG_FILE}
error_validate error_validate
fi fi
MESSAGE="Remote Pi-hole in Docker Container? (Leave blank for default 'No')" MESSAGE="Primary/Remote Pi-hole Instance Type? (Allowed: 'docker' or 'podman' or 'default')"
echo_need echo_need
read INPUT_RH_IN_TYPE read INPUT_RH_IN_TYPE
INPUT_RH_IN_TYPE="${INPUT_RH_IN_TYPE:-N}" INPUT_RH_IN_TYPE="${INPUT_RH_IN_TYPE:-default}"
if [ "${INPUT_RH_IN_TYPE}" != "N" ] if [ "${INPUT_RH_IN_TYPE}" != "default" ]
then then
MESSAGE="Saving Remote Docker Setting to ${CONFIG_FILE}" if [ "${INPUT_RH_IN_TYPE}" != "docker" ] && [ "${INPUT_RH_IN_TYPE}" != "podman" ]
then
MESSAGE="Primary/Remote Container Type must either be 'docker' or 'podman'"
echo_warn
exit_withchanges
fi
MESSAGE="Saving Primary/Remote Container Type Setting to ${CONFIG_FILE}"
echo_stat echo_stat
sed -i "/# RH_IN_TYPE=''/c\RH_IN_TYPE='docker'" ${LOCAL_FOLDR}/${CONFIG_FILE} sed -i "/# RH_IN_TYPE=''/c\RH_IN_TYPE='${INPUT_RH_IN_TYPE}'" ${LOCAL_FOLDR}/settings/${CONFIG_FILE}
error_validate error_validate
MESSAGE="Remote Docker Container Name? (Leave blank for default 'pihole')" MESSAGE="Primary/Remote Container Name? (Leave blank for default 'pihole')"
echo_need echo_need
read INPUT_ROCKER_CON read INPUT_ROCKER_CON
INPUT_ROCKER_CON="${INPUT_ROCKER_CON:-pihole}" INPUT_ROCKER_CON="${INPUT_ROCKER_CON:-pihole}"
if [ "${INPUT_ROCKER_CON}" != "pihole" ] if [ "${INPUT_ROCKER_CON}" != "pihole" ]
then then
MESSAGE="Saving Remote Container Name to ${CONFIG_FILE}" MESSAGE="Saving Primary/Remote Container Name to ${CONFIG_FILE}"
echo_stat echo_stat
sed -i "/# ROCKER_CON=''/c\ROCKER_CON='${INPUT_ROCKER_CON}'" ${LOCAL_FOLDR}/${CONFIG_FILE} sed -i "/# ROCKER_CON=''/c\ROCKER_CON='${INPUT_ROCKER_CON}'" ${LOCAL_FOLDR}/settings/${CONFIG_FILE}
error_validate error_validate
fi fi
MESSAGE="Remote Pi-hole 'etc' Volume Path? (Required, no trailing slash)" MESSAGE="Primary/Remote Pi-hole 'etc' Volume Path? (Required, no trailing slash)"
echo_need echo_need
read INPUT_RIHOLE_DIR read INPUT_RIHOLE_DIR
if [ "${INPUT_RIHOLE_DIR}" != "" ] if [ "${INPUT_RIHOLE_DIR}" != "" ]
then then
MESSAGE="Saving Remote Pi-hole Volume to ${CONFIG_FILE}" MESSAGE="Saving Primary/Remote Pi-hole Volume to ${CONFIG_FILE}"
echo_stat echo_stat
sed -i "/# RIHOLE_DIR=''/c\RIHOLE_DIR='${INPUT_RIHOLE_DIR}'" ${LOCAL_FOLDR}/${CONFIG_FILE} sed -i "/# RIHOLE_DIR=''/c\RIHOLE_DIR='${INPUT_RIHOLE_DIR}'" ${LOCAL_FOLDR}/settings/${CONFIG_FILE}
error_validate error_validate
SKIP_RIHOLE_DIR="1" SKIP_RIHOLE_DIR="1"
else else
@ -216,15 +275,15 @@ function advanced_config_generate {
exit_withchanges exit_withchanges
fi fi
MESSAGE="Remote DNSMASQ 'etc' Volume Path? (Required, no trailing slash)" MESSAGE="Primary/Remote DNSMASQ 'etc' Volume Path? (Required, no trailing slash)"
echo_need echo_need
read INPUT_RNSMAQ_DIR read INPUT_RNSMAQ_DIR
if [ "${INPUT_RNSMAQ_DIR}" != "" ] if [ "${INPUT_RNSMAQ_DIR}" != "" ]
then then
MESSAGE="Saving Remote DNSMASQ Volume to ${CONFIG_FILE}" MESSAGE="Saving Primary/Remote DNSMASQ Volume to ${CONFIG_FILE}"
echo_stat echo_stat
sed -i "/# RNSMAQ_DIR=''/c\RNSMAQ_DIR='${INPUT_RNSMAQ_DIR}'" ${LOCAL_FOLDR}/${CONFIG_FILE} sed -i "/# RNSMAQ_DIR=''/c\RNSMAQ_DIR='${INPUT_RNSMAQ_DIR}'" ${LOCAL_FOLDR}/settings/${CONFIG_FILE}
error_validate error_validate
SKIP_RNSMASQ_DIR="1" SKIP_RNSMASQ_DIR="1"
else else
@ -233,78 +292,78 @@ function advanced_config_generate {
exit_withchanges exit_withchanges
fi fi
MESSAGE="Saving Remote Volume Ownership to ${CONFIG_FILE}" MESSAGE="Saving Primary/Remote Volume Ownership to ${CONFIG_FILE}"
echo_stat echo_stat
sed -i "/# RILE_OWNER=''/c\RILE_OWNER='999:999'" ${LOCAL_FOLDR}/${CONFIG_FILE} sed -i "/# RILE_OWNER=''/c\RILE_OWNER='999:999'" ${LOCAL_FOLDR}/settings/${CONFIG_FILE}
error_validate error_validate
fi fi
if [ "$SKIP_PIHOLE_DIR" != "1" ] if [ "$SKIP_PIHOLE_DIR" != "1" ]
then then
MESSAGE="Local Pi-hole Settings Directory Path? (Leave blank for default '/etc/pihole')" MESSAGE="Local/Secondary Pi-hole Settings Directory Path? (Leave blank for default '/etc/pihole')"
echo_need echo_need
read INPUT_PIHOLE_DIR read INPUT_PIHOLE_DIR
INPUT_PIHOLE_DIR="${INPUT_PIHOLE_DIR:-/etc/pihole}" INPUT_PIHOLE_DIR="${INPUT_PIHOLE_DIR:-/etc/pihole}"
if [ "${INPUT_PIHOLE_DIR}" != "/etc/pihole" ] if [ "${INPUT_PIHOLE_DIR}" != "/etc/pihole" ]
then then
MESSAGE="Saving Local Pi-hole Settings Directory Path to ${CONFIG_FILE}" MESSAGE="Saving Local/Secondary Pi-hole Settings Directory Path to ${CONFIG_FILE}"
echo_stat echo_stat
sed -i "/# PIHOLE_DIR=''/c\PIHOLE_DIR='${INPUT_PIHOLE_DIR}'" ${LOCAL_FOLDR}/${CONFIG_FILE} sed -i "/# PIHOLE_DIR=''/c\PIHOLE_DIR='${INPUT_PIHOLE_DIR}'" ${LOCAL_FOLDR}/settings/${CONFIG_FILE}
error_validate error_validate
fi fi
fi fi
if [ "$SKIP_RIHOLE_DIR" != "1" ] if [ "$SKIP_RIHOLE_DIR" != "1" ]
then then
MESSAGE="Remote Pi-hole Settings Directory Path? (Leave blank for default '/etc/pihole')" MESSAGE="Primary/Remote Pi-hole Settings Directory Path? (Leave blank for default '/etc/pihole')"
echo_need echo_need
read INPUT_RIHOLE_DIR read INPUT_RIHOLE_DIR
INPUT_RIHOLE_DIR="${INPUT_RIHOLE_DIR:-/etc/pihole}" INPUT_RIHOLE_DIR="${INPUT_RIHOLE_DIR:-/etc/pihole}"
if [ "${INPUT_RIHOLE_DIR}" != "/etc/pihole" ] if [ "${INPUT_RIHOLE_DIR}" != "/etc/pihole" ]
then then
MESSAGE="Saving Remote Pi-hole Settings Directory Path to ${CONFIG_FILE}" MESSAGE="Saving Primary/Remote Pi-hole Settings Directory Path to ${CONFIG_FILE}"
echo_stat echo_stat
sed -i "/# RIHOLE_DIR=''/c\RIHOLE_DIR='${INPUT_RIHOLE_DIR}'" ${LOCAL_FOLDR}/${CONFIG_FILE} sed -i "/# RIHOLE_DIR=''/c\RIHOLE_DIR='${INPUT_RIHOLE_DIR}'" ${LOCAL_FOLDR}/settings/${CONFIG_FILE}
error_validate error_validate
fi fi
fi fi
if [ "$SKIP_DNSMASQ_DIR" != "1" ] if [ "$SKIP_DNSMASQ_DIR" != "1" ]
then then
MESSAGE="Local DNSMASQ Settings Directory Path? (Leave blank for default '/etc/dnsmasq.d')" MESSAGE="Local/Secondary DNSMASQ Settings Directory Path? (Leave blank for default '/etc/dnsmasq.d')"
echo_need echo_need
read INPUT_DNSMASQ_DIR read INPUT_DNSMASQ_DIR
INPUT_DNSMASQ_DIR="${INPUT_DNSMASQ_DIR:-/etc/dnsmasq.d}" INPUT_DNSMASQ_DIR="${INPUT_DNSMASQ_DIR:-/etc/dnsmasq.d}"
if [ "${INPUT_DNSMASQ_DIR}" != "/etc/dnsmasq.d" ] if [ "${INPUT_DNSMASQ_DIR}" != "/etc/dnsmasq.d" ]
then then
MESSAGE="Saving Local DNSMASQ Settings Directory Path to ${CONFIG_FILE}" MESSAGE="Saving Local/Secondary DNSMASQ Settings Directory Path to ${CONFIG_FILE}"
echo_stat echo_stat
sed -i "/# DNSMASQ_DIR=''/c\DNSMASQ_DIR='${INPUT_DNSMASQ_DIR}'" ${LOCAL_FOLDR}/${CONFIG_FILE} sed -i "/# DNSMASQ_DIR=''/c\DNSMASQ_DIR='${INPUT_DNSMASQ_DIR}'" ${LOCAL_FOLDR}/settings/${CONFIG_FILE}
error_validate error_validate
fi fi
fi fi
if [ "$SKIP_RNSMASQ_DIR" != "1" ] if [ "$SKIP_RNSMASQ_DIR" != "1" ]
then then
MESSAGE="Remote DNSMASQ Settings Directory Path? (Leave blank for default '/etc/dnsmasq.d')" MESSAGE="Primary/Remote DNSMASQ Settings Directory Path? (Leave blank for default '/etc/dnsmasq.d')"
echo_need echo_need
read INPUT_RNSMASQ_DIR read INPUT_RNSMASQ_DIR
INPUT_RNSMASQ_DIR="${INPUT_RNSMASQ_DIR:-/etc/dnsmasq.d}" INPUT_RNSMASQ_DIR="${INPUT_RNSMASQ_DIR:-/etc/dnsmasq.d}"
if [ "${INPUT_RNSMASQ_DIR}" != "/etc/dnsmasq.d" ] if [ "${INPUT_RNSMASQ_DIR}" != "/etc/dnsmasq.d" ]
then then
MESSAGE="Saving Remote DNSMASQ Settings Directory Path to ${CONFIG_FILE}" MESSAGE="Saving Primary/Remote DNSMASQ Settings Directory Path to ${CONFIG_FILE}"
echo_stat echo_stat
sed -i "/# RNSMASQ_DIR=''/c\RNSMASQ_DIR='${INPUT_RNSMASQ_DIR}'" ${LOCAL_FOLDR}/${CONFIG_FILE} sed -i "/# RNSMASQ_DIR=''/c\RNSMASQ_DIR='${INPUT_RNSMASQ_DIR}'" ${LOCAL_FOLDR}/settings/${CONFIG_FILE}
error_validate error_validate
fi fi
fi fi
MESSAGE="Use Custom SSH Port? (Leave blank for default '22')" MESSAGE="Custom SSH Port to Connect to Primary/Remote host? (Leave blank for default '22')"
echo_need echo_need
read INPUT_SSH_PORT read INPUT_SSH_PORT
INPUT_SSH_PORT="${INPUT_SSH_PORT:-22}" INPUT_SSH_PORT="${INPUT_SSH_PORT:-22}"
@ -314,11 +373,11 @@ function advanced_config_generate {
then then
MESSAGE="Saving Custom SSH Port to ${CONFIG_FILE}" MESSAGE="Saving Custom SSH Port to ${CONFIG_FILE}"
echo_stat echo_stat
sed -i "/# SSH_PORT=''/c\SSH_PORT='${INPUT_SSH_PORT}'" ${LOCAL_FOLDR}/${CONFIG_FILE} sed -i "/# SSH_PORT=''/c\SSH_PORT='${INPUT_SSH_PORT}'" ${LOCAL_FOLDR}/settings/${CONFIG_FILE}
error_validate error_validate
fi fi
MESSAGE="Enable ICMP Check? (Leave blank for default 'Yes')" MESSAGE="Enable Ping/ICMP Check of Primary/Remote? (Y/N, default 'Y')"
echo_need echo_need
read INPUT_PING_AVOID read INPUT_PING_AVOID
INPUT_PING_AVOID="${INPUT_PING_AVOID:-Y}" INPUT_PING_AVOID="${INPUT_PING_AVOID:-Y}"
@ -327,12 +386,12 @@ function advanced_config_generate {
then then
MESSAGE="Saving ICMP Avoidance to ${CONFIG_FILE}" MESSAGE="Saving ICMP Avoidance to ${CONFIG_FILE}"
echo_stat echo_stat
sed -i "/# PING_AVOID=''/c\PING_AVOID='1'" ${LOCAL_FOLDR}/${CONFIG_FILE} sed -i "/# PING_AVOID=''/c\PING_AVOID='1'" ${LOCAL_FOLDR}/settings/${CONFIG_FILE}
error_validate error_validate
PING_AVOID=1 PING_AVOID=1
fi fi
MESSAGE="Use Custom SSH PKIF Location? (Leave blank for default '.ssh/id_rsa')" MESSAGE="Custom SSH PKIF Location? (Leave blank for default '.ssh/id_rsa')"
echo_need echo_need
read INPUT_CUSTOM_PKIF read INPUT_CUSTOM_PKIF
INPUT_CUSTOM_PKIF="${INPUT_CUSTOM_PKIF:-.ssh/id_rsa}" INPUT_CUSTOM_PKIF="${INPUT_CUSTOM_PKIF:-.ssh/id_rsa}"
@ -341,11 +400,11 @@ function advanced_config_generate {
then then
MESSAGE="Saving Custom PKIF to ${CONFIG_FILE}" MESSAGE="Saving Custom PKIF to ${CONFIG_FILE}"
echo_stat echo_stat
sed -i "/# SSH_PKIF=''/c\SSH_PKIF='${INPUT_CUSTOM_PKIF}'" ${LOCAL_FOLDR}/${CONFIG_FILE} sed -i "/# SSH_PKIF=''/c\SSH_PKIF='${INPUT_CUSTOM_PKIF}'" ${LOCAL_FOLDR}/settings/${CONFIG_FILE}
error_validate error_validate
fi fi
MESSAGE="Enable Replicate 'Local DNS Records' Feature? (Leave blank for default 'Yes')" MESSAGE="Enable Replicate 'Local DNS Records' Feature? (Y/N, default 'Y')"
echo_need echo_need
read INPUT_SKIP_CUSTOM read INPUT_SKIP_CUSTOM
INPUT_SKIP_CUSTOM="${INPUT_SKIP_CUSTOM:-Y}" INPUT_SKIP_CUSTOM="${INPUT_SKIP_CUSTOM:-Y}"
@ -354,13 +413,13 @@ function advanced_config_generate {
then then
MESSAGE="Saving Local DNS Preference to ${CONFIG_FILE}" MESSAGE="Saving Local DNS Preference to ${CONFIG_FILE}"
echo_stat echo_stat
sed -i "/# SKIP_CUSTOM=''/c\SKIP_CUSTOM='1'" ${LOCAL_FOLDR}/${CONFIG_FILE} sed -i "/# SKIP_CUSTOM=''/c\SKIP_CUSTOM='1'" ${LOCAL_FOLDR}/settings/${CONFIG_FILE}
error_validate error_validate
fi fi
if [ "${INPUT_SKIP_CUSTOM}" == "Y" ] if [ "${INPUT_SKIP_CUSTOM}" == "Y" ]
then then
MESSAGE="Enable Replicate 'Local CNAME Records' Feature? (Leave blank for default 'Yes')" MESSAGE="Enable Replicate 'Local CNAME Records' Feature? (Y/N, default 'Y')"
echo_need echo_need
read INPUT_INCLUDE_CNAME read INPUT_INCLUDE_CNAME
INPUT_INCLUDE_CNAME="${INPUT_INCLUDE_CNAME:-Y}" INPUT_INCLUDE_CNAME="${INPUT_INCLUDE_CNAME:-Y}"
@ -369,33 +428,34 @@ function advanced_config_generate {
then then
MESSAGE="Saving Local CNAME Preference to ${CONFIG_FILE}" MESSAGE="Saving Local CNAME Preference to ${CONFIG_FILE}"
echo_stat echo_stat
sed -i "/# INCLUDE_CNAME=''/c\INCLUDE_CNAME='1'" ${LOCAL_FOLDR}/${CONFIG_FILE} sed -i "/# INCLUDE_CNAME=''/c\INCLUDE_CNAME='1'" ${LOCAL_FOLDR}/settings/${CONFIG_FILE}
error_validate error_validate
fi fi
fi fi
MESSAGE="Change Backup Retention in Days? (Leave blank for default '7')" MESSAGE="Change Backup Retention in Days? (Leave blank for default '3')"
echo_need echo_need
read INPUT_BACKUP_RETAIN read INPUT_BACKUP_RETAIN
INPUT_BACKUP_RETAIN="${INPUT_BACKUP_RETAIN:-7}" INPUT_BACKUP_RETAIN="${INPUT_BACKUP_RETAIN:-3}"
if [ "${INPUT_BACKUP_RETAIN}" != "7" ] if [ "${INPUT_BACKUP_RETAIN}" != "3" ]
then then
MESSAGE="Saving Backup Retention to ${CONFIG_FILE}" MESSAGE="Saving Backup Retention to ${CONFIG_FILE}"
echo_stat echo_stat
sed -i "/# BACKUP_RETAIN=''/c\BACKUP_RETAIN='1'" ${LOCAL_FOLDR}/${CONFIG_FILE} sed -i "/# BACKUP_RETAIN=''/c\BACKUP_RETAIN='${INPUT_BACKUP_RETAIN}'" ${LOCAL_FOLDR}/settings/${CONFIG_FILE}
error_validate error_validate
fi fi
} }
## Delete Existing Configuration ## Delete Existing Configuration
function config_delete { function config_delete {
source ${LOCAL_FOLDR}/${CONFIG_FILE} source ${LOCAL_FOLDR}/settings/${CONFIG_FILE}
MESSAGE="Configuration File Exists" MESSAGE="Configuration File Exists"
echo_warn echo_warn
echo_lines echo_lines
cat ${LOCAL_FOLDR}/${CONFIG_FILE} cat ${LOCAL_FOLDR}/settings/${CONFIG_FILE}
echo_blank
echo_lines echo_lines
MESSAGE="Are you sure you want to erase this configuration?" MESSAGE="Are you sure you want to erase this configuration?"
@ -405,7 +465,7 @@ function config_delete {
MESSAGE="Erasing Existing Configuration" MESSAGE="Erasing Existing Configuration"
echo_stat echo_stat
rm -f ${LOCAL_FOLDR}/${CONFIG_FILE} rm -f ${LOCAL_FOLDR}/settings/${CONFIG_FILE}
error_validate error_validate
config_generate config_generate
@ -423,6 +483,18 @@ function docker_detect {
fi fi
} }
## Detect Podman
function podman_detect {
if hash podman 2>/dev/null
then
FTLCHECK=$(sudo podman container ls | grep 'pihole/pihole')
if [ "$FTLCHECK" != "" ]
then
PODMANREADY="1"
fi
fi
}
## Create Bash Alias ## Create Bash Alias
function create_alias { function create_alias {
MESSAGE="Creating Bash Alias" MESSAGE="Creating Bash Alias"

View File

@ -6,11 +6,13 @@
## Import Settings ## Import Settings
function import_gs { function import_gs {
relocate_config_gs
MESSAGE="Importing ${CONFIG_FILE} Settings" MESSAGE="Importing ${CONFIG_FILE} Settings"
echo -en "${STAT} $MESSAGE" echo -en "${STAT} $MESSAGE"
if [ -f ${LOCAL_FOLDR}/${CONFIG_FILE} ] if [ -f ${LOCAL_FOLDR}/settings/${CONFIG_FILE} ]
then then
source ${LOCAL_FOLDR}/${CONFIG_FILE} source ${LOCAL_FOLDR}/settings/${CONFIG_FILE}
error_validate error_validate
# MESSAGE="Targeting ${REMOTE_USER}@${REMOTE_HOST}" # MESSAGE="Targeting ${REMOTE_USER}@${REMOTE_HOST}"
@ -28,6 +30,44 @@ function import_gs {
fi fi
} }
function relocate_config_gs {
if [ -f ${LOCAL_FOLDR}/${CONFIG_FILE} ]
then
MESSAGE="Relocating ${CONFIG_FILE}"
echo -en "${STAT} $MESSAGE"
mv ${LOCAL_FOLDR}/${CONFIG_FILE} ${LOCAL_FOLDR}/settings/${CONFIG_FILE}
error_validate
fi
if [ -f ${LOCAL_FOLDR}/${SYNCING_LOG} ]
then
MESSAGE="Relocating ${SYNCING_LOG}"
echo -en "${STAT} $MESSAGE"
mv ${LOCAL_FOLDR}/${SYNCING_LOG} ${LOG_PATH}/${SYNCING_LOG}
error_validate
fi
if [ -f ${LOCAL_FOLDR}/${CRONJOB_LOG} ]
then
MESSAGE="Relocating ${CRONJOB_LOG}"
echo -en "${STAT} $MESSAGE"
mv ${LOCAL_FOLDR}/${CRONJOB_LOG} ${LOG_PATH}/${CRONJOB_LOG}
error_validate
fi
if [ -f ${LOCAL_FOLDR}/${HISTORY_MD5} ]
then
MESSAGE="Relocating ${HISTORY_MD5}"
echo -en "${STAT} $MESSAGE"
mv ${LOCAL_FOLDR}/${HISTORY_MD5} ${LOG_PATH}/${HISTORY_MD5}
error_validate
fi
}
## Invalid Tasks ## Invalid Tasks
function task_invalid { function task_invalid {
echo_fail echo_fail
@ -51,7 +91,10 @@ function ph_type {
PH_EXEC="${PIHOLE_BIN}" PH_EXEC="${PIHOLE_BIN}"
elif [ "$PH_IN_TYPE" == "docker" ] elif [ "$PH_IN_TYPE" == "docker" ]
then then
PH_EXEC="sudo ${DOCKER_BIN} exec ${DOCKER_CON} pihole" PH_EXEC="sudo ${DOCKER_BIN} exec $(sudo ${DOCKER_BIN} ps -qf name=${DOCKER_CON}) pihole"
elif [ "$PH_IN_TYPE" == "podman" ]
then
PH_EXEC="sudo ${PODMAN_BIN} exec ${DOCKER_CON} pihole"
fi fi
if [ "$RH_IN_TYPE" == "default" ] if [ "$RH_IN_TYPE" == "default" ]
@ -59,7 +102,10 @@ function ph_type {
RH_EXEC="${RIHOLE_BIN}" RH_EXEC="${RIHOLE_BIN}"
elif [ "$RH_IN_TYPE" == "docker" ] elif [ "$RH_IN_TYPE" == "docker" ]
then then
RH_EXEC="sudo ${ROCKER_BIN} exec ${ROCKER_CON} pihole" RH_EXEC="sudo ${ROCKER_BIN} exec $(sudo ${ROCKER_BIN} ps -qf ${ROCKER_CON}) pihole"
elif [ "$RH_IN_TYPE" == "podman" ]
then
RH_EXEC="sudo ${RODMAN_BIN} exec ${ROCKER_CON} pihole"
fi fi
} }

View File

@ -96,7 +96,10 @@ function show_info() {
pihole version pihole version
elif [ "${PH_IN_TYPE}" == "docker" ] elif [ "${PH_IN_TYPE}" == "docker" ]
then then
docker exec -it pihole pihole -v sudo docker exec -it pihole pihole -v
elif [ "${PH_IN_TYPE}" == "podman" ]
then
sudo podman exec -it pihole pihole -v
fi fi
uname -srm uname -srm
@ -112,6 +115,12 @@ function show_info() {
then then
docker --version docker --version
fi fi
if hash podman 2>/dev/null
then
podman --version
fi
echo -e "" echo -e ""
echo -e "${YELLOW}Local/Secondary Instance Settings${NC}" echo -e "${YELLOW}Local/Secondary Instance Settings${NC}"
@ -127,6 +136,10 @@ function show_info() {
then then
echo -e "Local Pi-hole Container Name: ${DOCKER_CON}" echo -e "Local Pi-hole Container Name: ${DOCKER_CON}"
echo -e "Local Docker Binary Directory: ${DOCKER_BIN}" echo -e "Local Docker Binary Directory: ${DOCKER_BIN}"
elif [ "${PH_IN_TYPE}" == "podman" ]
then
echo -e "Local Pi-hole Container Name: ${DOCKER_CON}"
echo -e "Local Podman Binary Directory: ${PODMAN_BIN}"
fi fi
echo -e "Local File Owner Settings: ${FILE_OWNER}" echo -e "Local File Owner Settings: ${FILE_OWNER}"
@ -196,6 +209,10 @@ function show_info() {
then then
echo -e "Remote Pi-hole Container Name: ${ROCKER_CON}" echo -e "Remote Pi-hole Container Name: ${ROCKER_CON}"
echo -e "Remote Docker Binary Directory: ${ROCKER_BIN}" echo -e "Remote Docker Binary Directory: ${ROCKER_BIN}"
elif [ "${RH_IN_TYPE}" == "podman" ]
then
echo -e "Remote Pi-hole Container Name: ${ROCKER_CON}"
echo -e "Remote Podman Binary Directory: ${RODMAN_BIN}"
fi fi
echo -e "Remote File Owner Settings: ${RILE_OWNER}" echo -e "Remote File Owner Settings: ${RILE_OWNER}"

View File

@ -46,6 +46,15 @@ function validate_ph_folders {
echo_fail echo_fail
exit_nochange exit_nochange
fi fi
elif [ "$PH_IN_TYPE" == "podman" ]
then
FTLCHECK=$(sudo podman container ls | grep 'pihole/pihole')
if [ "$FTLCHECK" == "" ]
then
MESSAGE="Unable to Validate that Pi-Hole is Installed"
echo_fail
exit_nochange
fi
fi fi
if [ ! -d ${PIHOLE_DIR} ] if [ ! -d ${PIHOLE_DIR} ]

1
logs/README.md Normal file
View File

@ -0,0 +1 @@
Logging goes here.

View File

@ -24,8 +24,24 @@ PHFAILCOUNT="0"
CURRENTUSER=$(whoami) CURRENTUSER=$(whoami)
# Header # Header
echo -e "========================================================" echo -e ""
echo -e "${YELLOW}Gravity Sync by ${BLUE}@vmstan${YELLOW} - Online Installation${NC}" echo -e " ..::-----::.. ..::------::. "
echo -e " .:----:::::::----:. .:::--:::::---===-: "
echo -e " :---:. .:---: +##+:. .:-===-. "
echo -e " .---:. :---: -*##*: .-===: "
echo -e " .---. :---: -++*+. .==+- "
echo -e " ---. = :---: :====. - .=++."
echo -e ":--: -=-. :---::---:. -=-. :++="
echo -e "---. .:-=====-:.. ------. .:-=====-:.. .+++"
echo -e "---. .:===-. :------: .:===-. :+++"
echo -e ".--: .=: :---: :---: =: -++-"
echo -e " :--: .. .---:. :--:: .. -=+= "
echo -e " :--: .---:. :-::: -===. "
echo -e " :---: :---: ::::: .:==== "
echo -e " :---::.. ..::---:. ::::::.. ..:-===-. "
echo -e " .::-----------::. .::---------===-: "
echo -e ""
echo -e "${YELLOW}Gravity Sync by ${BLUE}@vmstan${NC}"
echo -e "${CYAN}https://github.com/vmstan/gravity-sync${NC}" echo -e "${CYAN}https://github.com/vmstan/gravity-sync${NC}"
echo -e "========================================================" echo -e "========================================================"
echo -e "[${GREEN}${NC}] Checking Short Range Sensors" echo -e "[${GREEN}${NC}] Checking Short Range Sensors"
@ -155,6 +171,33 @@ else
PHFAILCOUNT=$((PHFAILCOUNT+1)) PHFAILCOUNT=$((PHFAILCOUNT+1))
fi fi
fi fi
elif hash podman 2>/dev/null
then
echo -e "[${GREEN}${NC}] Podman Binaries Detected"
if [ "$LOCALADMIN" == "sudo" ]
then
FTLCHECK=$(sudo podman container ls | grep 'pihole/pihole')
elif [ "$LOCALADMIN" == "nosudo" ]
then
echo -e "[${PURPLE}!${NC}] ${PURPLE}No Podman Pi-hole Container Detected (unable to scan)${NC}"
# CROSSCOUNT=$((CROSSCOUNT+1))
PHFAILCOUNT=$((PHFAILCOUNT+1))
else
FTLCHECK=$(podman container ls | grep 'pihole/pihole')
fi
if [ "$LOCALADMIN" != "nosudo" ]
then
if [ "$FTLCHECK" != "" ]
then
echo -e "[${GREEN}${NC}] Pi-Hole Podman Container Detected"
else
echo -e "[${PURPLE}!${NC}] ${PURPLE}No Podman Pi-hole Container Detected${NC}"
# CROSSCOUNT=$((CROSSCOUNT+1))
PHFAILCOUNT=$((PHFAILCOUNT+1))
fi
fi
else else
# echo -e "[${RED}✗${NC}] No Local Pi-hole Install Detected" # echo -e "[${RED}✗${NC}] No Local Pi-hole Install Detected"
echo -e "[${PURPLE}!${NC}] ${PURPLE}No Docker Pi-hole Alternative Detected${NC}" echo -e "[${PURPLE}!${NC}] ${PURPLE}No Docker Pi-hole Alternative Detected${NC}"
@ -217,7 +260,12 @@ else
echo -e "[${YELLOW}i${NC}] Installation Exiting (without changes)" echo -e "[${YELLOW}i${NC}] Installation Exiting (without changes)"
else else
echo -e "[${BLUE}>${NC}] Creating Gravity Sync Directories" echo -e "[${BLUE}>${NC}] Creating Gravity Sync Directories"
if [ "$GS_DEV" != "" ]
then
git clone -b ${GS_DEV} https://github.com/vmstan/gravity-sync.git
else
git clone https://github.com/vmstan/gravity-sync.git git clone https://github.com/vmstan/gravity-sync.git
fi
echo -e "[${BLUE}>${NC}] Starting Gravity Sync Configuration" echo -e "[${BLUE}>${NC}] Starting Gravity Sync Configuration"
echo -e "========================================================" echo -e "========================================================"
./gravity-sync/gravity-sync.sh configure <&1 ./gravity-sync/gravity-sync.sh configure <&1

View File

@ -9,8 +9,8 @@ REMOTE_USER='pi'
# STANDARD VARIABLES ######################### # STANDARD VARIABLES #########################
### Installation Types ### Installation Types
# PH_IN_TYPE='' # Pi-hole install type, `default` or `docker` (local) # PH_IN_TYPE='' # Pi-hole install type, `default`, `docker`, or `podman` (local)
# RH_IN_TYPE='' # Pi-hole install type, `default` or `docker` (remote) # RH_IN_TYPE='' # Pi-hole install type, `default`, `docker`, or `podman` (remote)
### Pi-hole Folder/File Customization ### Pi-hole Folder/File Customization
# PIHOLE_DIR='' # default Pi-hole data directory (local) # PIHOLE_DIR='' # default Pi-hole data directory (local)
@ -21,10 +21,12 @@ REMOTE_USER='pi'
# RIHOLE_BIN='' # default Pi-hole binary directory (remote) # RIHOLE_BIN='' # default Pi-hole binary directory (remote)
# DOCKER_BIN='' # default Docker binary directory (local) # DOCKER_BIN='' # default Docker binary directory (local)
# ROCKER_BIN='' # default Docker binary directory (remote) # ROCKER_BIN='' # default Docker binary directory (remote)
# PODMAN_BIN='' # default Podman binary directory (local)
# RODMAN_BIN='' # default Podman binary directory (remote)
# FILE_OWNER='' # default Pi-hole file owner and group (local) # FILE_OWNER='' # default Pi-hole file owner and group (local)
# RILE_OWNER='' # default Pi-hole file owner and group (remote) # RILE_OWNER='' # default Pi-hole file owner and group (remote)
# DOCKER_CON='' # default Pi-hole Docker container name (local) # DOCKER_CON='' # default Pi-hole container name (local)
# ROCKER_CON='' # default Pi-hole Docker container name (remote) # ROCKER_CON='' # default Pi-hole container name (remote)
# GRAVITY_FI='' # default Pi-hole database file # GRAVITY_FI='' # default Pi-hole database file
# CUSTOM_DNS='' # default Pi-hole local DNS lookups # CUSTOM_DNS='' # default Pi-hole local DNS lookups