diff --git a/advanced/Scripts/piholeDebug.sh b/advanced/Scripts/piholeDebug.sh index d003c1a4..b63244c4 100755 --- a/advanced/Scripts/piholeDebug.sh +++ b/advanced/Scripts/piholeDebug.sh @@ -3,7 +3,7 @@ # (c) 2015, 2016 by Jacob Salmela # Network-wide ad blocking via your Raspberry Pi # http://pi-hole.net -# Generates pihole_debug.log in /var/log/ to be used for troubleshooting. +# Generates pihole_debug.log to be used for troubleshooting. # # Pi-hole is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -25,18 +25,27 @@ ADLISTSFILE="/etc/pihole/adlists.list" PIHOLELOG="/var/log/pihole.log" WHITELISTMATCHES="/tmp/whitelistmatches.list" +# Header info and introduction +echo "::: Beginning Pi-hole debug at $(date)!" +echo "::: This debugging process will collect information from your running configuration," +echo "::: and optionally upload the generated log to a unique and random directory on" +echo "::: Termbin.com. NOTE: All log files auto-delete after 1 month and you are the only" +echo "::: person who is given the unique URL. Please consider where you post this link." +echo "::: " + ######## FIRST CHECK ######## # Must be root to debug if [[ $EUID -eq 0 ]]; then - echo "::: You are root... Beginning debug!" + echo "::: Script is executing as root user..." else - echo "::: Sudo will be used for debugging." + echo "::: Non-root user detected..." # Check if sudo is actually installed if [ -x "$(command -v sudo)" ]; then export SUDO="sudo" + echo "::: sudo command located, debug will run under sudo." else - echo "::: Please install sudo or run this as root." + echo "::: Unable to locate sudo command. Please install sudo or run this as root." exit 1 fi fi @@ -52,27 +61,57 @@ fi ### Private functions exist here ### function versionCheck { - echo "#######################################" >> ${DEBUG_LOG} - echo "########## Versions Section ###########" >> ${DEBUG_LOG} - echo "#######################################" >> ${DEBUG_LOG} - + echo "############################################################" >> ${DEBUG_LOG} + echo "########## Installed Versions ##########" >> ${DEBUG_LOG} + echo "############################################################" >> ${DEBUG_LOG} + + echo "::: Detecting Pi-hole installed versions." TMP=$(cd /etc/.pihole/ && git describe --tags --abbrev=0) echo "Pi-hole Version: $TMP" >> ${DEBUG_LOG} - + + echo "::: Writing Pi-hole installed version to logfile." TMP=$(cd /var/www/html/admin && git describe --tags --abbrev=0) echo "WebUI Version: $TMP" >> ${DEBUG_LOG} echo >> ${DEBUG_LOG} } function distroCheck { - echo "#######################################" >> ${DEBUG_LOG} - echo "######## Distribution Section #########" >> ${DEBUG_LOG} - echo "#######################################" >> ${DEBUG_LOG} - + echo "############################################################" >> ${DEBUG_LOG} + echo "######## Installed OS Distribution #########" >> ${DEBUG_LOG} + echo "############################################################" >> ${DEBUG_LOG} + + echo "::: Checking installed OS Distribution release." TMP=$(cat /etc/*release || echo "Failed to find release") - echo "Distribution Version: $TMP" >> ${DEBUG_LOG} + + echo "::: Writing OS Distribution release to logfile." + echo "$TMP" >> ${DEBUG_LOG} + echo >> ${DEBUG_LOG} +} + +function ipCheck { + echo "############################################################" >> ${DEBUG_LOG} + echo "######## IP Address Information #########" >> ${DEBUG_LOG} + echo "############################################################" >> ${DEBUG_LOG} + + IPADDR=$(ip a | awk -F " " '{ for(i=1;i<=NF;i++) if ($i == "inet") print $(i+1) }') + echo "::: Writing local IPs to debug log" + echo "$IPADDR" >> ${DEBUG_LOG} + IP6ADDR=$(ip a | awk -F " " '{ for(i=1;i<=NF;i++) if ($i == "inet6") print $(i+1) }') + echo "$IP6ADDR" >> ${DEBUG_LOG} + echo >> ${DEBUG_LOG} + + echo "::: Locating default gateway and checking connectivity" + GATEWAY=$(ip r | grep default | cut -d ' ' -f 3) + GATEWAY_CHECK=$(ping -q -w 1 -c 1 "${GATEWAY}" > /dev/null && echo ok || echo error) + echo "Gateway check at ${GATEWAY}:" >> ${DEBUG_LOG} + echo "$GATEWAY_CHECK" >> ${DEBUG_LOG} + + GATEWAY6=$(ip -6 r | grep default | cut -d ' ' -f 3) + GATEWAY6_CHECK=$(ping6 -q -w 1 -c 1 "${GATEWAY6}" > /dev/null && echo ok || echo error) + echo "IPv6 Gateway check at ${GATEWAY6}:" >> ${DEBUG_LOG} + echo "$GATEWAY6_CHECK" >> ${DEBUG_LOG} + echo >> ${DEBUG_LOG} } - function compareWhitelist { if [ ! -f "$WHITELISTMATCHES" ]; then ${SUDO} touch ${WHITELISTMATCHES} @@ -186,22 +225,10 @@ function debugLighttpd { ### END FUNCTIONS ### -### Check Pi internet connections ### -# Log the IP addresses of this Pi -IPADDR=$(${SUDO} ifconfig | perl -nle 's/dr:(\S+)/print $1/e') -echo "::: Writing local IPs to debug log" -echo "IP Addresses of this Pi:" >> ${DEBUG_LOG} -echo "$IPADDR" >> ${DEBUG_LOG} -echo >> ${DEBUG_LOG} - -# Check if we can connect to the local gateway -GATEWAY_CHECK=$(ping -q -w 1 -c 1 "$(ip r | grep default | cut -d ' ' -f 3)" > /dev/null && echo ok || echo error) -echo "Gateway check:" >> ${DEBUG_LOG} -echo "$GATEWAY_CHECK" >> ${DEBUG_LOG} -echo >> ${DEBUG_LOG} versionCheck distroCheck +ipCheck compareWhitelist compareBlacklist testNslookup @@ -319,7 +346,7 @@ fi # Continuously append the pihole.log file to the pihole_debug.log file function dumpPiHoleLog { trap '{ echo -e "\n::: Finishing debug write from interrupt... Quitting!" ; exit 1; }' INT - echo -e "::: Writing current pihole traffic to debug log...\n:::\tTry loading any/all sites that you are having trouble with now... \n:::\t(Press ctrl+C to finish)" + echo -e "::: Writing current pi-hole traffic to debug log...\n:::\tTry loading any/all sites that you are having trouble with now... \n:::\t(Press ctrl+C to finish)" echo "#######################################" >> ${DEBUG_LOG} echo "############# pihole.log ##############" >> ${DEBUG_LOG} echo "#######################################" >> ${DEBUG_LOG}