From bb9ce87e952c5127aefa75c83552d96b9762357b Mon Sep 17 00:00:00 2001 From: Adam Warner Date: Wed, 13 Aug 2025 17:13:48 +0100 Subject: [PATCH] 2 spaces -> 4 spaces in start.sh Signed-off-by: Adam Warner --- src/start.sh | 236 +++++++++++++++++++++++++-------------------------- 1 file changed, 118 insertions(+), 118 deletions(-) diff --git a/src/start.sh b/src/start.sh index da83b67..3361a53 100644 --- a/src/start.sh +++ b/src/start.sh @@ -1,12 +1,12 @@ #!/bin/bash if [ ! -x /bin/sh ]; then - echo "Executable test for /bin/sh failed. Your Docker version is too old to run Alpine 3.14+ and Pi-hole. You must upgrade Docker."; - exit 1; + echo "Executable test for /bin/sh failed. Your Docker version is too old to run Alpine 3.14+ and Pi-hole. You must upgrade Docker."; + exit 1; fi if [ "${PH_VERBOSE:-0}" -gt 0 ]; then - set -x + set -x fi trap stop TERM INT QUIT HUP ERR @@ -16,140 +16,140 @@ TRAP_TRIGGERED=0 start() { - # The below functions are all contained in bash_functions.sh - # shellcheck source=/dev/null - . /usr/bin/bash_functions.sh + # The below functions are all contained in bash_functions.sh + # shellcheck source=/dev/null + . /usr/bin/bash_functions.sh - # If the file /etc/pihole/setupVars.conf exists, but /etc/pihole/pihole.toml does not, then we are migrating v5->v6 - # FTL Will handle the migration of the config files - if [[ -f /etc/pihole/setupVars.conf && ! -f /etc/pihole/pihole.toml ]]; then - echo " [i] v5 files detected that have not yet been migrated to v6" + # If the file /etc/pihole/setupVars.conf exists, but /etc/pihole/pihole.toml does not, then we are migrating v5->v6 + # FTL Will handle the migration of the config files + if [[ -f /etc/pihole/setupVars.conf && ! -f /etc/pihole/pihole.toml ]]; then + echo " [i] v5 files detected that have not yet been migrated to v6" + echo "" + migrate_v5_configs + fi + + # =========================== + # Initial checks + # =========================== + + # If PIHOLE_UID is set, modify the pihole user's id to match + set_uid_gid + + # Configure FTL with any environment variables if needed + echo " [i] Starting FTL configuration" + ftl_config + + # Install additional packages inside the container if requested + install_additional_packages + + # Start crond for scheduled scripts (logrotate, pihole flush, gravity update etc) + start_cron + + # Install the logrotate config file + install_logrotate + + #migrate Gravity Database if needed: + migrate_gravity + + echo " [i] pihole-FTL pre-start checks" + # Run the post stop script to cleanup any remaining artifacts from a previous run + sh /opt/pihole/pihole-FTL-poststop.sh + + fix_capabilities + sh /opt/pihole/pihole-FTL-prestart.sh + + echo " [i] Starting pihole-FTL ($FTL_CMD) as ${DNSMASQ_USER}" echo "" - migrate_v5_configs - fi - # =========================== - # Initial checks - # =========================== + capsh --user="${DNSMASQ_USER}" --keep=1 -- -c "/usr/bin/pihole-FTL $FTL_CMD >/dev/null" & + # Notes on above: + # - DNSMASQ_USER default of pihole is in Dockerfile & can be overwritten by runtime container env + # - /var/log/pihole/pihole*.log has FTL's output that no-daemon would normally print in FG too + # prevent duplicating it in docker logs by sending to dev null - # If PIHOLE_UID is set, modify the pihole user's id to match - set_uid_gid + # We need the PID of the capsh process so that we can wait for it to finish + CAPSH_PID=$! - # Configure FTL with any environment variables if needed - echo " [i] Starting FTL configuration" - ftl_config + # Wait until the log file exists before continuing + while [ ! -f /var/log/pihole/FTL.log ]; do + sleep 0.5 + done - # Install additional packages inside the container if requested - install_additional_packages + # Wait until the FTL log contains the "FTL started" message before continuing + while ! grep -q '########## FTL started' /var/log/pihole/FTL.log; do + sleep 0.5 + done - # Start crond for scheduled scripts (logrotate, pihole flush, gravity update etc) - start_cron + pihole updatechecker + local versionsOutput + versionsOutput=$(pihole -v) + echo " [i] Version info:" + printf "%b" "${versionsOutput}\\n" | sed 's/^/ /' + echo "" - # Install the logrotate config file - install_logrotate + if [ "${TAIL_FTL_LOG:-1}" -eq 1 ]; then + # Start tailing the FTL log from the most recent "FTL Started" message + # Get the line number + startFrom=$(grep -n '########## FTL started' /var/log/pihole/FTL.log | tail -1 | cut -d: -f1) + # Start the tail from the line number and background it + tail --follow=name -n +"${startFrom}" /var/log/pihole/FTL.log & + else + echo " [i] FTL log output is disabled. Remove the Environment variable TAIL_FTL_LOG, or set it to 1 to enable FTL log output." + fi - #migrate Gravity Database if needed: - migrate_gravity - - echo " [i] pihole-FTL pre-start checks" - # Run the post stop script to cleanup any remaining artifacts from a previous run - sh /opt/pihole/pihole-FTL-poststop.sh - - fix_capabilities - sh /opt/pihole/pihole-FTL-prestart.sh - - echo " [i] Starting pihole-FTL ($FTL_CMD) as ${DNSMASQ_USER}" - echo "" - - capsh --user="${DNSMASQ_USER}" --keep=1 -- -c "/usr/bin/pihole-FTL $FTL_CMD >/dev/null" & - # Notes on above: - # - DNSMASQ_USER default of pihole is in Dockerfile & can be overwritten by runtime container env - # - /var/log/pihole/pihole*.log has FTL's output that no-daemon would normally print in FG too - # prevent duplicating it in docker logs by sending to dev null - - # We need the PID of the capsh process so that we can wait for it to finish - CAPSH_PID=$! - - # Wait until the log file exists before continuing - while [ ! -f /var/log/pihole/FTL.log ]; do - sleep 0.5 - done - - # Wait until the FTL log contains the "FTL started" message before continuing - while ! grep -q '########## FTL started' /var/log/pihole/FTL.log; do - sleep 0.5 - done - - pihole updatechecker - local versionsOutput - versionsOutput=$(pihole -v) - echo " [i] Version info:" - printf "%b" "${versionsOutput}\\n" | sed 's/^/ /' - echo "" - - if [ "${TAIL_FTL_LOG:-1}" -eq 1 ]; then - # Start tailing the FTL log from the most recent "FTL Started" message - # Get the line number - startFrom=$(grep -n '########## FTL started' /var/log/pihole/FTL.log | tail -1 | cut -d: -f1) - # Start the tail from the line number and background it - tail --follow=name -n +"${startFrom}" /var/log/pihole/FTL.log & - else - echo " [i] FTL log output is disabled. Remove the Environment variable TAIL_FTL_LOG, or set it to 1 to enable FTL log output." - fi - - # Wait for the capsh process (which spawned FTL) to finish - wait $CAPSH_PID - FTL_EXIT_CODE=$? + # Wait for the capsh process (which spawned FTL) to finish + wait $CAPSH_PID + FTL_EXIT_CODE=$? - # If we are here, then FTL has exited. - # If the trap was triggered, then stop will have already been called - if [ $TRAP_TRIGGERED -eq 0 ]; then - # Pass the exit code through to the stop function - stop $FTL_EXIT_CODE - fi + # If we are here, then FTL has exited. + # If the trap was triggered, then stop will have already been called + if [ $TRAP_TRIGGERED -eq 0 ]; then + # Pass the exit code through to the stop function + stop $FTL_EXIT_CODE + fi } stop() { - local FTL_EXIT_CODE=$1 + local FTL_EXIT_CODE=$1 + + # if we have nothing in FTL_EXIT_CODE, then have been called by the trap. Close FTL and wait for the CAPSH_PID to finish + if [ -z "${FTL_EXIT_CODE}" ]; then + TRAP_TRIGGERED=1 + echo "" + echo " [i] Container stop requested..." + echo " [i] pihole-FTL is running - Attempting to shut it down cleanly" + echo "" + killall --signal 15 pihole-FTL + + wait $CAPSH_PID + FTL_EXIT_CODE=$? + fi + + # Wait for a few seconds to allow the FTL log tail to catch up before exiting the container + sleep 2 + + # ensure the exit code is an integer, if not set it to 1 + if ! [[ "${FTL_EXIT_CODE}" =~ ^[0-9]+$ ]]; then + FTL_EXIT_CODE=1 + fi + + sh /opt/pihole/pihole-FTL-poststop.sh - # if we have nothing in FTL_EXIT_CODE, then have been called by the trap. Close FTL and wait for the CAPSH_PID to finish - if [ -z "${FTL_EXIT_CODE}" ]; then - TRAP_TRIGGERED=1 echo "" - echo " [i] Container stop requested..." - echo " [i] pihole-FTL is running - Attempting to shut it down cleanly" + echo " [i] pihole-FTL exited with status $FTL_EXIT_CODE" + echo "" + echo " [i] Container will now stop or restart depending on your restart policy" + echo " https://docs.docker.com/engine/containers/start-containers-automatically/#use-a-restart-policy" echo "" - killall --signal 15 pihole-FTL - wait $CAPSH_PID - FTL_EXIT_CODE=$? - fi + # If we are running pytest, keep the container alive for a little longer + # to allow the tests to complete + if [[ ${PYTEST} ]]; then + sleep 10 + fi - # Wait for a few seconds to allow the FTL log tail to catch up before exiting the container - sleep 2 - - # ensure the exit code is an integer, if not set it to 1 - if ! [[ "${FTL_EXIT_CODE}" =~ ^[0-9]+$ ]]; then - FTL_EXIT_CODE=1 - fi - - sh /opt/pihole/pihole-FTL-poststop.sh - - echo "" - echo " [i] pihole-FTL exited with status $FTL_EXIT_CODE" - echo "" - echo " [i] Container will now stop or restart depending on your restart policy" - echo " https://docs.docker.com/engine/containers/start-containers-automatically/#use-a-restart-policy" - echo "" - - # If we are running pytest, keep the container alive for a little longer - # to allow the tests to complete - if [[ ${PYTEST} ]]; then - sleep 10 - fi - - exit "${FTL_EXIT_CODE}" + exit "${FTL_EXIT_CODE}" }