From 830b287e5ddb6a1e9d5f9d2580432ed556922e0f Mon Sep 17 00:00:00 2001 From: Chad Howell Date: Tue, 23 Feb 2016 00:08:50 -0500 Subject: [PATCH 01/96] Update README.md Add NTC CHIP and Debian based distros --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 207375f2..687cc359 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # Automated Install -##### Designed For Raspberry Pi A+, B, B+, 2, and Zero (with an Ethernet adapter) +##### Designed For Raspberry Pi A+, B, B+, 2, Zero (with an Ethernet adapter), NTC CHIP, and most Debian based distributions -1. Install Raspbian +1. Install Raspbian on Raspberry Pi variants or a Debian based distribution on other hardware or virtual machines 2. Run the command below ### ```curl -L install.pi-hole.net | bash``` From c3b5b97a41465808786500acb479ce84461f06b6 Mon Sep 17 00:00:00 2001 From: Chad Howell Date: Thu, 25 Feb 2016 19:42:43 -0500 Subject: [PATCH 02/96] Update README.md Changed wording per @PromoFaux recommendations. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 687cc359..20b581fa 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # Automated Install -##### Designed For Raspberry Pi A+, B, B+, 2, Zero (with an Ethernet adapter), NTC CHIP, and most Debian based distributions +##### Designed For Raspberry Pi A+, B, B+, 2, Zero (with an Ethernet adapter) and (also works on most Debian based distros!) 1. Install Raspbian on Raspberry Pi variants or a Debian based distribution on other hardware or virtual machines 2. Run the command below From af839360477becd626eef8f9b5df86e3863f3ca8 Mon Sep 17 00:00:00 2001 From: Mcat12 Date: Sun, 28 Feb 2016 15:18:48 -0500 Subject: [PATCH 03/96] Added password to install Saves in password.txt --- automated install/basic-install.sh | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/automated install/basic-install.sh b/automated install/basic-install.sh index b3e6202f..9c65467c 100755 --- a/automated install/basic-install.sh +++ b/automated install/basic-install.sh @@ -658,6 +658,19 @@ setUser(){ fi } +setPassword() { + # Password needed to authorize changes to lists from admin page + pass = $(whiptail --passwordbox "Please enter a password to secure your Pi-hole web interface." 10 50 3>&1 1>&2 2>&3) + + if [ $? = 0 ]; then + # Entered password + echo pass > /etc/pihole/password.txt + else + echo "::: Cancel selected, exiting...." + exit 1 + fi +} + installPihole() { # Install base files and web interface checkForDependencies # done @@ -708,6 +721,9 @@ use4andor6 # Decide what upstream DNS Servers to use setDNS +# Set the admin page password +setPassword + # Install and log everything to a file installPihole | tee $tmpLog From adcd7f10ee2b43b31a3ec2dd1116e46cb68c3d82 Mon Sep 17 00:00:00 2001 From: Mcat12 Date: Sun, 28 Feb 2016 15:24:38 -0500 Subject: [PATCH 04/96] Fixed password input --- automated install/basic-install.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/automated install/basic-install.sh b/automated install/basic-install.sh index 9c65467c..883e2c61 100755 --- a/automated install/basic-install.sh +++ b/automated install/basic-install.sh @@ -660,11 +660,11 @@ setUser(){ setPassword() { # Password needed to authorize changes to lists from admin page - pass = $(whiptail --passwordbox "Please enter a password to secure your Pi-hole web interface." 10 50 3>&1 1>&2 2>&3) + pass=$(whiptail --passwordbox "Please enter a password to secure your Pi-hole web interface." 10 50 3>&1 1>&2 2>&3) if [ $? = 0 ]; then # Entered password - echo pass > /etc/pihole/password.txt + echo $pass > /etc/pihole/password.txt else echo "::: Cancel selected, exiting...." exit 1 From b07b77c58f8603a95e0dc090e933c4f194ce7801 Mon Sep 17 00:00:00 2001 From: Mcat12 Date: Mon, 29 Feb 2016 20:09:49 -0500 Subject: [PATCH 05/96] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 20b581fa..02e7468f 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # Automated Install -##### Designed For Raspberry Pi A+, B, B+, 2, Zero (with an Ethernet adapter) and (also works on most Debian based distros!) +##### Designed For Raspberry Pi A+, B, B+, 2, Zero (with an Ethernet adapter), and also works on most Debian based distros! 1. Install Raspbian on Raspberry Pi variants or a Debian based distribution on other hardware or virtual machines 2. Run the command below From e92cceecc190a72e7c504589bcfa2b8cbbec9fe9 Mon Sep 17 00:00:00 2001 From: Carter Maxwell Date: Sat, 5 Mar 2016 21:12:58 -0800 Subject: [PATCH 06/96] remove trailing whitespace README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 02e7468f..9dc189e4 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Automated Install +# Automated Install ##### Designed For Raspberry Pi A+, B, B+, 2, Zero (with an Ethernet adapter), and also works on most Debian based distros! 1. Install Raspbian on Raspberry Pi variants or a Debian based distribution on other hardware or virtual machines From 613ab9febcf13a3f2e9018c4627a036b9591a21d Mon Sep 17 00:00:00 2001 From: Carter Maxwell Date: Sat, 5 Mar 2016 21:13:23 -0800 Subject: [PATCH 07/96] remove trailing whitespace adlists.default --- adlists.default | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/adlists.default b/adlists.default index 81676a3d..99786746 100644 --- a/adlists.default +++ b/adlists.default @@ -5,11 +5,11 @@ # 2. run `nano /etc/pihole/adlists.list` # # 3. Uncomment or comment any of the below lists # # # -# Know of any other lists? Feel free to let us know about them, or add them # +# Know of any other lists? Feel free to let us know about them, or add them # # to this file! # ################################################################################ -# The below list amalgamates several lists we used previously. +# The below list amalgamates several lists we used previously. # See `https://github.com/StevenBlack/hosts` for details https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts From e4ddf8bc338ceb89d3f1a4b5c1f9c02086c15ee9 Mon Sep 17 00:00:00 2001 From: Carter Maxwell Date: Sat, 5 Mar 2016 21:13:43 -0800 Subject: [PATCH 08/96] remove trailing whitespace gravity.sh --- gravity.sh | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/gravity.sh b/gravity.sh index 321aec27..33f5d6d5 100755 --- a/gravity.sh +++ b/gravity.sh @@ -107,7 +107,7 @@ function gravity_collapse() { sources+=($line) fi done < $adListFile - echo " done!" + echo " done!" else #no custom file found, use defaults! echo -n "::: No custom adlist file detected, reading from default file..." @@ -120,8 +120,8 @@ function gravity_collapse() { sources+=($line) fi done < $adListDefault - echo " done!" - fi + echo " done!" + fi # Create the pihole resource directory if it doesn't exist. Future files will be stored here if [[ -d $piholeDir ]];then @@ -169,9 +169,9 @@ function gravity_transport() { fi # Silently curl url - curl -s $cmd_ext $heisenbergCompensator -A "$agent" $url > $patternBuffer + curl -s $cmd_ext $heisenbergCompensator -A "$agent" $url > $patternBuffer # Check for list updates - gravity_patternCheck $patternBuffer + gravity_patternCheck $patternBuffer # Cleanup rm -f $patternBuffer @@ -219,13 +219,13 @@ function gravity_Schwarzchild() { echo "::: " # Find all active domains and compile them into one file and remove CRs echo -n "::: Aggregating list of domains..." - truncate -s 0 $piholeDir/$matterandlight & spinner $! + truncate -s 0 $piholeDir/$matterandlight & spinner $! for i in "${activeDomains[@]}" do cat $i |tr -d '\r' >> $piholeDir/$matterandlight done echo " done!" - + } @@ -233,12 +233,12 @@ function gravity_Blacklist(){ # Append blacklist entries if they exist echo -n "::: Running blacklist script to update HOSTS file...." $blacklistScript -f -nr -q > /dev/null & spinner $! - + numBlacklisted=$(wc -l < "/etc/pihole/blacklist.txt") plural=; [[ "$numBlacklisted" != "1" ]] && plural=s echo " $numBlacklisted domain${plural} blacklisted!" - - + + } @@ -247,7 +247,7 @@ function gravity_Whitelist() { # Prevent our sources from being pulled into the hole plural=; [[ "${sources[@]}" != "1" ]] && plural=s echo -n "::: Adding ${#sources[@]} ad list source${plural} to the whitelist..." - + urls=() for url in ${sources[@]} do @@ -255,16 +255,16 @@ function gravity_Whitelist() { urls=("${urls[@]}" $tmp) done echo " done!" - + echo -n "::: Running whitelist script to update HOSTS file...." $whitelistScript -f -nr -q ${urls[@]} > /dev/null & spinner $! - + numWhitelisted=$(wc -l < "/etc/pihole/whitelist.txt") plural=; [[ "$numWhitelisted" != "1" ]] && plural=s echo " $numWhitelisted domain${plural} whitelisted!" - - - + + + } function gravity_unique() { @@ -284,7 +284,7 @@ function gravity_hostFormat() { #Add dummy domain Pi-Hole.IsWorking.OK to the top of gravity.list to make ping result return a friendlier looking domain! echo -e "$piholeIP Pi-Hole.IsWorking.OK \n$piholeIPv6 Pi-Hole.IsWorking.OK" > $piholeDir/$accretionDisc cat $piholeDir/$eventHorizon | awk -v ipv4addr="$piholeIP" -v ipv6addr="$piholeIPv6" '{sub(/\r$/,""); print ipv4addr" "$0"\n"ipv6addr" "$0}' >> $piholeDir/$accretionDisc - + else # Otherwise, just create gravity.list as normal using IPv4 #Add dummy domain Pi-Hole.IsWorking.OK to the top of gravity.list to make ping result return a friendlier looking domain! @@ -319,12 +319,12 @@ function gravity_advanced() { echo -n "::: Formatting list of domains to remove comments...." awk '($1 !~ /^#/) { if (NF>1) {print $2} else {print $1}}' $piholeDir/$matterandlight | sed -nr -e 's/\.{2,}/./g' -e '/\./p' > $piholeDir/$supernova & spinner $! echo " done!" - + numberOf=$(wc -l < $piholeDir/$supernova) echo "::: $numberOf domains being pulled in by gravity..." - + gravity_unique - + } function gravity_reload() { @@ -333,7 +333,7 @@ function gravity_reload() { echo -n "::: Cleaning up un-needed files..." $SUDO rm /etc/pihole/pihole.* echo " done!" - + # Reload hosts file echo ":::" echo -n "::: Refresh lists in dnsmasq..." From 4f90b413436c6989ee9e71622cb5f57d1d8b4406 Mon Sep 17 00:00:00 2001 From: Carter Maxwell Date: Sat, 5 Mar 2016 21:14:17 -0800 Subject: [PATCH 09/96] remove trailing whitespace dnsmasq.conf.original --- advanced/dnsmasq.conf.original | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/advanced/dnsmasq.conf.original b/advanced/dnsmasq.conf.original index 598d6390..9e4cc92e 100644 --- a/advanced/dnsmasq.conf.original +++ b/advanced/dnsmasq.conf.original @@ -27,8 +27,8 @@ # Replies which are not DNSSEC signed may be legitimate, because the domain # is unsigned, or may be forgeries. Setting this option tells dnsmasq to -# check that an unsigned reply is OK, by finding a secure proof that a DS -# record somewhere between the root and the domain does not exist. +# check that an unsigned reply is OK, by finding a secure proof that a DS +# record somewhere between the root and the domain does not exist. # The cost of setting this is that even queries in unsigned domains will need # one or more extra DNS queries to verify. #dnssec-check-unsigned @@ -183,11 +183,11 @@ #dhcp-range=1234::2, 1234::500, 64, 12h # Do Router Advertisements, BUT NOT DHCP for this subnet. -#dhcp-range=1234::, ra-only +#dhcp-range=1234::, ra-only # Do Router Advertisements, BUT NOT DHCP for this subnet, also try and -# add names to the DNS for the IPv6 address of SLAAC-configured dual-stack -# hosts. Use the DHCPv4 lease to derive the name, network segment and +# add names to the DNS for the IPv6 address of SLAAC-configured dual-stack +# hosts. Use the DHCPv4 lease to derive the name, network segment and # MAC address and assume that the host will also have an # IPv6 address calculated using the SLAAC alogrithm. #dhcp-range=1234::, ra-names @@ -210,9 +210,9 @@ #dhcp-range=1234::, ra-stateless, ra-names # Do router advertisements for all subnets where we're doing DHCPv6 -# Unless overriden by ra-stateless, ra-names, et al, the router +# Unless overriden by ra-stateless, ra-names, et al, the router # advertisements will have the M and O bits set, so that the clients -# get addresses and configuration from DHCPv6, and the A bit reset, so the +# get addresses and configuration from DHCPv6, and the A bit reset, so the # clients don't use SLAAC addresses. #enable-ra @@ -278,11 +278,11 @@ # any machine with Ethernet address starting 11:22:33: #dhcp-host=11:22:33:*:*:*,set:red -# Give a fixed IPv6 address and name to client with +# Give a fixed IPv6 address and name to client with # DUID 00:01:00:01:16:d2:83:fc:92:d4:19:e2:d8:b2 # Note the MAC addresses CANNOT be used to identify DHCPv6 clients. # Note also the they [] around the IPv6 address are obilgatory. -#dhcp-host=id:00:01:00:01:16:d2:83:fc:92:d4:19:e2:d8:b2, fred, [1234::5] +#dhcp-host=id:00:01:00:01:16:d2:83:fc:92:d4:19:e2:d8:b2, fred, [1234::5] # Ignore any clients which are not specified in dhcp-host lines # or /etc/ethers. Equivalent to ISC "deny unknown-clients". @@ -338,7 +338,7 @@ # Send DHCPv6 option. Note [] around IPv6 addresses. #dhcp-option=option6:dns-server,[1234::77],[1234::88] -# Send DHCPv6 option for namservers as the machine running +# Send DHCPv6 option for namservers as the machine running # dnsmasq and another. #dhcp-option=option6:dns-server,[::],[1234::88] @@ -645,4 +645,4 @@ #conf-dir=/etc/dnsmasq.d,.bak # Include all files in a directory which end in .conf -#conf-dir=/etc/dnsmasq.d/*.conf +#conf-dir=/etc/dnsmasq.d/*.conf From f633d1fa5b6d7bac32019e89ded2a20636d486ca Mon Sep 17 00:00:00 2001 From: Carter Maxwell Date: Sat, 5 Mar 2016 21:14:56 -0800 Subject: [PATCH 10/96] remove trailing whitespace blacklist.sh --- advanced/Scripts/blacklist.sh | 48 +++++++++++++++++------------------ 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/advanced/Scripts/blacklist.sh b/advanced/Scripts/blacklist.sh index 70b8131a..0eab679d 100644 --- a/advanced/Scripts/blacklist.sh +++ b/advanced/Scripts/blacklist.sh @@ -51,13 +51,13 @@ if [[ -f $piholeIPv6file ]];then fi -function HandleOther(){ +function HandleOther(){ #check validity of domain validDomain=$(echo $1 | perl -ne'print if /\b((?=[a-z0-9-]{1,63}\.)(xn--)?[a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,63}\b/') - + if [ -z "$validDomain" ]; then echo $1 is not a valid argument or domain name - else + else domList=("${domList[@]}" $validDomain) fi } @@ -66,9 +66,9 @@ function PopBlacklistFile(){ #check blacklist file exists, and if not, create it if [[ ! -f $blacklist ]];then touch $blacklist - fi + fi for dom in "${domList[@]}" - do + do if $addmode; then AddDomain $dom else @@ -97,7 +97,7 @@ function AddDomain(){ } function RemoveDomain(){ - + bool=false grep -Ex -q "$1" $blacklist || bool=true if $bool; then @@ -110,42 +110,42 @@ function RemoveDomain(){ if $versbose; then echo "::: Un-blacklisting $dom..." fi - domToRemoveList=("${domToRemoveList[@]}" $1) - modifyHost=true - fi + domToRemoveList=("${domToRemoveList[@]}" $1) + modifyHost=true + fi } -function ModifyHostFile(){ +function ModifyHostFile(){ if $addmode; then #add domains to the hosts file if [[ -r $blacklist ]];then numberOf=$(cat $blacklist | sed '/^\s*$/d' | wc -l) plural=; [[ "$numberOf" != "1" ]] && plural=s echo ":::" - echo -n "::: Modifying HOSTS file to blacklist $numberOf domain${plural}..." - if [[ -n $piholeIPv6 ]];then + echo -n "::: Modifying HOSTS file to blacklist $numberOf domain${plural}..." + if [[ -n $piholeIPv6 ]];then cat $blacklist | awk -v ipv4addr="$piholeIP" -v ipv6addr="$piholeIPv6" '{sub(/\r$/,""); print ipv4addr" "$0"\n"ipv6addr" "$0}' >> $adList - else + else cat $blacklist | awk -v ipv4addr="$piholeIP" '{sub(/\r$/,""); print ipv4addr" "$0}' >>$adList - fi - + fi + fi else - + echo ":::" for dom in "${domToRemoveList[@]}" - do - #we need to remove the domains from the blacklist file and the host file + do + #we need to remove the domains from the blacklist file and the host file echo "::: $dom" echo -n "::: removing from HOSTS file..." - echo $dom | sed 's/\./\\./g' | xargs -I {} perl -i -ne'print unless /[^.]'{}'(?!.)/;' $adList + echo $dom | sed 's/\./\\./g' | xargs -I {} perl -i -ne'print unless /[^.]'{}'(?!.)/;' $adList echo " done!" echo -n "::: removing from blackist.txt..." echo $dom | sed 's/\./\\./g' | xargs -I {} perl -i -ne'print unless /'{}'(?!.)/;' $blacklist echo " done!" - done + done fi - + } function Reload() { @@ -170,17 +170,17 @@ function Reload() { for var in "$@" do case "$var" in - "-nr"| "--noreload" ) reload=false;; + "-nr"| "--noreload" ) reload=false;; "-d" | "--delmode" ) addmode=false;; "-f" | "--force" ) force=true;; - "-q" | "--quiet" ) versbose=false;; + "-q" | "--quiet" ) versbose=false;; * ) HandleOther $var;; esac done PopBlacklistFile -if $modifyHost || $force; then +if $modifyHost || $force; then ModifyHostFile else if $versbose; then From a6877e7c13211fa31d8d6d4f9daf882eda034155 Mon Sep 17 00:00:00 2001 From: Carter Maxwell Date: Sat, 5 Mar 2016 21:15:11 -0800 Subject: [PATCH 11/96] remove trailing whitespace chronometer.sh --- advanced/Scripts/chronometer.sh | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/advanced/Scripts/chronometer.sh b/advanced/Scripts/chronometer.sh index ebed8684..75e22e29 100755 --- a/advanced/Scripts/chronometer.sh +++ b/advanced/Scripts/chronometer.sh @@ -73,9 +73,9 @@ function outputJSON(){ CalcQueriesToday CalcblockedToday CalcPercentBlockedToday - + CalcBlockedDomains - + printf '{"domains_being_blocked":"%s","dns_queries_today":"%s","ads_blocked_today":"%s","ads_percentage_today":"%s"}\n' "$blockedDomainsTotal" "$queriesToday" "$blockedToday" "$percentBlockedToday" } @@ -92,26 +92,26 @@ function normalChrono(){ echo "-------------------------------" # Uncomment to continually read the log file and display the current domain being blocked #tail -f /var/log/pihole.log | awk '/\/etc\/pihole\/gravity.list/ {if ($7 != "address" && $7 != "name" && $7 != "/etc/pihole/gravity.list") print $7; else;}' - + #uncomment next 4 lines to use original query count calculation #today=$(date "+%b %e") #todaysQueryCount=$(cat /var/log/pihole.log | grep "$today" | awk '/query/ {print $7}' | wc -l) #todaysQueryCountV4=$(cat /var/log/pihole.log | grep "$today" | awk '/query/ && /\[A\]/ {print $7}' | wc -l) #todaysQueryCountV6=$(cat /var/log/pihole.log | grep "$today" | awk '/query/ && /\[AAAA\]/ {print $7}' | wc -l) - - + + CalcQueriesToday CalcblockedToday CalcPercentBlockedToday - + CalcBlockedDomains - + echo "Blocking: $blockedDomainsTotal" #below commented line does not add up to todaysQueryCount #echo "Queries: $todaysQueryCountV4 / $todaysQueryCountV6" echo "Queries: $queriesToday" #same total calculation as dashboard echo "Pi-holed: $blockedToday ($percentBlockedToday%)" - + sleep 5 done } @@ -125,7 +125,7 @@ function displayHelp(){ echo "Options:" echo " -j, --json output stats as JSON formatted string" echo " -h, --help display this help text" - + exit 1 } @@ -137,7 +137,7 @@ for var in "$@" do case "$var" in "-j" | "--json" ) outputJSON;; - "-h" | "--help" ) displayHelp;; + "-h" | "--help" ) displayHelp;; * ) exit 1;; esac done From 876c51302adb1db8a3cd4ab294be7f28a4706b77 Mon Sep 17 00:00:00 2001 From: Carter Maxwell Date: Sat, 5 Mar 2016 21:15:36 -0800 Subject: [PATCH 12/96] remove trailing whitespace updateDashboard.sh --- advanced/Scripts/updateDashboard.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/advanced/Scripts/updateDashboard.sh b/advanced/Scripts/updateDashboard.sh index edf04896..6955683d 100644 --- a/advanced/Scripts/updateDashboard.sh +++ b/advanced/Scripts/updateDashboard.sh @@ -63,7 +63,7 @@ make_repo() { update_repo() { # pull the latest commits cd "$WEB_INTERFACE_DIR" - git pull + git pull } main From ced0ae0d65c3ded801d5210265f6d8eccfd22347 Mon Sep 17 00:00:00 2001 From: Carter Maxwell Date: Sat, 5 Mar 2016 21:15:53 -0800 Subject: [PATCH 13/96] remove trailing whitespace whitelist.sh --- advanced/Scripts/whitelist.sh | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/advanced/Scripts/whitelist.sh b/advanced/Scripts/whitelist.sh index 853c3b79..79f71a71 100755 --- a/advanced/Scripts/whitelist.sh +++ b/advanced/Scripts/whitelist.sh @@ -50,13 +50,13 @@ if [[ -f $piholeIPv6file ]];then fi -function HandleOther(){ +function HandleOther(){ #check validity of domain validDomain=$(echo $1 | perl -ne'print if /\b((?=[a-z0-9-]{1,63}\.)(xn--)?[a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,63}\b/') - + if [ -z "$validDomain" ]; then echo "::: $1 is not a valid argument or domain name" - else + else domList=("${domList[@]}" $validDomain) fi } @@ -65,9 +65,9 @@ function PopWhitelistFile(){ #check whitelist file exists, and if not, create it if [[ ! -f $whitelist ]];then touch $whitelist - fi + fi for dom in "${domList[@]}" - do + do if $addmode; then AddDomain $dom else @@ -79,7 +79,7 @@ function PopWhitelistFile(){ function AddDomain(){ #| sed 's/\./\\./g' bool=false - + grep -Ex -q "$1" $whitelist || bool=true if $bool; then #domain not found in the whitelist file, add it! @@ -99,7 +99,7 @@ function AddDomain(){ } function RemoveDomain(){ - + bool=false grep -Ex -q "$1" $whitelist || bool=true if $bool; then @@ -113,11 +113,11 @@ function RemoveDomain(){ #echo "::: Un-whitelisting $dom..." #fi domToRemoveList=("${domToRemoveList[@]}" $1) - modifyHost=true - fi + modifyHost=true + fi } -function ModifyHostFile(){ +function ModifyHostFile(){ if $addmode; then #remove domains in from hosts file if [[ -r $whitelist ]];then @@ -129,19 +129,19 @@ function ModifyHostFile(){ awk -F':' '{print $1}' $whitelist | while read line; do echo "$piholeIP $line"; done > /etc/pihole/whitelist.tmp awk -F':' '{print $1}' $whitelist | while read line; do echo "$piholeIPv6 $line"; done >> /etc/pihole/whitelist.tmp echo "l" >> /etc/pihole/whitelist.tmp - grep -F -x -v -f /etc/pihole/whitelist.tmp /etc/pihole/gravity.list > /etc/pihole/gravity.tmp + grep -F -x -v -f /etc/pihole/whitelist.tmp /etc/pihole/gravity.list > /etc/pihole/gravity.tmp rm /etc/pihole/gravity.list mv /etc/pihole/gravity.tmp /etc/pihole/gravity.list rm /etc/pihole/whitelist.tmp echo " done!" - + fi else #we need to add the removed domains to the hosts file echo ":::" echo "::: Modifying HOSTS file to un-whitelist domains..." for rdom in "${domToRemoveList[@]}" - do + do if [[ -n $piholeIPv6 ]];then echo -n "::: Un-whitelisting $rdom on IPv4 and IPv6..." echo $rdom | awk -v ipv4addr="$piholeIP" -v ipv6addr="$piholeIPv6" '{sub(/\r$/,""); print ipv4addr" "$0"\n"ipv6addr" "$0}' >> $adList @@ -155,7 +155,7 @@ function ModifyHostFile(){ echo $rdom| sed 's/\./\\./g' | xargs -I {} perl -i -ne'print unless /'{}'(?!.)/;' $whitelist echo " done!" done - fi + fi } function Reload() { @@ -179,10 +179,10 @@ function Reload() { for var in "$@" do case "$var" in - "-nr"| "--noreload" ) reload=false;; + "-nr"| "--noreload" ) reload=false;; "-d" | "--delmode" ) addmode=false;; "-f" | "--force" ) force=true;; - "-q" | "--quiet" ) versbose=false;; + "-q" | "--quiet" ) versbose=false;; * ) HandleOther $var;; esac done From 4452f784a8dcc0013d678f2d742abfc2166df60d Mon Sep 17 00:00:00 2001 From: Carter Maxwell Date: Sat, 5 Mar 2016 21:16:23 -0800 Subject: [PATCH 14/96] remove trailing whitespace basic-install.sh --- automated install/basic-install.sh | 56 +++++++++++++++--------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/automated install/basic-install.sh b/automated install/basic-install.sh index 883e2c61..4e6c74fa 100755 --- a/automated install/basic-install.sh +++ b/automated install/basic-install.sh @@ -111,7 +111,7 @@ welcomeDialogs() { whiptail --msgbox --backtitle "Plea" --title "Free and open source" "The Pi-hole is free, but powered by your donations: http://pi-hole.net/donate" $r $c # Explain the need for a static address - whiptail --msgbox --backtitle "Initating network interface" --title "Static IP Needed" "The Pi-hole is a SERVER so it needs a STATIC IP ADDRESS to function properly. + whiptail --msgbox --backtitle "Initating network interface" --title "Static IP Needed" "The Pi-hole is a SERVER so it needs a STATIC IP ADDRESS to function properly. In the next section, you can choose to use your current network settings (DHCP) or to manually edit them." $r $c } @@ -119,12 +119,12 @@ welcomeDialogs() { verifyFreeDiskSpace() { # 25MB is the minimum space needed (20MB install + 5MB one day of logs.) requiredFreeBytes=51200 - - existingFreeBytes=`df -lk / 2>&1 | awk '{print $4}' | head -2 | tail -1` - if ! [[ "$existingFreeBytes" =~ ^([0-9])+$ ]]; then - existingFreeBytes=`df -lk /dev 2>&1 | awk '{print $4}' | head -2 | tail -1` + + existingFreeBytes=`df -lk / 2>&1 | awk '{print $4}' | head -2 | tail -1` + if ! [[ "$existingFreeBytes" =~ ^([0-9])+$ ]]; then + existingFreeBytes=`df -lk /dev 2>&1 | awk '{print $4}' | head -2 | tail -1` fi - + if [[ $existingFreeBytes -lt $requiredFreeBytes ]]; then whiptail --msgbox --backtitle "Insufficient Disk Space" --title "Insufficient Disk Space" "\nYour system appears to be low on disk space. pi-hole recomends a minimum of $requiredFreeBytes Bytes.\nYou only have $existingFreeBytes Free.\n\nIf this is a new install you may need to expand your disk.\n\nTry running:\n 'sudo raspi-config'\nChoose the 'expand file system option'\n\nAfter rebooting, run this installation again.\n\ncurl -L install.pi-hole.net | bash\n" $r $c echo "$existingFreeBytes is less than $requiredFreeBytes" @@ -164,7 +164,7 @@ chooseInterface() { echo "::: Cancel selected, exiting...." exit 1 fi - + } cleanupIPv6() { @@ -188,7 +188,7 @@ use4andor6() { IPv6 ) useIPv6=true;; esac done - + if [ $useIPv4 ] && [ ! $useIPv6 ]; then getStaticIPv4Settings setStaticIPv4 @@ -308,7 +308,7 @@ function valid_ip() { local ip=$1 local stat=1 - + if [[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then OIFS=$IFS IFS='.' @@ -360,9 +360,9 @@ setDNS(){ Custom) until [[ $DNSSettingsCorrect = True ]] do - + strInvalid="Invalid" - + if [ ! $piholeDNS1 ]; then if [ ! $piholeDNS2 ]; then prePopulate="" @@ -374,38 +374,38 @@ setDNS(){ elif [ $piholeDNS1 ] && [ $piholeDNS2 ]; then prePopulate="$piholeDNS1, $piholeDNS2" fi - + piholeDNS=$(whiptail --backtitle "Specify Upstream DNS Provider(s)" --inputbox "Enter your desired upstream DNS provider(s), seperated by a comma.\n\nFor example '8.8.8.8, 8.8.4.4'" $r $c "$prePopulate" 3>&1 1>&2 2>&3) if [[ $? = 0 ]];then piholeDNS1=$(echo $piholeDNS | sed 's/[, \t]\+/,/g' | awk -F, '{print$1}') piholeDNS2=$(echo $piholeDNS | sed 's/[, \t]\+/,/g' | awk -F, '{print$2}') - + if ! valid_ip $piholeDNS1 || [ ! $piholeDNS1 ]; then piholeDNS1=$strInvalid fi - + if ! valid_ip $piholeDNS2 && [ $piholeDNS2 ]; then piholeDNS2=$strInvalid fi - + else echo "::: Cancel selected, exiting...." exit 1 fi - + if [[ $piholeDNS1 == $strInvalid ]] || [[ $piholeDNS2 == $strInvalid ]]; then - whiptail --msgbox --backtitle "Invalid IP" --title "Invalid IP" "One or both entered IP addresses were invalid. Please try again.\n\n DNS Server 1: $piholeDNS1\n DNS Server 2: $piholeDNS2" $r $c - + whiptail --msgbox --backtitle "Invalid IP" --title "Invalid IP" "One or both entered IP addresses were invalid. Please try again.\n\n DNS Server 1: $piholeDNS1\n DNS Server 2: $piholeDNS2" $r $c + if [[ $piholeDNS1 == $strInvalid ]]; then piholeDNS1="" fi - + if [[ $piholeDNS2 == $strInvalid ]]; then piholeDNS2="" fi - + DNSSettingsCorrect=False - else + else if (whiptail --backtitle "Specify Upstream DNS Provider(s)" --title "Upstream DNS Provider(s)" --yesno "Are these settings correct?\n DNS Server 1: $piholeDNS1\n DNS Server 2: $piholeDNS2" $r $c) then DNSSettingsCorrect=True else @@ -427,11 +427,11 @@ versionCheckDNSmasq(){ dnsFile1="/etc/dnsmasq.conf" dnsFile2="/etc/dnsmasq.conf.orig" dnsSearch="addn-hosts=/etc/pihole/gravity.list" - + defaultFile="/etc/.pihole/advanced/dnsmasq.conf.original" newFileToInstall="/etc/.pihole/advanced/01-pihole.conf" newFileFinalLocation="/etc/dnsmasq.d/01-pihole.conf" - + if [ -f $dnsFile1 ]; then echo -n "::: Existing dnsmasq.conf found..." if grep -q $dnsSearch $dnsFile1; then @@ -443,14 +443,14 @@ versionCheckDNSmasq(){ $SUDO cp $defaultFile $dnsFile1 echo " done." else - echo " it is not a pi-hole file, leaving alone!" + echo " it is not a pi-hole file, leaving alone!" fi else echo -n "::: No dnsmasq.conf found.. restoring default dnsmasq.conf..." $SUDO cp $defaultFile $dnsFile1 echo " done." fi - + echo -n "::: Copying 01-pihole.conf to /etc/dnsmasq.d/01-pihole.conf..." $SUDO cp $newFileToInstall $newFileFinalLocation echo " done." @@ -635,9 +635,9 @@ installCron() { runGravity() { # Rub gravity.sh to build blacklists $SUDO echo ":::" - $SUDO echo "::: Preparing to run gravity.sh to refresh hosts..." + $SUDO echo "::: Preparing to run gravity.sh to refresh hosts..." if ls /etc/pihole/list* 1> /dev/null 2>&1; then - echo "::: Cleaning up previous install (preserving whitelist/blacklist)" + echo "::: Cleaning up previous install (preserving whitelist/blacklist)" $SUDO rm /etc/pihole/list.* fi #Don't run as SUDO, this was causing issues @@ -661,7 +661,7 @@ setUser(){ setPassword() { # Password needed to authorize changes to lists from admin page pass=$(whiptail --passwordbox "Please enter a password to secure your Pi-hole web interface." 10 50 3>&1 1>&2 2>&3) - + if [ $? = 0 ]; then # Entered password echo $pass > /etc/pihole/password.txt From 8cbd9f7f08a05c11833c6804754e14d0d6255fa4 Mon Sep 17 00:00:00 2001 From: James Singleton Date: Mon, 7 Mar 2016 13:31:50 +0000 Subject: [PATCH 15/96] Optionally block the BBC Breaking News banner --- adlists.default | 3 +++ 1 file changed, 3 insertions(+) diff --git a/adlists.default b/adlists.default index 99786746..3d72642e 100644 --- a/adlists.default +++ b/adlists.default @@ -39,6 +39,9 @@ http://hosts-file.net/ad_servers.txt # Quidsup's tracker list https://raw.githubusercontent.com/quidsup/notrack/master/trackers.txt +# Block the BBC News website Breaking News banner +#https://raw.githubusercontent.com/BreakingTheNews/BreakingTheNews.github.io/master/hosts + # Untested Lists: #https://raw.githubusercontent.com/reek/anti-adblock-killer/master/anti-adblock-killer-filters.txt From 122ce11381932d9101a055f8d49220bf95ea980c Mon Sep 17 00:00:00 2001 From: Stefan Joosten Date: Tue, 8 Mar 2016 00:23:39 +0100 Subject: [PATCH 16/96] Fix URL for Windows 10 Telemetry list. --- adlists.default | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/adlists.default b/adlists.default index 99786746..6ba9678e 100644 --- a/adlists.default +++ b/adlists.default @@ -30,8 +30,8 @@ http://hosts-file.net/ad_servers.txt # ADZHOSTS list. Has been known to block legitimate domains #http://optimate.dl.sourceforge.net/project/adzhosts/HOSTS.txt -# Windows 10 telemetry list - warning this one may block windows update -#https://raw.githubusercontent.com/crazy-max/HostsWindowsBlocker/master/hosts.txt +# Windows 10 telemetry list +#https://raw.githubusercontent.com/crazy-max/WindowsSpyBlocker/master/hostsBlockWindowsSpy.txt # Securemecca.com list - Also blocks "adult" sites (pornography/gambling etc) #http://securemecca.com/Downloads/hosts.txt From d13ae0610e5ed9ff34b5b2182996d22d8571ef5d Mon Sep 17 00:00:00 2001 From: Morlok8k Date: Tue, 8 Mar 2016 10:19:01 -0800 Subject: [PATCH 17/96] fix for older versions of uptime, on development branch. --- advanced/Scripts/chronometer.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/advanced/Scripts/chronometer.sh b/advanced/Scripts/chronometer.sh index 75e22e29..8cd9f042 100755 --- a/advanced/Scripts/chronometer.sh +++ b/advanced/Scripts/chronometer.sh @@ -88,7 +88,8 @@ function normalChrono(){ echo " $(ifconfig eth0 | awk '/inet addr/ {print $2}' | cut -d':' -f2)" echo "" uptime | cut -d' ' -f11- - uptime -p + #uptime -p #Doesn't work on all versions of uptime + uptime | awk -F'( |,|:)+' '{if ($7=="min") m=$6; else {if ($7~/^day/) {d=$6;h=$8;m=$9} else {h=$6;m=$7}}} {print d+0,"days,",h+0,"hours,",m+0,"minutes."}' echo "-------------------------------" # Uncomment to continually read the log file and display the current domain being blocked #tail -f /var/log/pihole.log | awk '/\/etc\/pihole\/gravity.list/ {if ($7 != "address" && $7 != "name" && $7 != "/etc/pihole/gravity.list") print $7; else;}' From a44a201f0088a48a4240f380dded8c815ed4411e Mon Sep 17 00:00:00 2001 From: Kevin Ross Date: Mon, 14 Mar 2016 22:51:16 -0500 Subject: [PATCH 18/96] rewrite js files to a valid stub --- advanced/lighttpd.conf | 2 ++ 1 file changed, 2 insertions(+) diff --git a/advanced/lighttpd.conf b/advanced/lighttpd.conf index 5a662ffa..124371a9 100644 --- a/advanced/lighttpd.conf +++ b/advanced/lighttpd.conf @@ -53,4 +53,6 @@ $HTTP["url"] =~ "^/admin/" { $HTTP["url"] =~ "^(?!/admin)/.*" { # Create a response header for debugging using curl -I setenv.add-response-header = ( "X-Pi-hole" => "A black hole for Internet advertisements." ) + # rewrite only js requests + url.rewrite = ("(.*).js" => "pihole/index.js") } From d3971b26e4e278a227f861697c2063acd6bfe9a8 Mon Sep 17 00:00:00 2001 From: Kevin Ross Date: Mon, 14 Mar 2016 22:52:02 -0500 Subject: [PATCH 19/96] add a valid js stub --- advanced/index.js | 1 + 1 file changed, 1 insertion(+) create mode 100644 advanced/index.js diff --git a/advanced/index.js b/advanced/index.js new file mode 100644 index 00000000..6e81b42f --- /dev/null +++ b/advanced/index.js @@ -0,0 +1 @@ +var x = "X-Pi-hole: A black hole for Internet advertisements." From 404ea0ce6daaf61b1e6739d2ae3647d85390b24d Mon Sep 17 00:00:00 2001 From: Kevin Ross Date: Mon, 14 Mar 2016 22:54:45 -0500 Subject: [PATCH 20/96] copy both the html and js stubs during install --- automated install/basic-install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/automated install/basic-install.sh b/automated install/basic-install.sh index b3e6202f..35c885e8 100755 --- a/automated install/basic-install.sh +++ b/automated install/basic-install.sh @@ -619,7 +619,7 @@ installPiholeWeb() { else $SUDO mkdir /var/www/html/pihole $SUDO mv /var/www/html/index.lighttpd.html /var/www/html/index.lighttpd.orig - $SUDO cp /etc/.pihole/advanced/index.html /var/www/html/pihole/index.html + $SUDO cp /etc/.pihole/advanced/index.* /var/www/html/pihole/. $SUDO echo " done!" fi } From b79db363368310cc47fcea4b4abd2426ce898c5d Mon Sep 17 00:00:00 2001 From: Kevin Ross Date: Mon, 14 Mar 2016 22:59:38 -0500 Subject: [PATCH 21/96] no need for the X- header prefix in the string --- advanced/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/advanced/index.js b/advanced/index.js index 6e81b42f..c9da5aff 100644 --- a/advanced/index.js +++ b/advanced/index.js @@ -1 +1 @@ -var x = "X-Pi-hole: A black hole for Internet advertisements." +var x = "Pi-hole: A black hole for Internet advertisements." From 0b5f005a5d799d0a0a1200061ea668434fa77eaf Mon Sep 17 00:00:00 2001 From: nate Date: Sat, 19 Mar 2016 20:32:11 -0500 Subject: [PATCH 22/96] Added piholeDebug.sh script for advanced debugging Script piholeDebug.sh added to /usr/local/bin to generate a detailed log file for debugging/troubleshooting. --- advanced/Scripts/piholeDebug.sh | 157 +++++++++++++++++++++++++++++ automated install/basic-install.sh | 3 +- 2 files changed, 159 insertions(+), 1 deletion(-) create mode 100644 advanced/Scripts/piholeDebug.sh diff --git a/advanced/Scripts/piholeDebug.sh b/advanced/Scripts/piholeDebug.sh new file mode 100644 index 00000000..ead75cd9 --- /dev/null +++ b/advanced/Scripts/piholeDebug.sh @@ -0,0 +1,157 @@ +#!/usr/bin/env bash +# Pi-hole: A black hole for Internet advertisements +# (c) 2015, 2016 by Jacob Salmela +# Network-wide ad blocking via your Raspberry Pi +# http://pi-hole.net +# Flushes /var/log/pihole.log +# +# 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 +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. + +# Nate Brandeburg +# nate@ubiquisoft.com +# 3/19/2016 + +######## GLOBAL VARS ######## +DEBUG_LOG="/var/log/pihole_debug.log" + +######## FIRST CHECK ######## +# Must be root to debug +if [[ $EUID -eq 0 ]];then + echo "::: You are root... Beginning debug!" +else + echo "::: sudo will be used for debugging." + # Check if sudo is actually installed + if [[ $(dpkg-query -s sudo) ]];then + export SUDO="sudo" + else + echo "::: Please install sudo or run this as root." + exit 1 + fi +fi + +# Ensure the file exists, create if not, clear if exists. +if [ ! -f "$DEBUG_LOG" ] +then + $SUDO touch $DEBUG_LOG + $SUDO chmod 644 $DEBUG_LOG + $SUDO chown "$USER":root $DEBUG_LOG +else + truncate -s 0 $DEBUG_LOG +fi + +### Check Pi internet connections ### +# Log the IP addresses of this Pi +IPADDR=$(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 + +echo "Writing dnsmasq.conf to debug log..." +echo "############### Dnsmasq ###############" >> $DEBUG_LOG +DNSMASQFILE="/etc/dnsmasq.conf" +if [ -e "$DNSMASQFILE" ] +then + cat $DNSMASQFILE >> $DEBUG_LOG + echo >> $DEBUG_LOG +else + echo "No dnsmasq.conf file found!" >> $DEBUG_LOG + echo "No dnsmasq.conf file found!" +fi + +echo "Writing hosts file to debug log..." +echo "############### Hosts ###############" >> $DEBUG_LOG +HOSTSFILE="/etc/hosts" +if [ -e "$HOSTSFILE" ] +then + cat "$HOSTSFILE" >> $DEBUG_LOG + echo >> $DEBUG_LOG +else + echo "No hosts file found!" >> $DEBUG_LOG + echo "No hosts file found!" +fi + +### PiHole application specific logging ### +# Write Pi-Hole logs to debug log +echo "Writing whitelist to debug log..." +echo "############### Whitelist ###############" >> $DEBUG_LOG +WHITELISTFILE="/etc/pihole/whitelist.txt" +if [ -e "$WHITELISTFILE" ] +then + cat "$WHITELISTFILE" >> $DEBUG_LOG + echo >> $DEBUG_LOG +else + echo "No whitelist.txt file found!" >> $DEBUG_LOG + echo "No whitelist.txt file found!" +fi + +echo "Writing blacklist to debug log..." +echo "############### Blacklist ###############" >> $DEBUG_LOG +BLACKLISTFILE="/etc/pihole/blacklist.txt" +if [ -e "$BLACKLISTFILE" ] +then + cat "$BLACKLISTFILE" >> $DEBUG_LOG + echo >> $DEBUG_LOG +else + echo "No blacklist.txt file found!" >> $DEBUG_LOG + echo "No blacklist.txt file found!" +fi + +echo "Writing adlists.list to debug log..." +echo "############### adlists.list ###############" >> $DEBUG_LOG +ADLISTSFILE="/etc/pihole/adlists.list" +if [ -e "$ADLISTSFILE" ] +then + cat "$ADLISTSFILE" >> $DEBUG_LOG + echo >> $DEBUG_LOG +else + echo "No adlists.list file found!" >> $DEBUG_LOG + echo "No adlists.list file found!" +fi + + +# Continuously append the pihole.log file to the pihole_debug.log file +function dumpPiHoleLog { + trap '{ echo -e "\nFinishing debug write from interrupt... Quitting!" ; exit 1; }' INT + echo -e "Writing current pihole traffic to debug log...\nTry loading any/all sites that you are having trouble with now... (Press ctrl+C to finish)" + echo "############### pihole.log ###############" >> $DEBUG_LOG + PIHOLELOG="/var/log/pihole.log" + if [ -e "$PIHOLELOG" ] + then + while true; do + tail -f "$PIHOLELOG" >> $DEBUG_LOG + echo >> $DEBUG_LOG + done + else + echo "No pihole.log file found!" >> $DEBUG_LOG + echo "No pihole.log file found!" + fi +} + +function finalWrites { + # Write the gravity.list after the user is finished capturing the pihole.log output + echo "Writing gravity.list to debug log..." + echo "############### gravity.list ###############" >> $DEBUG_LOG + GRAVITYFILE="/etc/pihole/gravity.list" + if [ -e "$GRAVITYFILE" ] + then + cat /etc/pihole/gravity.list >> $DEBUG_LOG + echo >> $DEBUG_LOG + else + echo "No gravity.list file found!" >> $DEBUG_LOG + echo "No gravity.list file found" + fi +} +trap finalWrites EXIT + +### Method calls for additinal logging ### +dumpPiHoleLog diff --git a/automated install/basic-install.sh b/automated install/basic-install.sh index b3e6202f..8068a485 100755 --- a/automated install/basic-install.sh +++ b/automated install/basic-install.sh @@ -477,7 +477,8 @@ installScripts() { $SUDO cp /etc/.pihole/advanced/Scripts/blacklist.sh /usr/local/bin/blacklist.sh $SUDO cp /etc/.pihole/advanced/Scripts/piholeLogFlush.sh /usr/local/bin/piholeLogFlush.sh $SUDO cp /etc/.pihole/advanced/Scripts/updateDashboard.sh /usr/local/bin/updateDashboard.sh - $SUDO chmod 755 /usr/local/bin/{gravity,chronometer,whitelist,blacklist,piholeLogFlush,updateDashboard}.sh + $SUDO cp /etc/.pihole/advanced/Scripts/piholeDebug.sh /usr/local/bin/piholeDebug.sh + $SUDO chmod 755 /usr/local/bin/{gravity,chronometer,whitelist,blacklist,piholeLogFlush,updateDashboard,piholeDebug}.sh $SUDO echo " done." } From b0dd2310186647afa7e27c0f91aceea49c187b27 Mon Sep 17 00:00:00 2001 From: nate Date: Sat, 19 Mar 2016 21:34:02 -0500 Subject: [PATCH 23/96] Modified description in header Removed copied header description from piholeLogFlush.sh and replaced with relevant description. --- advanced/Scripts/piholeDebug.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/advanced/Scripts/piholeDebug.sh b/advanced/Scripts/piholeDebug.sh index ead75cd9..59ad130e 100644 --- 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 -# Flushes /var/log/pihole.log +# Generates pihole_debug.log in /var/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 From 04638c90652d56240ab3ac378b5e43b152451417 Mon Sep 17 00:00:00 2001 From: nate Date: Sun, 20 Mar 2016 18:21:35 -0500 Subject: [PATCH 24/96] Added 01-pihole.conf from /etc/dnsmasq.d/ to log Write 01-pihole.conf to debug log --- advanced/Scripts/piholeDebug.sh | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/advanced/Scripts/piholeDebug.sh b/advanced/Scripts/piholeDebug.sh index 59ad130e..b47d9755 100644 --- a/advanced/Scripts/piholeDebug.sh +++ b/advanced/Scripts/piholeDebug.sh @@ -138,13 +138,25 @@ function dumpPiHoleLog { } function finalWrites { + # Write the 01-pihole.conf from /etc/dnsmasq.d/ to the debug log + echo "Writing 01-pihole.conf to debug log..." + echo "############### 01-pihole.conf ###############" >> $DEBUG_LOG + PIHOLECONFFILE="/etc/dnsmasq.d/01-pihole.conf" + if [ -e "$PIHOLECONFFILE" ] + then + cat "$PIHOLECONFFILE" >> $DEBUG_LOG + echo >> $DEBUG_LOG + else + echo "No 01-pihole.conf file found!" >> $DEBUG_LOG + echo "No 01-pihole.conf file found" + fi # Write the gravity.list after the user is finished capturing the pihole.log output echo "Writing gravity.list to debug log..." echo "############### gravity.list ###############" >> $DEBUG_LOG GRAVITYFILE="/etc/pihole/gravity.list" if [ -e "$GRAVITYFILE" ] then - cat /etc/pihole/gravity.list >> $DEBUG_LOG + cat "$GRAVITYFILE" >> $DEBUG_LOG echo >> $DEBUG_LOG else echo "No gravity.list file found!" >> $DEBUG_LOG From 00f46dc149ccbec41b690c3af7e59a40a9d6b290 Mon Sep 17 00:00:00 2001 From: nate Date: Wed, 23 Mar 2016 14:56:27 -0500 Subject: [PATCH 25/96] Added Pi 3B to README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1a181d6f..01928cdd 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # Automated Install -##### Designed For Raspberry Pi A+, B, B+, 2, and Zero (with an Ethernet/Wi-Fi adapter) +##### Designed For Raspberry Pi A+, B, B+, 2, Zero, and 3B (with an Ethernet/Wi-Fi adapter) 1. Install Raspbian 2. Run the command below From 86eafe7a332f8af6ca6ce5fb4ff32318063715e0 Mon Sep 17 00:00:00 2001 From: nate Date: Thu, 24 Mar 2016 16:21:29 -0500 Subject: [PATCH 26/96] Added comparison of gravity.list with Whitelist.txt and Blacklist.txt. Added additional echos to help read the debug file. TODO: testNslookup function --- advanced/Scripts/piholeDebug.sh | 162 +++++++++++++++++++++++--------- 1 file changed, 119 insertions(+), 43 deletions(-) diff --git a/advanced/Scripts/piholeDebug.sh b/advanced/Scripts/piholeDebug.sh index b47d9755..8bb741ea 100644 --- a/advanced/Scripts/piholeDebug.sh +++ b/advanced/Scripts/piholeDebug.sh @@ -12,22 +12,32 @@ # Nate Brandeburg # nate@ubiquisoft.com -# 3/19/2016 +# 3/24/2016 ######## GLOBAL VARS ######## DEBUG_LOG="/var/log/pihole_debug.log" +DNSMASQFILE="/etc/dnsmasq.conf" +PIHOLECONFFILE="/etc/dnsmasq.d/01-pihole.conf" +LIGHTTPDFILE="/etc/lighttpd/lighttpd.conf" +GRAVITYFILE="/etc/pihole/gravity.list" +HOSTSFILE="/etc/hosts" +WHITELISTFILE="/etc/pihole/whitelist.txt" +BLACKLISTFILE="/etc/pihole/blacklist.txt" +ADLISTSFILE="/etc/pihole/adlists.list" +PIHOLELOG="/var/log/pihole.log" + ######## FIRST CHECK ######## # Must be root to debug if [[ $EUID -eq 0 ]];then - echo "::: You are root... Beginning debug!" + echo "You are root... Beginning debug!" else - echo "::: sudo will be used for debugging." + echo "sudo will be used for debugging." # Check if sudo is actually installed if [[ $(dpkg-query -s sudo) ]];then export SUDO="sudo" else - echo "::: Please install sudo or run this as root." + echo "Please install sudo or run this as root." exit 1 fi fi @@ -42,6 +52,32 @@ else truncate -s 0 $DEBUG_LOG fi +### Private functions exist here ### +function compareWhitelist { + echo "#######################################" >> $DEBUG_LOG + echo "######## Whitelist Comparison #########" >> $DEBUG_LOG + echo "#######################################" >> $DEBUG_LOG + while read -r line; do + grep -w ".* $line$" "$GRAVITYFILE" >> $DEBUG_LOG + done < "$WHITELISTFILE" + echo >> $DEBUG_LOG +} + +function compareBlacklist { + echo "#######################################" >> $DEBUG_LOG + echo "######## Blacklist Comparison #########" >> $DEBUG_LOG + echo "#######################################" >> $DEBUG_LOG + while read -r line; do + grep -w ".* $line$" "$GRAVITYFILE" >> $DEBUG_LOG + done < "$BLACKLISTFILE" + echo >> $DEBUG_LOG +} + +function testNslookup { + # TODO: This will pull a non-matched entry from gravity.list to compare with the nslookup against Google's NS. + echo >> $DEBUG_LOG +} + ### Check Pi internet connections ### # Log the IP addresses of this Pi IPADDR=$(ifconfig | perl -nle 's/dr:(\S+)/print $1/e') @@ -57,20 +93,78 @@ echo "$GATEWAY_CHECK" >> $DEBUG_LOG echo >> $DEBUG_LOG echo "Writing dnsmasq.conf to debug log..." +echo "#######################################" >> $DEBUG_LOG echo "############### Dnsmasq ###############" >> $DEBUG_LOG -DNSMASQFILE="/etc/dnsmasq.conf" +echo "#######################################" >> $DEBUG_LOG if [ -e "$DNSMASQFILE" ] then - cat $DNSMASQFILE >> $DEBUG_LOG + #cat $DNSMASQFILE >> $DEBUG_LOG + while read -r line; do + [[ "$line" =~ ^#.*$ ]] && continue + echo "$line" >> $DEBUG_LOG + done < "$DNSMASQFILE" echo >> $DEBUG_LOG else echo "No dnsmasq.conf file found!" >> $DEBUG_LOG echo "No dnsmasq.conf file found!" fi +echo "Writing 01-pihole.conf to debug log..." +echo "#######################################" >> $DEBUG_LOG +echo "########### 01-pihole.conf ############" >> $DEBUG_LOG +echo "#######################################" >> $DEBUG_LOG +if [ -e "$PIHOLECONFFILE" ] +then + #cat "$PIHOLECONFFILE" >> $DEBUG_LOG + while read -r line; do + [[ "$line" =~ ^#.*$ ]] && continue + echo "$line" >> $DEBUG_LOG + done < "$PIHOLECONFFILE" + echo >> $DEBUG_LOG +else + echo "No 01-pihole.conf file found!" >> $DEBUG_LOG + echo "No 01-pihole.conf file found" +fi + +echo "Writing lighttpd.conf to debug log..." +echo "#######################################" >> $DEBUG_LOG +echo "############ lighttpd.conf ############" >> $DEBUG_LOG +echo "#######################################" >> $DEBUG_LOG +if [ -e "$LIGHTTPDFILE" ] +then + #cat "$PIHOLECONFFILE" >> $DEBUG_LOG + while read -r line; do + [[ "$line" =~ ^#.*$ ]] && continue + echo "$line" >> $DEBUG_LOG + done < "$LIGHTTPDFILE" + echo >> $DEBUG_LOG +else + echo "No lighttpd.conf file found!" >> $DEBUG_LOG + echo "No lighttpd.conf file found" +fi + +echo "Writing size of gravity.list to debug log..." +echo "#######################################" >> $DEBUG_LOG +echo "############ gravity.list #############" >> $DEBUG_LOG +echo "#######################################" >> $DEBUG_LOG +if [ -e "$GRAVITYFILE" ] +then + wc -l "$GRAVITYFILE" >> $DEBUG_LOG + echo >> $DEBUG_LOG +else + echo "No gravity.list file found!" >> $DEBUG_LOG + echo "No gravity.list file found" +fi + +# Write the hostname output to compare against entries in /etc/hosts, which is logged next +echo "Hostname of this pihole is: " >> $DEBUG_LOG +hostname >> $DEBUG_LOG +echo >> $DEBUG_LOG + echo "Writing hosts file to debug log..." -echo "############### Hosts ###############" >> $DEBUG_LOG -HOSTSFILE="/etc/hosts" +echo "#######################################" >> $DEBUG_LOG +echo "################ Hosts ################" >> $DEBUG_LOG +echo "#######################################" >> $DEBUG_LOG if [ -e "$HOSTSFILE" ] then cat "$HOSTSFILE" >> $DEBUG_LOG @@ -83,8 +177,9 @@ fi ### PiHole application specific logging ### # Write Pi-Hole logs to debug log echo "Writing whitelist to debug log..." -echo "############### Whitelist ###############" >> $DEBUG_LOG -WHITELISTFILE="/etc/pihole/whitelist.txt" +echo "#######################################" >> $DEBUG_LOG +echo "############## Whitelist ##############" >> $DEBUG_LOG +echo "#######################################" >> $DEBUG_LOG if [ -e "$WHITELISTFILE" ] then cat "$WHITELISTFILE" >> $DEBUG_LOG @@ -95,8 +190,9 @@ else fi echo "Writing blacklist to debug log..." -echo "############### Blacklist ###############" >> $DEBUG_LOG -BLACKLISTFILE="/etc/pihole/blacklist.txt" +echo "#######################################" >> $DEBUG_LOG +echo "############## Blacklist ##############" >> $DEBUG_LOG +echo "#######################################" >> $DEBUG_LOG if [ -e "$BLACKLISTFILE" ] then cat "$BLACKLISTFILE" >> $DEBUG_LOG @@ -107,8 +203,9 @@ else fi echo "Writing adlists.list to debug log..." -echo "############### adlists.list ###############" >> $DEBUG_LOG -ADLISTSFILE="/etc/pihole/adlists.list" +echo "#######################################" >> $DEBUG_LOG +echo "############ adlists.list #############" >> $DEBUG_LOG +echo "#######################################" >> $DEBUG_LOG if [ -e "$ADLISTSFILE" ] then cat "$ADLISTSFILE" >> $DEBUG_LOG @@ -123,8 +220,9 @@ fi function dumpPiHoleLog { trap '{ echo -e "\nFinishing debug write from interrupt... Quitting!" ; exit 1; }' INT echo -e "Writing current pihole traffic to debug log...\nTry loading any/all sites that you are having trouble with now... (Press ctrl+C to finish)" - echo "############### pihole.log ###############" >> $DEBUG_LOG - PIHOLELOG="/var/log/pihole.log" + echo "#######################################" >> $DEBUG_LOG + echo "############# pihole.log ##############" >> $DEBUG_LOG + echo "#######################################" >> $DEBUG_LOG if [ -e "$PIHOLELOG" ] then while true; do @@ -137,33 +235,11 @@ function dumpPiHoleLog { fi } -function finalWrites { - # Write the 01-pihole.conf from /etc/dnsmasq.d/ to the debug log - echo "Writing 01-pihole.conf to debug log..." - echo "############### 01-pihole.conf ###############" >> $DEBUG_LOG - PIHOLECONFFILE="/etc/dnsmasq.d/01-pihole.conf" - if [ -e "$PIHOLECONFFILE" ] - then - cat "$PIHOLECONFFILE" >> $DEBUG_LOG - echo >> $DEBUG_LOG - else - echo "No 01-pihole.conf file found!" >> $DEBUG_LOG - echo "No 01-pihole.conf file found" - fi - # Write the gravity.list after the user is finished capturing the pihole.log output - echo "Writing gravity.list to debug log..." - echo "############### gravity.list ###############" >> $DEBUG_LOG - GRAVITYFILE="/etc/pihole/gravity.list" - if [ -e "$GRAVITYFILE" ] - then - cat "$GRAVITYFILE" >> $DEBUG_LOG - echo >> $DEBUG_LOG - else - echo "No gravity.list file found!" >> $DEBUG_LOG - echo "No gravity.list file found" - fi +# Anything to be done after capturing of pihole.log terminates +function finalWork { + echo "Finshed debugging!" } -trap finalWrites EXIT +trap finalWork EXIT -### Method calls for additinal logging ### +### Method calls for additional logging ### dumpPiHoleLog From b746250e71e247fc371b9c244d092dd54d28291a Mon Sep 17 00:00:00 2001 From: Nate Date: Thu, 24 Mar 2016 18:29:13 -0500 Subject: [PATCH 27/96] Made all advanced/Scripts/ executable for consistency. --- advanced/Scripts/blacklist.sh | 0 advanced/Scripts/piholeDebug.sh | 0 advanced/Scripts/setupLCD.sh | 0 advanced/Scripts/updateDashboard.sh | 0 4 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 advanced/Scripts/blacklist.sh mode change 100644 => 100755 advanced/Scripts/piholeDebug.sh mode change 100644 => 100755 advanced/Scripts/setupLCD.sh mode change 100644 => 100755 advanced/Scripts/updateDashboard.sh diff --git a/advanced/Scripts/blacklist.sh b/advanced/Scripts/blacklist.sh old mode 100644 new mode 100755 diff --git a/advanced/Scripts/piholeDebug.sh b/advanced/Scripts/piholeDebug.sh old mode 100644 new mode 100755 diff --git a/advanced/Scripts/setupLCD.sh b/advanced/Scripts/setupLCD.sh old mode 100644 new mode 100755 diff --git a/advanced/Scripts/updateDashboard.sh b/advanced/Scripts/updateDashboard.sh old mode 100644 new mode 100755 From 8f8dc66c7052999920d2f83c4f5f1df6d1622646 Mon Sep 17 00:00:00 2001 From: nate Date: Thu, 24 Mar 2016 18:50:53 -0500 Subject: [PATCH 28/96] Ignore whitespace when writing config files --- advanced/Scripts/piholeDebug.sh | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/advanced/Scripts/piholeDebug.sh b/advanced/Scripts/piholeDebug.sh index 8bb741ea..e84e9319 100755 --- a/advanced/Scripts/piholeDebug.sh +++ b/advanced/Scripts/piholeDebug.sh @@ -100,8 +100,10 @@ if [ -e "$DNSMASQFILE" ] then #cat $DNSMASQFILE >> $DEBUG_LOG while read -r line; do - [[ "$line" =~ ^#.*$ ]] && continue - echo "$line" >> $DEBUG_LOG + if [ ! -z "$line" ]; then + [[ "$line" =~ ^#.*$ ]] && continue + echo "$line" >> $DEBUG_LOG + fi done < "$DNSMASQFILE" echo >> $DEBUG_LOG else @@ -117,8 +119,10 @@ if [ -e "$PIHOLECONFFILE" ] then #cat "$PIHOLECONFFILE" >> $DEBUG_LOG while read -r line; do - [[ "$line" =~ ^#.*$ ]] && continue - echo "$line" >> $DEBUG_LOG + if [ ! -z "$line" ]; then + [[ "$line" =~ ^#.*$ ]] && continue + echo "$line" >> $DEBUG_LOG + fi done < "$PIHOLECONFFILE" echo >> $DEBUG_LOG else @@ -134,8 +138,10 @@ if [ -e "$LIGHTTPDFILE" ] then #cat "$PIHOLECONFFILE" >> $DEBUG_LOG while read -r line; do - [[ "$line" =~ ^#.*$ ]] && continue - echo "$line" >> $DEBUG_LOG + if [ ! -z "$line" ]; then + [[ "$line" =~ ^#.*$ ]] && continue + echo "$line" >> $DEBUG_LOG + fi done < "$LIGHTTPDFILE" echo >> $DEBUG_LOG else From b4463bf42c2bf10f8d9a885f7f178509784015b1 Mon Sep 17 00:00:00 2001 From: nate Date: Fri, 25 Mar 2016 16:42:17 -0500 Subject: [PATCH 29/96] Added test for nslookup Checks the TESTURL for nslookup is not whitelisted --- advanced/Scripts/piholeDebug.sh | 46 ++++++++++++++++++++++++++++----- 1 file changed, 40 insertions(+), 6 deletions(-) diff --git a/advanced/Scripts/piholeDebug.sh b/advanced/Scripts/piholeDebug.sh index e84e9319..ac7a4262 100755 --- a/advanced/Scripts/piholeDebug.sh +++ b/advanced/Scripts/piholeDebug.sh @@ -25,16 +25,17 @@ WHITELISTFILE="/etc/pihole/whitelist.txt" BLACKLISTFILE="/etc/pihole/blacklist.txt" ADLISTSFILE="/etc/pihole/adlists.list" PIHOLELOG="/var/log/pihole.log" +WHITELISTMATCHES="/tmp/whitelistmatches.list" ######## FIRST CHECK ######## # Must be root to debug -if [[ $EUID -eq 0 ]];then +if [[ $EUID -eq 0 ]]; then echo "You are root... Beginning debug!" else echo "sudo will be used for debugging." # Check if sudo is actually installed - if [[ $(dpkg-query -s sudo) ]];then + if [[ $(dpkg-query -s sudo) ]]; then export SUDO="sudo" else echo "Please install sudo or run this as root." @@ -43,8 +44,7 @@ else fi # Ensure the file exists, create if not, clear if exists. -if [ ! -f "$DEBUG_LOG" ] -then +if [ ! -f "$DEBUG_LOG" ]; then $SUDO touch $DEBUG_LOG $SUDO chmod 644 $DEBUG_LOG $SUDO chown "$USER":root $DEBUG_LOG @@ -54,11 +54,21 @@ fi ### Private functions exist here ### function compareWhitelist { + if [ ! -f "$WHITELISTMATCHES" ]; then + $SUDO touch $WHITELISTMATCHES + $SUDO chmod 644 $WHITELISTMATCHES + $SUDO chown "$USER":root $WHITELISTMATCHES + else + truncate -s 0 $WHITELISTMATCHES + fi + echo "#######################################" >> $DEBUG_LOG echo "######## Whitelist Comparison #########" >> $DEBUG_LOG echo "#######################################" >> $DEBUG_LOG while read -r line; do - grep -w ".* $line$" "$GRAVITYFILE" >> $DEBUG_LOG + TMP=$(grep -w ".* $line$" "$GRAVITYFILE") + echo "$TMP" >> $DEBUG_LOG + echo "$TMP" >> $WHITELISTMATCHES done < "$WHITELISTFILE" echo >> $DEBUG_LOG } @@ -74,7 +84,28 @@ function compareBlacklist { } function testNslookup { - # TODO: This will pull a non-matched entry from gravity.list to compare with the nslookup against Google's NS. + TESTURL="" + echo "#######################################" >> $DEBUG_LOG + echo "############ NSLookup Test ############" >> $DEBUG_LOG + echo "#######################################" >> $DEBUG_LOG + # Find a blocked url that has not been whitelisted. + while read -r line; do + CUTURL=$("$line" | cut -d " " -f2-) + if [ "$CUTURL" != "Pi-Hole.IsWorking.OK" ]; then + while read -r line2; do + CUTURL2=$("$line2" | cut -d " " -f2-) + if [ "$CUTURL" != "$CUTURL2" ]; then + TESTURL="$CUTURL" + fi + done < "WHITELISTMATCHES" + fi + done < "GRAVITYFILE" + + echo "NSLOOKUP of $TESTURL from PiHole:" >> $DEBUG_LOG + echo nslookup "$TESTURL" >> $DEBUG_LOG + echo >> $DEBUG_LOG + echo "NSLOOKUP of $TESTURL from 8.8.8.8:" >> $DEBUG_LOG + echo nslookup "$TESTURL" 8.8.8.8 >> $DEBUG_LOG echo >> $DEBUG_LOG } @@ -92,6 +123,9 @@ echo "Gateway check:" >> $DEBUG_LOG echo "$GATEWAY_CHECK" >> $DEBUG_LOG echo >> $DEBUG_LOG +# Test the nslookup here +testNslookup + echo "Writing dnsmasq.conf to debug log..." echo "#######################################" >> $DEBUG_LOG echo "############### Dnsmasq ###############" >> $DEBUG_LOG From a9c24b456d34bf83c1a85287a221be70120b79c8 Mon Sep 17 00:00:00 2001 From: nate Date: Fri, 25 Mar 2016 19:04:03 -0500 Subject: [PATCH 30/96] Bug fixes and logging improvements Finalized for production deployment. Next release targeting a tarball of config files plus additional logging. --- advanced/Scripts/piholeDebug.sh | 45 +++++++++++++++++++-------------- 1 file changed, 26 insertions(+), 19 deletions(-) diff --git a/advanced/Scripts/piholeDebug.sh b/advanced/Scripts/piholeDebug.sh index ac7a4262..ab417aa6 100755 --- a/advanced/Scripts/piholeDebug.sh +++ b/advanced/Scripts/piholeDebug.sh @@ -67,8 +67,10 @@ function compareWhitelist { echo "#######################################" >> $DEBUG_LOG while read -r line; do TMP=$(grep -w ".* $line$" "$GRAVITYFILE") - echo "$TMP" >> $DEBUG_LOG - echo "$TMP" >> $WHITELISTMATCHES + if [ ! -z "$TMP" ]; then + echo "$TMP" >> $DEBUG_LOG + echo "$TMP" >> $WHITELISTMATCHES + fi done < "$WHITELISTFILE" echo >> $DEBUG_LOG } @@ -78,34 +80,39 @@ function compareBlacklist { echo "######## Blacklist Comparison #########" >> $DEBUG_LOG echo "#######################################" >> $DEBUG_LOG while read -r line; do - grep -w ".* $line$" "$GRAVITYFILE" >> $DEBUG_LOG + if [ ! -z "$line" ]; then + grep -w ".* $line$" "$GRAVITYFILE" >> $DEBUG_LOG + fi done < "$BLACKLISTFILE" echo >> $DEBUG_LOG } function testNslookup { - TESTURL="" + TESTURL="doubleclick.com" echo "#######################################" >> $DEBUG_LOG echo "############ NSLookup Test ############" >> $DEBUG_LOG echo "#######################################" >> $DEBUG_LOG # Find a blocked url that has not been whitelisted. - while read -r line; do - CUTURL=$("$line" | cut -d " " -f2-) - if [ "$CUTURL" != "Pi-Hole.IsWorking.OK" ]; then - while read -r line2; do - CUTURL2=$("$line2" | cut -d " " -f2-) - if [ "$CUTURL" != "$CUTURL2" ]; then - TESTURL="$CUTURL" - fi - done < "WHITELISTMATCHES" - fi - done < "GRAVITYFILE" + if [ -s "$WHITELISTMATCHES" ]; then + while read -r line; do + CUTURL=${line#*" "} + if [ "$CUTURL" != "Pi-Hole.IsWorking.OK" ]; then + while read -r line2; do + CUTURL2=${line2#*" "} + if [ "$CUTURL" != "$CUTURL2" ]; then + TESTURL="$CUTURL" + break 2 + fi + done < "$WHITELISTMATCHES" + fi + done < "$GRAVITYFILE" + fi echo "NSLOOKUP of $TESTURL from PiHole:" >> $DEBUG_LOG - echo nslookup "$TESTURL" >> $DEBUG_LOG + nslookup "$TESTURL" >> $DEBUG_LOG echo >> $DEBUG_LOG echo "NSLOOKUP of $TESTURL from 8.8.8.8:" >> $DEBUG_LOG - echo nslookup "$TESTURL" 8.8.8.8 >> $DEBUG_LOG + nslookup "$TESTURL" 8.8.8.8 >> $DEBUG_LOG echo >> $DEBUG_LOG } @@ -124,6 +131,8 @@ echo "$GATEWAY_CHECK" >> $DEBUG_LOG echo >> $DEBUG_LOG # Test the nslookup here +compareWhitelist +compareBlacklist testNslookup echo "Writing dnsmasq.conf to debug log..." @@ -199,7 +208,6 @@ fi # Write the hostname output to compare against entries in /etc/hosts, which is logged next echo "Hostname of this pihole is: " >> $DEBUG_LOG hostname >> $DEBUG_LOG -echo >> $DEBUG_LOG echo "Writing hosts file to debug log..." echo "#######################################" >> $DEBUG_LOG @@ -215,7 +223,6 @@ else fi ### PiHole application specific logging ### -# Write Pi-Hole logs to debug log echo "Writing whitelist to debug log..." echo "#######################################" >> $DEBUG_LOG echo "############## Whitelist ##############" >> $DEBUG_LOG From 0b9e78df2cf646b372be57d7c8436f42dcc6f4fb Mon Sep 17 00:00:00 2001 From: nate Date: Sat, 26 Mar 2016 14:16:22 -0500 Subject: [PATCH 31/96] Cleaned code and added prompt for purge on uninstall --- advanced/Scripts/blacklist.sh | 30 ++++++------ advanced/Scripts/chronometer.sh | 4 +- advanced/Scripts/whitelist.sh | 27 +++++------ automated install/basic-install.sh | 76 +++++++++++++++--------------- automated install/uninstall.sh | 17 ++++--- gravity.sh | 46 +++++++++--------- 6 files changed, 100 insertions(+), 100 deletions(-) diff --git a/advanced/Scripts/blacklist.sh b/advanced/Scripts/blacklist.sh index 70b8131a..cf5e09a7 100644 --- a/advanced/Scripts/blacklist.sh +++ b/advanced/Scripts/blacklist.sh @@ -33,13 +33,11 @@ versbose=true domList=() domToRemoveList=() - -piholeIPfile=/tmp/piholeIP piholeIPv6file=/etc/pihole/.useIPv6 # Otherwise, the IP address can be taken directly from the machine, which will happen when the script is run by the user and not the installation script IPv4dev=$(ip route get 8.8.8.8 | awk '{for(i=1;i<=NF;i++)if($i~/dev/)print $(i+1)}') -piholeIPCIDR=$(ip -o -f inet addr show dev $IPv4dev | awk '{print $4}' | awk 'END {print}') +piholeIPCIDR=$(ip -o -f inet addr show dev "$IPv4dev" | awk '{print $4}' | awk 'END {print}') piholeIP=${piholeIPCIDR%/*} modifyHost=false @@ -53,10 +51,10 @@ fi function HandleOther(){ #check validity of domain - validDomain=$(echo $1 | perl -ne'print if /\b((?=[a-z0-9-]{1,63}\.)(xn--)?[a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,63}\b/') + validDomain=$(echo "$1" | perl -ne'print if /\b((?=[a-z0-9-]{1,63}\.)(xn--)?[a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,63}\b/') if [ -z "$validDomain" ]; then - echo $1 is not a valid argument or domain name + echo "$1" is not a valid argument or domain name else domList=("${domList[@]}" $validDomain) fi @@ -69,10 +67,10 @@ function PopBlacklistFile(){ fi for dom in "${domList[@]}" do - if $addmode; then - AddDomain $dom + if "$addmode"; then + AddDomain "$dom" else - RemoveDomain $dom + RemoveDomain "$dom" fi done } @@ -86,7 +84,7 @@ function AddDomain(){ if $versbose; then echo -n "::: Adding $1 to blacklist file..." fi - echo $1 >> $blacklist + echo "$1" >> $blacklist modifyHost=true echo " done!" else @@ -119,14 +117,14 @@ function ModifyHostFile(){ if $addmode; then #add domains to the hosts file if [[ -r $blacklist ]];then - numberOf=$(cat $blacklist | sed '/^\s*$/d' | wc -l) + numberOf=$($blacklist | sed '/^\s*$/d' | wc -l) plural=; [[ "$numberOf" != "1" ]] && plural=s echo ":::" echo -n "::: Modifying HOSTS file to blacklist $numberOf domain${plural}..." if [[ -n $piholeIPv6 ]];then - cat $blacklist | awk -v ipv4addr="$piholeIP" -v ipv6addr="$piholeIPv6" '{sub(/\r$/,""); print ipv4addr" "$0"\n"ipv6addr" "$0}' >> $adList + $blacklist | awk -v ipv4addr="$piholeIP" -v ipv6addr="$piholeIPv6" '{sub(/\r$/,""); print ipv4addr" "$0"\n"ipv6addr" "$0}' >> $adList else - cat $blacklist | awk -v ipv4addr="$piholeIP" '{sub(/\r$/,""); print ipv4addr" "$0}' >>$adList + $blacklist | awk -v ipv4addr="$piholeIP" '{sub(/\r$/,""); print ipv4addr" "$0}' >>$adList fi fi @@ -138,10 +136,10 @@ function ModifyHostFile(){ #we need to remove the domains from the blacklist file and the host file echo "::: $dom" echo -n "::: removing from HOSTS file..." - echo $dom | sed 's/\./\\./g' | xargs -I {} perl -i -ne'print unless /[^.]'{}'(?!.)/;' $adList + echo "$dom" | sed 's/\./\\./g' | xargs -I {} perl -i -ne'print unless /[^.]'{}'(?!.)/;' $adList echo " done!" echo -n "::: removing from blackist.txt..." - echo $dom | sed 's/\./\\./g' | xargs -I {} perl -i -ne'print unless /'{}'(?!.)/;' $blacklist + echo "$dom" | sed 's/\./\\./g' | xargs -I {} perl -i -ne'print unless /'{}'(?!.)/;' $blacklist echo " done!" done fi @@ -157,7 +155,7 @@ function Reload() { if [[ $dnsmasqPid ]]; then # service already running - reload config - sudo kill -HUP $dnsmasqPid + sudo kill -HUP "$dnsmasqPid" else # service not running, start it up sudo service dnsmasq start @@ -174,7 +172,7 @@ do "-d" | "--delmode" ) addmode=false;; "-f" | "--force" ) force=true;; "-q" | "--quiet" ) versbose=false;; - * ) HandleOther $var;; + * ) HandleOther "$var";; esac done diff --git a/advanced/Scripts/chronometer.sh b/advanced/Scripts/chronometer.sh index ebed8684..3e5559e0 100755 --- a/advanced/Scripts/chronometer.sh +++ b/advanced/Scripts/chronometer.sh @@ -35,7 +35,7 @@ function CalcBlockedDomains(){ function CalcQueriesToday(){ if [ -e "$piLog" ];then - queriesToday=$(cat "$piLog" | grep "$today" | awk '/query/ {print $6}' | wc -l) + queriesToday=$("$piLog" | grep "$today" | awk '/query/ {print $6}' | wc -l) else queriesToday="Err." fi @@ -43,7 +43,7 @@ function CalcQueriesToday(){ function CalcblockedToday(){ if [ -e "$piLog" ] && [ -e "$gravity" ];then - blockedToday=$(cat $piLog | awk '/\/etc\/pihole\/gravity.list/ && !/address/ {print $6}' | wc -l) + blockedToday=$($piLog | awk '/\/etc\/pihole\/gravity.list/ && !/address/ {print $6}' | wc -l) else blockedToday="Err." fi diff --git a/advanced/Scripts/whitelist.sh b/advanced/Scripts/whitelist.sh index 853c3b79..0bea10aa 100755 --- a/advanced/Scripts/whitelist.sh +++ b/advanced/Scripts/whitelist.sh @@ -33,12 +33,11 @@ versbose=true domList=() domToRemoveList=() -piholeIPfile=/tmp/piholeIP piholeIPv6file=/etc/pihole/.useIPv6 # Otherwise, the IP address can be taken directly from the machine, which will happen when the script is run by the user and not the installation script IPv4dev=$(ip route get 8.8.8.8 | awk '{for(i=1;i<=NF;i++)if($i~/dev/)print $(i+1)}') -piholeIPCIDR=$(ip -o -f inet addr show dev $IPv4dev | awk '{print $4}' | awk 'END {print}') +piholeIPCIDR=$(ip -o -f inet addr show dev "$IPv4dev" | awk '{print $4}' | awk 'END {print}') piholeIP=${piholeIPCIDR%/*} modifyHost=false @@ -52,7 +51,7 @@ fi function HandleOther(){ #check validity of domain - validDomain=$(echo $1 | perl -ne'print if /\b((?=[a-z0-9-]{1,63}\.)(xn--)?[a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,63}\b/') + validDomain=$(echo "$1" | perl -ne'print if /\b((?=[a-z0-9-]{1,63}\.)(xn--)?[a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,63}\b/') if [ -z "$validDomain" ]; then echo "::: $1 is not a valid argument or domain name" @@ -69,9 +68,9 @@ function PopWhitelistFile(){ for dom in "${domList[@]}" do if $addmode; then - AddDomain $dom + AddDomain "$dom" else - RemoveDomain $dom + RemoveDomain "$dom" fi done } @@ -86,7 +85,7 @@ function AddDomain(){ if $versbose; then echo -n "::: Adding $1 to whitelist.txt..." fi - echo $1 >> $whitelist + echo "$1" >> $whitelist modifyHost=true if $versbose; then echo " done!" @@ -122,12 +121,12 @@ function ModifyHostFile(){ #remove domains in from hosts file if [[ -r $whitelist ]];then # Remove whitelist entries - numberOf=$(cat $whitelist | sed '/^\s*$/d' | wc -l) + numberOf=$($whitelist | sed '/^\s*$/d' | wc -l) plural=; [[ "$numberOf" != "1" ]] && plural=s echo ":::" echo -n "::: Modifying HOSTS file to whitelist $numberOf domain${plural}..." - awk -F':' '{print $1}' $whitelist | while read line; do echo "$piholeIP $line"; done > /etc/pihole/whitelist.tmp - awk -F':' '{print $1}' $whitelist | while read line; do echo "$piholeIPv6 $line"; done >> /etc/pihole/whitelist.tmp + awk -F':' '{print $1}' $whitelist | while read -r line; do echo "$piholeIP $line"; done > /etc/pihole/whitelist.tmp + awk -F':' '{print $1}' $whitelist | while read -r line; do echo "$piholeIPv6 $line"; done >> /etc/pihole/whitelist.tmp echo "l" >> /etc/pihole/whitelist.tmp grep -F -x -v -f /etc/pihole/whitelist.tmp /etc/pihole/gravity.list > /etc/pihole/gravity.tmp rm /etc/pihole/gravity.list @@ -144,15 +143,15 @@ function ModifyHostFile(){ do if [[ -n $piholeIPv6 ]];then echo -n "::: Un-whitelisting $rdom on IPv4 and IPv6..." - echo $rdom | awk -v ipv4addr="$piholeIP" -v ipv6addr="$piholeIPv6" '{sub(/\r$/,""); print ipv4addr" "$0"\n"ipv6addr" "$0}' >> $adList + echo "$rdom" | awk -v ipv4addr="$piholeIP" -v ipv6addr="$piholeIPv6" '{sub(/\r$/,""); print ipv4addr" "$0"\n"ipv6addr" "$0}' >> $adList echo " done!" else echo -n "::: Un-whitelisting $rdom on IPv4" - echo $rdom | awk -v ipv4addr="$piholeIP" '{sub(/\r$/,""); print ipv4addr" "$0}' >>$adList + echo "$rdom" | awk -v ipv4addr="$piholeIP" '{sub(/\r$/,""); print ipv4addr" "$0}' >>$adList echo " done!" fi echo -n "::: Removing $rdom from whitelist.txt..." - echo $rdom| sed 's/\./\\./g' | xargs -I {} perl -i -ne'print unless /'{}'(?!.)/;' $whitelist + echo "$rdom" | sed 's/\./\\./g' | xargs -I {} perl -i -ne'print unless /'{}'(?!.)/;' $whitelist echo " done!" done fi @@ -166,7 +165,7 @@ function Reload() { if [[ $dnsmasqPid ]]; then # service already running - reload config - sudo kill -HUP $dnsmasqPid + sudo kill -HUP "$dnsmasqPid" else # service not running, start it up sudo service dnsmasq start @@ -183,7 +182,7 @@ do "-d" | "--delmode" ) addmode=false;; "-f" | "--force" ) force=true;; "-q" | "--quiet" ) versbose=false;; - * ) HandleOther $var;; + * ) HandleOther "$var";; esac done diff --git a/automated install/basic-install.sh b/automated install/basic-install.sh index 8068a485..fe385fbb 100755 --- a/automated install/basic-install.sh +++ b/automated install/basic-install.sh @@ -40,7 +40,7 @@ c=$(( columns / 2 )) # Find IP used to route to outside world IPv4dev=$(ip route get 8.8.8.8 | awk '{for(i=1;i<=NF;i++)if($i~/dev/)print $(i+1)}') -IPv4addr=$(ip -o -f inet addr show dev $IPv4dev | awk '{print $4}' | awk 'END {print}') +IPv4addr=$(ip -o -f inet addr show dev "$IPv4dev" | awk '{print $4}' | awk 'END {print}') IPv4gw=$(ip route get 8.8.8.8 | awk '{print $3}') availableInterfaces=$(ip -o link | awk '{print $2}' | grep -v "lo" | cut -d':' -f1) @@ -63,13 +63,13 @@ else fi fi - -if [ -d "/etc/pihole" ]; then - # Likely an existing install - upgrade=true - else - upgrade=false -fi +### Nate 3/26/2016 - Why are we declaring upgrade here? It isn't global (nor is it used anywhere else) +# if [ -d "/etc/pihole" ]; then + # # Likely an existing install + # upgrade=true + # else + # upgrade=false +# fi ####### FUNCTIONS ########## ###All credit for the below function goes to http://fitnr.com/showing-a-bash-spinner.html @@ -78,10 +78,10 @@ spinner() { spin='-\|/' i=0 - while $SUDO kill -0 $pid 2>/dev/null + while $SUDO kill -0 "$pid" 2>/dev/null do i=$(( (i+1) %4 )) - printf "\b${spin:$i:1}" + printf "\b%s" "{$spin:$i:1}" sleep .1 done printf "\b" @@ -92,12 +92,12 @@ backupLegacyPihole() { if [[ -f /etc/dnsmasq.d/adList.conf ]];then echo "::: Original Pi-hole detected. Initiating sub space transport" $SUDO mkdir -p /etc/pihole/original/ - $SUDO mv /etc/dnsmasq.d/adList.conf /etc/pihole/original/adList.conf.$(date "+%Y-%m-%d") - $SUDO mv /etc/dnsmasq.conf /etc/pihole/original/dnsmasq.conf.$(date "+%Y-%m-%d") - $SUDO mv /etc/resolv.conf /etc/pihole/original/resolv.conf.$(date "+%Y-%m-%d") - $SUDO mv /etc/lighttpd/lighttpd.conf /etc/pihole/original/lighttpd.conf.$(date "+%Y-%m-%d") - $SUDO mv /var/www/pihole/index.html /etc/pihole/original/index.html.$(date "+%Y-%m-%d") - $SUDO mv /usr/local/bin/gravity.sh /etc/pihole/original/gravity.sh.$(date "+%Y-%m-%d") + $SUDO mv /etc/dnsmasq.d/adList.conf /etc/pihole/original/adList.conf."$(date "+%Y-%m-%d")" + $SUDO mv /etc/dnsmasq.conf /etc/pihole/original/dnsmasq.conf."$(date "+%Y-%m-%d")" + $SUDO mv /etc/resolv.conf /etc/pihole/original/resolv.conf."$(date "+%Y-%m-%d")" + $SUDO mv /etc/lighttpd/lighttpd.conf /etc/pihole/original/lighttpd.conf."$(date "+%Y-%m-%d")" + $SUDO mv /var/www/pihole/index.html /etc/pihole/original/index.html."$(date "+%Y-%m-%d")" + $SUDO mv /usr/local/bin/gravity.sh /etc/pihole/original/gravity.sh."$(date "+%Y-%m-%d")" else : fi @@ -120,9 +120,9 @@ verifyFreeDiskSpace() { # 25MB is the minimum space needed (20MB install + 5MB one day of logs.) requiredFreeBytes=51200 - existingFreeBytes=`df -lk / 2>&1 | awk '{print $4}' | head -2 | tail -1` + existingFreeBytes=$(df -lk / 2>&1 | awk '{print $4}' | head -2 | tail -1) if ! [[ "$existingFreeBytes" =~ ^([0-9])+$ ]]; then - existingFreeBytes=`df -lk /dev 2>&1 | awk '{print $4}' | head -2 | tail -1` + existingFreeBytes=$(df -lk /dev 2>&1 | awk '{print $4}' | head -2 | tail -1) fi if [[ $existingFreeBytes -lt $requiredFreeBytes ]]; then @@ -158,7 +158,7 @@ chooseInterface() { do piholeInterface=$desiredInterface echo "::: Using interface: $piholeInterface" - echo ${piholeInterface} > /tmp/piholeINT + echo "${piholeInterface}" > /tmp/piholeINT done else echo "::: Cancel selected, exiting...." @@ -169,7 +169,7 @@ chooseInterface() { cleanupIPv6() { # Removes IPv6 indicator file if we are not using IPv6 - if [ -f "/etc/pihole/.useIPv6" ] && [ ! $useIPv6 ]; then + if [ -f "/etc/pihole/.useIPv6" ] && [ ! "$useIPv6" ]; then rm /etc/pihole/.useIPv6 fi } @@ -244,11 +244,11 @@ getStaticIPv4Settings() { until [[ $ipSettingsCorrect = True ]] do # Ask for the IPv4 address - IPv4addr=$(whiptail --backtitle "Calibrating network interface" --title "IPv4 address" --inputbox "Enter your desired IPv4 address" $r $c $IPv4addr 3>&1 1>&2 2>&3) + IPv4addr=$(whiptail --backtitle "Calibrating network interface" --title "IPv4 address" --inputbox "Enter your desired IPv4 address" $r $c "$IPv4addr" 3>&1 1>&2 2>&3) if [[ $? = 0 ]];then echo "::: Your static IPv4 address: $IPv4addr" # Ask for the gateway - IPv4gw=$(whiptail --backtitle "Calibrating network interface" --title "IPv4 gateway (router)" --inputbox "Enter your desired IPv4 default gateway" $r $c $IPv4gw 3>&1 1>&2 2>&3) + IPv4gw=$(whiptail --backtitle "Calibrating network interface" --title "IPv4 gateway (router)" --inputbox "Enter your desired IPv4 default gateway" $r $c "$IPv4gw" 3>&1 1>&2 2>&3) if [[ $? = 0 ]];then echo "::: Your static IPv4 gateway: $IPv4gw" # Give the user a chance to review their settings before moving on @@ -257,8 +257,8 @@ getStaticIPv4Settings() { Gateway: $IPv4gw" $r $c)then # If the settings are correct, then we need to set the piholeIP # Saving it to a temporary file us to retrieve it later when we run the gravity.sh script - echo ${IPv4addr%/*} > /tmp/piholeIP - echo $piholeInterface > /tmp/piholeINT + echo "${IPv4addr%/*}" > /tmp/piholeIP + echo "$piholeInterface" > /tmp/piholeINT # After that's done, the loop ends and we move on ipSettingsCorrect=True else @@ -292,12 +292,12 @@ setDHCPCD() { setStaticIPv4() { # Tries to set the IPv4 address - if grep -q $IPv4addr $dhcpcdFile; then + if grep -q "$IPv4addr" $dhcpcdFile; then # address already set, noop : else setDHCPCD - $SUDO ip addr replace dev $piholeInterface $IPv4addr + $SUDO ip addr replace dev "$piholeInterface" "$IPv4addr" echo ":::" echo "::: Setting IP to $IPv4addr. You may need to restart after the install is complete." echo ":::" @@ -377,14 +377,14 @@ setDNS(){ piholeDNS=$(whiptail --backtitle "Specify Upstream DNS Provider(s)" --inputbox "Enter your desired upstream DNS provider(s), seperated by a comma.\n\nFor example '8.8.8.8, 8.8.4.4'" $r $c "$prePopulate" 3>&1 1>&2 2>&3) if [[ $? = 0 ]];then - piholeDNS1=$(echo $piholeDNS | sed 's/[, \t]\+/,/g' | awk -F, '{print$1}') - piholeDNS2=$(echo $piholeDNS | sed 's/[, \t]\+/,/g' | awk -F, '{print$2}') + piholeDNS1=$(echo "$piholeDNS" | sed 's/[, \t]\+/,/g' | awk -F, '{print$1}') + piholeDNS2=$(echo "$piholeDNS" | sed 's/[, \t]\+/,/g' | awk -F, '{print$2}') - if ! valid_ip $piholeDNS1 || [ ! $piholeDNS1 ]; then + if ! valid_ip "$piholeDNS1" || [ ! "$piholeDNS1" ]; then piholeDNS1=$strInvalid fi - if ! valid_ip $piholeDNS2 && [ $piholeDNS2 ]; then + if ! valid_ip "$piholeDNS2" && [ "$piholeDNS2" ]; then piholeDNS2=$strInvalid fi @@ -393,14 +393,14 @@ setDNS(){ exit 1 fi - if [[ $piholeDNS1 == $strInvalid ]] || [[ $piholeDNS2 == $strInvalid ]]; then + if [[ $piholeDNS1 == "$strInvalid" ]] || [[ $piholeDNS2 == "$strInvalid" ]]; then whiptail --msgbox --backtitle "Invalid IP" --title "Invalid IP" "One or both entered IP addresses were invalid. Please try again.\n\n DNS Server 1: $piholeDNS1\n DNS Server 2: $piholeDNS2" $r $c - if [[ $piholeDNS1 == $strInvalid ]]; then + if [[ $piholeDNS1 == "$strInvalid" ]]; then piholeDNS1="" fi - if [[ $piholeDNS2 == $strInvalid ]]; then + if [[ $piholeDNS2 == "$strInvalid" ]]; then piholeDNS2="" fi @@ -510,7 +510,7 @@ checkForDependencies() { # it needs to have been run at least once on new installs! timestamp=$(stat -c %Y /var/cache/apt/) - timestampAsDate=$(date -d @$timestamp "+%b %e") + timestampAsDate=$(date -d @"$timestamp" "+%b %e") today=$(date "+%b %e") if [ ! "$today" == "$timestampAsDate" ]; then @@ -540,9 +540,9 @@ checkForDependencies() { do : echo -n "::: Checking for $i..." - if [ $(dpkg-query -W -f='${Status}' $i 2>/dev/null | grep -c "ok installed") -eq 0 ]; then + if [ "$(dpkg-query -W -f='${Status}' "$i" 2>/dev/null | grep -c "ok installed")" -eq 0 ]; then echo -n " Not found! Installing...." - $SUDO apt-get -y -qq install $i > /dev/null & spinner $! + $SUDO apt-get -y -qq install "$i" > /dev/null & spinner $! echo " done!" else echo " already installed!" @@ -583,7 +583,7 @@ is_repo() { make_repo() { # Remove the non-repod interface and clone the interface echo -n "::: Cloning $2 into $1..." - $SUDO rm -rf $1 + $SUDO rm -rf "$1" $SUDO git clone -q "$2" "$1" > /dev/null & spinner $! echo " done!" } @@ -591,7 +591,7 @@ make_repo() { update_repo() { # Pull the latest commits echo -n "::: Updating repo in $1..." - cd "$1" + cd "$1" || exit $SUDO git pull -q > /dev/null & spinner $! echo " done!" } diff --git a/automated install/uninstall.sh b/automated install/uninstall.sh index ee4e80a0..d116c4e4 100644 --- a/automated install/uninstall.sh +++ b/automated install/uninstall.sh @@ -27,9 +27,16 @@ fi ######### SCRIPT ########### -$SUDO apt-get -y remove --purge dnsutils bc toilet -$SUDO apt-get -y remove --purge dnsmasq -$SUDO apt-get -y remove --purge lighttpd php5-common php5-cgi php5 +read -p "Do you wish to purge PiHole's dependencies from your OS?\n WARNING: This is destructive if run on any non-Debian based OS \n(SAFE TO RUN ON RASPBIAN)" -n 1 -r +echo +if [[ $REPLY =~ ^{Yy]$ ]]; then + $SUDO apt-get -y remove --purge dnsutils bc toilet + $SUDO apt-get -y remove --purge dnsmasq + $SUDO apt-get -y remove --purge lighttpd php5-common php5-cgi php5 + + echo "Removing dnsmasq config files..." + $SUDO rm /etc/dnsmasq.conf /etc/dnsmasq.conf.orig +fi # Only web directories/files that are created by pihole should be removed. echo "Removing the Pi-hole Web server files..." @@ -42,9 +49,6 @@ if [[ ! "$(ls -A /var/www/html)" ]]; then $SUDO rm -rf /var/www/html fi -echo "Removing dnsmasq config files..." -$SUDO rm /etc/dnsmasq.conf /etc/dnsmasq.conf.orig - # Attempt to preserve backwards compatibility with older versions # to guarantee no additional changes were made to /etc/crontab after # the installation of pihole, /etc/crontab.pihole should be permanently @@ -63,7 +67,6 @@ if [[ -f /etc/cron.d/pihole ]];then fi echo "Removing config files and scripts..." -$SUDO rm /etc/dnsmasq.conf $SUDO rm -rf /etc/lighttpd/ $SUDO rm /var/log/pihole.log $SUDO rm /usr/local/bin/gravity.sh diff --git a/gravity.sh b/gravity.sh index 321aec27..4a04f222 100755 --- a/gravity.sh +++ b/gravity.sh @@ -41,7 +41,7 @@ if [[ -f $piholeIPfile ]];then else # Otherwise, the IP address can be taken directly from the machine, which will happen when the script is run by the user and not the installation script IPv4dev=$(ip route get 8.8.8.8 | awk '{for(i=1;i<=NF;i++)if($i~/dev/)print $(i+1)}') - piholeIPCIDR=$(ip -o -f inet addr show dev $IPv4dev | awk '{print $4}' | awk 'END {print}') + piholeIPCIDR=$(ip -o -f inet addr show dev "$IPv4dev" | awk '{print $4}' | awk 'END {print}') piholeIP=${piholeIPCIDR%/*} fi @@ -54,18 +54,19 @@ fi # Variables for various stages of downloading and formatting the list +## Nate 3/26/2016 - Commented unused variables basename=pihole piholeDir=/etc/$basename adList=$piholeDir/gravity.list -blacklist=$piholeDir/blacklist.txt -whitelist=$piholeDir/whitelist.txt -latentWhitelist=$piholeDir/latentWhitelist.txt +#blacklist=$piholeDir/blacklist.txt +#whitelist=$piholeDir/whitelist.txt +#latentWhitelist=$piholeDir/latentWhitelist.txt justDomainsExtension=domains matterandlight=$basename.0.matterandlight.txt supernova=$basename.1.supernova.txt eventHorizon=$basename.2.eventHorizon.txt accretionDisc=$basename.3.accretionDisc.txt -eyeOfTheNeedle=$basename.4.wormhole.txt +#eyeOfTheNeedle=$basename.4.wormhole.txt # After setting defaults, check if there's local overrides if [[ -r $piholeDir/pihole.conf ]];then @@ -76,19 +77,18 @@ fi spinner(){ local pid=$1 - local delay=0.001 - local spinstr='/-\|' spin='-\|/' i=0 - while $SUDO kill -0 $pid 2>/dev/null + while $SUDO kill -0 "$pid" 2>/dev/null do i=$(( (i+1) %4 )) - printf "\b${spin:$i:1}" + printf "\b%s" "${spin:$i:1}" sleep .1 done printf "\b" } + ########################### # collapse - begin formation of pihole function gravity_collapse() { @@ -99,7 +99,7 @@ function gravity_collapse() { #custom file found, use this instead of default echo -n "::: Custom adList file detected. Reading..." sources=() - while read -a line; do + while read -r line; do #Do not read commented out or blank lines if [[ $line = \#* ]] || [[ ! $line ]]; then echo "" > /dev/null @@ -112,7 +112,7 @@ function gravity_collapse() { #no custom file found, use defaults! echo -n "::: No custom adlist file detected, reading from default file..." sources=() - while read -a line; do + while read -r line; do #Do not read commented out or blank lines if [[ $line = \#* ]] || [[ ! $line ]]; then echo "" > /dev/null @@ -146,7 +146,7 @@ function gravity_patternCheck() { # Some of the blocklists are copyright, they need to be downloaded # and stored as is. They can be processed for content after they # have been saved. - cp $patternBuffer $saveLocation + cp "$patternBuffer" "$saveLocation" echo " List updated, transport successful!" else # curl didn't download any host files, probably because of the date check @@ -169,12 +169,12 @@ function gravity_transport() { fi # Silently curl url - curl -s $cmd_ext $heisenbergCompensator -A "$agent" $url > $patternBuffer + curl -s "$cmd_ext" "$heisenbergCompensator" -A "$agent" "$url" > "$patternBuffer" # Check for list updates - gravity_patternCheck $patternBuffer + gravity_patternCheck "$patternBuffer" # Cleanup - rm -f $patternBuffer + rm -f "$patternBuffer" } # spinup - main gravity function @@ -222,7 +222,7 @@ function gravity_Schwarzchild() { truncate -s 0 $piholeDir/$matterandlight & spinner $! for i in "${activeDomains[@]}" do - cat $i |tr -d '\r' >> $piholeDir/$matterandlight + "$i" |tr -d '\r' >> $piholeDir/$matterandlight done echo " done!" @@ -249,7 +249,7 @@ function gravity_Whitelist() { echo -n "::: Adding ${#sources[@]} ad list source${plural} to the whitelist..." urls=() - for url in ${sources[@]} + for url in "${sources[@]}" do tmp=$(echo "$url" | awk -F '/' '{print $3}') urls=("${urls[@]}" $tmp) @@ -257,7 +257,7 @@ function gravity_Whitelist() { echo " done!" echo -n "::: Running whitelist script to update HOSTS file...." - $whitelistScript -f -nr -q ${urls[@]} > /dev/null & spinner $! + $whitelistScript -f -nr -q "${urls[@]}" > /dev/null & spinner $! numWhitelisted=$(wc -l < "/etc/pihole/whitelist.txt") plural=; [[ "$numWhitelisted" != "1" ]] && plural=s @@ -283,13 +283,13 @@ function gravity_hostFormat() { if [[ -n $piholeIPv6 ]];then #Add dummy domain Pi-Hole.IsWorking.OK to the top of gravity.list to make ping result return a friendlier looking domain! echo -e "$piholeIP Pi-Hole.IsWorking.OK \n$piholeIPv6 Pi-Hole.IsWorking.OK" > $piholeDir/$accretionDisc - cat $piholeDir/$eventHorizon | awk -v ipv4addr="$piholeIP" -v ipv6addr="$piholeIPv6" '{sub(/\r$/,""); print ipv4addr" "$0"\n"ipv6addr" "$0}' >> $piholeDir/$accretionDisc + $piholeDir/$eventHorizon | awk -v ipv4addr="$piholeIP" -v ipv6addr="$piholeIPv6" '{sub(/\r$/,""); print ipv4addr" "$0"\n"ipv6addr" "$0}' >> $piholeDir/$accretionDisc else # Otherwise, just create gravity.list as normal using IPv4 #Add dummy domain Pi-Hole.IsWorking.OK to the top of gravity.list to make ping result return a friendlier looking domain! echo -e "$piholeIP Pi-Hole.IsWorking.OK" > $piholeDir/$accretionDisc - cat $piholeDir/$eventHorizon | awk -v ipv4addr="$piholeIP" '{sub(/\r$/,""); print ipv4addr" "$0}' >> $piholeDir/$accretionDisc + $piholeDir/$eventHorizon | awk -v ipv4addr="$piholeIP" '{sub(/\r$/,""); print ipv4addr" "$0}' >> $piholeDir/$accretionDisc fi # Copy the file over as /etc/pihole/gravity.list so dnsmasq can use it cp $piholeDir/$accretionDisc $adList @@ -301,10 +301,10 @@ function gravity_blackbody() { for file in $piholeDir/*.$justDomainsExtension do # If list is in active array then leave it (noop) else rm the list - if [[ " ${activeDomains[@]} " =~ " ${file} " ]]; then + if [[ " ${activeDomains[@]} " =~ ${file} ]]; then : else - rm -f $file + rm -f "$file" fi done } @@ -343,7 +343,7 @@ function gravity_reload() { if [[ $dnsmasqPid ]]; then # service already running - reload config - $SUDO kill -HUP $dnsmasqPid & spinner $! + $SUDO kill -HUP "$dnsmasqPid" & spinner $! else # service not running, start it up $SUDO service dnsmasq start & spinner $! From 646c4a3ccc78c9167a79d5e4c95fe4bf6518cc86 Mon Sep 17 00:00:00 2001 From: nate Date: Sat, 26 Mar 2016 15:01:02 -0500 Subject: [PATCH 32/96] Newline not read correctly in prompt --- automated install/uninstall.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/automated install/uninstall.sh b/automated install/uninstall.sh index d116c4e4..44cf2639 100644 --- a/automated install/uninstall.sh +++ b/automated install/uninstall.sh @@ -27,7 +27,9 @@ fi ######### SCRIPT ########### -read -p "Do you wish to purge PiHole's dependencies from your OS?\n WARNING: This is destructive if run on any non-Debian based OS \n(SAFE TO RUN ON RASPBIAN)" -n 1 -r +read -p "Do you wish to purge PiHole's dependencies from your OS?" -n 1 -r +ehco "WARNING: This is destructive if run on any non-Debian based OS" +echo "(SAFE TO RUN ON RASPBIAN)" echo if [[ $REPLY =~ ^{Yy]$ ]]; then $SUDO apt-get -y remove --purge dnsutils bc toilet From 5223627b719008a124e4acacb1da3da5ddb037ab Mon Sep 17 00:00:00 2001 From: nate Date: Sat, 26 Mar 2016 15:05:55 -0500 Subject: [PATCH 33/96] read locks echos... reordered to warn user --- automated install/uninstall.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/automated install/uninstall.sh b/automated install/uninstall.sh index 44cf2639..dbc9cf00 100644 --- a/automated install/uninstall.sh +++ b/automated install/uninstall.sh @@ -27,9 +27,9 @@ fi ######### SCRIPT ########### -read -p "Do you wish to purge PiHole's dependencies from your OS?" -n 1 -r -ehco "WARNING: This is destructive if run on any non-Debian based OS" +echo "WARNING: This is destructive if run on any non-Debian based OS" echo "(SAFE TO RUN ON RASPBIAN)" +read -p "Do you wish to purge PiHole's dependencies from your OS?" -n 1 -r echo if [[ $REPLY =~ ^{Yy]$ ]]; then $SUDO apt-get -y remove --purge dnsutils bc toilet From 7388461ede2a71d7f42b27fecf5072440b830db3 Mon Sep 17 00:00:00 2001 From: Nate Date: Sat, 26 Mar 2016 15:18:53 -0500 Subject: [PATCH 34/96] Modularized uninstall for cleanliness and robust usability. --- automated install/uninstall.sh | 104 ++++++++++++++++++--------------- 1 file changed, 58 insertions(+), 46 deletions(-) mode change 100644 => 100755 automated install/uninstall.sh diff --git a/automated install/uninstall.sh b/automated install/uninstall.sh old mode 100644 new mode 100755 index dbc9cf00..5ddaa0ac --- a/automated install/uninstall.sh +++ b/automated install/uninstall.sh @@ -25,54 +25,66 @@ else fi fi +function removeAndPurge { + # Purge dependencies + echo "Purging dependencies!" + $SUDO apt-get -y remove --purge dnsutils bc toilet + $SUDO apt-get -y remove --purge dnsmasq + $SUDO apt-get -y remove --purge lighttpd php5-common php5-cgi php5 + + # Remove dependency config files + echo "Removing dnsmasq config files..." + $SUDO rm /etc/dnsmasq.conf /etc/dnsmasq.conf.orig &> /dev/null +} + +function removeNoPurge { + # Only web directories/files that are created by pihole should be removed. + echo "Removing the Pi-hole Web server files..." + $SUDO rm -rf /var/www/html/admin &> /dev/null + $SUDO rm -rf /var/www/html/pihole &> /dev/null + $SUDO rm /var/www/html/index.lighttpd.orig &> /dev/null + + # If the web directory is empty after removing these files, then the parent html folder can be removed. + if [[ ! "$(ls -A /var/www/html)" ]]; then + $SUDO rm -rf /var/www/html &> /dev/null + fi + + # Attempt to preserve backwards compatibility with older versions + # to guarantee no additional changes were made to /etc/crontab after + # the installation of pihole, /etc/crontab.pihole should be permanently + # preserved. + if [[ -f /etc/crontab.orig ]]; then + echo "Initial Pi-hole cron detected. Restoring the default system cron..." + $SUDO mv /etc/crontab /etc/crontab.pihole + $SUDO mv /etc/crontab.orig /etc/crontab + $SUDO service cron restart + fi + + # Attempt to preserve backwards compatibility with older versions + if [[ -f /etc/cron.d/pihole ]];then + echo "Removing cron.d/pihole..." + $SUDO rm /etc/cron.d/pihole &> /dev/null + fi + + echo "Removing config files and scripts..." + $SUDO rm -rf /etc/lighttpd/ &> /dev/null + $SUDO rm /var/log/pihole.log &> /dev/null + $SUDO rm /usr/local/bin/gravity.sh &> /dev/null + $SUDO rm /usr/local/bin/chronometer.sh &> /dev/null + $SUDO rm /usr/local/bin/whitelist.sh &> /dev/null + $SUDO rm /usr/local/bin/piholeLogFlush.sh &> /dev/null + $SUDO rm -rf /etc/pihole/ &> /dev/null + +} ######### SCRIPT ########### echo "WARNING: This is destructive if run on any non-Debian based OS" echo "(SAFE TO RUN ON RASPBIAN)" -read -p "Do you wish to purge PiHole's dependencies from your OS?" -n 1 -r -echo -if [[ $REPLY =~ ^{Yy]$ ]]; then - $SUDO apt-get -y remove --purge dnsutils bc toilet - $SUDO apt-get -y remove --purge dnsmasq - $SUDO apt-get -y remove --purge lighttpd php5-common php5-cgi php5 +while true; do + read -p "Do you wish to purge PiHole's dependencies from your OS?" yn + case $yn in + [Yy]* ) removeAndPurge; break;; - echo "Removing dnsmasq config files..." - $SUDO rm /etc/dnsmasq.conf /etc/dnsmasq.conf.orig -fi - -# Only web directories/files that are created by pihole should be removed. -echo "Removing the Pi-hole Web server files..." -$SUDO rm -rf /var/www/html/admin -$SUDO rm -rf /var/www/html/pihole -$SUDO rm /var/www/html/index.lighttpd.orig - -# If the web directory is empty after removing these files, then the parent html folder can be removed. -if [[ ! "$(ls -A /var/www/html)" ]]; then - $SUDO rm -rf /var/www/html -fi - -# Attempt to preserve backwards compatibility with older versions -# to guarantee no additional changes were made to /etc/crontab after -# the installation of pihole, /etc/crontab.pihole should be permanently -# preserved. -if [[ -f /etc/crontab.orig ]]; then - echo "Initial Pi-hole cron detected. Restoring the default system cron..." - $SUDO mv /etc/crontab /etc/crontab.pihole - $SUDO mv /etc/crontab.orig /etc/crontab - $SUDO service cron restart -fi - -# Attempt to preserve backwards compatibility with older versions -if [[ -f /etc/cron.d/pihole ]];then - echo "Removing cron.d/pihole..." - $SUDO rm /etc/cron.d/pihole -fi - -echo "Removing config files and scripts..." -$SUDO rm -rf /etc/lighttpd/ -$SUDO rm /var/log/pihole.log -$SUDO rm /usr/local/bin/gravity.sh -$SUDO rm /usr/local/bin/chronometer.sh -$SUDO rm /usr/local/bin/whitelist.sh -$SUDO rm /usr/local/bin/piholeLogFlush.sh -$SUDO rm -rf /etc/pihole/ + [Nn]* ) removeNoPurge; break;; + esac +done From 901cb44f5e2fe688cde871e1304ae1805c519c73 Mon Sep 17 00:00:00 2001 From: Nate Date: Sat, 26 Mar 2016 16:50:05 -0500 Subject: [PATCH 35/96] Added /etc/.pihole/ and /var/log/*pihole* to uninstall as well as fixed missing call to removeNoPurge. --- automated install/basic-install.sh | 26 +++++++++++++------------- automated install/uninstall.sh | 14 +++++++++++--- 2 files changed, 24 insertions(+), 16 deletions(-) diff --git a/automated install/basic-install.sh b/automated install/basic-install.sh index fe385fbb..2f910c03 100755 --- a/automated install/basic-install.sh +++ b/automated install/basic-install.sh @@ -72,19 +72,19 @@ fi # fi ####### FUNCTIONS ########## -###All credit for the below function goes to http://fitnr.com/showing-a-bash-spinner.html -spinner() { - local pid=$1 - - spin='-\|/' - i=0 - while $SUDO kill -0 "$pid" 2>/dev/null - do - i=$(( (i+1) %4 )) - printf "\b%s" "{$spin:$i:1}" - sleep .1 - done - printf "\b" +spinner() +{ + local pid=$1 + local delay=0.75 + local spinstr='|/-\' + while [ "$(ps a | awk '{print $1}' | grep $pid)" ]; do + local temp=${spinstr#?} + printf " [%c] " "$spinstr" + local spinstr=$temp${spinstr%"$temp"} + sleep $delay + printf "\b\b\b\b\b\b" + done + printf " \b\b\b\b" } backupLegacyPihole() { diff --git a/automated install/uninstall.sh b/automated install/uninstall.sh index 5ddaa0ac..9c47ce44 100755 --- a/automated install/uninstall.sh +++ b/automated install/uninstall.sh @@ -34,7 +34,10 @@ function removeAndPurge { # Remove dependency config files echo "Removing dnsmasq config files..." - $SUDO rm /etc/dnsmasq.conf /etc/dnsmasq.conf.orig &> /dev/null + $SUDO rm /etc/dnsmasq.conf /etc/dnsmasq.conf.orig /etc/dnsmasq.d/01-pihole.conf &> /dev/null + + # Call removeNoPurge to remove PiHole specific files + removeNoPurge } function removeNoPurge { @@ -45,8 +48,10 @@ function removeNoPurge { $SUDO rm /var/www/html/index.lighttpd.orig &> /dev/null # If the web directory is empty after removing these files, then the parent html folder can be removed. - if [[ ! "$(ls -A /var/www/html)" ]]; then - $SUDO rm -rf /var/www/html &> /dev/null + if [ -d "/var/www/html" ]; then + if [[ ! "$(ls -A /var/www/html)" ]]; then + $SUDO rm -rf /var/www/html &> /dev/null + fi fi # Attempt to preserve backwards compatibility with older versions @@ -73,7 +78,10 @@ function removeNoPurge { $SUDO rm /usr/local/bin/chronometer.sh &> /dev/null $SUDO rm /usr/local/bin/whitelist.sh &> /dev/null $SUDO rm /usr/local/bin/piholeLogFlush.sh &> /dev/null + $SUDO rm /usr/local/bin/piholeDebug.sh &> /dev/null + $SUDO rm -rf /var/log/*pihole* &> /dev/null $SUDO rm -rf /etc/pihole/ &> /dev/null + $SUDO rm -rf /etc/.pihole/ &> /dev/null } From 5ee382c8ebd96b920133e82c30079dcb6f6e6ab8 Mon Sep 17 00:00:00 2001 From: nate Date: Sat, 26 Mar 2016 17:00:52 -0500 Subject: [PATCH 36/96] Roll back addition of piholeDebug.sh (production master base) --- advanced/Scripts/piholeDebug.sh | 157 ----------------------------- automated install/basic-install.sh | 3 +- 2 files changed, 1 insertion(+), 159 deletions(-) delete mode 100644 advanced/Scripts/piholeDebug.sh diff --git a/advanced/Scripts/piholeDebug.sh b/advanced/Scripts/piholeDebug.sh deleted file mode 100644 index ead75cd9..00000000 --- a/advanced/Scripts/piholeDebug.sh +++ /dev/null @@ -1,157 +0,0 @@ -#!/usr/bin/env bash -# Pi-hole: A black hole for Internet advertisements -# (c) 2015, 2016 by Jacob Salmela -# Network-wide ad blocking via your Raspberry Pi -# http://pi-hole.net -# Flushes /var/log/pihole.log -# -# 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 -# the Free Software Foundation, either version 2 of the License, or -# (at your option) any later version. - -# Nate Brandeburg -# nate@ubiquisoft.com -# 3/19/2016 - -######## GLOBAL VARS ######## -DEBUG_LOG="/var/log/pihole_debug.log" - -######## FIRST CHECK ######## -# Must be root to debug -if [[ $EUID -eq 0 ]];then - echo "::: You are root... Beginning debug!" -else - echo "::: sudo will be used for debugging." - # Check if sudo is actually installed - if [[ $(dpkg-query -s sudo) ]];then - export SUDO="sudo" - else - echo "::: Please install sudo or run this as root." - exit 1 - fi -fi - -# Ensure the file exists, create if not, clear if exists. -if [ ! -f "$DEBUG_LOG" ] -then - $SUDO touch $DEBUG_LOG - $SUDO chmod 644 $DEBUG_LOG - $SUDO chown "$USER":root $DEBUG_LOG -else - truncate -s 0 $DEBUG_LOG -fi - -### Check Pi internet connections ### -# Log the IP addresses of this Pi -IPADDR=$(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 - -echo "Writing dnsmasq.conf to debug log..." -echo "############### Dnsmasq ###############" >> $DEBUG_LOG -DNSMASQFILE="/etc/dnsmasq.conf" -if [ -e "$DNSMASQFILE" ] -then - cat $DNSMASQFILE >> $DEBUG_LOG - echo >> $DEBUG_LOG -else - echo "No dnsmasq.conf file found!" >> $DEBUG_LOG - echo "No dnsmasq.conf file found!" -fi - -echo "Writing hosts file to debug log..." -echo "############### Hosts ###############" >> $DEBUG_LOG -HOSTSFILE="/etc/hosts" -if [ -e "$HOSTSFILE" ] -then - cat "$HOSTSFILE" >> $DEBUG_LOG - echo >> $DEBUG_LOG -else - echo "No hosts file found!" >> $DEBUG_LOG - echo "No hosts file found!" -fi - -### PiHole application specific logging ### -# Write Pi-Hole logs to debug log -echo "Writing whitelist to debug log..." -echo "############### Whitelist ###############" >> $DEBUG_LOG -WHITELISTFILE="/etc/pihole/whitelist.txt" -if [ -e "$WHITELISTFILE" ] -then - cat "$WHITELISTFILE" >> $DEBUG_LOG - echo >> $DEBUG_LOG -else - echo "No whitelist.txt file found!" >> $DEBUG_LOG - echo "No whitelist.txt file found!" -fi - -echo "Writing blacklist to debug log..." -echo "############### Blacklist ###############" >> $DEBUG_LOG -BLACKLISTFILE="/etc/pihole/blacklist.txt" -if [ -e "$BLACKLISTFILE" ] -then - cat "$BLACKLISTFILE" >> $DEBUG_LOG - echo >> $DEBUG_LOG -else - echo "No blacklist.txt file found!" >> $DEBUG_LOG - echo "No blacklist.txt file found!" -fi - -echo "Writing adlists.list to debug log..." -echo "############### adlists.list ###############" >> $DEBUG_LOG -ADLISTSFILE="/etc/pihole/adlists.list" -if [ -e "$ADLISTSFILE" ] -then - cat "$ADLISTSFILE" >> $DEBUG_LOG - echo >> $DEBUG_LOG -else - echo "No adlists.list file found!" >> $DEBUG_LOG - echo "No adlists.list file found!" -fi - - -# Continuously append the pihole.log file to the pihole_debug.log file -function dumpPiHoleLog { - trap '{ echo -e "\nFinishing debug write from interrupt... Quitting!" ; exit 1; }' INT - echo -e "Writing current pihole traffic to debug log...\nTry loading any/all sites that you are having trouble with now... (Press ctrl+C to finish)" - echo "############### pihole.log ###############" >> $DEBUG_LOG - PIHOLELOG="/var/log/pihole.log" - if [ -e "$PIHOLELOG" ] - then - while true; do - tail -f "$PIHOLELOG" >> $DEBUG_LOG - echo >> $DEBUG_LOG - done - else - echo "No pihole.log file found!" >> $DEBUG_LOG - echo "No pihole.log file found!" - fi -} - -function finalWrites { - # Write the gravity.list after the user is finished capturing the pihole.log output - echo "Writing gravity.list to debug log..." - echo "############### gravity.list ###############" >> $DEBUG_LOG - GRAVITYFILE="/etc/pihole/gravity.list" - if [ -e "$GRAVITYFILE" ] - then - cat /etc/pihole/gravity.list >> $DEBUG_LOG - echo >> $DEBUG_LOG - else - echo "No gravity.list file found!" >> $DEBUG_LOG - echo "No gravity.list file found" - fi -} -trap finalWrites EXIT - -### Method calls for additinal logging ### -dumpPiHoleLog diff --git a/automated install/basic-install.sh b/automated install/basic-install.sh index 2f910c03..d3ba437f 100755 --- a/automated install/basic-install.sh +++ b/automated install/basic-install.sh @@ -477,8 +477,7 @@ installScripts() { $SUDO cp /etc/.pihole/advanced/Scripts/blacklist.sh /usr/local/bin/blacklist.sh $SUDO cp /etc/.pihole/advanced/Scripts/piholeLogFlush.sh /usr/local/bin/piholeLogFlush.sh $SUDO cp /etc/.pihole/advanced/Scripts/updateDashboard.sh /usr/local/bin/updateDashboard.sh - $SUDO cp /etc/.pihole/advanced/Scripts/piholeDebug.sh /usr/local/bin/piholeDebug.sh - $SUDO chmod 755 /usr/local/bin/{gravity,chronometer,whitelist,blacklist,piholeLogFlush,updateDashboard,piholeDebug}.sh + $SUDO chmod 755 /usr/local/bin/{gravity,chronometer,whitelist,blacklist,piholeLogFlush,updateDashboard}.sh $SUDO echo " done." } From 5442954db6cd63a81eddc3e66d5cd48179102d52 Mon Sep 17 00:00:00 2001 From: Nate Date: Sun, 27 Mar 2016 01:53:48 -0500 Subject: [PATCH 37/96] Prompt user to remove each dependent package if they do choose to remove packages at all. --- automated install/basic-install.sh | 11 +++++-- automated install/uninstall.sh | 51 +++++++++++++++++++++++++----- 2 files changed, 52 insertions(+), 10 deletions(-) diff --git a/automated install/basic-install.sh b/automated install/basic-install.sh index d3ba437f..7833c7e4 100755 --- a/automated install/basic-install.sh +++ b/automated install/basic-install.sh @@ -75,9 +75,9 @@ fi spinner() { local pid=$1 - local delay=0.75 + local delay=0.50 local spinstr='|/-\' - while [ "$(ps a | awk '{print $1}' | grep $pid)" ]; do + while [ "$(ps a | awk '{print $1}' | grep "$pid")" ]; do local temp=${spinstr#?} printf " [%c] " "$spinstr" local spinstr=$temp${spinstr%"$temp"} @@ -486,6 +486,10 @@ installConfigs() { $SUDO echo ":::" $SUDO echo "::: Installing configs..." versionCheckDNSmasq + if [ ! -d "/etc/lighttpd" ]; then + $SUDO mkdir /etc/lighttpd + $SUDO chown "$USER":root /etc/lighttpds + fi $SUDO mv /etc/lighttpd/lighttpd.conf /etc/lighttpd/lighttpd.conf.orig $SUDO cp /etc/.pihole/advanced/lighttpd.conf /etc/lighttpd/lighttpd.conf } @@ -664,6 +668,9 @@ installPihole() { stopServices setUser $SUDO mkdir -p /etc/pihole/ + if [ ! -d "/var/www/html" ]; then + $SUDO mkdir /var/www/html + fi $SUDO chown www-data:www-data /var/www/html $SUDO chmod 775 /var/www/html $SUDO usermod -a -G www-data pihole diff --git a/automated install/uninstall.sh b/automated install/uninstall.sh index 9c47ce44..8467256f 100755 --- a/automated install/uninstall.sh +++ b/automated install/uninstall.sh @@ -14,7 +14,7 @@ if [[ $EUID -eq 0 ]];then echo "You are root." else - echo "sudo will be used for the install." + echo "sudo will be used for the uninstall." # Check if it is actually installed # If it isn't, exit because the unnstall cannot complete if [[ $(dpkg-query -s sudo) ]];then @@ -27,15 +27,49 @@ fi function removeAndPurge { # Purge dependencies - echo "Purging dependencies!" - $SUDO apt-get -y remove --purge dnsutils bc toilet - $SUDO apt-get -y remove --purge dnsmasq - $SUDO apt-get -y remove --purge lighttpd php5-common php5-cgi php5 + read -p "Do you wish to purge dnsutils?" -n 1 -r + echo + if [[ $REPLY =~ ^[Yy]$ ]]; then + $SUDO apt-get -y remove --purge dnsutils + fi + + read -p "Do you wish to purge bc?" -n 1 -r + echo + if [[ $REPLY =~ ^[Yy]$ ]]; then + $SUDO apt-get -y remove --purge bc + fi + + read -p "Do you wish to purge toilet?" -n 1 -r + echo + if [[ $REPLY =~ ^[Yy]$ ]]; then + $SUDO apt-get -y remove --purge toilet + fi + + read -p "Do you wish to purge dnsmasq?" -n 1 -r + echo + if [[ $REPLY =~ ^[Yy]$ ]]; then + $SUDO apt-get -y remove --purge dnsmasq + fi + + read -p "Do you wish to purge lighttpd?" -n 1 -r + echo + if [[ $REPLY =~ ^[Yy]$ ]]; then + $SUDO apt-get -y remove --purge lighttpd + fi + + read -p "Do you wish to purge php5?" -n 1 -r + echo + if [[ $REPLY =~ ^[Yy]$ ]]; then + $SUDO apt-get -y remove --purge php5-common php5-cgi php5 + fi # Remove dependency config files echo "Removing dnsmasq config files..." $SUDO rm /etc/dnsmasq.conf /etc/dnsmasq.conf.orig /etc/dnsmasq.d/01-pihole.conf &> /dev/null + # Take care of any additional package cleaning + $SUDO apt-get -y autoremove + # Call removeNoPurge to remove PiHole specific files removeNoPurge } @@ -86,13 +120,14 @@ function removeNoPurge { } ######### SCRIPT ########### -echo "WARNING: This is destructive if run on any non-Debian based OS" -echo "(SAFE TO RUN ON RASPBIAN)" +echo "Preparing to remove packages, be sure that each may be safely removed depending on your operating system." +echo "(SAFE TO REMOVE ALL ON RASPBIAN)" while true; do - read -p "Do you wish to purge PiHole's dependencies from your OS?" yn + read -rp "Do you wish to purge PiHole's dependencies from your OS? (You will be prompted for each package)" yn case $yn in [Yy]* ) removeAndPurge; break;; [Nn]* ) removeNoPurge; break;; esac done + From 2b5cee05e6e5c1181256ef1b8dfb1b089851e09a Mon Sep 17 00:00:00 2001 From: Nate Date: Sun, 27 Mar 2016 01:57:52 -0500 Subject: [PATCH 38/96] Check for existing directory before trying to perform operations on it. --- automated install/basic-install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/automated install/basic-install.sh b/automated install/basic-install.sh index 7833c7e4..ca546256 100755 --- a/automated install/basic-install.sh +++ b/automated install/basic-install.sh @@ -488,7 +488,7 @@ installConfigs() { versionCheckDNSmasq if [ ! -d "/etc/lighttpd" ]; then $SUDO mkdir /etc/lighttpd - $SUDO chown "$USER":root /etc/lighttpds + $SUDO chown "$USER":root /etc/lighttpd fi $SUDO mv /etc/lighttpd/lighttpd.conf /etc/lighttpd/lighttpd.conf.orig $SUDO cp /etc/.pihole/advanced/lighttpd.conf /etc/lighttpd/lighttpd.conf From 8c45bd32b749e0b95840b974e7c7123da7a87eac Mon Sep 17 00:00:00 2001 From: Nate Date: Sun, 27 Mar 2016 12:31:05 -0500 Subject: [PATCH 39/96] Loop through dependencies for future expansion. Syntax of uninstall script now matches basic-install.sh. More error handling of missing default files. Force user prompt for removing packages when uninstalling. --- automated install/basic-install.sh | 11 ++-- automated install/uninstall.sh | 101 +++++++++++++++-------------- 2 files changed, 60 insertions(+), 52 deletions(-) diff --git a/automated install/basic-install.sh b/automated install/basic-install.sh index ca546256..134ec3e2 100755 --- a/automated install/basic-install.sh +++ b/automated install/basic-install.sh @@ -489,8 +489,8 @@ installConfigs() { if [ ! -d "/etc/lighttpd" ]; then $SUDO mkdir /etc/lighttpd $SUDO chown "$USER":root /etc/lighttpd + $SUDO mv /etc/lighttpd/lighttpd.conf /etc/lighttpd/lighttpd.conf.orig fi - $SUDO mv /etc/lighttpd/lighttpd.conf /etc/lighttpd/lighttpd.conf.orig $SUDO cp /etc/.pihole/advanced/lighttpd.conf /etc/lighttpd/lighttpd.conf } @@ -622,9 +622,13 @@ installPiholeWeb() { $SUDO echo " Existing page detected, not overwriting" else $SUDO mkdir /var/www/html/pihole - $SUDO mv /var/www/html/index.lighttpd.html /var/www/html/index.lighttpd.orig + if [ -f /var/www/html/index.lighttpd.html ]; then + $SUDO mv /var/www/html/index.lighttpd.html /var/www/html/index.lighttpd.orig + else + printf "\n:::\tNo default index.lighttpd.html file found... not backing up" + fi $SUDO cp /etc/.pihole/advanced/index.html /var/www/html/pihole/index.html - $SUDO echo " done!" + $SUDO echo "::: done!" fi } @@ -646,7 +650,6 @@ runGravity() { fi #Don't run as SUDO, this was causing issues echo "::: Running gravity.sh" - echo ":::" /usr/local/bin/gravity.sh } diff --git a/automated install/uninstall.sh b/automated install/uninstall.sh index 8467256f..ffbf4246 100755 --- a/automated install/uninstall.sh +++ b/automated install/uninstall.sh @@ -12,71 +12,71 @@ # Must be root to uninstall if [[ $EUID -eq 0 ]];then - echo "You are root." + echo "::: You are root." else - echo "sudo will be used for the uninstall." + echo "::: Sudo will be used for the uninstall." # Check if it is actually installed # If it isn't, exit because the unnstall cannot complete if [[ $(dpkg-query -s sudo) ]];then export SUDO="sudo" else - echo "Please install sudo or run this as root." + echo "::: Please install sudo or run this as root." exit 1 fi fi +spinner() +{ + local pid=$1 + local delay=0.50 + local spinstr='|/-\' + while [ "$(ps a | awk '{print $1}' | grep "$pid")" ]; do + local temp=${spinstr#?} + printf " [%c] " "$spinstr" + local spinstr=$temp${spinstr%"$temp"} + sleep $delay + printf "\b\b\b\b\b\b" + done + printf " \b\b\b\b" +} + function removeAndPurge { # Purge dependencies - read -p "Do you wish to purge dnsutils?" -n 1 -r - echo - if [[ $REPLY =~ ^[Yy]$ ]]; then - $SUDO apt-get -y remove --purge dnsutils - fi - - read -p "Do you wish to purge bc?" -n 1 -r - echo - if [[ $REPLY =~ ^[Yy]$ ]]; then - $SUDO apt-get -y remove --purge bc - fi - - read -p "Do you wish to purge toilet?" -n 1 -r - echo - if [[ $REPLY =~ ^[Yy]$ ]]; then - $SUDO apt-get -y remove --purge toilet - fi - - read -p "Do you wish to purge dnsmasq?" -n 1 -r - echo - if [[ $REPLY =~ ^[Yy]$ ]]; then - $SUDO apt-get -y remove --purge dnsmasq - fi - - read -p "Do you wish to purge lighttpd?" -n 1 -r - echo - if [[ $REPLY =~ ^[Yy]$ ]]; then - $SUDO apt-get -y remove --purge lighttpd - fi - - read -p "Do you wish to purge php5?" -n 1 -r - echo - if [[ $REPLY =~ ^[Yy]$ ]]; then - $SUDO apt-get -y remove --purge php5-common php5-cgi php5 - fi +echo ":::" + dependencies=( dnsutils bc toilet figlet dnsmasq lighttpd php5-common php5-cgi php5 git curl unzip wget ) + for i in "${dependencies[@]}"; do + if [ "$(dpkg-query -W --showformat='${Status}\n' "$i" | grep -c "ok installed")" -eq 1 ]; then + while true; do + read -rp "::: Do you wish to remove $i from your system? (y/n): " yn + case $yn in + [Yy]* ) echo "::: Removing $i..."; $SUDO apt-get -y remove --purge "$i" > /dev/null & spinner $!; echo "DONE!"; break;; + [Nn]* ) echo "::: Skipping $i"; break;; + * ) echo "::: You must answer yes or no!";; + esac + done + else + echo "IF FAILED ***" + fi + done # Remove dependency config files - echo "Removing dnsmasq config files..." + echo "::: Removing dnsmasq config files..." $SUDO rm /etc/dnsmasq.conf /etc/dnsmasq.conf.orig /etc/dnsmasq.d/01-pihole.conf &> /dev/null # Take care of any additional package cleaning - $SUDO apt-get -y autoremove + echo "::: Auto removing remaining dependencies" + $SUDO apt-get -y autoremove &> /dev/null & spinner $!; echo "DONE!"; + echo "::: Auto cleaning remaining dependencies" + $SUDO apt-get -y autoclean &> /dev/null & spinner $!; echo "DONE!"; # Call removeNoPurge to remove PiHole specific files removeNoPurge } function removeNoPurge { + echo ":::" # Only web directories/files that are created by pihole should be removed. - echo "Removing the Pi-hole Web server files..." + echo "::: Removing the Pi-hole Web server files..." $SUDO rm -rf /var/www/html/admin &> /dev/null $SUDO rm -rf /var/www/html/pihole &> /dev/null $SUDO rm /var/www/html/index.lighttpd.orig &> /dev/null @@ -93,7 +93,7 @@ function removeNoPurge { # the installation of pihole, /etc/crontab.pihole should be permanently # preserved. if [[ -f /etc/crontab.orig ]]; then - echo "Initial Pi-hole cron detected. Restoring the default system cron..." + echo "::: Initial Pi-hole cron detected. Restoring the default system cron..." $SUDO mv /etc/crontab /etc/crontab.pihole $SUDO mv /etc/crontab.orig /etc/crontab $SUDO service cron restart @@ -101,11 +101,11 @@ function removeNoPurge { # Attempt to preserve backwards compatibility with older versions if [[ -f /etc/cron.d/pihole ]];then - echo "Removing cron.d/pihole..." + echo "::: Removing cron.d/pihole..." $SUDO rm /etc/cron.d/pihole &> /dev/null fi - echo "Removing config files and scripts..." + echo "::: Removing config files and scripts..." $SUDO rm -rf /etc/lighttpd/ &> /dev/null $SUDO rm /var/log/pihole.log &> /dev/null $SUDO rm /usr/local/bin/gravity.sh &> /dev/null @@ -116,14 +116,18 @@ function removeNoPurge { $SUDO rm -rf /var/log/*pihole* &> /dev/null $SUDO rm -rf /etc/pihole/ &> /dev/null $SUDO rm -rf /etc/.pihole/ &> /dev/null - + + echo ":::" + printf "::: Finished removing PiHole from your system. Sorry to see you go!\n" + printf "::: Reach out to us at https://github.com/pi-hole/pi-hole/issues if you need help\n" + printf "::: Reinstall by simpling running\n:::\n:::\tcurl -L install.pi-hole.net | bash\n:::\n::: at any time!\n:::\n" } ######### SCRIPT ########### -echo "Preparing to remove packages, be sure that each may be safely removed depending on your operating system." -echo "(SAFE TO REMOVE ALL ON RASPBIAN)" +echo "::: Preparing to remove packages, be sure that each may be safely removed depending on your operating system." +echo "::: (SAFE TO REMOVE ALL ON RASPBIAN)" while true; do - read -rp "Do you wish to purge PiHole's dependencies from your OS? (You will be prompted for each package)" yn + read -rp "::: Do you wish to purge PiHole's dependencies from your OS? (You will be prompted for each package)" yn case $yn in [Yy]* ) removeAndPurge; break;; @@ -131,3 +135,4 @@ while true; do esac done + From 1a1026b367d0b34512e96b8f070a7452f049844b Mon Sep 17 00:00:00 2001 From: nate Date: Sun, 27 Mar 2016 14:44:42 -0500 Subject: [PATCH 40/96] Consistent stdout to match basic-install.sh and uninstall.sh --- advanced/Scripts/piholeDebug.sh | 46 ++++++++++++++++----------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/advanced/Scripts/piholeDebug.sh b/advanced/Scripts/piholeDebug.sh index ab417aa6..7656f963 100755 --- a/advanced/Scripts/piholeDebug.sh +++ b/advanced/Scripts/piholeDebug.sh @@ -31,14 +31,14 @@ WHITELISTMATCHES="/tmp/whitelistmatches.list" ######## FIRST CHECK ######## # Must be root to debug if [[ $EUID -eq 0 ]]; then - echo "You are root... Beginning debug!" + echo "::: You are root... Beginning debug!" else - echo "sudo will be used for debugging." + echo "::: Sudo will be used for debugging." # Check if sudo is actually installed if [[ $(dpkg-query -s sudo) ]]; then export SUDO="sudo" else - echo "Please install sudo or run this as root." + echo "::: Please install sudo or run this as root." exit 1 fi fi @@ -119,7 +119,7 @@ function testNslookup { ### Check Pi internet connections ### # Log the IP addresses of this Pi IPADDR=$(ifconfig | perl -nle 's/dr:(\S+)/print $1/e') -echo "Writing local IPs to debug log" +echo "::: Writing local IPs to debug log" echo "IP Addresses of this Pi:" >> $DEBUG_LOG echo "$IPADDR" >> $DEBUG_LOG echo >> $DEBUG_LOG @@ -135,7 +135,7 @@ compareWhitelist compareBlacklist testNslookup -echo "Writing dnsmasq.conf to debug log..." +echo "::: Writing dnsmasq.conf to debug log..." echo "#######################################" >> $DEBUG_LOG echo "############### Dnsmasq ###############" >> $DEBUG_LOG echo "#######################################" >> $DEBUG_LOG @@ -151,10 +151,10 @@ then echo >> $DEBUG_LOG else echo "No dnsmasq.conf file found!" >> $DEBUG_LOG - echo "No dnsmasq.conf file found!" + printf ":::\tNo dnsmasq.conf file found!\n" fi -echo "Writing 01-pihole.conf to debug log..." +echo "::: Writing 01-pihole.conf to debug log..." echo "#######################################" >> $DEBUG_LOG echo "########### 01-pihole.conf ############" >> $DEBUG_LOG echo "#######################################" >> $DEBUG_LOG @@ -170,10 +170,10 @@ then echo >> $DEBUG_LOG else echo "No 01-pihole.conf file found!" >> $DEBUG_LOG - echo "No 01-pihole.conf file found" + echo "::: No 01-pihole.conf file found\n" fi -echo "Writing lighttpd.conf to debug log..." +echo "::: Writing lighttpd.conf to debug log..." echo "#######################################" >> $DEBUG_LOG echo "############ lighttpd.conf ############" >> $DEBUG_LOG echo "#######################################" >> $DEBUG_LOG @@ -189,10 +189,10 @@ then echo >> $DEBUG_LOG else echo "No lighttpd.conf file found!" >> $DEBUG_LOG - echo "No lighttpd.conf file found" + printf ":::\tNo lighttpd.conf file found\n" fi -echo "Writing size of gravity.list to debug log..." +echo "::: Writing size of gravity.list to debug log..." echo "#######################################" >> $DEBUG_LOG echo "############ gravity.list #############" >> $DEBUG_LOG echo "#######################################" >> $DEBUG_LOG @@ -202,14 +202,14 @@ then echo >> $DEBUG_LOG else echo "No gravity.list file found!" >> $DEBUG_LOG - echo "No gravity.list file found" + printf ":::\tNo gravity.list file found\n" fi # Write the hostname output to compare against entries in /etc/hosts, which is logged next echo "Hostname of this pihole is: " >> $DEBUG_LOG hostname >> $DEBUG_LOG -echo "Writing hosts file to debug log..." +echo "::: Writing hosts file to debug log..." echo "#######################################" >> $DEBUG_LOG echo "################ Hosts ################" >> $DEBUG_LOG echo "#######################################" >> $DEBUG_LOG @@ -219,11 +219,11 @@ then echo >> $DEBUG_LOG else echo "No hosts file found!" >> $DEBUG_LOG - echo "No hosts file found!" + printf ":::\tNo hosts file found!\n" fi ### PiHole application specific logging ### -echo "Writing whitelist to debug log..." +echo "::: Writing whitelist to debug log..." echo "#######################################" >> $DEBUG_LOG echo "############## Whitelist ##############" >> $DEBUG_LOG echo "#######################################" >> $DEBUG_LOG @@ -233,10 +233,10 @@ then echo >> $DEBUG_LOG else echo "No whitelist.txt file found!" >> $DEBUG_LOG - echo "No whitelist.txt file found!" + printf ":::\tNo whitelist.txt file found!\n" fi -echo "Writing blacklist to debug log..." +echo "::: Writing blacklist to debug log..." echo "#######################################" >> $DEBUG_LOG echo "############## Blacklist ##############" >> $DEBUG_LOG echo "#######################################" >> $DEBUG_LOG @@ -246,10 +246,10 @@ then echo >> $DEBUG_LOG else echo "No blacklist.txt file found!" >> $DEBUG_LOG - echo "No blacklist.txt file found!" + printf ":::\tNo blacklist.txt file found!\n" fi -echo "Writing adlists.list to debug log..." +echo "::: Writing adlists.list to debug log..." echo "#######################################" >> $DEBUG_LOG echo "############ adlists.list #############" >> $DEBUG_LOG echo "#######################################" >> $DEBUG_LOG @@ -259,14 +259,14 @@ then echo >> $DEBUG_LOG else echo "No adlists.list file found!" >> $DEBUG_LOG - echo "No adlists.list file found!" + printf ":::\tNo adlists.list file found!\n" fi # Continuously append the pihole.log file to the pihole_debug.log file function dumpPiHoleLog { trap '{ echo -e "\nFinishing debug write from interrupt... Quitting!" ; exit 1; }' INT - echo -e "Writing current pihole traffic to debug log...\nTry loading any/all sites that you are having trouble with now... (Press ctrl+C to finish)" + 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 "#######################################" >> $DEBUG_LOG echo "############# pihole.log ##############" >> $DEBUG_LOG echo "#######################################" >> $DEBUG_LOG @@ -278,13 +278,13 @@ function dumpPiHoleLog { done else echo "No pihole.log file found!" >> $DEBUG_LOG - echo "No pihole.log file found!" + printf ":::\tNo pihole.log file found!\n" fi } # Anything to be done after capturing of pihole.log terminates function finalWork { - echo "Finshed debugging!" + echo "::: Finshed debugging!" } trap finalWork EXIT From 6145748bfb3e922068b51c4d97108cdd6cb825c8 Mon Sep 17 00:00:00 2001 From: nate Date: Sun, 27 Mar 2016 20:36:31 -0500 Subject: [PATCH 41/96] Change single echo to printf to forrect \t interpretation --- advanced/Scripts/piholeDebug.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/advanced/Scripts/piholeDebug.sh b/advanced/Scripts/piholeDebug.sh index 7656f963..d2c8e245 100755 --- a/advanced/Scripts/piholeDebug.sh +++ b/advanced/Scripts/piholeDebug.sh @@ -170,7 +170,7 @@ then echo >> $DEBUG_LOG else echo "No 01-pihole.conf file found!" >> $DEBUG_LOG - echo "::: No 01-pihole.conf file found\n" + printf ":::\tNo 01-pihole.conf file found\n" fi echo "::: Writing lighttpd.conf to debug log..." From c520c55ff4b7b5288cf5344fd2e0144abe018e98 Mon Sep 17 00:00:00 2001 From: nate Date: Mon, 28 Mar 2016 10:24:13 -0500 Subject: [PATCH 42/96] Addressed UAT issues and moved scripts to /opt/pihole Symlinks now include the /etc/pihole scripts in the user's PATH. --- automated install/basic-install.sh | 32 +++++++++++++++++++++--------- automated install/uninstall.sh | 28 +++++++++++++++----------- 2 files changed, 39 insertions(+), 21 deletions(-) diff --git a/automated install/basic-install.sh b/automated install/basic-install.sh index 134ec3e2..ff4962b7 100755 --- a/automated install/basic-install.sh +++ b/automated install/basic-install.sh @@ -97,7 +97,12 @@ backupLegacyPihole() { $SUDO mv /etc/resolv.conf /etc/pihole/original/resolv.conf."$(date "+%Y-%m-%d")" $SUDO mv /etc/lighttpd/lighttpd.conf /etc/pihole/original/lighttpd.conf."$(date "+%Y-%m-%d")" $SUDO mv /var/www/pihole/index.html /etc/pihole/original/index.html."$(date "+%Y-%m-%d")" - $SUDO mv /usr/local/bin/gravity.sh /etc/pihole/original/gravity.sh."$(date "+%Y-%m-%d")" + if [ ! -d /opt/pihole ]; then + $SUDO mkdir /opt/pihole + $SUDO chown "$USER":root /opt/pihole + $SUDO chmod 1766 /opt/pihole + fi + $SUDO mv /opt/pihole/gravity.sh /etc/pihole/original/gravity.sh."$(date "+%Y-%m-%d")" else : fi @@ -470,14 +475,23 @@ versionCheckDNSmasq(){ installScripts() { # Install the scripts from /etc/.pihole to their various locations $SUDO echo ":::" - $SUDO echo -n "::: Installing scripts..." - $SUDO cp /etc/.pihole/gravity.sh /usr/local/bin/gravity.sh - $SUDO cp /etc/.pihole/advanced/Scripts/chronometer.sh /usr/local/bin/chronometer.sh - $SUDO cp /etc/.pihole/advanced/Scripts/whitelist.sh /usr/local/bin/whitelist.sh - $SUDO cp /etc/.pihole/advanced/Scripts/blacklist.sh /usr/local/bin/blacklist.sh - $SUDO cp /etc/.pihole/advanced/Scripts/piholeLogFlush.sh /usr/local/bin/piholeLogFlush.sh - $SUDO cp /etc/.pihole/advanced/Scripts/updateDashboard.sh /usr/local/bin/updateDashboard.sh - $SUDO chmod 755 /usr/local/bin/{gravity,chronometer,whitelist,blacklist,piholeLogFlush,updateDashboard}.sh + $SUDO echo -n "::: Installing scripts to /opt/pihole..." + if [ ! -d /opt/pihole ]; then + $SUDO mkdir /opt/pihole + $SUDO chown "$USER":root /opt/pihole + $SUDO chmod 1766 /opt/pihole + fi + $SUDO cp /etc/.pihole/gravity.sh /opt/pihole/gravity.sh + $SUDO cp /etc/.pihole/advanced/Scripts/chronometer.sh /opt/pihole/chronometer.sh + $SUDO cp /etc/.pihole/advanced/Scripts/whitelist.sh /opt/pihole/whitelist.sh + $SUDO cp /etc/.pihole/advanced/Scripts/blacklist.sh /opt/pihole/bin/blacklist.sh + $SUDO cp /etc/.pihole/advanced/Scripts/piholeLogFlush.sh /opt/pihole/piholeLogFlush.sh + $SUDO cp /etc/.pihole/advanced/Scripts/updateDashboard.sh /opt/pihole/updateDashboard.sh + $SUDO cp /etc/.pihole/automated\ install/uninstall.sh /opt/pihole/uninstall.sh + $SUDO chmod 755 /opt/pihole/{gravity,chronometer,whitelist,blacklist,piholeLogFlush,updateDashboard,uninstall}.sh + for f in /opt/pihole/*; do + $SUDO ln -s /opt/pihole/"$f" /usr/local/bin/"$f" + done $SUDO echo " done." } diff --git a/automated install/uninstall.sh b/automated install/uninstall.sh index ffbf4246..a08a9900 100755 --- a/automated install/uninstall.sh +++ b/automated install/uninstall.sh @@ -43,19 +43,20 @@ spinner() function removeAndPurge { # Purge dependencies echo ":::" - dependencies=( dnsutils bc toilet figlet dnsmasq lighttpd php5-common php5-cgi php5 git curl unzip wget ) + # Nate 3/28/2016 - Removed `php5-cgi` and `php5` as they are removed with php5-common + dependencies=( dnsutils bc toilet figlet dnsmasq lighttpd php5-common git curl unzip wget ) for i in "${dependencies[@]}"; do - if [ "$(dpkg-query -W --showformat='${Status}\n' "$i" | grep -c "ok installed")" -eq 1 ]; then + if [ "$(dpkg-query -W --showformat='${Status}\n' "$i" 2> /dev/null | grep -c "ok installed")" -eq 1 ]; then while true; do - read -rp "::: Do you wish to remove $i from your system? (y/n): " yn + read -rp "::: Do you wish to remove $i from your system? [y/n]: " yn case $yn in - [Yy]* ) echo "::: Removing $i..."; $SUDO apt-get -y remove --purge "$i" > /dev/null & spinner $!; echo "DONE!"; break;; - [Nn]* ) echo "::: Skipping $i"; break;; - * ) echo "::: You must answer yes or no!";; + [Yy]* ) printf ":::\tRemoving %s..." "$i"; $SUDO apt-get -y remove --purge "$i" &> /dev/null & spinner $!; printf "DONE!\n"; break;; + [Nn]* ) printf ":::\tSkipping %s" "$i"; break;; + * ) printf "::: You must answer yes or no!";; esac done else - echo "IF FAILED ***" + printf ":::\tPackage %s not installed... Not removing.\n" "$i" fi done @@ -64,10 +65,10 @@ echo ":::" $SUDO rm /etc/dnsmasq.conf /etc/dnsmasq.conf.orig /etc/dnsmasq.d/01-pihole.conf &> /dev/null # Take care of any additional package cleaning - echo "::: Auto removing remaining dependencies" - $SUDO apt-get -y autoremove &> /dev/null & spinner $!; echo "DONE!"; - echo "::: Auto cleaning remaining dependencies" - $SUDO apt-get -y autoclean &> /dev/null & spinner $!; echo "DONE!"; + printf "::: Auto removing remaining dependencies" + $SUDO apt-get -y autoremove &> /dev/null & spinner $!; printf "DONE!\n"; + printf "::: Auto cleaning remaining dependencies" + $SUDO apt-get -y autoclean &> /dev/null & spinner $!; printf "DONE!\n"; # Call removeNoPurge to remove PiHole specific files removeNoPurge @@ -113,21 +114,24 @@ function removeNoPurge { $SUDO rm /usr/local/bin/whitelist.sh &> /dev/null $SUDO rm /usr/local/bin/piholeLogFlush.sh &> /dev/null $SUDO rm /usr/local/bin/piholeDebug.sh &> /dev/null + $SUDO rm /etc/dnsmasq.d/adList.conf &> /dev/null $SUDO rm -rf /var/log/*pihole* &> /dev/null $SUDO rm -rf /etc/pihole/ &> /dev/null $SUDO rm -rf /etc/.pihole/ &> /dev/null + $SUDO rm -rf /opt/pihole/ &> /dev/null echo ":::" printf "::: Finished removing PiHole from your system. Sorry to see you go!\n" printf "::: Reach out to us at https://github.com/pi-hole/pi-hole/issues if you need help\n" printf "::: Reinstall by simpling running\n:::\n:::\tcurl -L install.pi-hole.net | bash\n:::\n::: at any time!\n:::\n" + printf "::: PLEASE RESET YOUR DNS ON YOUR ROUTER/CLIENTS TO RESTORE INTERNET CONNECTIVITY!/n" } ######### SCRIPT ########### echo "::: Preparing to remove packages, be sure that each may be safely removed depending on your operating system." echo "::: (SAFE TO REMOVE ALL ON RASPBIAN)" while true; do - read -rp "::: Do you wish to purge PiHole's dependencies from your OS? (You will be prompted for each package)" yn + read -rp "::: Do you wish to purge PiHole's dependencies from your OS? (You will be prompted for each package) [y/n]" yn case $yn in [Yy]* ) removeAndPurge; break;; From f444c7d4a577ad3641458c1a024aab5251b82d28 Mon Sep 17 00:00:00 2001 From: nate Date: Mon, 28 Mar 2016 12:21:49 -0500 Subject: [PATCH 43/96] Merge resolution --- automated install/basic-install.sh | 53 ------------------------------ 1 file changed, 53 deletions(-) diff --git a/automated install/basic-install.sh b/automated install/basic-install.sh index 2d08f17d..870de00c 100755 --- a/automated install/basic-install.sh +++ b/automated install/basic-install.sh @@ -63,13 +63,6 @@ else fi fi -### Nate 3/26/2016 - Why are we declaring upgrade here? It isn't global (nor is it used anywhere else) -# if [ -d "/etc/pihole" ]; then - # # Likely an existing install - # upgrade=true - # else - # upgrade=false -# fi ####### FUNCTIONS ########## spinner() @@ -124,17 +117,10 @@ welcomeDialogs() { verifyFreeDiskSpace() { # 25MB is the minimum space needed (20MB install + 5MB one day of logs.) requiredFreeBytes=51200 -<<<<<<< HEAD - - existingFreeBytes=`df -lk / 2>&1 | awk '{print $4}' | head -2 | tail -1` - if ! [[ "$existingFreeBytes" =~ ^([0-9])+$ ]]; then - existingFreeBytes=`df -lk /dev 2>&1 | awk '{print $4}' | head -2 | tail -1` -======= existingFreeBytes=$(df -lk / 2>&1 | awk '{print $4}' | head -2 | tail -1) if ! [[ "$existingFreeBytes" =~ ^([0-9])+$ ]]; then existingFreeBytes=$(df -lk /dev 2>&1 | awk '{print $4}' | head -2 | tail -1) ->>>>>>> ScriptCleanup fi if [[ $existingFreeBytes -lt $requiredFreeBytes ]]; then @@ -389,16 +375,6 @@ setDNS(){ piholeDNS=$(whiptail --backtitle "Specify Upstream DNS Provider(s)" --inputbox "Enter your desired upstream DNS provider(s), seperated by a comma.\n\nFor example '8.8.8.8, 8.8.4.4'" $r $c "$prePopulate" 3>&1 1>&2 2>&3) if [[ $? = 0 ]];then -<<<<<<< HEAD - piholeDNS1=$(echo $piholeDNS | sed 's/[, \t]\+/,/g' | awk -F, '{print$1}') - piholeDNS2=$(echo $piholeDNS | sed 's/[, \t]\+/,/g' | awk -F, '{print$2}') - - if ! valid_ip $piholeDNS1 || [ ! $piholeDNS1 ]; then - piholeDNS1=$strInvalid - fi - - if ! valid_ip $piholeDNS2 && [ $piholeDNS2 ]; then -======= piholeDNS1=$(echo "$piholeDNS" | sed 's/[, \t]\+/,/g' | awk -F, '{print$1}') piholeDNS2=$(echo "$piholeDNS" | sed 's/[, \t]\+/,/g' | awk -F, '{print$2}') @@ -407,7 +383,6 @@ setDNS(){ fi if ! valid_ip "$piholeDNS2" && [ "$piholeDNS2" ]; then ->>>>>>> ScriptCleanup piholeDNS2=$strInvalid fi @@ -415,17 +390,6 @@ setDNS(){ echo "::: Cancel selected, exiting...." exit 1 fi -<<<<<<< HEAD - - if [[ $piholeDNS1 == $strInvalid ]] || [[ $piholeDNS2 == $strInvalid ]]; then - whiptail --msgbox --backtitle "Invalid IP" --title "Invalid IP" "One or both entered IP addresses were invalid. Please try again.\n\n DNS Server 1: $piholeDNS1\n DNS Server 2: $piholeDNS2" $r $c - - if [[ $piholeDNS1 == $strInvalid ]]; then - piholeDNS1="" - fi - - if [[ $piholeDNS2 == $strInvalid ]]; then -======= if [[ $piholeDNS1 == "$strInvalid" ]] || [[ $piholeDNS2 == "$strInvalid" ]]; then whiptail --msgbox --backtitle "Invalid IP" --title "Invalid IP" "One or both entered IP addresses were invalid. Please try again.\n\n DNS Server 1: $piholeDNS1\n DNS Server 2: $piholeDNS2" $r $c @@ -435,7 +399,6 @@ setDNS(){ fi if [[ $piholeDNS2 == "$strInvalid" ]]; then ->>>>>>> ScriptCleanup piholeDNS2="" fi @@ -709,19 +672,6 @@ setUser(){ fi } -setPassword() { - # Password needed to authorize changes to lists from admin page - pass=$(whiptail --passwordbox "Please enter a password to secure your Pi-hole web interface." 10 50 3>&1 1>&2 2>&3) - - if [ $? = 0 ]; then - # Entered password - echo $pass > /etc/pihole/password.txt - else - echo "::: Cancel selected, exiting...." - exit 1 - fi -} - installPihole() { # Install base files and web interface checkForDependencies # done @@ -775,9 +725,6 @@ use4andor6 # Decide what upstream DNS Servers to use setDNS -# Set the admin page password -setPassword - # Install and log everything to a file installPihole | tee $tmpLog From a4fbccac9b011f19a627df62a1eba669b4e53c3b Mon Sep 17 00:00:00 2001 From: nate Date: Mon, 28 Mar 2016 12:53:21 -0500 Subject: [PATCH 44/96] Merge conflict resolution --- advanced/Scripts/blacklist.sh | 58 +++++++---------------------------- advanced/Scripts/whitelist.sh | 10 ------ 2 files changed, 11 insertions(+), 57 deletions(-) diff --git a/advanced/Scripts/blacklist.sh b/advanced/Scripts/blacklist.sh index 3fd50e83..23313d54 100644 --- a/advanced/Scripts/blacklist.sh +++ b/advanced/Scripts/blacklist.sh @@ -51,19 +51,11 @@ fi function HandleOther(){ #check validity of domain -<<<<<<< HEAD - validDomain=$(echo $1 | perl -ne'print if /\b((?=[a-z0-9-]{1,63}\.)(xn--)?[a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,63}\b/') - - if [ -z "$validDomain" ]; then - echo $1 is not a valid argument or domain name - else -======= validDomain=$(echo "$1" | perl -ne'print if /\b((?=[a-z0-9-]{1,63}\.)(xn--)?[a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,63}\b/') if [ -z "$validDomain" ]; then echo "$1" is not a valid argument or domain name else ->>>>>>> ScriptCleanup domList=("${domList[@]}" $validDomain) fi } @@ -73,16 +65,9 @@ function PopBlacklistFile(){ if [[ ! -f $blacklist ]];then touch $blacklist fi - for dom in "${domList[@]}" -<<<<<<< HEAD - do - if $addmode; then - AddDomain $dom -======= - do + for dom in "${domList[@]}"; do if "$addmode"; then AddDomain "$dom" ->>>>>>> ScriptCleanup else RemoveDomain "$dom" fi @@ -134,43 +119,27 @@ function ModifyHostFile(){ numberOf=$($blacklist | sed '/^\s*$/d' | wc -l) plural=; [[ "$numberOf" != "1" ]] && plural=s echo ":::" -<<<<<<< HEAD - echo -n "::: Modifying HOSTS file to blacklist $numberOf domain${plural}..." - if [[ -n $piholeIPv6 ]];then - cat $blacklist | awk -v ipv4addr="$piholeIP" -v ipv6addr="$piholeIPv6" '{sub(/\r$/,""); print ipv4addr" "$0"\n"ipv6addr" "$0}' >> $adList - else - cat $blacklist | awk -v ipv4addr="$piholeIP" '{sub(/\r$/,""); print ipv4addr" "$0}' >>$adList - fi - -======= echo -n "::: Modifying HOSTS file to blacklist $numberOf domain${plural}..." if [[ -n $piholeIPv6 ]];then $blacklist | awk -v ipv4addr="$piholeIP" -v ipv6addr="$piholeIPv6" '{sub(/\r$/,""); print ipv4addr" "$0"\n"ipv6addr" "$0}' >> $adList - else + else $blacklist | awk -v ipv4addr="$piholeIP" '{sub(/\r$/,""); print ipv4addr" "$0}' >>$adList - fi - ->>>>>>> ScriptCleanup + fi fi else - echo ":::" for dom in "${domToRemoveList[@]}" do #we need to remove the domains from the blacklist file and the host file - echo "::: $dom" - echo -n "::: removing from HOSTS file..." -<<<<<<< HEAD - echo $dom | sed 's/\./\\./g' | xargs -I {} perl -i -ne'print unless /[^.]'{}'(?!.)/;' $adList -======= - echo "$dom" | sed 's/\./\\./g' | xargs -I {} perl -i -ne'print unless /[^.]'{}'(?!.)/;' $adList ->>>>>>> ScriptCleanup - echo " done!" - echo -n "::: removing from blackist.txt..." - echo "$dom" | sed 's/\./\\./g' | xargs -I {} perl -i -ne'print unless /'{}'(?!.)/;' $blacklist - echo " done!" + echo "::: $dom" + echo -n "::: removing from HOSTS file..." + echo "$dom" | sed 's/\./\\./g' | xargs -I {} perl -i -ne'print unless /[^.]'{}'(?!.)/;' $adList + echo " done!" + echo -n "::: removing from blackist.txt..." + echo "$dom" | sed 's/\./\\./g' | xargs -I {} perl -i -ne'print unless /'{}'(?!.)/;' $blacklist + echo " done!" done - fi + fi } @@ -199,13 +168,8 @@ do "-nr"| "--noreload" ) reload=false;; "-d" | "--delmode" ) addmode=false;; "-f" | "--force" ) force=true;; -<<<<<<< HEAD - "-q" | "--quiet" ) versbose=false;; - * ) HandleOther $var;; -======= "-q" | "--quiet" ) versbose=false;; * ) HandleOther "$var";; ->>>>>>> ScriptCleanup esac done diff --git a/advanced/Scripts/whitelist.sh b/advanced/Scripts/whitelist.sh index a241505b..199c1bbe 100755 --- a/advanced/Scripts/whitelist.sh +++ b/advanced/Scripts/whitelist.sh @@ -51,13 +51,8 @@ fi function HandleOther(){ #check validity of domain -<<<<<<< HEAD - validDomain=$(echo $1 | perl -ne'print if /\b((?=[a-z0-9-]{1,63}\.)(xn--)?[a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,63}\b/') - -======= validDomain=$(echo "$1" | perl -ne'print if /\b((?=[a-z0-9-]{1,63}\.)(xn--)?[a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,63}\b/') ->>>>>>> ScriptCleanup if [ -z "$validDomain" ]; then echo "::: $1 is not a valid argument or domain name" else @@ -186,13 +181,8 @@ do "-nr"| "--noreload" ) reload=false;; "-d" | "--delmode" ) addmode=false;; "-f" | "--force" ) force=true;; -<<<<<<< HEAD - "-q" | "--quiet" ) versbose=false;; - * ) HandleOther $var;; -======= "-q" | "--quiet" ) versbose=false;; * ) HandleOther "$var";; ->>>>>>> ScriptCleanup esac done From eaf89995ee9e4f76ea981bee41e45cece815170f Mon Sep 17 00:00:00 2001 From: nate Date: Mon, 28 Mar 2016 12:59:45 -0500 Subject: [PATCH 45/96] Merge conflict resolution --- automated install/basic-install.sh | 46 ------------------------------ 1 file changed, 46 deletions(-) diff --git a/automated install/basic-install.sh b/automated install/basic-install.sh index f5586508..870de00c 100755 --- a/automated install/basic-install.sh +++ b/automated install/basic-install.sh @@ -117,17 +117,10 @@ welcomeDialogs() { verifyFreeDiskSpace() { # 25MB is the minimum space needed (20MB install + 5MB one day of logs.) requiredFreeBytes=51200 -<<<<<<< HEAD - - existingFreeBytes=`df -lk / 2>&1 | awk '{print $4}' | head -2 | tail -1` - if ! [[ "$existingFreeBytes" =~ ^([0-9])+$ ]]; then - existingFreeBytes=`df -lk /dev 2>&1 | awk '{print $4}' | head -2 | tail -1` -======= existingFreeBytes=$(df -lk / 2>&1 | awk '{print $4}' | head -2 | tail -1) if ! [[ "$existingFreeBytes" =~ ^([0-9])+$ ]]; then existingFreeBytes=$(df -lk /dev 2>&1 | awk '{print $4}' | head -2 | tail -1) ->>>>>>> ScriptCleanup-Dev fi if [[ $existingFreeBytes -lt $requiredFreeBytes ]]; then @@ -382,16 +375,6 @@ setDNS(){ piholeDNS=$(whiptail --backtitle "Specify Upstream DNS Provider(s)" --inputbox "Enter your desired upstream DNS provider(s), seperated by a comma.\n\nFor example '8.8.8.8, 8.8.4.4'" $r $c "$prePopulate" 3>&1 1>&2 2>&3) if [[ $? = 0 ]];then -<<<<<<< HEAD - piholeDNS1=$(echo $piholeDNS | sed 's/[, \t]\+/,/g' | awk -F, '{print$1}') - piholeDNS2=$(echo $piholeDNS | sed 's/[, \t]\+/,/g' | awk -F, '{print$2}') - - if ! valid_ip $piholeDNS1 || [ ! $piholeDNS1 ]; then - piholeDNS1=$strInvalid - fi - - if ! valid_ip $piholeDNS2 && [ $piholeDNS2 ]; then -======= piholeDNS1=$(echo "$piholeDNS" | sed 's/[, \t]\+/,/g' | awk -F, '{print$1}') piholeDNS2=$(echo "$piholeDNS" | sed 's/[, \t]\+/,/g' | awk -F, '{print$2}') @@ -400,7 +383,6 @@ setDNS(){ fi if ! valid_ip "$piholeDNS2" && [ "$piholeDNS2" ]; then ->>>>>>> ScriptCleanup-Dev piholeDNS2=$strInvalid fi @@ -408,17 +390,6 @@ setDNS(){ echo "::: Cancel selected, exiting...." exit 1 fi -<<<<<<< HEAD - - if [[ $piholeDNS1 == $strInvalid ]] || [[ $piholeDNS2 == $strInvalid ]]; then - whiptail --msgbox --backtitle "Invalid IP" --title "Invalid IP" "One or both entered IP addresses were invalid. Please try again.\n\n DNS Server 1: $piholeDNS1\n DNS Server 2: $piholeDNS2" $r $c - - if [[ $piholeDNS1 == $strInvalid ]]; then - piholeDNS1="" - fi - - if [[ $piholeDNS2 == $strInvalid ]]; then -======= if [[ $piholeDNS1 == "$strInvalid" ]] || [[ $piholeDNS2 == "$strInvalid" ]]; then whiptail --msgbox --backtitle "Invalid IP" --title "Invalid IP" "One or both entered IP addresses were invalid. Please try again.\n\n DNS Server 1: $piholeDNS1\n DNS Server 2: $piholeDNS2" $r $c @@ -428,7 +399,6 @@ setDNS(){ fi if [[ $piholeDNS2 == "$strInvalid" ]]; then ->>>>>>> ScriptCleanup-Dev piholeDNS2="" fi @@ -702,19 +672,6 @@ setUser(){ fi } -setPassword() { - # Password needed to authorize changes to lists from admin page - pass=$(whiptail --passwordbox "Please enter a password to secure your Pi-hole web interface." 10 50 3>&1 1>&2 2>&3) - - if [ $? = 0 ]; then - # Entered password - echo $pass > /etc/pihole/password.txt - else - echo "::: Cancel selected, exiting...." - exit 1 - fi -} - installPihole() { # Install base files and web interface checkForDependencies # done @@ -768,9 +725,6 @@ use4andor6 # Decide what upstream DNS Servers to use setDNS -# Set the admin page password -setPassword - # Install and log everything to a file installPihole | tee $tmpLog From f2150ee7e102ae55daef3607a7f8388e304ac526 Mon Sep 17 00:00:00 2001 From: nate Date: Mon, 28 Mar 2016 13:07:51 -0500 Subject: [PATCH 46/96] Merge conflict resolution --- README.md | 12 +-------- advanced/Scripts/blacklist.sh | 49 +---------------------------------- advanced/Scripts/whitelist.sh | 11 -------- gravity.sh | 28 -------------------- 4 files changed, 2 insertions(+), 98 deletions(-) diff --git a/README.md b/README.md index 99fb7547..c58d6820 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,5 @@ -<<<<<<< HEAD -# Automated Install -##### Designed For Raspberry Pi A+, B, B+, 2, Zero (with an Ethernet adapter), and also works on most Debian based distros! -======= # Automated Install -<<<<<<< HEAD -##### Designed For Raspberry Pi A+, B, B+, 2, Zero, and 3B (with an Ethernet/Wi-Fi adapter) ->>>>>>> PiholeDebug -======= -##### Designed For Raspberry Pi A+, B, B+, 2, and Zero (with an Ethernet/Wi-Fi adapter) ->>>>>>> ScriptCleanup ->>>>>>> ScriptCleanup-Dev +##### Designed For Raspberry Pi A+, B, B+, 2, Zero, and 3B (with an Ethernet/Wi-Fi adapter) (Works on most Debian distributions!) 1. Install Raspbian on Raspberry Pi variants or a Debian based distribution on other hardware or virtual machines 2. Run the command below diff --git a/advanced/Scripts/blacklist.sh b/advanced/Scripts/blacklist.sh index c8a1cfd9..1780b8ec 100755 --- a/advanced/Scripts/blacklist.sh +++ b/advanced/Scripts/blacklist.sh @@ -51,19 +51,10 @@ fi function HandleOther(){ #check validity of domain -<<<<<<< HEAD - validDomain=$(echo $1 | perl -ne'print if /\b((?=[a-z0-9-]{1,63}\.)(xn--)?[a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,63}\b/') - - if [ -z "$validDomain" ]; then - echo $1 is not a valid argument or domain name - else -======= validDomain=$(echo "$1" | perl -ne'print if /\b((?=[a-z0-9-]{1,63}\.)(xn--)?[a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,63}\b/') - if [ -z "$validDomain" ]; then echo "$1" is not a valid argument or domain name else ->>>>>>> ScriptCleanup-Dev domList=("${domList[@]}" $validDomain) fi } @@ -73,16 +64,9 @@ function PopBlacklistFile(){ if [[ ! -f $blacklist ]];then touch $blacklist fi -<<<<<<< HEAD - for dom in "${domList[@]}" - do - if $addmode; then - AddDomain $dom -======= for dom in "${domList[@]}"; do if "$addmode"; then AddDomain "$dom" ->>>>>>> ScriptCleanup-Dev else RemoveDomain "$dom" fi @@ -134,18 +118,6 @@ function ModifyHostFile(){ numberOf=$($blacklist | sed '/^\s*$/d' | wc -l) plural=; [[ "$numberOf" != "1" ]] && plural=s echo ":::" -<<<<<<< HEAD - echo -n "::: Modifying HOSTS file to blacklist $numberOf domain${plural}..." - if [[ -n $piholeIPv6 ]];then - cat $blacklist | awk -v ipv4addr="$piholeIP" -v ipv6addr="$piholeIPv6" '{sub(/\r$/,""); print ipv4addr" "$0"\n"ipv6addr" "$0}' >> $adList - else - cat $blacklist | awk -v ipv4addr="$piholeIP" '{sub(/\r$/,""); print ipv4addr" "$0}' >>$adList - fi - - fi - else - -======= echo -n "::: Modifying HOSTS file to blacklist $numberOf domain${plural}..." if [[ -n $piholeIPv6 ]];then $blacklist | awk -v ipv4addr="$piholeIP" -v ipv6addr="$piholeIPv6" '{sub(/\r$/,""); print ipv4addr" "$0"\n"ipv6addr" "$0}' >> $adList @@ -154,22 +126,10 @@ function ModifyHostFile(){ fi fi else ->>>>>>> ScriptCleanup-Dev echo ":::" - for dom in "${domToRemoveList[@]}" + for dom in "${domToRemoveList[@]}" do #we need to remove the domains from the blacklist file and the host file -<<<<<<< HEAD - echo "::: $dom" - echo -n "::: removing from HOSTS file..." - echo $dom | sed 's/\./\\./g' | xargs -I {} perl -i -ne'print unless /[^.]'{}'(?!.)/;' $adList - echo " done!" - echo -n "::: removing from blackist.txt..." - echo $dom | sed 's/\./\\./g' | xargs -I {} perl -i -ne'print unless /'{}'(?!.)/;' $blacklist - echo " done!" - done - fi -======= echo "::: $dom" echo -n "::: removing from HOSTS file..." echo "$dom" | sed 's/\./\\./g' | xargs -I {} perl -i -ne'print unless /[^.]'{}'(?!.)/;' $adList @@ -179,8 +139,6 @@ function ModifyHostFile(){ echo " done!" done fi ->>>>>>> ScriptCleanup-Dev - } function Reload() { @@ -208,13 +166,8 @@ do "-nr"| "--noreload" ) reload=false;; "-d" | "--delmode" ) addmode=false;; "-f" | "--force" ) force=true;; -<<<<<<< HEAD - "-q" | "--quiet" ) versbose=false;; - * ) HandleOther $var;; -======= "-q" | "--quiet" ) versbose=false;; * ) HandleOther "$var";; ->>>>>>> ScriptCleanup-Dev esac done diff --git a/advanced/Scripts/whitelist.sh b/advanced/Scripts/whitelist.sh index 3a30d11a..5d732ddc 100755 --- a/advanced/Scripts/whitelist.sh +++ b/advanced/Scripts/whitelist.sh @@ -51,13 +51,7 @@ fi function HandleOther(){ #check validity of domain -<<<<<<< HEAD - validDomain=$(echo $1 | perl -ne'print if /\b((?=[a-z0-9-]{1,63}\.)(xn--)?[a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,63}\b/') - -======= validDomain=$(echo "$1" | perl -ne'print if /\b((?=[a-z0-9-]{1,63}\.)(xn--)?[a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,63}\b/') - ->>>>>>> ScriptCleanup-Dev if [ -z "$validDomain" ]; then echo "::: $1 is not a valid argument or domain name" else @@ -186,13 +180,8 @@ do "-nr"| "--noreload" ) reload=false;; "-d" | "--delmode" ) addmode=false;; "-f" | "--force" ) force=true;; -<<<<<<< HEAD - "-q" | "--quiet" ) versbose=false;; - * ) HandleOther $var;; -======= "-q" | "--quiet" ) versbose=false;; * ) HandleOther "$var";; ->>>>>>> ScriptCleanup-Dev esac done diff --git a/gravity.sh b/gravity.sh index a8ac7029..531ae4c1 100755 --- a/gravity.sh +++ b/gravity.sh @@ -169,22 +169,12 @@ function gravity_transport() { fi # Silently curl url -<<<<<<< HEAD curl -s $cmd_ext $heisenbergCompensator -A "$agent" $url > $patternBuffer # Check for list updates gravity_patternCheck $patternBuffer -======= -<<<<<<< HEAD - curl -s $cmd_ext $heisenbergCompensator -A "$agent" $url > $patternBuffer - # Check for list updates - gravity_patternCheck $patternBuffer -======= curl -s "$cmd_ext" "$heisenbergCompensator" -A "$agent" "$url" > "$patternBuffer" # Check for list updates gravity_patternCheck "$patternBuffer" ->>>>>>> ScriptCleanup ->>>>>>> ScriptCleanup-Dev - # Cleanup rm -f "$patternBuffer" } @@ -269,16 +259,7 @@ function gravity_Whitelist() { echo " done!" echo -n "::: Running whitelist script to update HOSTS file...." -<<<<<<< HEAD - $whitelistScript -f -nr -q ${urls[@]} > /dev/null & spinner $! - -<<<<<<< HEAD -======= -======= $whitelistScript -f -nr -q "${urls[@]}" > /dev/null & spinner $! - ->>>>>>> ScriptCleanup ->>>>>>> ScriptCleanup-Dev numWhitelisted=$(wc -l < "/etc/pihole/whitelist.txt") plural=; [[ "$numWhitelisted" != "1" ]] && plural=s echo " $numWhitelisted domain${plural} whitelisted!" @@ -303,16 +284,7 @@ function gravity_hostFormat() { if [[ -n $piholeIPv6 ]];then #Add dummy domain Pi-Hole.IsWorking.OK to the top of gravity.list to make ping result return a friendlier looking domain! echo -e "$piholeIP Pi-Hole.IsWorking.OK \n$piholeIPv6 Pi-Hole.IsWorking.OK" > $piholeDir/$accretionDisc -<<<<<<< HEAD - cat $piholeDir/$eventHorizon | awk -v ipv4addr="$piholeIP" -v ipv6addr="$piholeIPv6" '{sub(/\r$/,""); print ipv4addr" "$0"\n"ipv6addr" "$0}' >> $piholeDir/$accretionDisc - -<<<<<<< HEAD -======= -======= $piholeDir/$eventHorizon | awk -v ipv4addr="$piholeIP" -v ipv6addr="$piholeIPv6" '{sub(/\r$/,""); print ipv4addr" "$0"\n"ipv6addr" "$0}' >> $piholeDir/$accretionDisc - ->>>>>>> ScriptCleanup ->>>>>>> ScriptCleanup-Dev else # Otherwise, just create gravity.list as normal using IPv4 #Add dummy domain Pi-Hole.IsWorking.OK to the top of gravity.list to make ping result return a friendlier looking domain! From bed869b08ef467984cb869cbf01c4f4724453de1 Mon Sep 17 00:00:00 2001 From: nate Date: Mon, 28 Mar 2016 16:02:36 -0500 Subject: [PATCH 47/96] .DS_Store banished! --- .gitignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..e43b0f98 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.DS_Store From 80f4bf94759643e3add582982d412f9bb080e777 Mon Sep 17 00:00:00 2001 From: nate Date: Mon, 28 Mar 2016 16:20:23 -0500 Subject: [PATCH 48/96] Bug fixes Fixed DONE! to done! Fixed symlinking user scripts Fixed /n to \n --- .gitignore | 1 + automated install/basic-install.sh | 7 ++++--- automated install/uninstall.sh | 14 +++++++------- 3 files changed, 12 insertions(+), 10 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..e43b0f98 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.DS_Store diff --git a/automated install/basic-install.sh b/automated install/basic-install.sh index 870de00c..dd5aa3a1 100755 --- a/automated install/basic-install.sh +++ b/automated install/basic-install.sh @@ -472,18 +472,19 @@ installScripts() { if [ ! -d /opt/pihole ]; then $SUDO mkdir /opt/pihole $SUDO chown "$USER":root /opt/pihole - $SUDO chmod 1766 /opt/pihole + $SUDO chmod u+srwx /opt/pihole fi $SUDO cp /etc/.pihole/gravity.sh /opt/pihole/gravity.sh $SUDO cp /etc/.pihole/advanced/Scripts/chronometer.sh /opt/pihole/chronometer.sh $SUDO cp /etc/.pihole/advanced/Scripts/whitelist.sh /opt/pihole/whitelist.sh - $SUDO cp /etc/.pihole/advanced/Scripts/blacklist.sh /opt/pihole/bin/blacklist.sh + $SUDO cp /etc/.pihole/advanced/Scripts/blacklist.sh /opt/pihole/blacklist.sh $SUDO cp /etc/.pihole/advanced/Scripts/piholeLogFlush.sh /opt/pihole/piholeLogFlush.sh $SUDO cp /etc/.pihole/advanced/Scripts/updateDashboard.sh /opt/pihole/updateDashboard.sh $SUDO cp /etc/.pihole/automated\ install/uninstall.sh /opt/pihole/uninstall.sh $SUDO chmod 755 /opt/pihole/{gravity,chronometer,whitelist,blacklist,piholeLogFlush,updateDashboard,uninstall}.sh for f in /opt/pihole/*; do - $SUDO ln -s /opt/pihole/"$f" /usr/local/bin/"$f" + filename=${f##*/} + $SUDO ln -s /opt/pihole/"$filename" /usr/local/bin/"$filename" done $SUDO echo " done." } diff --git a/automated install/uninstall.sh b/automated install/uninstall.sh index a08a9900..ef82fa07 100755 --- a/automated install/uninstall.sh +++ b/automated install/uninstall.sh @@ -50,7 +50,7 @@ echo ":::" while true; do read -rp "::: Do you wish to remove $i from your system? [y/n]: " yn case $yn in - [Yy]* ) printf ":::\tRemoving %s..." "$i"; $SUDO apt-get -y remove --purge "$i" &> /dev/null & spinner $!; printf "DONE!\n"; break;; + [Yy]* ) printf ":::\tRemoving %s..." "$i"; $SUDO apt-get -y remove --purge "$i" &> /dev/null & spinner $!; printf "done!\n"; break;; [Nn]* ) printf ":::\tSkipping %s" "$i"; break;; * ) printf "::: You must answer yes or no!";; esac @@ -65,10 +65,10 @@ echo ":::" $SUDO rm /etc/dnsmasq.conf /etc/dnsmasq.conf.orig /etc/dnsmasq.d/01-pihole.conf &> /dev/null # Take care of any additional package cleaning - printf "::: Auto removing remaining dependencies" - $SUDO apt-get -y autoremove &> /dev/null & spinner $!; printf "DONE!\n"; - printf "::: Auto cleaning remaining dependencies" - $SUDO apt-get -y autoclean &> /dev/null & spinner $!; printf "DONE!\n"; + printf "::: Auto removing remaining dependencies..." + $SUDO apt-get -y autoremove &> /dev/null & spinner $!; printf "done!\n"; + printf "::: Auto cleaning remaining dependencies..." + $SUDO apt-get -y autoclean &> /dev/null & spinner $!; printf "done!\n"; # Call removeNoPurge to remove PiHole specific files removeNoPurge @@ -124,14 +124,14 @@ function removeNoPurge { printf "::: Finished removing PiHole from your system. Sorry to see you go!\n" printf "::: Reach out to us at https://github.com/pi-hole/pi-hole/issues if you need help\n" printf "::: Reinstall by simpling running\n:::\n:::\tcurl -L install.pi-hole.net | bash\n:::\n::: at any time!\n:::\n" - printf "::: PLEASE RESET YOUR DNS ON YOUR ROUTER/CLIENTS TO RESTORE INTERNET CONNECTIVITY!/n" + printf "::: PLEASE RESET YOUR DNS ON YOUR ROUTER/CLIENTS TO RESTORE INTERNET CONNECTIVITY!\n" } ######### SCRIPT ########### echo "::: Preparing to remove packages, be sure that each may be safely removed depending on your operating system." echo "::: (SAFE TO REMOVE ALL ON RASPBIAN)" while true; do - read -rp "::: Do you wish to purge PiHole's dependencies from your OS? (You will be prompted for each package) [y/n]" yn + read -rp "::: Do you wish to purge PiHole's dependencies from your OS? (You will be prompted for each package) [y/n]: " yn case $yn in [Yy]* ) removeAndPurge; break;; From 138aeaf8c746714dfb8d5202d8404c0ba64c1649 Mon Sep 17 00:00:00 2001 From: nate Date: Mon, 28 Mar 2016 16:25:12 -0500 Subject: [PATCH 49/96] Added uninstall.sh and updateDashboard.sh to be removed on uninstall from u/l/b --- automated install/uninstall.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/automated install/uninstall.sh b/automated install/uninstall.sh index ef82fa07..941232ca 100755 --- a/automated install/uninstall.sh +++ b/automated install/uninstall.sh @@ -114,6 +114,8 @@ function removeNoPurge { $SUDO rm /usr/local/bin/whitelist.sh &> /dev/null $SUDO rm /usr/local/bin/piholeLogFlush.sh &> /dev/null $SUDO rm /usr/local/bin/piholeDebug.sh &> /dev/null + $SUDO rm /usr/local/bin/updateDashboard.sh &> /dev/null + $SUDO rm /usr/local/bin/uninstall.sh &> /dev/null $SUDO rm /etc/dnsmasq.d/adList.conf &> /dev/null $SUDO rm -rf /var/log/*pihole* &> /dev/null $SUDO rm -rf /etc/pihole/ &> /dev/null From 660e71f0320e61f4d1d3458d01bfbd627412e456 Mon Sep 17 00:00:00 2001 From: nate Date: Mon, 28 Mar 2016 16:32:42 -0500 Subject: [PATCH 50/96] Added blacklist.sh to be removed on uninstall from u/l/b --- automated install/uninstall.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/automated install/uninstall.sh b/automated install/uninstall.sh index 941232ca..cef36dd6 100755 --- a/automated install/uninstall.sh +++ b/automated install/uninstall.sh @@ -112,6 +112,7 @@ function removeNoPurge { $SUDO rm /usr/local/bin/gravity.sh &> /dev/null $SUDO rm /usr/local/bin/chronometer.sh &> /dev/null $SUDO rm /usr/local/bin/whitelist.sh &> /dev/null + $SUDO rm /usr/local/bin/blacklist.sh &> /dev/null $SUDO rm /usr/local/bin/piholeLogFlush.sh &> /dev/null $SUDO rm /usr/local/bin/piholeDebug.sh &> /dev/null $SUDO rm /usr/local/bin/updateDashboard.sh &> /dev/null From 32dd594f06ecb3ca24a7881eeb8e890bcafedf9c Mon Sep 17 00:00:00 2001 From: nate Date: Mon, 28 Mar 2016 17:08:19 -0500 Subject: [PATCH 51/96] Check if lighttpd has been uninstalled before removing conf files If is still installed, then restore the original lighttpd.conf file. --- automated install/uninstall.sh | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/automated install/uninstall.sh b/automated install/uninstall.sh index cef36dd6..786e8cea 100755 --- a/automated install/uninstall.sh +++ b/automated install/uninstall.sh @@ -107,8 +107,13 @@ function removeNoPurge { fi echo "::: Removing config files and scripts..." - $SUDO rm -rf /etc/lighttpd/ &> /dev/null - $SUDO rm /var/log/pihole.log &> /dev/null + if [ ! "$(dpkg-query -W --showformat='${Status}\n' lighttpd 2> /dev/null | grep -c "ok installed")" -eq 1 ]; then + $SUDO rm -rf /etc/lighttpd/ &> /dev/null + else + if [ -f /etc/lighttpd/lighttpd.conf.orig ]; then + $SUDO mv /etc/lighttpd/lighttpd.conf.orig /etc/lighttpd/lighttpd.conf + fi + fi $SUDO rm /usr/local/bin/gravity.sh &> /dev/null $SUDO rm /usr/local/bin/chronometer.sh &> /dev/null $SUDO rm /usr/local/bin/whitelist.sh &> /dev/null From 76ea1962bed05baeee618e6bfe911d12775f6144 Mon Sep 17 00:00:00 2001 From: nate Date: Mon, 28 Mar 2016 18:31:21 -0500 Subject: [PATCH 52/96] Controller script, pihole.sh added Syntax changes for user output to be consistent --- advanced/Scripts/blacklist.sh | 20 +++---- advanced/Scripts/chronometer.sh | 16 +++--- advanced/Scripts/whitelist.sh | 18 +++--- pihole.sh | 98 +++++++++++++++++++++++++++++++++ 4 files changed, 125 insertions(+), 27 deletions(-) create mode 100644 pihole.sh diff --git a/advanced/Scripts/blacklist.sh b/advanced/Scripts/blacklist.sh index 1780b8ec..158de7e2 100755 --- a/advanced/Scripts/blacklist.sh +++ b/advanced/Scripts/blacklist.sh @@ -11,15 +11,15 @@ # (at your option) any later version. if [[ $# = 0 ]]; then - echo "Immediately blacklists one or more domains in the hosts file" - echo " " - echo "Usage: blacklist.sh domain1 [domain2 ...]" - echo " " - echo "Options:" - echo " -d, --delmode Remove domains from the blacklist" - echo " -nr, --noreload Update blacklist without refreshing dnsmasq" - echo " -f, --force Force updating of the hosts files, even if there are no changes" - echo " -q, --quiet output is less verbose" + echo "::: Immediately blacklists one or more domains in the hosts file" + echo ":::" + echo "::: Usage: pihole.sh -b domain1 [domain2 ...]" + echo ":::" + echo "::: Options:" + echo "::: -d, --delmode Remove domains from the blacklist" + echo "::: -nr, --noreload Update blacklist without refreshing dnsmasq" + echo "::: -f, --force Force updating of the hosts files, even if there are no changes" + echo "::: -q, --quiet output is less verbose" exit 1 fi @@ -53,7 +53,7 @@ function HandleOther(){ #check validity of domain validDomain=$(echo "$1" | perl -ne'print if /\b((?=[a-z0-9-]{1,63}\.)(xn--)?[a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,63}\b/') if [ -z "$validDomain" ]; then - echo "$1" is not a valid argument or domain name + echo "::: $1 is not a valid argument or domain name" else domList=("${domList[@]}" $validDomain) fi diff --git a/advanced/Scripts/chronometer.sh b/advanced/Scripts/chronometer.sh index 64b87025..326ec2b0 100755 --- a/advanced/Scripts/chronometer.sh +++ b/advanced/Scripts/chronometer.sh @@ -118,14 +118,14 @@ function normalChrono(){ } function displayHelp(){ - echo "Displays stats about your piHole!" - echo " " - echo "Usage: chronometer.sh [optional:-j]" - echo "Note: If no option is passed, then stats are displayed on screen, updated every 5 seconds" - echo " " - echo "Options:" - echo " -j, --json output stats as JSON formatted string" - echo " -h, --help display this help text" + echo "::: Displays stats about your piHole!" + echo ":::" + echo "::: Usage: pihole.sh -c [optional:-j]" + echo "::: Note: If no option is passed, then stats are displayed on screen, updated every 5 seconds" + echo ":::" + echo "::: Options:" + echo "::: -j, --json output stats as JSON formatted string" + echo "::: -h, --help display this help text" exit 1 } diff --git a/advanced/Scripts/whitelist.sh b/advanced/Scripts/whitelist.sh index 5d732ddc..fa2379c6 100755 --- a/advanced/Scripts/whitelist.sh +++ b/advanced/Scripts/whitelist.sh @@ -11,15 +11,15 @@ # (at your option) any later version. if [[ $# = 0 ]]; then - echo "Immediately whitelists one or more domains in the hosts file" - echo " " - echo "Usage: whitelist.sh domain1 [domain2 ...]" - echo " " - echo "Options:" - echo " -d, --delmode Remove domains from the whitelist" - echo " -nr, --noreload Update Whitelist without refreshing dnsmasq" - echo " -f, --force Force updating of the hosts files, even if there are no changes" - echo " -q, --quiet output is less verbose" + echo "::: Immediately whitelists one or more domains in the hosts file" + echo ":::" + echo "::: Usage: pihole -w domain1 [domain2 ...]" + echo ":::" + echo "::: Options:" + echo "::: -d, --delmode Remove domains from the whitelist" + echo "::: -nr, --noreload Update Whitelist without refreshing dnsmasq" + echo "::: -f, --force Force updating of the hosts files, even if there are no changes" + echo "::: -q, --quiet output is less verbose" exit 1 fi diff --git a/pihole.sh b/pihole.sh new file mode 100644 index 00000000..3a2ce22c --- /dev/null +++ b/pihole.sh @@ -0,0 +1,98 @@ +#!/bin/bash +# Pi-hole: A black hole for Internet advertisements +# (c) 2015, 2016 by Jacob Salmela +# Network-wide ad blocking via your Raspberry Pi +# http://pi-hole.net +# Controller for all pihole scripts and functions. +# +# 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 +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. + +# Must be root to use this tool +if [[ $EUID -eq 0 ]];then + echo "::: You are root." +else + echo "::: Sudo will be used for this tool." + # Check if it is actually installed + # If it isn't, exit because the unnstall cannot complete + if [[ $(dpkg-query -s sudo) ]];then + export SUDO="sudo" + else + echo "::: Please install sudo or run this as root." + exit 1 + fi +fi + +function whitelistFunc { + shift + $SUDO /opt/pihole/whitelist.sh "$@" + exit 1 +} + +function blacklistFunc { + shift + $SUDO /opt/pihole/blacklist.sh "$@" + exit 1 +} + +function debugFunc { + $SUDO /opt/pihole/piholeDebug.sh + exit 1 +} + +function flushFunc { + $SUDO /opt/pihole/piholeLogFlush.sh + exit 1 +} + +function updateDashboardFunc { + $SUDO /opt/pihole/updateDashboard.sh + exit 1 +} + +function setupLCDFunction { + $SUDO /opt/pihole/setupLCD.sh + exit 1 +} + +function chronometerFunc { + $SUDO /opt/pihole/chronometer.sh + exit 1 +} + +function helpFunc { + echo "::: Control all PiHole specific functions!" + echo ":::" + echo "::: Usage: pihole.sh [options]" + printf ":::\tAdd -h after -w, -b, or -c for more information on usage\n" + echo ":::" + echo "::: Options:" + printf "::: -w, --whitelist\t\tWhitelist domains\n" + printf "::: -b, --blacklist\t\tBlacklist domains\n" + printf "::: -d, --debug\t\tStart a debugging session if having trouble\n" + printf "::: -f, --flush\t\tFlush the pihole.log file\n" + printf "::: -u, --updateDashboard\t\tUpdate the web dashboard manually\n" + printf "::: -s, --setupLCD\t\tAutomatically configures the Pi to use the 2.8 LCD screen to display stats on it\n" + printf "::: -c, --chronometer\t\tCalculates stats and displays to an LCD\n" + printf "::: -h, --help\t\tShow this help dialog\n" + exit 1 +} + +if [[ $# = 0 ]]; then + helpFunc +fi + +# Handle redirecting to specific functions based on arguments +case "$1" in +"-w" | "--whitelist" ) whitelistFunc "$@";; +"-b" | "--blacklist" ) blacklistFunc "$@";; +"-d" | "--debug" ) debugFunc;; +"-f" | "--flush" ) flushFunc;; +"-u" | "--updateDashboard" ) updateDashboardFunc;; +"-s" | "--setupLCD" ) setupLCDFunction;; +"-c" | "--chronometer" ) chronometerFunc;; +"-h" | "--help" ) helpFunc;; +* ) helpFunc;; +esac From fee55fa6422a840d1f6b7957492e365ba325d287 Mon Sep 17 00:00:00 2001 From: nate Date: Mon, 28 Mar 2016 18:37:49 -0500 Subject: [PATCH 53/96] Added gravity.sh to the list of options --- advanced/Scripts/blacklist.sh | 2 +- advanced/Scripts/chronometer.sh | 2 +- advanced/Scripts/whitelist.sh | 2 +- pihole.sh | 21 +++++++++++++-------- 4 files changed, 16 insertions(+), 11 deletions(-) diff --git a/advanced/Scripts/blacklist.sh b/advanced/Scripts/blacklist.sh index 158de7e2..e370142b 100755 --- a/advanced/Scripts/blacklist.sh +++ b/advanced/Scripts/blacklist.sh @@ -13,7 +13,7 @@ if [[ $# = 0 ]]; then echo "::: Immediately blacklists one or more domains in the hosts file" echo ":::" - echo "::: Usage: pihole.sh -b domain1 [domain2 ...]" + echo "::: Usage: sudo pihole.sh -b domain1 [domain2 ...]" echo ":::" echo "::: Options:" echo "::: -d, --delmode Remove domains from the blacklist" diff --git a/advanced/Scripts/chronometer.sh b/advanced/Scripts/chronometer.sh index 326ec2b0..d1cef601 100755 --- a/advanced/Scripts/chronometer.sh +++ b/advanced/Scripts/chronometer.sh @@ -120,7 +120,7 @@ function normalChrono(){ function displayHelp(){ echo "::: Displays stats about your piHole!" echo ":::" - echo "::: Usage: pihole.sh -c [optional:-j]" + echo "::: Usage: sudo pihole.sh -c [optional:-j]" echo "::: Note: If no option is passed, then stats are displayed on screen, updated every 5 seconds" echo ":::" echo "::: Options:" diff --git a/advanced/Scripts/whitelist.sh b/advanced/Scripts/whitelist.sh index fa2379c6..8aec77af 100755 --- a/advanced/Scripts/whitelist.sh +++ b/advanced/Scripts/whitelist.sh @@ -13,7 +13,7 @@ if [[ $# = 0 ]]; then echo "::: Immediately whitelists one or more domains in the hosts file" echo ":::" - echo "::: Usage: pihole -w domain1 [domain2 ...]" + echo "::: Usage: sudo pihole.sh -w domain1 [domain2 ...]" echo ":::" echo "::: Options:" echo "::: -d, --delmode Remove domains from the whitelist" diff --git a/pihole.sh b/pihole.sh index 3a2ce22c..f730c210 100644 --- a/pihole.sh +++ b/pihole.sh @@ -61,6 +61,10 @@ function chronometerFunc { $SUDO /opt/pihole/chronometer.sh exit 1 } +function gravityFunc { + $SUDO /opt/pihole/gravity.sh + exit 1 +} function helpFunc { echo "::: Control all PiHole specific functions!" @@ -69,14 +73,15 @@ function helpFunc { printf ":::\tAdd -h after -w, -b, or -c for more information on usage\n" echo ":::" echo "::: Options:" - printf "::: -w, --whitelist\t\tWhitelist domains\n" - printf "::: -b, --blacklist\t\tBlacklist domains\n" - printf "::: -d, --debug\t\tStart a debugging session if having trouble\n" - printf "::: -f, --flush\t\tFlush the pihole.log file\n" - printf "::: -u, --updateDashboard\t\tUpdate the web dashboard manually\n" - printf "::: -s, --setupLCD\t\tAutomatically configures the Pi to use the 2.8 LCD screen to display stats on it\n" - printf "::: -c, --chronometer\t\tCalculates stats and displays to an LCD\n" - printf "::: -h, --help\t\tShow this help dialog\n" + echo "::: -w, --whitelist Whitelist domains" + echo "::: -b, --blacklist Blacklist domains" + echo "::: -d, --debug Start a debugging session if having trouble" + echo "::: -f, --flush Flush the pihole.log file" + echo "::: -u, --updateDashboard Update the web dashboard manually" + echo "::: -g, --updateGravity Update the list of ad-serving domains" + echo "::: -s, --setupLCD Automatically configures the Pi to use the 2.8 LCD screen to display stats on it" + echo "::: -c, --chronometer Calculates stats and displays to an LCD" + echo "::: -h, --help Show this help dialog" exit 1 } From 00b65abd09cd3eade45475e4138574554b725221 Mon Sep 17 00:00:00 2001 From: nate Date: Mon, 28 Mar 2016 18:44:54 -0500 Subject: [PATCH 54/96] Minor changes to reflect new tool usage Removed symlink of scripts to u/l/b Added copy for setupLCD to /opt/pihole/ New spinner added to gravity.sh to reflect new spinner in basic-install.sh and uninstall.sh --- automated install/basic-install.sh | 11 ++++------- automated install/uninstall.sh | 8 -------- gravity.sh | 25 +++++++++++++------------ 3 files changed, 17 insertions(+), 27 deletions(-) diff --git a/automated install/basic-install.sh b/automated install/basic-install.sh index dd5aa3a1..3597f757 100755 --- a/automated install/basic-install.sh +++ b/automated install/basic-install.sh @@ -93,8 +93,8 @@ backupLegacyPihole() { if [ ! -d /opt/pihole ]; then $SUDO mkdir /opt/pihole $SUDO chown "$USER":root /opt/pihole - $SUDO chmod 1766 /opt/pihole - fi + $SUDO chmod u+srwx /opt/pihole + fi $SUDO mv /opt/pihole/gravity.sh /etc/pihole/original/gravity.sh."$(date "+%Y-%m-%d")" else : @@ -481,11 +481,8 @@ installScripts() { $SUDO cp /etc/.pihole/advanced/Scripts/piholeLogFlush.sh /opt/pihole/piholeLogFlush.sh $SUDO cp /etc/.pihole/advanced/Scripts/updateDashboard.sh /opt/pihole/updateDashboard.sh $SUDO cp /etc/.pihole/automated\ install/uninstall.sh /opt/pihole/uninstall.sh - $SUDO chmod 755 /opt/pihole/{gravity,chronometer,whitelist,blacklist,piholeLogFlush,updateDashboard,uninstall}.sh - for f in /opt/pihole/*; do - filename=${f##*/} - $SUDO ln -s /opt/pihole/"$filename" /usr/local/bin/"$filename" - done + $SUDO cp /etc/.pihole/advanced/Scripts/setupLCD.sh /opt/pihole/setupLCD.sh + $SUDO chmod 755 /opt/pihole/{gravity,chronometer,whitelist,blacklist,piholeLogFlush,updateDashboard,uninstall,setupLCD}.sh $SUDO echo " done." } diff --git a/automated install/uninstall.sh b/automated install/uninstall.sh index 786e8cea..0ac06521 100755 --- a/automated install/uninstall.sh +++ b/automated install/uninstall.sh @@ -114,14 +114,6 @@ function removeNoPurge { $SUDO mv /etc/lighttpd/lighttpd.conf.orig /etc/lighttpd/lighttpd.conf fi fi - $SUDO rm /usr/local/bin/gravity.sh &> /dev/null - $SUDO rm /usr/local/bin/chronometer.sh &> /dev/null - $SUDO rm /usr/local/bin/whitelist.sh &> /dev/null - $SUDO rm /usr/local/bin/blacklist.sh &> /dev/null - $SUDO rm /usr/local/bin/piholeLogFlush.sh &> /dev/null - $SUDO rm /usr/local/bin/piholeDebug.sh &> /dev/null - $SUDO rm /usr/local/bin/updateDashboard.sh &> /dev/null - $SUDO rm /usr/local/bin/uninstall.sh &> /dev/null $SUDO rm /etc/dnsmasq.d/adList.conf &> /dev/null $SUDO rm -rf /var/log/*pihole* &> /dev/null $SUDO rm -rf /etc/pihole/ &> /dev/null diff --git a/gravity.sh b/gravity.sh index 531ae4c1..c7b60680 100755 --- a/gravity.sh +++ b/gravity.sh @@ -75,18 +75,19 @@ if [[ -r $piholeDir/pihole.conf ]];then fi -spinner(){ - local pid=$1 - - spin='-\|/' - i=0 - while $SUDO kill -0 "$pid" 2>/dev/null - do - i=$(( (i+1) %4 )) - printf "\b%s" "${spin:$i:1}" - sleep .1 - done - printf "\b" +spinner() +{ + local pid=$1 + local delay=0.50 + local spinstr='|/-\' + while [ "$(ps a | awk '{print $1}' | grep "$pid")" ]; do + local temp=${spinstr#?} + printf " [%c] " "$spinstr" + local spinstr=$temp${spinstr%"$temp"} + sleep $delay + printf "\b\b\b\b\b\b" + done + printf " \b\b\b\b" } ########################### From 86dd4dd7849e3d7af7a38fd44e1058814076bc65 Mon Sep 17 00:00:00 2001 From: nate Date: Mon, 28 Mar 2016 18:45:55 -0500 Subject: [PATCH 55/96] New spinner for gravity.sh Spinner in gravity.sh now matches basic-install.sh and uninstall.sh --- gravity.sh | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/gravity.sh b/gravity.sh index 3434ac9c..ed94448b 100755 --- a/gravity.sh +++ b/gravity.sh @@ -75,18 +75,19 @@ if [[ -r $piholeDir/pihole.conf ]];then fi -spinner(){ - local pid=$1 - - spin='-\|/' - i=0 - while $SUDO kill -0 "$pid" 2>/dev/null - do - i=$(( (i+1) %4 )) - printf "\b%s" "${spin:$i:1}" - sleep .1 - done - printf "\b" +spinner() +{ + local pid=$1 + local delay=0.50 + local spinstr='|/-\' + while [ "$(ps a | awk '{print $1}' | grep "$pid")" ]; do + local temp=${spinstr#?} + printf " [%c] " "$spinstr" + local spinstr=$temp${spinstr%"$temp"} + sleep $delay + printf "\b\b\b\b\b\b" + done + printf " \b\b\b\b" } ########################### From 456eee05f23b1e8d6147fc45e72a835bc611e1fd Mon Sep 17 00:00:00 2001 From: nate Date: Mon, 28 Mar 2016 18:55:37 -0500 Subject: [PATCH 56/96] Added pihole.sh to /usr/local/bin Uninstall.sh will handle removing the file --- automated install/basic-install.sh | 1 + automated install/uninstall.sh | 1 + 2 files changed, 2 insertions(+) diff --git a/automated install/basic-install.sh b/automated install/basic-install.sh index 3597f757..f490aabd 100755 --- a/automated install/basic-install.sh +++ b/automated install/basic-install.sh @@ -483,6 +483,7 @@ installScripts() { $SUDO cp /etc/.pihole/automated\ install/uninstall.sh /opt/pihole/uninstall.sh $SUDO cp /etc/.pihole/advanced/Scripts/setupLCD.sh /opt/pihole/setupLCD.sh $SUDO chmod 755 /opt/pihole/{gravity,chronometer,whitelist,blacklist,piholeLogFlush,updateDashboard,uninstall,setupLCD}.sh + $SUDO cp /etc/.pihole/pihole.sh /usr/local/bin/pihole.sh $SUDO echo " done." } diff --git a/automated install/uninstall.sh b/automated install/uninstall.sh index 0ac06521..8c19709f 100755 --- a/automated install/uninstall.sh +++ b/automated install/uninstall.sh @@ -119,6 +119,7 @@ function removeNoPurge { $SUDO rm -rf /etc/pihole/ &> /dev/null $SUDO rm -rf /etc/.pihole/ &> /dev/null $SUDO rm -rf /opt/pihole/ &> /dev/null + $SUDO rm /usr/local/bin/pihole.sh &> /dev/null echo ":::" printf "::: Finished removing PiHole from your system. Sorry to see you go!\n" From 45cb9a2e800118196187c45627083b5a7f1847da Mon Sep 17 00:00:00 2001 From: Mcat12 Date: Mon, 28 Mar 2016 22:51:54 -0400 Subject: [PATCH 57/96] fix template team link --- .github/PULL_REQUEST_TEMPLATE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 071fdf89..b289a1c0 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -8,4 +8,4 @@ Changes proposed in this pull request: - -@pihole/gravity +@pi-hole/gravity From fb5bc16c837027c90c0b5ffbcb844ea93746f61a Mon Sep 17 00:00:00 2001 From: Nate Date: Tue, 29 Mar 2016 00:14:56 -0500 Subject: [PATCH 58/96] Call gravity.sh in it's new location --- automated install/basic-install.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/automated install/basic-install.sh b/automated install/basic-install.sh index f490aabd..ae0a831f 100755 --- a/automated install/basic-install.sh +++ b/automated install/basic-install.sh @@ -656,8 +656,7 @@ runGravity() { fi #Don't run as SUDO, this was causing issues echo "::: Running gravity.sh" - - /usr/local/bin/gravity.sh + /opt/pihole/gravity.sh } setUser(){ From 31fc2bfeb7753ac6137d2e61425d8df6dae22d5c Mon Sep 17 00:00:00 2001 From: Nate Date: Tue, 29 Mar 2016 00:25:40 -0500 Subject: [PATCH 59/96] Modified gravity.sh to point to new file locations and fixed permission issue --- gravity.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/gravity.sh b/gravity.sh index c7b60680..6184ea72 100755 --- a/gravity.sh +++ b/gravity.sh @@ -31,8 +31,8 @@ piholeIPv6file=/etc/pihole/.useIPv6 adListFile=/etc/pihole/adlists.list adListDefault=/etc/pihole/adlists.default -whitelistScript=/usr/local/bin/whitelist.sh -blacklistScript=/usr/local/bin/blacklist.sh +whitelistScript=/opt/pihole/whitelist.sh +blacklistScript=/opt/pihole/blacklist.sh if [[ -f $piholeIPfile ]];then # If the file exists, it means it was exported from the installation script and we should use that value instead of detecting it in this script @@ -129,12 +129,12 @@ function gravity_collapse() { # Temporary hack to allow non-root access to pihole directory # Will update later, needed for existing installs, new installs should # create this directory as non-root - $SUDO chmod 777 $piholeDir find "$piholeDir" -type f -exec $SUDO chmod 666 {} \; & spinner $! - echo "." + echo ":::" else echo -n "::: Creating pihole directory..." mkdir $piholeDir & spinner $! + $SUDO chmod 777 $piholeDir echo " done!" fi } From 7014b5a150247ea832182c5b67efbc41aff456b3 Mon Sep 17 00:00:00 2001 From: Mcat12 Date: Tue, 29 Mar 2016 17:45:00 -0400 Subject: [PATCH 60/96] Reverted password for web interface Work will continue in the secure-web-interface branch --- automated install/basic-install.sh | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/automated install/basic-install.sh b/automated install/basic-install.sh index 97b47dad..0b2513da 100755 --- a/automated install/basic-install.sh +++ b/automated install/basic-install.sh @@ -658,19 +658,6 @@ setUser(){ fi } -setPassword() { - # Password needed to authorize changes to lists from admin page - pass=$(whiptail --passwordbox "Please enter a password to secure your Pi-hole web interface." 10 50 3>&1 1>&2 2>&3) - - if [ $? = 0 ]; then - # Entered password - echo $pass > /etc/pihole/password.txt - else - echo "::: Cancel selected, exiting...." - exit 1 - fi -} - installPihole() { # Install base files and web interface checkForDependencies # done @@ -721,9 +708,6 @@ use4andor6 # Decide what upstream DNS Servers to use setDNS -# Set the admin page password -setPassword - # Install and log everything to a file installPihole | tee $tmpLog From ec4d2d65a656e0bf479a99919cb740a8fa98bb27 Mon Sep 17 00:00:00 2001 From: nate Date: Wed, 30 Mar 2016 19:49:39 -0500 Subject: [PATCH 61/96] PromoFaux request: Detailed adlists.list output Now tells user (and logs to pihole_Debug.log) that the adlists.default file is in use --- advanced/Scripts/piholeDebug.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/advanced/Scripts/piholeDebug.sh b/advanced/Scripts/piholeDebug.sh index d2c8e245..145a602c 100644 --- a/advanced/Scripts/piholeDebug.sh +++ b/advanced/Scripts/piholeDebug.sh @@ -258,8 +258,8 @@ then cat "$ADLISTSFILE" >> $DEBUG_LOG echo >> $DEBUG_LOG else - echo "No adlists.list file found!" >> $DEBUG_LOG - printf ":::\tNo adlists.list file found!\n" + echo "No adlists.list file found... using adlists.default!" >> $DEBUG_LOG + printf ":::\tNo adlists.list file found... using adlists.default!\n" fi From 5f7c11f4959e1ca4dca1c0111d4401600522a264 Mon Sep 17 00:00:00 2001 From: nate Date: Wed, 30 Mar 2016 19:51:09 -0500 Subject: [PATCH 62/96] Sudo added to ifconfig to ensure it runs if debug not run as root --- advanced/Scripts/piholeDebug.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/advanced/Scripts/piholeDebug.sh b/advanced/Scripts/piholeDebug.sh index 145a602c..e9d95234 100644 --- a/advanced/Scripts/piholeDebug.sh +++ b/advanced/Scripts/piholeDebug.sh @@ -118,7 +118,7 @@ function testNslookup { ### Check Pi internet connections ### # Log the IP addresses of this Pi -IPADDR=$(ifconfig | perl -nle 's/dr:(\S+)/print $1/e') +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 From 45f24c8a85edf0162530e785e9b0a2bfea3318a4 Mon Sep 17 00:00:00 2001 From: nate Date: Wed, 30 Mar 2016 19:56:11 -0500 Subject: [PATCH 63/96] Readded `cat`s that were originally considered UUOC --- gravity.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gravity.sh b/gravity.sh index 0e13cb95..ddc177a0 100755 --- a/gravity.sh +++ b/gravity.sh @@ -222,7 +222,7 @@ function gravity_Schwarzchild() { truncate -s 0 $piholeDir/$matterandlight & spinner $! for i in "${activeDomains[@]}" do - "$i" |tr -d '\r' >> $piholeDir/$matterandlight + cat "$i" | tr -d '\r' >> $piholeDir/$matterandlight done echo " done!" @@ -282,12 +282,12 @@ function gravity_hostFormat() { if [[ -n $piholeIPv6 ]];then #Add dummy domain Pi-Hole.IsWorking.OK to the top of gravity.list to make ping result return a friendlier looking domain! echo -e "$piholeIP Pi-Hole.IsWorking.OK \n$piholeIPv6 Pi-Hole.IsWorking.OK" > $piholeDir/$accretionDisc - $piholeDir/$eventHorizon | awk -v ipv4addr="$piholeIP" -v ipv6addr="$piholeIPv6" '{sub(/\r$/,""); print ipv4addr" "$0"\n"ipv6addr" "$0}' >> $piholeDir/$accretionDisc + cat $piholeDir/$eventHorizon | awk -v ipv4addr="$piholeIP" -v ipv6addr="$piholeIPv6" '{sub(/\r$/,""); print ipv4addr" "$0"\n"ipv6addr" "$0}' >> $piholeDir/$accretionDisc else # Otherwise, just create gravity.list as normal using IPv4 #Add dummy domain Pi-Hole.IsWorking.OK to the top of gravity.list to make ping result return a friendlier looking domain! echo -e "$piholeIP Pi-Hole.IsWorking.OK" > $piholeDir/$accretionDisc - $piholeDir/$eventHorizon | awk -v ipv4addr="$piholeIP" '{sub(/\r$/,""); print ipv4addr" "$0}' >> $piholeDir/$accretionDisc + cat $piholeDir/$eventHorizon | awk -v ipv4addr="$piholeIP" '{sub(/\r$/,""); print ipv4addr" "$0}' >> $piholeDir/$accretionDisc fi # Copy the file over as /etc/pihole/gravity.list so dnsmasq can use it cp $piholeDir/$accretionDisc $adList From 2625d9f7fe52fce75a19ba18964e93c99d6a9ea9 Mon Sep 17 00:00:00 2001 From: nate Date: Wed, 30 Mar 2016 20:09:19 -0500 Subject: [PATCH 64/96] Made piholeDebug.sh +x --- advanced/Scripts/piholeDebug.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 advanced/Scripts/piholeDebug.sh diff --git a/advanced/Scripts/piholeDebug.sh b/advanced/Scripts/piholeDebug.sh old mode 100644 new mode 100755 From 4b0a7c22524e0a7b9af1ed92e0a90c4f21f7179b Mon Sep 17 00:00:00 2001 From: nate Date: Wed, 30 Mar 2016 20:23:24 -0500 Subject: [PATCH 65/96] Added 01-pihole.conf to be removed on uninstall regardless of removing dnsmasq --- automated install/uninstall.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/automated install/uninstall.sh b/automated install/uninstall.sh index 786e8cea..44c40791 100755 --- a/automated install/uninstall.sh +++ b/automated install/uninstall.sh @@ -114,6 +114,7 @@ function removeNoPurge { $SUDO mv /etc/lighttpd/lighttpd.conf.orig /etc/lighttpd/lighttpd.conf fi fi + $SUDO rm /usr/local/bin/gravity.sh &> /dev/null $SUDO rm /usr/local/bin/chronometer.sh &> /dev/null $SUDO rm /usr/local/bin/whitelist.sh &> /dev/null @@ -123,6 +124,7 @@ function removeNoPurge { $SUDO rm /usr/local/bin/updateDashboard.sh &> /dev/null $SUDO rm /usr/local/bin/uninstall.sh &> /dev/null $SUDO rm /etc/dnsmasq.d/adList.conf &> /dev/null + $SUDO rm /etc/dnsmasq.d/01-pihole.conf &> /dev/null $SUDO rm -rf /var/log/*pihole* &> /dev/null $SUDO rm -rf /etc/pihole/ &> /dev/null $SUDO rm -rf /etc/.pihole/ &> /dev/null From 777676b5258cfc8fd26105f21907ff2662be1c9b Mon Sep 17 00:00:00 2001 From: nate Date: Thu, 31 Mar 2016 20:33:15 -0500 Subject: [PATCH 66/96] Made uninstall.sh and pihole.sh executable. --- automated install/uninstall.sh | 0 pihole.sh | 0 2 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 automated install/uninstall.sh mode change 100644 => 100755 pihole.sh diff --git a/automated install/uninstall.sh b/automated install/uninstall.sh old mode 100644 new mode 100755 diff --git a/pihole.sh b/pihole.sh old mode 100644 new mode 100755 From 7b8fa3b922022af237c28cd82040ccd68de9b4d8 Mon Sep 17 00:00:00 2001 From: nate Date: Fri, 1 Apr 2016 01:11:59 -0500 Subject: [PATCH 67/96] Permissions changed for /etc/pihole and cleaned up some output --- advanced/pihole.cron | 2 +- gravity.sh | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/advanced/pihole.cron b/advanced/pihole.cron index 83b431a4..9d390143 100644 --- a/advanced/pihole.cron +++ b/advanced/pihole.cron @@ -10,7 +10,7 @@ # (at your option) any later version. # Pi-hole: Update the ad sources once a week on Sunday at 01:59 -# Download any updates from the ad lists +# Download any updates from the adlists 59 1 * * 7 root /usr/local/bin/gravity.sh # Pi-hole: Update the Web interface shortly after gravity runs diff --git a/gravity.sh b/gravity.sh index ddc177a0..e541184f 100755 --- a/gravity.sh +++ b/gravity.sh @@ -130,8 +130,8 @@ function gravity_collapse() { # Will update later, needed for existing installs, new installs should # create this directory as non-root $SUDO chmod 777 $piholeDir - find "$piholeDir" -type f -exec $SUDO chmod 666 {} \; & spinner $! - echo "." + $SUDO chown root:root $piholeDir + echo "..." else echo -n "::: Creating pihole directory..." mkdir $piholeDir & spinner $! @@ -246,7 +246,7 @@ function gravity_Whitelist() { echo ":::" # Prevent our sources from being pulled into the hole plural=; [[ "${sources[@]}" != "1" ]] && plural=s - echo -n "::: Adding ${#sources[@]} ad list source${plural} to the whitelist..." + echo -n "::: Adding ${#sources[@]} adlist source${plural} to the whitelist..." urls=() for url in "${sources[@]}" From cf01b5a00245e8cedd0fd702ac02dd665a77b070 Mon Sep 17 00:00:00 2001 From: nate Date: Fri, 1 Apr 2016 12:17:05 -0500 Subject: [PATCH 68/96] Readded `cat` calls to fix permission issue --- advanced/Scripts/blacklist.sh | 2 +- advanced/Scripts/whitelist.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/advanced/Scripts/blacklist.sh b/advanced/Scripts/blacklist.sh index 1780b8ec..75bdcd19 100755 --- a/advanced/Scripts/blacklist.sh +++ b/advanced/Scripts/blacklist.sh @@ -115,7 +115,7 @@ function ModifyHostFile(){ if $addmode; then #add domains to the hosts file if [[ -r $blacklist ]];then - numberOf=$($blacklist | sed '/^\s*$/d' | wc -l) + numberOf=$(cat $blacklist | sed '/^\s*$/d' | wc -l) plural=; [[ "$numberOf" != "1" ]] && plural=s echo ":::" echo -n "::: Modifying HOSTS file to blacklist $numberOf domain${plural}..." diff --git a/advanced/Scripts/whitelist.sh b/advanced/Scripts/whitelist.sh index 5d732ddc..1479c62a 100755 --- a/advanced/Scripts/whitelist.sh +++ b/advanced/Scripts/whitelist.sh @@ -120,7 +120,7 @@ function ModifyHostFile(){ #remove domains in from hosts file if [[ -r $whitelist ]];then # Remove whitelist entries - numberOf=$($whitelist | sed '/^\s*$/d' | wc -l) + numberOf=$(cat $whitelist | sed '/^\s*$/d' | wc -l) plural=; [[ "$numberOf" != "1" ]] && plural=s echo ":::" echo -n "::: Modifying HOSTS file to whitelist $numberOf domain${plural}..." From 0fbf72bb095b82940182404aef68e3482aaf7e4c Mon Sep 17 00:00:00 2001 From: Mcat12 Date: Fri, 1 Apr 2016 20:19:47 -0400 Subject: [PATCH 69/96] Change dummy domain and show device's hostname in ping * Change dummy domain Allows users to access Pi-hole console with my.pi-hole.net instead of the IP address * Cleaned up formatting * Put device hostname at the top of the list Changed my.pi-hole.net to pi.hole and placed it under the device hostname. This way, ping will return the device hostname but you still can access the web interface with pi.hole/admin --- gravity.sh | 88 +++++++++++++++++++++++------------------------------- 1 file changed, 37 insertions(+), 51 deletions(-) diff --git a/gravity.sh b/gravity.sh index e541184f..bc5f53f6 100755 --- a/gravity.sh +++ b/gravity.sh @@ -16,14 +16,14 @@ if [[ $EUID -eq 0 ]];then echo "::: You are root." else echo "::: sudo will be used." - # Check if it is actually installed - # If it isn't, exit because the install cannot complete - if [[ $(dpkg-query -s sudo) ]];then + # Check if it is actually installed + # If it isn't, exit because the install cannot complete + if [[ $(dpkg-query -s sudo) ]];then export SUDO="sudo" - else + else echo "::: Please install sudo or run this script as root." - exit 1 - fi + exit 1 + fi fi piholeIPfile=/tmp/piholeIP @@ -50,9 +50,6 @@ if [[ -f $piholeIPv6file ]];then piholeIPv6=$(ip -6 route get 2001:4860:4860::8888 | awk -F " " '{ for(i=1;i<=NF;i++) if ($i == "src") print $(i+1) }') fi - - - # Variables for various stages of downloading and formatting the list ## Nate 3/26/2016 - Commented unused variables basename=pihole @@ -74,9 +71,7 @@ if [[ -r $piholeDir/pihole.conf ]];then . $piholeDir/pihole.conf fi - -spinner() -{ +spinner() { local pid=$1 local delay=0.50 local spinstr='|/-\' @@ -112,7 +107,7 @@ function gravity_collapse() { else #no custom file found, use defaults! echo -n "::: No custom adlist file detected, reading from default file..." - sources=() + sources=() while read -r line; do #Do not read commented out or blank lines if [[ $line = \#* ]] || [[ ! $line ]]; then @@ -179,7 +174,7 @@ function gravity_transport() { # spinup - main gravity function function gravity_spinup() { - echo "::: " + echo "::: " # Loop through domain list. Download each one and remove commented lines (lines beginning with '# 'or '/') and # blank lines for ((i = 0; i < "${#sources[@]}"; i++)) do @@ -198,17 +193,17 @@ function gravity_spinup() { # Use a case statement to download lists that need special cURL commands # to complete properly and reset the user agent when required case "$domain" in - "adblock.mahakala.is") - agent='Mozilla/5.0 (X11; Linux x86_64; rv:30.0) Gecko/20100101 Firefox/30.0' - cmd_ext="-e http://forum.xda-developers.com/" - ;; + "adblock.mahakala.is") + agent='Mozilla/5.0 (X11; Linux x86_64; rv:30.0) Gecko/20100101 Firefox/30.0' + cmd_ext="-e http://forum.xda-developers.com/" + ;; - "pgl.yoyo.org") - cmd_ext="-d mimetype=plaintext -d hostformat=hosts" - ;; + "pgl.yoyo.org") + cmd_ext="-d mimetype=plaintext -d hostformat=hosts" + ;; - # Default is a simple request - *) cmd_ext="" + # Default is a simple request + *) cmd_ext="" esac gravity_transport "$url" "$cmd_ext" "$agent" done @@ -216,7 +211,7 @@ function gravity_spinup() { # Schwarzchild - aggregate domains to one list and add blacklisted domains function gravity_Schwarzchild() { - echo "::: " + echo "::: " # Find all active domains and compile them into one file and remove CRs echo -n "::: Aggregating list of domains..." truncate -s 0 $piholeDir/$matterandlight & spinner $! @@ -225,10 +220,8 @@ function gravity_Schwarzchild() { cat "$i" | tr -d '\r' >> $piholeDir/$matterandlight done echo " done!" - } - function gravity_Blacklist(){ # Append blacklist entries if they exist echo -n "::: Running blacklist script to update HOSTS file...." @@ -236,14 +229,11 @@ function gravity_Blacklist(){ numBlacklisted=$(wc -l < "/etc/pihole/blacklist.txt") plural=; [[ "$numBlacklisted" != "1" ]] && plural=s - echo " $numBlacklisted domain${plural} blacklisted!" - - + echo " $numBlacklisted domain${plural} blacklisted!" } - function gravity_Whitelist() { - echo ":::" + echo ":::" # Prevent our sources from being pulled into the hole plural=; [[ "${sources[@]}" != "1" ]] && plural=s echo -n "::: Adding ${#sources[@]} adlist source${plural} to the whitelist..." @@ -260,10 +250,7 @@ function gravity_Whitelist() { $whitelistScript -f -nr -q "${urls[@]}" > /dev/null & spinner $! numWhitelisted=$(wc -l < "/etc/pihole/whitelist.txt") plural=; [[ "$numWhitelisted" != "1" ]] && plural=s - echo " $numWhitelisted domain${plural} whitelisted!" - - - + echo " $numWhitelisted domain${plural} whitelisted!" } function gravity_unique() { @@ -276,19 +263,21 @@ function gravity_unique() { } function gravity_hostFormat() { - # Format domain list as "192.168.x.x domain.com" + # Format domain list as "192.168.x.x domain.com" echo "::: Formatting domains into a HOSTS file..." - # If there is a value in the $piholeIPv6, then IPv6 will be used, so the awk command modified to create a line for both protocols - if [[ -n $piholeIPv6 ]];then - #Add dummy domain Pi-Hole.IsWorking.OK to the top of gravity.list to make ping result return a friendlier looking domain! - echo -e "$piholeIP Pi-Hole.IsWorking.OK \n$piholeIPv6 Pi-Hole.IsWorking.OK" > $piholeDir/$accretionDisc - cat $piholeDir/$eventHorizon | awk -v ipv4addr="$piholeIP" -v ipv6addr="$piholeIPv6" '{sub(/\r$/,""); print ipv4addr" "$0"\n"ipv6addr" "$0}' >> $piholeDir/$accretionDisc - else - # Otherwise, just create gravity.list as normal using IPv4 - #Add dummy domain Pi-Hole.IsWorking.OK to the top of gravity.list to make ping result return a friendlier looking domain! - echo -e "$piholeIP Pi-Hole.IsWorking.OK" > $piholeDir/$accretionDisc - cat $piholeDir/$eventHorizon | awk -v ipv4addr="$piholeIP" '{sub(/\r$/,""); print ipv4addr" "$0}' >> $piholeDir/$accretionDisc - fi + hostname=$( $piholeDir/$accretionDisc + cat $piholeDir/$eventHorizon | awk -v ipv4addr="$piholeIP" -v ipv6addr="$piholeIPv6" '{sub(/\r$/,""); print ipv4addr" "$0"\n"ipv6addr" "$0}' >> $piholeDir/$accretionDisc + else + # Otherwise, just create gravity.list as normal using IPv4 + # Add hostname and dummy domain to the top of gravity.list to make ping result return a friendlier looking domain! Also allows for an easy way to access the Pi-hole admin console (pi.hole/admin) + echo -e "$piholeIP $hostname\n$piholeIP pi.hole" > $piholeDir/$accretionDisc + cat $piholeDir/$eventHorizon | awk -v ipv4addr="$piholeIP" '{sub(/\r$/,""); print ipv4addr" "$0}' >> $piholeDir/$accretionDisc + fi + # Copy the file over as /etc/pihole/gravity.list so dnsmasq can use it cp $piholeDir/$accretionDisc $adList } @@ -308,21 +297,18 @@ function gravity_blackbody() { } function gravity_advanced() { - - # Remove comments and print only the domain name # Most of the lists downloaded are already in hosts file format but the spacing/formating is not contigious # This helps with that and makes it easier to read # It also helps with debugging so each stage of the script can be researched more in depth echo -n "::: Formatting list of domains to remove comments...." awk '($1 !~ /^#/) { if (NF>1) {print $2} else {print $1}}' $piholeDir/$matterandlight | sed -nr -e 's/\.{2,}/./g' -e '/\./p' > $piholeDir/$supernova & spinner $! - echo " done!" + echo " done!" numberOf=$(wc -l < $piholeDir/$supernova) echo "::: $numberOf domains being pulled in by gravity..." gravity_unique - } function gravity_reload() { From d47fbbbe964fc6c1f8f8f96d44f11fe227c10b53 Mon Sep 17 00:00:00 2001 From: nate Date: Sat, 2 Apr 2016 17:58:10 -0500 Subject: [PATCH 70/96] Mcat12 requests. Added bash-completion support --- advanced/bash-completion/pihole | 12 ++++++++++ automated install/basic-install.sh | 3 ++- automated install/uninstall.sh | 11 ++------- pihole.sh => pihole | 38 +++++++++++++++--------------- 4 files changed, 35 insertions(+), 29 deletions(-) create mode 100644 advanced/bash-completion/pihole rename pihole.sh => pihole (60%) diff --git a/advanced/bash-completion/pihole b/advanced/bash-completion/pihole new file mode 100644 index 00000000..026f008f --- /dev/null +++ b/advanced/bash-completion/pihole @@ -0,0 +1,12 @@ +_pihole() +{ + local cur prev opts + COMPREPLY=() + cur="${COMP_WORDS[COMP_CWORD]}" + prev="${COMP_WORDS[COMP_CWORD-1]}" + opts="whitelist blacklist debug flush updateDashboard updateGravity setupLCD chronometer help" + + COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) + return 0 +} +complete -F _pihole pihole \ No newline at end of file diff --git a/automated install/basic-install.sh b/automated install/basic-install.sh index ff306d45..4c5afd86 100755 --- a/automated install/basic-install.sh +++ b/automated install/basic-install.sh @@ -483,7 +483,8 @@ installScripts() { $SUDO cp /etc/.pihole/automated\ install/uninstall.sh /opt/pihole/uninstall.sh $SUDO cp /etc/.pihole/advanced/Scripts/setupLCD.sh /opt/pihole/setupLCD.sh $SUDO chmod 755 /opt/pihole/{gravity,chronometer,whitelist,blacklist,piholeLogFlush,updateDashboard,uninstall,setupLCD}.sh - $SUDO cp /etc/.pihole/pihole.sh /usr/local/bin/pihole.sh + $SUDO cp /etc/.pihole/pihole /usr/local/bin/pihole + $SUDO cp /etc/.pihole/advanced/bash-completion/pihole /etc/bash-completion.d/pihole $SUDO echo " done." } diff --git a/automated install/uninstall.sh b/automated install/uninstall.sh index 146d5dae..3577e8d6 100755 --- a/automated install/uninstall.sh +++ b/automated install/uninstall.sh @@ -115,21 +115,14 @@ function removeNoPurge { fi fi - $SUDO rm /usr/local/bin/gravity.sh &> /dev/null - $SUDO rm /usr/local/bin/chronometer.sh &> /dev/null - $SUDO rm /usr/local/bin/whitelist.sh &> /dev/null - $SUDO rm /usr/local/bin/blacklist.sh &> /dev/null - $SUDO rm /usr/local/bin/piholeLogFlush.sh &> /dev/null - $SUDO rm /usr/local/bin/piholeDebug.sh &> /dev/null - $SUDO rm /usr/local/bin/updateDashboard.sh &> /dev/null - $SUDO rm /usr/local/bin/uninstall.sh &> /dev/null $SUDO rm /etc/dnsmasq.d/adList.conf &> /dev/null $SUDO rm /etc/dnsmasq.d/01-pihole.conf &> /dev/null $SUDO rm -rf /var/log/*pihole* &> /dev/null $SUDO rm -rf /etc/pihole/ &> /dev/null $SUDO rm -rf /etc/.pihole/ &> /dev/null $SUDO rm -rf /opt/pihole/ &> /dev/null - $SUDO rm /usr/local/bin/pihole.sh &> /dev/null + $SUDO rm /usr/local/bin/pihole &> /dev/null + $SUDO rm /etc/bash-completion.d/pihole echo ":::" printf "::: Finished removing PiHole from your system. Sorry to see you go!\n" diff --git a/pihole.sh b/pihole similarity index 60% rename from pihole.sh rename to pihole index f730c210..9944c0fa 100755 --- a/pihole.sh +++ b/pihole @@ -16,7 +16,7 @@ if [[ $EUID -eq 0 ]];then else echo "::: Sudo will be used for this tool." # Check if it is actually installed - # If it isn't, exit because the unnstall cannot complete + # If it isn't, exit because the pihole cannot be invoked without privileges. if [[ $(dpkg-query -s sudo) ]];then export SUDO="sudo" else @@ -70,18 +70,18 @@ function helpFunc { echo "::: Control all PiHole specific functions!" echo ":::" echo "::: Usage: pihole.sh [options]" - printf ":::\tAdd -h after -w, -b, or -c for more information on usage\n" + printf ":::\tAdd -h after -w (whitelist), -b (blacklist), or -c (chronometer) for more information on usage\n" echo ":::" echo "::: Options:" - echo "::: -w, --whitelist Whitelist domains" - echo "::: -b, --blacklist Blacklist domains" - echo "::: -d, --debug Start a debugging session if having trouble" - echo "::: -f, --flush Flush the pihole.log file" - echo "::: -u, --updateDashboard Update the web dashboard manually" - echo "::: -g, --updateGravity Update the list of ad-serving domains" - echo "::: -s, --setupLCD Automatically configures the Pi to use the 2.8 LCD screen to display stats on it" - echo "::: -c, --chronometer Calculates stats and displays to an LCD" - echo "::: -h, --help Show this help dialog" + echo "::: -w, whitelist Whitelist domains" + echo "::: -b, blacklist Blacklist domains" + echo "::: -d, debug Start a debugging session if having trouble" + echo "::: -f, flush Flush the pihole.log file" + echo "::: -u, updateDashboard Update the web dashboard manually" + echo "::: -g, updateGravity Update the list of ad-serving domains" + echo "::: -s, setupLCD Automatically configures the Pi to use the 2.8 LCD screen to display stats on it" + echo "::: -c, chronometer Calculates stats and displays to an LCD" + echo "::: -h, help Show this help dialog" exit 1 } @@ -91,13 +91,13 @@ fi # Handle redirecting to specific functions based on arguments case "$1" in -"-w" | "--whitelist" ) whitelistFunc "$@";; -"-b" | "--blacklist" ) blacklistFunc "$@";; -"-d" | "--debug" ) debugFunc;; -"-f" | "--flush" ) flushFunc;; -"-u" | "--updateDashboard" ) updateDashboardFunc;; -"-s" | "--setupLCD" ) setupLCDFunction;; -"-c" | "--chronometer" ) chronometerFunc;; -"-h" | "--help" ) helpFunc;; +"-w" | "whitelist" ) whitelistFunc "$@";; +"-b" | "blacklist" ) blacklistFunc "$@";; +"-d" | "debug" ) debugFunc;; +"-f" | "flush" ) flushFunc;; +"-u" | "-updateDashboard" ) updateDashboardFunc;; +"-s" | "setupLCD" ) setupLCDFunction;; +"-c" | "chronometer" ) chronometerFunc;; +"-h" | "help" ) helpFunc;; * ) helpFunc;; esac From 447af208b3fbcda7d7354f433372ae334d789cbf Mon Sep 17 00:00:00 2001 From: nate Date: Sat, 2 Apr 2016 17:59:59 -0500 Subject: [PATCH 71/96] Fixed missing `cp` of `piholeDebug.sh` to /opt/pihole --- automated install/basic-install.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/automated install/basic-install.sh b/automated install/basic-install.sh index deaa3762..c97fdb9c 100755 --- a/automated install/basic-install.sh +++ b/automated install/basic-install.sh @@ -478,6 +478,7 @@ installScripts() { $SUDO cp /etc/.pihole/advanced/Scripts/chronometer.sh /opt/pihole/chronometer.sh $SUDO cp /etc/.pihole/advanced/Scripts/whitelist.sh /opt/pihole/whitelist.sh $SUDO cp /etc/.pihole/advanced/Scripts/blacklist.sh /opt/pihole/blacklist.sh + $SUDO cp /etc/.pihole/advanced/Scripts/piholeDebug.sh /opt/pihole/piholeDebug.sh $SUDO cp /etc/.pihole/advanced/Scripts/piholeLogFlush.sh /opt/pihole/piholeLogFlush.sh $SUDO cp /etc/.pihole/advanced/Scripts/updateDashboard.sh /opt/pihole/updateDashboard.sh $SUDO cp /etc/.pihole/automated\ install/uninstall.sh /opt/pihole/uninstall.sh From e97755eb91533b120d43ecdba762cab13d81ec39 Mon Sep 17 00:00:00 2001 From: Mcat12 Date: Sat, 2 Apr 2016 19:28:30 -0400 Subject: [PATCH 72/96] Fix missing cats --- advanced/Scripts/blacklist.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/advanced/Scripts/blacklist.sh b/advanced/Scripts/blacklist.sh index 75bdcd19..5d23eb49 100755 --- a/advanced/Scripts/blacklist.sh +++ b/advanced/Scripts/blacklist.sh @@ -120,9 +120,9 @@ function ModifyHostFile(){ echo ":::" echo -n "::: Modifying HOSTS file to blacklist $numberOf domain${plural}..." if [[ -n $piholeIPv6 ]];then - $blacklist | awk -v ipv4addr="$piholeIP" -v ipv6addr="$piholeIPv6" '{sub(/\r$/,""); print ipv4addr" "$0"\n"ipv6addr" "$0}' >> $adList + cat $blacklist | awk -v ipv4addr="$piholeIP" -v ipv6addr="$piholeIPv6" '{sub(/\r$/,""); print ipv4addr" "$0"\n"ipv6addr" "$0}' >> $adList else - $blacklist | awk -v ipv4addr="$piholeIP" '{sub(/\r$/,""); print ipv4addr" "$0}' >>$adList + cat $blacklist | awk -v ipv4addr="$piholeIP" '{sub(/\r$/,""); print ipv4addr" "$0}' >>$adList fi fi else From 75f1969bd2eafd4241249b5b76446792261b4b44 Mon Sep 17 00:00:00 2001 From: nate Date: Sat, 2 Apr 2016 18:39:09 -0500 Subject: [PATCH 73/96] Set executable permissions of `pihole` and changed installer to invoke sudo for gravity.sh. Note: We invoke gravity.sh with sudo in other places, so ignore the removed comment. --- automated install/basic-install.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/automated install/basic-install.sh b/automated install/basic-install.sh index 4c5afd86..c984c640 100755 --- a/automated install/basic-install.sh +++ b/automated install/basic-install.sh @@ -484,6 +484,7 @@ installScripts() { $SUDO cp /etc/.pihole/advanced/Scripts/setupLCD.sh /opt/pihole/setupLCD.sh $SUDO chmod 755 /opt/pihole/{gravity,chronometer,whitelist,blacklist,piholeLogFlush,updateDashboard,uninstall,setupLCD}.sh $SUDO cp /etc/.pihole/pihole /usr/local/bin/pihole + $SUDO chmod 755 /usr/local/bin/pihole $SUDO cp /etc/.pihole/advanced/bash-completion/pihole /etc/bash-completion.d/pihole $SUDO echo " done." } @@ -655,9 +656,8 @@ runGravity() { echo "::: Cleaning up previous install (preserving whitelist/blacklist)" $SUDO rm /etc/pihole/list.* fi - #Don't run as SUDO, this was causing issues echo "::: Running gravity.sh" - /opt/pihole/gravity.sh + $SUDO /opt/pihole/gravity.sh } setUser(){ From 3dff7e80fc8259787fec387c1617a051f947c1b2 Mon Sep 17 00:00:00 2001 From: nate Date: Sat, 2 Apr 2016 18:52:03 -0500 Subject: [PATCH 74/96] Fixed path to /etc/bash_completion.d/ --- automated install/basic-install.sh | 2 +- automated install/uninstall.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/automated install/basic-install.sh b/automated install/basic-install.sh index 1b576049..da7abbaf 100755 --- a/automated install/basic-install.sh +++ b/automated install/basic-install.sh @@ -486,7 +486,7 @@ installScripts() { $SUDO chmod 755 /opt/pihole/{gravity,chronometer,whitelist,blacklist,piholeLogFlush,updateDashboard,uninstall,setupLCD}.sh $SUDO cp /etc/.pihole/pihole /usr/local/bin/pihole $SUDO chmod 755 /usr/local/bin/pihole - $SUDO cp /etc/.pihole/advanced/bash-completion/pihole /etc/bash-completion.d/pihole + $SUDO cp /etc/.pihole/advanced/bash-completion/pihole /etc/bash_completion.d/pihole $SUDO echo " done." } diff --git a/automated install/uninstall.sh b/automated install/uninstall.sh index 3577e8d6..de950a48 100755 --- a/automated install/uninstall.sh +++ b/automated install/uninstall.sh @@ -122,7 +122,7 @@ function removeNoPurge { $SUDO rm -rf /etc/.pihole/ &> /dev/null $SUDO rm -rf /opt/pihole/ &> /dev/null $SUDO rm /usr/local/bin/pihole &> /dev/null - $SUDO rm /etc/bash-completion.d/pihole + $SUDO rm /etc/bash_completion.d/pihole echo ":::" printf "::: Finished removing PiHole from your system. Sorry to see you go!\n" From 1a2046a7ebc1104e6d02d29b03ddeac215115585 Mon Sep 17 00:00:00 2001 From: nate Date: Sat, 2 Apr 2016 19:20:54 -0500 Subject: [PATCH 75/96] Added uninstall option to `pihole` command. Minor fixes --- advanced/Scripts/chronometer.sh | 4 ++-- automated install/basic-install.sh | 5 +++-- pihole | 23 ++++++++++++++++++----- 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/advanced/Scripts/chronometer.sh b/advanced/Scripts/chronometer.sh index d1cef601..58bf300b 100755 --- a/advanced/Scripts/chronometer.sh +++ b/advanced/Scripts/chronometer.sh @@ -35,7 +35,7 @@ function CalcBlockedDomains(){ function CalcQueriesToday(){ if [ -e "$piLog" ];then - queriesToday=$("$piLog" | grep "$today" | awk '/query/ {print $6}' | wc -l) + queriesToday=$(cat "$piLog" | grep "$today" | awk '/query/ {print $6}' | wc -l) else queriesToday="Err." fi @@ -43,7 +43,7 @@ function CalcQueriesToday(){ function CalcblockedToday(){ if [ -e "$piLog" ] && [ -e "$gravity" ];then - blockedToday=$($piLog | awk '/\/etc\/pihole\/gravity.list/ && !/address/ {print $6}' | wc -l) + blockedToday=$(cat $piLog | awk '/\/etc\/pihole\/gravity.list/ && !/address/ {print $6}' | wc -l) else blockedToday="Err." fi diff --git a/automated install/basic-install.sh b/automated install/basic-install.sh index da7abbaf..ec6396a9 100755 --- a/automated install/basic-install.sh +++ b/automated install/basic-install.sh @@ -118,9 +118,9 @@ verifyFreeDiskSpace() { # 50MB is the minimum space needed (45MB install (includes web admin bootstrap/jquery libraries etc) + 5MB one day of logs.) requiredFreeBytes=51200 - existingFreeBytes=`df -lk / 2>&1 | awk '{print $4}' | head -2 | tail -1` + existingFreeBytes=$(df -lk / 2>&1 | awk '{print $4}' | head -2 | tail -1) if ! [[ "$existingFreeBytes" =~ ^([0-9])+$ ]]; then - existingFreeBytes=`df -lk /dev 2>&1 | awk '{print $4}' | head -2 | tail -1` + existingFreeBytes=$(df -lk /dev 2>&1 | awk '{print $4}' | head -2 | tail -1) fi if [[ $existingFreeBytes -lt $requiredFreeBytes ]]; then @@ -487,6 +487,7 @@ installScripts() { $SUDO cp /etc/.pihole/pihole /usr/local/bin/pihole $SUDO chmod 755 /usr/local/bin/pihole $SUDO cp /etc/.pihole/advanced/bash-completion/pihole /etc/bash_completion.d/pihole + $SUDO . /etc/bsah_completion.d/pihole $SUDO echo " done." } diff --git a/pihole b/pihole index 9944c0fa..943bbec3 100755 --- a/pihole +++ b/pihole @@ -52,6 +52,11 @@ function updateDashboardFunc { exit 1 } +function updateGravityFunc { + $SUDO /opt/pihole/gravish.sh + exit 1 +} + function setupLCDFunction { $SUDO /opt/pihole/setupLCD.sh exit 1 @@ -66,6 +71,11 @@ function gravityFunc { exit 1 } +function uninstallFunc { + $SUDO /opt/pihole/uninstall.sh + exit 1 +} + function helpFunc { echo "::: Control all PiHole specific functions!" echo ":::" @@ -82,6 +92,7 @@ function helpFunc { echo "::: -s, setupLCD Automatically configures the Pi to use the 2.8 LCD screen to display stats on it" echo "::: -c, chronometer Calculates stats and displays to an LCD" echo "::: -h, help Show this help dialog" + echo "::: uninstall Uninstall Pi-Hole from your system!" exit 1 } @@ -91,13 +102,15 @@ fi # Handle redirecting to specific functions based on arguments case "$1" in -"-w" | "whitelist" ) whitelistFunc "$@";; -"-b" | "blacklist" ) blacklistFunc "$@";; -"-d" | "debug" ) debugFunc;; -"-f" | "flush" ) flushFunc;; -"-u" | "-updateDashboard" ) updateDashboardFunc;; +"-w" | "whitelist" ) whitelistFunc "$@";; +"-b" | "blacklist" ) blacklistFunc "$@";; +"-d" | "debug" ) debugFunc;; +"-f" | "flush" ) flushFunc;; +"-u" | "updateDashboard" ) updateDashboardFunc;; +"-g" | "updateGravity" ) updateGravityFunc;; "-s" | "setupLCD" ) setupLCDFunction;; "-c" | "chronometer" ) chronometerFunc;; "-h" | "help" ) helpFunc;; +"uninstall" ) uninstallFunc;; * ) helpFunc;; esac From 37fa462db5fdfb0c868f749afe580c683b8754c4 Mon Sep 17 00:00:00 2001 From: nate Date: Sat, 2 Apr 2016 19:24:19 -0500 Subject: [PATCH 76/96] Erraneous call to SUDO removed --- automated install/basic-install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/automated install/basic-install.sh b/automated install/basic-install.sh index ec6396a9..ec5fc90e 100755 --- a/automated install/basic-install.sh +++ b/automated install/basic-install.sh @@ -487,7 +487,7 @@ installScripts() { $SUDO cp /etc/.pihole/pihole /usr/local/bin/pihole $SUDO chmod 755 /usr/local/bin/pihole $SUDO cp /etc/.pihole/advanced/bash-completion/pihole /etc/bash_completion.d/pihole - $SUDO . /etc/bsah_completion.d/pihole + . /etc/bsah_completion.d/pihole $SUDO echo " done." } From 5d5d6c2c705419590f6179326f2c7a1ca074b1b6 Mon Sep 17 00:00:00 2001 From: nate Date: Sat, 2 Apr 2016 19:31:26 -0500 Subject: [PATCH 77/96] handle case where parent directories do not exist --- automated install/basic-install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/automated install/basic-install.sh b/automated install/basic-install.sh index ec5fc90e..7d0db3cb 100755 --- a/automated install/basic-install.sh +++ b/automated install/basic-install.sh @@ -680,7 +680,7 @@ installPihole() { setUser $SUDO mkdir -p /etc/pihole/ if [ ! -d "/var/www/html" ]; then - $SUDO mkdir /var/www/html + $SUDO mkdir -p /var/www/html fi $SUDO chown www-data:www-data /var/www/html $SUDO chmod 775 /var/www/html From 71133f6b5935eb26308861cfce19dae1ba536f55 Mon Sep 17 00:00:00 2001 From: nate Date: Sat, 2 Apr 2016 19:42:33 -0500 Subject: [PATCH 78/96] Spelling error fix... --- automated install/basic-install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/automated install/basic-install.sh b/automated install/basic-install.sh index 7d0db3cb..f73de585 100755 --- a/automated install/basic-install.sh +++ b/automated install/basic-install.sh @@ -487,7 +487,7 @@ installScripts() { $SUDO cp /etc/.pihole/pihole /usr/local/bin/pihole $SUDO chmod 755 /usr/local/bin/pihole $SUDO cp /etc/.pihole/advanced/bash-completion/pihole /etc/bash_completion.d/pihole - . /etc/bsah_completion.d/pihole + . /etc/bash_completion.d/pihole $SUDO echo " done." } From 7f9410fd34f0db5e82d49b4f27991af587a4530a Mon Sep 17 00:00:00 2001 From: nate Date: Sat, 2 Apr 2016 19:45:44 -0500 Subject: [PATCH 79/96] Added uninstall option to bash-completion --- advanced/bash-completion/pihole | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/advanced/bash-completion/pihole b/advanced/bash-completion/pihole index 026f008f..e2c70558 100644 --- a/advanced/bash-completion/pihole +++ b/advanced/bash-completion/pihole @@ -4,7 +4,7 @@ _pihole() COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" prev="${COMP_WORDS[COMP_CWORD-1]}" - opts="whitelist blacklist debug flush updateDashboard updateGravity setupLCD chronometer help" + opts="whitelist blacklist debug flush updateDashboard updateGravity setupLCD chronometer uninstall help" COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) return 0 From ad8573c73928cdf34f7d8ebf609cc08f75c2aecf Mon Sep 17 00:00:00 2001 From: Promofaux Date: Sun, 3 Apr 2016 18:10:50 +0100 Subject: [PATCH 80/96] Pedantic change, stops my editor from treating all of the code as one long sting in `' '` (as the `'` was escaped with `\`) --- automated install/basic-install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/automated install/basic-install.sh b/automated install/basic-install.sh index f73de585..332b8153 100755 --- a/automated install/basic-install.sh +++ b/automated install/basic-install.sh @@ -69,7 +69,7 @@ spinner() { local pid=$1 local delay=0.50 - local spinstr='|/-\' + local spinstr='/-\|' while [ "$(ps a | awk '{print $1}' | grep "$pid")" ]; do local temp=${spinstr#?} printf " [%c] " "$spinstr" From 5976b20aec82a07cf1c0eefa91be78d071eae44e Mon Sep 17 00:00:00 2001 From: Promofaux Date: Sun, 3 Apr 2016 18:25:39 +0100 Subject: [PATCH 81/96] Fix spelling mistake, remove unaccessed function. --- pihole | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/pihole b/pihole index 943bbec3..66f967dc 100755 --- a/pihole +++ b/pihole @@ -53,7 +53,7 @@ function updateDashboardFunc { } function updateGravityFunc { - $SUDO /opt/pihole/gravish.sh + $SUDO /opt/pihole/gravity.sh exit 1 } @@ -66,10 +66,7 @@ function chronometerFunc { $SUDO /opt/pihole/chronometer.sh exit 1 } -function gravityFunc { - $SUDO /opt/pihole/gravity.sh - exit 1 -} + function uninstallFunc { $SUDO /opt/pihole/uninstall.sh From 97d3aedba17ad9608cf7c4b1f74c97a738ceb9c9 Mon Sep 17 00:00:00 2001 From: Promofaux Date: Sun, 3 Apr 2016 18:27:18 +0100 Subject: [PATCH 82/96] Add some output to the log flush --- advanced/Scripts/piholeLogFlush.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/advanced/Scripts/piholeLogFlush.sh b/advanced/Scripts/piholeLogFlush.sh index bbcf1ade..db97f8cb 100755 --- a/advanced/Scripts/piholeLogFlush.sh +++ b/advanced/Scripts/piholeLogFlush.sh @@ -10,4 +10,6 @@ # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. +echo -n "::: Flushing /var/log/pihole.log ..." truncate -s 0 /var/log/pihole.log +echo "... done!" From 36645d93352f017a2872a0fb543c958121b1eba7 Mon Sep 17 00:00:00 2001 From: Promofaux Date: Sun, 3 Apr 2016 18:39:22 +0100 Subject: [PATCH 83/96] Add check for existing files in /usr/local/bin left over from previous version, as those scripts are replaced with `pihole ` script. --- automated install/basic-install.sh | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/automated install/basic-install.sh b/automated install/basic-install.sh index 332b8153..78bf8809 100755 --- a/automated install/basic-install.sh +++ b/automated install/basic-install.sh @@ -488,6 +488,17 @@ installScripts() { $SUDO chmod 755 /usr/local/bin/pihole $SUDO cp /etc/.pihole/advanced/bash-completion/pihole /etc/bash_completion.d/pihole . /etc/bash_completion.d/pihole + + #Tidy up /usr/local/bin directory if installing over previous install. + oldFiles=( gravity chronometer whitelist blacklist piholeLogFlush updateDashboard uninstall setupLCD piholeDebug) + for i in "${oldFiles[@]}" + do + : + if [ -f "/usr/local/bin/$i.sh" ]; then + $SUDO rm /usr/local/bin/$i.sh + fi + done + $SUDO echo " done." } From 2d08217173a6de34198c60b2a4f5f9df7c38acfa Mon Sep 17 00:00:00 2001 From: Promofaux Date: Sun, 3 Apr 2016 21:43:36 +0100 Subject: [PATCH 84/96] Tidy up For loops, clean up whitespace --- automated install/basic-install.sh | 942 ++++++++++++++--------------- 1 file changed, 469 insertions(+), 473 deletions(-) diff --git a/automated install/basic-install.sh b/automated install/basic-install.sh index 78bf8809..6a618338 100755 --- a/automated install/basic-install.sh +++ b/automated install/basic-install.sh @@ -50,17 +50,17 @@ dhcpcdFile=/etc/dhcpcd.conf # Must be root to install echo ":::" if [[ $EUID -eq 0 ]];then - echo "::: You are root." + echo "::: You are root." else - echo "::: sudo will be used for the install." - # Check if it is actually installed - # If it isn't, exit because the install cannot complete - if [[ $(dpkg-query -s sudo) ]];then - export SUDO="sudo" - else - echo "::: Please install sudo or run this as root." - exit 1 - fi + echo "::: sudo will be used for the install." + # Check if it is actually installed + # If it isn't, exit because the install cannot complete + if [[ $(dpkg-query -s sudo) ]];then + export SUDO="sudo" + else + echo "::: Please install sudo or run this as root." + exit 1 + fi fi @@ -81,343 +81,343 @@ spinner() } backupLegacyPihole() { - # This function detects and backups the pi-hole v1 files. It will not do anything to the current version files. - if [[ -f /etc/dnsmasq.d/adList.conf ]];then - echo "::: Original Pi-hole detected. Initiating sub space transport" - $SUDO mkdir -p /etc/pihole/original/ - $SUDO mv /etc/dnsmasq.d/adList.conf /etc/pihole/original/adList.conf."$(date "+%Y-%m-%d")" - $SUDO mv /etc/dnsmasq.conf /etc/pihole/original/dnsmasq.conf."$(date "+%Y-%m-%d")" - $SUDO mv /etc/resolv.conf /etc/pihole/original/resolv.conf."$(date "+%Y-%m-%d")" - $SUDO mv /etc/lighttpd/lighttpd.conf /etc/pihole/original/lighttpd.conf."$(date "+%Y-%m-%d")" - $SUDO mv /var/www/pihole/index.html /etc/pihole/original/index.html."$(date "+%Y-%m-%d")" - if [ ! -d /opt/pihole ]; then - $SUDO mkdir /opt/pihole - $SUDO chown "$USER":root /opt/pihole - $SUDO chmod u+srwx /opt/pihole - fi - $SUDO mv /opt/pihole/gravity.sh /etc/pihole/original/gravity.sh."$(date "+%Y-%m-%d")" - else - : - fi + # This function detects and backups the pi-hole v1 files. It will not do anything to the current version files. + if [[ -f /etc/dnsmasq.d/adList.conf ]];then + echo "::: Original Pi-hole detected. Initiating sub space transport" + $SUDO mkdir -p /etc/pihole/original/ + $SUDO mv /etc/dnsmasq.d/adList.conf /etc/pihole/original/adList.conf."$(date "+%Y-%m-%d")" + $SUDO mv /etc/dnsmasq.conf /etc/pihole/original/dnsmasq.conf."$(date "+%Y-%m-%d")" + $SUDO mv /etc/resolv.conf /etc/pihole/original/resolv.conf."$(date "+%Y-%m-%d")" + $SUDO mv /etc/lighttpd/lighttpd.conf /etc/pihole/original/lighttpd.conf."$(date "+%Y-%m-%d")" + $SUDO mv /var/www/pihole/index.html /etc/pihole/original/index.html."$(date "+%Y-%m-%d")" + if [ ! -d /opt/pihole ]; then + $SUDO mkdir /opt/pihole + $SUDO chown "$USER":root /opt/pihole + $SUDO chmod u+srwx /opt/pihole + fi + $SUDO mv /opt/pihole/gravity.sh /etc/pihole/original/gravity.sh."$(date "+%Y-%m-%d")" + else + : + fi } welcomeDialogs() { - # Display the welcome dialog - whiptail --msgbox --backtitle "Welcome" --title "Pi-hole automated installer" "This installer will transform your Raspberry Pi into a network-wide ad blocker!" $r $c + # Display the welcome dialog + whiptail --msgbox --backtitle "Welcome" --title "Pi-hole automated installer" "This installer will transform your Raspberry Pi into a network-wide ad blocker!" $r $c - # Support for a part-time dev - whiptail --msgbox --backtitle "Plea" --title "Free and open source" "The Pi-hole is free, but powered by your donations: http://pi-hole.net/donate" $r $c + # Support for a part-time dev + whiptail --msgbox --backtitle "Plea" --title "Free and open source" "The Pi-hole is free, but powered by your donations: http://pi-hole.net/donate" $r $c - # Explain the need for a static address - whiptail --msgbox --backtitle "Initating network interface" --title "Static IP Needed" "The Pi-hole is a SERVER so it needs a STATIC IP ADDRESS to function properly. - In the next section, you can choose to use your current network settings (DHCP) or to manually edit them." $r $c + # Explain the need for a static address + whiptail --msgbox --backtitle "Initating network interface" --title "Static IP Needed" "The Pi-hole is a SERVER so it needs a STATIC IP ADDRESS to function properly. + In the next section, you can choose to use your current network settings (DHCP) or to manually edit them." $r $c } verifyFreeDiskSpace() { - # 50MB is the minimum space needed (45MB install (includes web admin bootstrap/jquery libraries etc) + 5MB one day of logs.) - requiredFreeBytes=51200 + # 50MB is the minimum space needed (45MB install (includes web admin bootstrap/jquery libraries etc) + 5MB one day of logs.) + requiredFreeBytes=51200 - existingFreeBytes=$(df -lk / 2>&1 | awk '{print $4}' | head -2 | tail -1) - if ! [[ "$existingFreeBytes" =~ ^([0-9])+$ ]]; then - existingFreeBytes=$(df -lk /dev 2>&1 | awk '{print $4}' | head -2 | tail -1) - fi + existingFreeBytes=$(df -lk / 2>&1 | awk '{print $4}' | head -2 | tail -1) + if ! [[ "$existingFreeBytes" =~ ^([0-9])+$ ]]; then + existingFreeBytes=$(df -lk /dev 2>&1 | awk '{print $4}' | head -2 | tail -1) + fi - if [[ $existingFreeBytes -lt $requiredFreeBytes ]]; then - whiptail --msgbox --backtitle "Insufficient Disk Space" --title "Insufficient Disk Space" "\nYour system appears to be low on disk space. pi-hole recomends a minimum of $requiredFreeBytes Bytes.\nYou only have $existingFreeBytes Free.\n\nIf this is a new install you may need to expand your disk.\n\nTry running:\n 'sudo raspi-config'\nChoose the 'expand file system option'\n\nAfter rebooting, run this installation again.\n\ncurl -L install.pi-hole.net | bash\n" $r $c - echo "$existingFreeBytes is less than $requiredFreeBytes" - echo "Insufficient free space, exiting..." - exit 1 - fi + if [[ $existingFreeBytes -lt $requiredFreeBytes ]]; then + whiptail --msgbox --backtitle "Insufficient Disk Space" --title "Insufficient Disk Space" "\nYour system appears to be low on disk space. pi-hole recomends a minimum of $requiredFreeBytes Bytes.\nYou only have $existingFreeBytes Free.\n\nIf this is a new install you may need to expand your disk.\n\nTry running:\n 'sudo raspi-config'\nChoose the 'expand file system option'\n\nAfter rebooting, run this installation again.\n\ncurl -L install.pi-hole.net | bash\n" $r $c + echo "$existingFreeBytes is less than $requiredFreeBytes" + echo "Insufficient free space, exiting..." + exit 1 + fi } chooseInterface() { - # Turn the available interfaces into an array so it can be used with a whiptail dialog - interfacesArray=() - firstloop=1 + # Turn the available interfaces into an array so it can be used with a whiptail dialog + interfacesArray=() + firstloop=1 - while read -r line - do - mode="OFF" - if [[ $firstloop -eq 1 ]]; then - firstloop=0 - mode="ON" - fi - interfacesArray+=("$line" "available" "$mode") - done <<< "$availableInterfaces" + while read -r line + do + mode="OFF" + if [[ $firstloop -eq 1 ]]; then + firstloop=0 + mode="ON" + fi + interfacesArray+=("$line" "available" "$mode") + done <<< "$availableInterfaces" - # Find out how many interfaces are available to choose from - interfaceCount=$(echo "$availableInterfaces" | wc -l) - chooseInterfaceCmd=(whiptail --separate-output --radiolist "Choose An Interface" $r $c $interfaceCount) - chooseInterfaceOptions=$("${chooseInterfaceCmd[@]}" "${interfacesArray[@]}" 2>&1 >/dev/tty) - if [[ $? = 0 ]];then - for desiredInterface in $chooseInterfaceOptions - do - piholeInterface=$desiredInterface - echo "::: Using interface: $piholeInterface" - echo "${piholeInterface}" > /tmp/piholeINT - done - else - echo "::: Cancel selected, exiting...." - exit 1 - fi + # Find out how many interfaces are available to choose from + interfaceCount=$(echo "$availableInterfaces" | wc -l) + chooseInterfaceCmd=(whiptail --separate-output --radiolist "Choose An Interface" $r $c $interfaceCount) + chooseInterfaceOptions=$("${chooseInterfaceCmd[@]}" "${interfacesArray[@]}" 2>&1 >/dev/tty) + if [[ $? = 0 ]];then + for desiredInterface in $chooseInterfaceOptions + do + piholeInterface=$desiredInterface + echo "::: Using interface: $piholeInterface" + echo "${piholeInterface}" > /tmp/piholeINT + done + else + echo "::: Cancel selected, exiting...." + exit 1 + fi } cleanupIPv6() { - # Removes IPv6 indicator file if we are not using IPv6 - if [ -f "/etc/pihole/.useIPv6" ] && [ ! "$useIPv6" ]; then - rm /etc/pihole/.useIPv6 - fi + # Removes IPv6 indicator file if we are not using IPv6 + if [ -f "/etc/pihole/.useIPv6" ] && [ ! "$useIPv6" ]; then + rm /etc/pihole/.useIPv6 + fi } use4andor6() { - # Let use select IPv4 and/or IPv6 - cmd=(whiptail --separate-output --checklist "Select Protocols" $r $c 2) - options=(IPv4 "Block ads over IPv4" on - IPv6 "Block ads over IPv6" off) - choices=$("${cmd[@]}" "${options[@]}" 2>&1 >/dev/tty) - if [[ $? = 0 ]];then - for choice in $choices - do - case $choice in - IPv4 ) useIPv4=true;; - IPv6 ) useIPv6=true;; - esac - done + # Let use select IPv4 and/or IPv6 + cmd=(whiptail --separate-output --checklist "Select Protocols" $r $c 2) + options=(IPv4 "Block ads over IPv4" on + IPv6 "Block ads over IPv6" off) + choices=$("${cmd[@]}" "${options[@]}" 2>&1 >/dev/tty) + if [[ $? = 0 ]];then + for choice in $choices + do + case $choice in + IPv4 ) useIPv4=true;; + IPv6 ) useIPv6=true;; + esac + done - if [ $useIPv4 ] && [ ! $useIPv6 ]; then - getStaticIPv4Settings - setStaticIPv4 - echo "::: Using IPv4 on $IPv4addr" - echo "::: IPv6 will NOT be used." - fi - if [ ! $useIPv4 ] && [ $useIPv6 ]; then - useIPv6dialog - echo "::: IPv4 will NOT be used." - echo "::: Using IPv6 on $piholeIPv6" - fi - if [ $useIPv4 ] && [ $useIPv6 ]; then - getStaticIPv4Settings - setStaticIPv4 - useIPv6dialog - echo "::: Using IPv4 on $IPv4addr" - echo "::: Using IPv6 on $piholeIPv6" - fi - if [ ! $useIPv4 ] && [ ! $useIPv6 ]; then - echo "::: Cannot continue, neither IPv4 or IPv6 selected" - echo "::: Exiting" - exit 1 - fi - cleanupIPv6 - else - echo "::: Cancel selected. Exiting..." - exit 1 - fi + if [ $useIPv4 ] && [ ! $useIPv6 ]; then + getStaticIPv4Settings + setStaticIPv4 + echo "::: Using IPv4 on $IPv4addr" + echo "::: IPv6 will NOT be used." + fi + if [ ! $useIPv4 ] && [ $useIPv6 ]; then + useIPv6dialog + echo "::: IPv4 will NOT be used." + echo "::: Using IPv6 on $piholeIPv6" + fi + if [ $useIPv4 ] && [ $useIPv6 ]; then + getStaticIPv4Settings + setStaticIPv4 + useIPv6dialog + echo "::: Using IPv4 on $IPv4addr" + echo "::: Using IPv6 on $piholeIPv6" + fi + if [ ! $useIPv4 ] && [ ! $useIPv6 ]; then + echo "::: Cannot continue, neither IPv4 or IPv6 selected" + echo "::: Exiting" + exit 1 + fi + cleanupIPv6 + else + echo "::: Cancel selected. Exiting..." + exit 1 + fi } useIPv6dialog() { - # Show the IPv6 address used for blocking - piholeIPv6=$(ip -6 route get 2001:4860:4860::8888 | awk -F " " '{ for(i=1;i<=NF;i++) if ($i == "src") print $(i+1) }') - whiptail --msgbox --backtitle "IPv6..." --title "IPv6 Supported" "$piholeIPv6 will be used to block ads." $r $c + # Show the IPv6 address used for blocking + piholeIPv6=$(ip -6 route get 2001:4860:4860::8888 | awk -F " " '{ for(i=1;i<=NF;i++) if ($i == "src") print $(i+1) }') + whiptail --msgbox --backtitle "IPv6..." --title "IPv6 Supported" "$piholeIPv6 will be used to block ads." $r $c - $SUDO touch /etc/pihole/.useIPv6 + $SUDO touch /etc/pihole/.useIPv6 } getStaticIPv4Settings() { - # Ask if the user wants to use DHCP settings as their static IP - if (whiptail --backtitle "Calibrating network interface" --title "Static IP Address" --yesno "Do you want to use your current network settings as a static address? - IP address: $IPv4addr - Gateway: $IPv4gw" $r $c) then - # If they choose yes, let the user know that the IP address will not be available via DHCP and may cause a conflict. - whiptail --msgbox --backtitle "IP information" --title "FYI: IP Conflict" "It is possible your router could still try to assign this IP to a device, which would cause a conflict. But in most cases the router is smart enough to not do that. - If you are worried, either manually set the address, or modify the DHCP reservation pool so it does not include the IP you want. - It is also possible to use a DHCP reservation, but if you are going to do that, you might as well set a static address." $r $c - # Nothing else to do since the variables are already set above - else - # Otherwise, we need to ask the user to input their desired settings. - # Start by getting the IPv4 address (pre-filling it with info gathered from DHCP) - # Start a loop to let the user enter their information with the chance to go back and edit it if necessary - until [[ $ipSettingsCorrect = True ]] - do - # Ask for the IPv4 address - IPv4addr=$(whiptail --backtitle "Calibrating network interface" --title "IPv4 address" --inputbox "Enter your desired IPv4 address" $r $c "$IPv4addr" 3>&1 1>&2 2>&3) - if [[ $? = 0 ]];then - echo "::: Your static IPv4 address: $IPv4addr" - # Ask for the gateway - IPv4gw=$(whiptail --backtitle "Calibrating network interface" --title "IPv4 gateway (router)" --inputbox "Enter your desired IPv4 default gateway" $r $c "$IPv4gw" 3>&1 1>&2 2>&3) - if [[ $? = 0 ]];then - echo "::: Your static IPv4 gateway: $IPv4gw" - # Give the user a chance to review their settings before moving on - if (whiptail --backtitle "Calibrating network interface" --title "Static IP Address" --yesno "Are these settings correct? - IP address: $IPv4addr - Gateway: $IPv4gw" $r $c)then - # If the settings are correct, then we need to set the piholeIP - # Saving it to a temporary file us to retrieve it later when we run the gravity.sh script - echo "${IPv4addr%/*}" > /tmp/piholeIP - echo "$piholeInterface" > /tmp/piholeINT - # After that's done, the loop ends and we move on - ipSettingsCorrect=True - else - # If the settings are wrong, the loop continues - ipSettingsCorrect=False - fi - else - # Cancelling gateway settings window - ipSettingsCorrect=False - echo "::: Cancel selected. Exiting..." - exit 1 - fi - else - # Cancelling IPv4 settings window - ipSettingsCorrect=False - echo "::: Cancel selected. Exiting..." - exit 1 - fi - done - # End the if statement for DHCP vs. static - fi + # Ask if the user wants to use DHCP settings as their static IP + if (whiptail --backtitle "Calibrating network interface" --title "Static IP Address" --yesno "Do you want to use your current network settings as a static address? + IP address: $IPv4addr + Gateway: $IPv4gw" $r $c) then + # If they choose yes, let the user know that the IP address will not be available via DHCP and may cause a conflict. + whiptail --msgbox --backtitle "IP information" --title "FYI: IP Conflict" "It is possible your router could still try to assign this IP to a device, which would cause a conflict. But in most cases the router is smart enough to not do that. + If you are worried, either manually set the address, or modify the DHCP reservation pool so it does not include the IP you want. + It is also possible to use a DHCP reservation, but if you are going to do that, you might as well set a static address." $r $c + # Nothing else to do since the variables are already set above + else + # Otherwise, we need to ask the user to input their desired settings. + # Start by getting the IPv4 address (pre-filling it with info gathered from DHCP) + # Start a loop to let the user enter their information with the chance to go back and edit it if necessary + until [[ $ipSettingsCorrect = True ]] + do + # Ask for the IPv4 address + IPv4addr=$(whiptail --backtitle "Calibrating network interface" --title "IPv4 address" --inputbox "Enter your desired IPv4 address" $r $c "$IPv4addr" 3>&1 1>&2 2>&3) + if [[ $? = 0 ]];then + echo "::: Your static IPv4 address: $IPv4addr" + # Ask for the gateway + IPv4gw=$(whiptail --backtitle "Calibrating network interface" --title "IPv4 gateway (router)" --inputbox "Enter your desired IPv4 default gateway" $r $c "$IPv4gw" 3>&1 1>&2 2>&3) + if [[ $? = 0 ]];then + echo "::: Your static IPv4 gateway: $IPv4gw" + # Give the user a chance to review their settings before moving on + if (whiptail --backtitle "Calibrating network interface" --title "Static IP Address" --yesno "Are these settings correct? + IP address: $IPv4addr + Gateway: $IPv4gw" $r $c)then + # If the settings are correct, then we need to set the piholeIP + # Saving it to a temporary file us to retrieve it later when we run the gravity.sh script + echo "${IPv4addr%/*}" > /tmp/piholeIP + echo "$piholeInterface" > /tmp/piholeINT + # After that's done, the loop ends and we move on + ipSettingsCorrect=True + else + # If the settings are wrong, the loop continues + ipSettingsCorrect=False + fi + else + # Cancelling gateway settings window + ipSettingsCorrect=False + echo "::: Cancel selected. Exiting..." + exit 1 + fi + else + # Cancelling IPv4 settings window + ipSettingsCorrect=False + echo "::: Cancel selected. Exiting..." + exit 1 + fi + done + # End the if statement for DHCP vs. static + fi } setDHCPCD() { - # Append these lines to dhcpcd.conf to enable a static IP - echo "::: interface $piholeInterface - static ip_address=$IPv4addr - static routers=$IPv4gw - static domain_name_servers=$IPv4gw" | $SUDO tee -a $dhcpcdFile >/dev/null + # Append these lines to dhcpcd.conf to enable a static IP + echo "::: interface $piholeInterface + static ip_address=$IPv4addr + static routers=$IPv4gw + static domain_name_servers=$IPv4gw" | $SUDO tee -a $dhcpcdFile >/dev/null } setStaticIPv4() { - # Tries to set the IPv4 address - if grep -q "$IPv4addr" $dhcpcdFile; then - # address already set, noop - : - else - setDHCPCD - $SUDO ip addr replace dev "$piholeInterface" "$IPv4addr" - echo ":::" - echo "::: Setting IP to $IPv4addr. You may need to restart after the install is complete." - echo ":::" - fi + # Tries to set the IPv4 address + if grep -q "$IPv4addr" $dhcpcdFile; then + # address already set, noop + : + else + setDHCPCD + $SUDO ip addr replace dev "$piholeInterface" "$IPv4addr" + echo ":::" + echo "::: Setting IP to $IPv4addr. You may need to restart after the install is complete." + echo ":::" + fi } function valid_ip() { - local ip=$1 - local stat=1 + local ip=$1 + local stat=1 - if [[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then - OIFS=$IFS - IFS='.' - ip=($ip) - IFS=$OIFS - [[ ${ip[0]} -le 255 && ${ip[1]} -le 255 \ - && ${ip[2]} -le 255 && ${ip[3]} -le 255 ]] - stat=$? - fi - return $stat + if [[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then + OIFS=$IFS + IFS='.' + ip=($ip) + IFS=$OIFS + [[ ${ip[0]} -le 255 && ${ip[1]} -le 255 \ + && ${ip[2]} -le 255 && ${ip[3]} -le 255 ]] + stat=$? + fi + return $stat } setDNS(){ - DNSChoseCmd=(whiptail --separate-output --radiolist "Select Upstream DNS Provider. To use your own, select Custom." $r $c 6) - DNSChooseOptions=(Google "" on - OpenDNS "" off - Level3 "" off - Norton "" off - Comodo "" off - Custom "" off) - DNSchoices=$("${DNSChoseCmd[@]}" "${DNSChooseOptions[@]}" 2>&1 >/dev/tty) - if [[ $? = 0 ]];then - case $DNSchoices in - Google) - echo "::: Using Google DNS servers." - piholeDNS1="8.8.8.8" - piholeDNS2="8.8.4.4" - ;; - OpenDNS) - echo "::: Using OpenDNS servers." - piholeDNS1="208.67.222.222" - piholeDNS2="208.67.220.220" - ;; - Level3) - echo "::: Using Level3 servers." - piholeDNS1="4.2.2.1" - piholeDNS2="4.2.2.2" - ;; - Norton) - echo "::: Using Norton ConnectSafe servers." - piholeDNS1="199.85.126.10" - piholeDNS2="199.85.127.10" - ;; - Comodo) - echo "::: Using Comodo Secure servers." - piholeDNS1="8.26.56.26" - piholeDNS2="8.20.247.20" - ;; - Custom) - until [[ $DNSSettingsCorrect = True ]] - do + DNSChoseCmd=(whiptail --separate-output --radiolist "Select Upstream DNS Provider. To use your own, select Custom." $r $c 6) + DNSChooseOptions=(Google "" on + OpenDNS "" off + Level3 "" off + Norton "" off + Comodo "" off + Custom "" off) + DNSchoices=$("${DNSChoseCmd[@]}" "${DNSChooseOptions[@]}" 2>&1 >/dev/tty) + if [[ $? = 0 ]];then + case $DNSchoices in + Google) + echo "::: Using Google DNS servers." + piholeDNS1="8.8.8.8" + piholeDNS2="8.8.4.4" + ;; + OpenDNS) + echo "::: Using OpenDNS servers." + piholeDNS1="208.67.222.222" + piholeDNS2="208.67.220.220" + ;; + Level3) + echo "::: Using Level3 servers." + piholeDNS1="4.2.2.1" + piholeDNS2="4.2.2.2" + ;; + Norton) + echo "::: Using Norton ConnectSafe servers." + piholeDNS1="199.85.126.10" + piholeDNS2="199.85.127.10" + ;; + Comodo) + echo "::: Using Comodo Secure servers." + piholeDNS1="8.26.56.26" + piholeDNS2="8.20.247.20" + ;; + Custom) + until [[ $DNSSettingsCorrect = True ]] + do - strInvalid="Invalid" + strInvalid="Invalid" - if [ ! $piholeDNS1 ]; then - if [ ! $piholeDNS2 ]; then - prePopulate="" - else - prePopulate=", $piholeDNS2" - fi - elif [ $piholeDNS1 ] && [ ! $piholeDNS2 ]; then - prePopulate="$piholeDNS1" - elif [ $piholeDNS1 ] && [ $piholeDNS2 ]; then - prePopulate="$piholeDNS1, $piholeDNS2" - fi + if [ ! $piholeDNS1 ]; then + if [ ! $piholeDNS2 ]; then + prePopulate="" + else + prePopulate=", $piholeDNS2" + fi + elif [ $piholeDNS1 ] && [ ! $piholeDNS2 ]; then + prePopulate="$piholeDNS1" + elif [ $piholeDNS1 ] && [ $piholeDNS2 ]; then + prePopulate="$piholeDNS1, $piholeDNS2" + fi - piholeDNS=$(whiptail --backtitle "Specify Upstream DNS Provider(s)" --inputbox "Enter your desired upstream DNS provider(s), seperated by a comma.\n\nFor example '8.8.8.8, 8.8.4.4'" $r $c "$prePopulate" 3>&1 1>&2 2>&3) - if [[ $? = 0 ]];then - piholeDNS1=$(echo "$piholeDNS" | sed 's/[, \t]\+/,/g' | awk -F, '{print$1}') - piholeDNS2=$(echo "$piholeDNS" | sed 's/[, \t]\+/,/g' | awk -F, '{print$2}') - - if ! valid_ip "$piholeDNS1" || [ ! "$piholeDNS1" ]; then - piholeDNS1=$strInvalid - fi - - if ! valid_ip "$piholeDNS2" && [ "$piholeDNS2" ]; then - piholeDNS2=$strInvalid - fi + piholeDNS=$(whiptail --backtitle "Specify Upstream DNS Provider(s)" --inputbox "Enter your desired upstream DNS provider(s), seperated by a comma.\n\nFor example '8.8.8.8, 8.8.4.4'" $r $c "$prePopulate" 3>&1 1>&2 2>&3) + if [[ $? = 0 ]];then + piholeDNS1=$(echo "$piholeDNS" | sed 's/[, \t]\+/,/g' | awk -F, '{print$1}') + piholeDNS2=$(echo "$piholeDNS" | sed 's/[, \t]\+/,/g' | awk -F, '{print$2}') - else - echo "::: Cancel selected, exiting...." - exit 1 - fi - - if [[ $piholeDNS1 == "$strInvalid" ]] || [[ $piholeDNS2 == "$strInvalid" ]]; then - whiptail --msgbox --backtitle "Invalid IP" --title "Invalid IP" "One or both entered IP addresses were invalid. Please try again.\n\n DNS Server 1: $piholeDNS1\n DNS Server 2: $piholeDNS2" $r $c - - if [[ $piholeDNS1 == "$strInvalid" ]]; then - piholeDNS1="" - fi - - if [[ $piholeDNS2 == "$strInvalid" ]]; then - piholeDNS2="" - fi + if ! valid_ip "$piholeDNS1" || [ ! "$piholeDNS1" ]; then + piholeDNS1=$strInvalid + fi - DNSSettingsCorrect=False - else - if (whiptail --backtitle "Specify Upstream DNS Provider(s)" --title "Upstream DNS Provider(s)" --yesno "Are these settings correct?\n DNS Server 1: $piholeDNS1\n DNS Server 2: $piholeDNS2" $r $c) then - DNSSettingsCorrect=True - else - # If the settings are wrong, the loop continues - DNSSettingsCorrect=False - fi - fi - done - ;; - esac - else - echo "::: Cancel selected. Exiting..." - exit 1 - fi + if ! valid_ip "$piholeDNS2" && [ "$piholeDNS2" ]; then + piholeDNS2=$strInvalid + fi + + else + echo "::: Cancel selected, exiting...." + exit 1 + fi + + if [[ $piholeDNS1 == "$strInvalid" ]] || [[ $piholeDNS2 == "$strInvalid" ]]; then + whiptail --msgbox --backtitle "Invalid IP" --title "Invalid IP" "One or both entered IP addresses were invalid. Please try again.\n\n DNS Server 1: $piholeDNS1\n DNS Server 2: $piholeDNS2" $r $c + + if [[ $piholeDNS1 == "$strInvalid" ]]; then + piholeDNS1="" + fi + + if [[ $piholeDNS2 == "$strInvalid" ]]; then + piholeDNS2="" + fi + + DNSSettingsCorrect=False + else + if (whiptail --backtitle "Specify Upstream DNS Provider(s)" --title "Upstream DNS Provider(s)" --yesno "Are these settings correct?\n DNS Server 1: $piholeDNS1\n DNS Server 2: $piholeDNS2" $r $c) then + DNSSettingsCorrect=True + else + # If the settings are wrong, the loop continues + DNSSettingsCorrect=False + fi + fi + done + ;; + esac + else + echo "::: Cancel selected. Exiting..." + exit 1 + fi } versionCheckDNSmasq(){ @@ -466,138 +466,134 @@ versionCheckDNSmasq(){ } installScripts() { - # Install the scripts from /etc/.pihole to their various locations - $SUDO echo ":::" - $SUDO echo -n "::: Installing scripts to /opt/pihole..." - if [ ! -d /opt/pihole ]; then - $SUDO mkdir /opt/pihole - $SUDO chown "$USER":root /opt/pihole - $SUDO chmod u+srwx /opt/pihole - fi - $SUDO cp /etc/.pihole/gravity.sh /opt/pihole/gravity.sh - $SUDO cp /etc/.pihole/advanced/Scripts/chronometer.sh /opt/pihole/chronometer.sh - $SUDO cp /etc/.pihole/advanced/Scripts/whitelist.sh /opt/pihole/whitelist.sh - $SUDO cp /etc/.pihole/advanced/Scripts/blacklist.sh /opt/pihole/blacklist.sh - $SUDO cp /etc/.pihole/advanced/Scripts/piholeDebug.sh /opt/pihole/piholeDebug.sh - $SUDO cp /etc/.pihole/advanced/Scripts/piholeLogFlush.sh /opt/pihole/piholeLogFlush.sh - $SUDO cp /etc/.pihole/advanced/Scripts/updateDashboard.sh /opt/pihole/updateDashboard.sh - $SUDO cp /etc/.pihole/automated\ install/uninstall.sh /opt/pihole/uninstall.sh - $SUDO cp /etc/.pihole/advanced/Scripts/setupLCD.sh /opt/pihole/setupLCD.sh - $SUDO chmod 755 /opt/pihole/{gravity,chronometer,whitelist,blacklist,piholeLogFlush,updateDashboard,uninstall,setupLCD}.sh - $SUDO cp /etc/.pihole/pihole /usr/local/bin/pihole - $SUDO chmod 755 /usr/local/bin/pihole - $SUDO cp /etc/.pihole/advanced/bash-completion/pihole /etc/bash_completion.d/pihole - . /etc/bash_completion.d/pihole - - #Tidy up /usr/local/bin directory if installing over previous install. - oldFiles=( gravity chronometer whitelist blacklist piholeLogFlush updateDashboard uninstall setupLCD piholeDebug) - for i in "${oldFiles[@]}" - do - : - if [ -f "/usr/local/bin/$i.sh" ]; then - $SUDO rm /usr/local/bin/$i.sh - fi - done - - $SUDO echo " done." + # Install the scripts from /etc/.pihole to their various locations + $SUDO echo ":::" + $SUDO echo -n "::: Installing scripts to /opt/pihole..." + if [ ! -d /opt/pihole ]; then + $SUDO mkdir /opt/pihole + $SUDO chown "$USER":root /opt/pihole + $SUDO chmod u+srwx /opt/pihole + fi + $SUDO cp /etc/.pihole/gravity.sh /opt/pihole/gravity.sh + $SUDO cp /etc/.pihole/advanced/Scripts/chronometer.sh /opt/pihole/chronometer.sh + $SUDO cp /etc/.pihole/advanced/Scripts/whitelist.sh /opt/pihole/whitelist.sh + $SUDO cp /etc/.pihole/advanced/Scripts/blacklist.sh /opt/pihole/blacklist.sh + $SUDO cp /etc/.pihole/advanced/Scripts/piholeDebug.sh /opt/pihole/piholeDebug.sh + $SUDO cp /etc/.pihole/advanced/Scripts/piholeLogFlush.sh /opt/pihole/piholeLogFlush.sh + $SUDO cp /etc/.pihole/advanced/Scripts/updateDashboard.sh /opt/pihole/updateDashboard.sh + $SUDO cp /etc/.pihole/automated\ install/uninstall.sh /opt/pihole/uninstall.sh + $SUDO cp /etc/.pihole/advanced/Scripts/setupLCD.sh /opt/pihole/setupLCD.sh + $SUDO chmod 755 /opt/pihole/{gravity,chronometer,whitelist,blacklist,piholeLogFlush,updateDashboard,uninstall,setupLCD}.sh + $SUDO cp /etc/.pihole/pihole /usr/local/bin/pihole + $SUDO chmod 755 /usr/local/bin/pihole + $SUDO cp /etc/.pihole/advanced/bash-completion/pihole /etc/bash_completion.d/pihole + . /etc/bash_completion.d/pihole + + #Tidy up /usr/local/bin directory if installing over previous install. + oldFiles=( gravity chronometer whitelist blacklist piholeLogFlush updateDashboard uninstall setupLCD piholeDebug) + for i in "${oldFiles[@]}"; do + if [ -f "/usr/local/bin/$i.sh" ]; then + $SUDO rm /usr/local/bin/"$i".sh + fi + done + + $SUDO echo " done." } installConfigs() { - # Install the configs from /etc/.pihole to their various locations - $SUDO echo ":::" - $SUDO echo "::: Installing configs..." - versionCheckDNSmasq - if [ ! -d "/etc/lighttpd" ]; then - $SUDO mkdir /etc/lighttpd - $SUDO chown "$USER":root /etc/lighttpd - $SUDO mv /etc/lighttpd/lighttpd.conf /etc/lighttpd/lighttpd.conf.orig - fi - $SUDO cp /etc/.pihole/advanced/lighttpd.conf /etc/lighttpd/lighttpd.conf + # Install the configs from /etc/.pihole to their various locations + $SUDO echo ":::" + $SUDO echo "::: Installing configs..." + versionCheckDNSmasq + if [ ! -d "/etc/lighttpd" ]; then + $SUDO mkdir /etc/lighttpd + $SUDO chown "$USER":root /etc/lighttpd + $SUDO mv /etc/lighttpd/lighttpd.conf /etc/lighttpd/lighttpd.conf.orig + fi + $SUDO cp /etc/.pihole/advanced/lighttpd.conf /etc/lighttpd/lighttpd.conf } stopServices() { - # Stop dnsmasq and lighttpd - $SUDO echo ":::" - $SUDO echo -n "::: Stopping services..." - #$SUDO service dnsmasq stop & spinner $! || true - $SUDO service lighttpd stop & spinner $! || true - $SUDO echo " done." + # Stop dnsmasq and lighttpd + $SUDO echo ":::" + $SUDO echo -n "::: Stopping services..." + #$SUDO service dnsmasq stop & spinner $! || true + $SUDO service lighttpd stop & spinner $! || true + $SUDO echo " done." } checkForDependencies() { - #Running apt-get update/upgrade with minimal output can cause some issues with - #requiring user input (e.g password for phpmyadmin see #218) - #We'll change the logic up here, to check to see if there are any updates availible and - # if so, advise the user to run apt-get update/upgrade at their own discretion + #Running apt-get update/upgrade with minimal output can cause some issues with + #requiring user input (e.g password for phpmyadmin see #218) + #We'll change the logic up here, to check to see if there are any updates availible and + # if so, advise the user to run apt-get update/upgrade at their own discretion - #Check to see if apt-get update has already been run today - # it needs to have been run at least once on new installs! + #Check to see if apt-get update has already been run today + # it needs to have been run at least once on new installs! - timestamp=$(stat -c %Y /var/cache/apt/) - timestampAsDate=$(date -d @"$timestamp" "+%b %e") - today=$(date "+%b %e") + timestamp=$(stat -c %Y /var/cache/apt/) + timestampAsDate=$(date -d @"$timestamp" "+%b %e") + today=$(date "+%b %e") - if [ ! "$today" == "$timestampAsDate" ]; then - #update package lists - echo ":::" - echo -n "::: apt-get update has not been run today. Running now..." - $SUDO apt-get -qq update & spinner $! - echo " done!" - fi - echo ":::" - echo -n "::: Checking apt-get for upgraded packages...." - updatesToInstall=$($SUDO apt-get -s -o Debug::NoLocking=true upgrade | grep -c ^Inst) - echo " done!" - echo ":::" - if [[ $updatesToInstall -eq "0" ]]; then - echo "::: Your pi is up to date! Continuing with pi-hole installation..." - else - echo "::: There are $updatesToInstall updates availible for your pi!" - echo "::: We recommend you run 'sudo apt-get upgrade' after installing Pi-Hole! " - echo ":::" - fi + if [ ! "$today" == "$timestampAsDate" ]; then + #update package lists + echo ":::" + echo -n "::: apt-get update has not been run today. Running now..." + $SUDO apt-get -qq update & spinner $! + echo " done!" + fi + echo ":::" + echo -n "::: Checking apt-get for upgraded packages...." + updatesToInstall=$($SUDO apt-get -s -o Debug::NoLocking=true upgrade | grep -c ^Inst) + echo " done!" + echo ":::" + if [[ $updatesToInstall -eq "0" ]]; then + echo "::: Your pi is up to date! Continuing with pi-hole installation..." + else + echo "::: There are $updatesToInstall updates availible for your pi!" + echo "::: We recommend you run 'sudo apt-get upgrade' after installing Pi-Hole! " + echo ":::" + fi echo ":::" echo "::: Checking dependencies:" - dependencies=( dnsutils bc toilet figlet dnsmasq lighttpd php5-common php5-cgi php5 git curl unzip wget ) - for i in "${dependencies[@]}" - do - : - echo -n "::: Checking for $i..." - if [ "$(dpkg-query -W -f='${Status}' "$i" 2>/dev/null | grep -c "ok installed")" -eq 0 ]; then - echo -n " Not found! Installing...." - $SUDO apt-get -y -qq install "$i" > /dev/null & spinner $! - echo " done!" - else - echo " already installed!" - fi - done + dependencies=( dnsutils bc toilet figlet dnsmasq lighttpd php5-common php5-cgi php5 git curl unzip wget ) + for i in "${dependencies[@]}"; do + echo -n "::: Checking for $i..." + if [ "$(dpkg-query -W -f='${Status}' "$i" 2>/dev/null | grep -c "ok installed")" -eq 0 ]; then + echo -n " Not found! Installing...." + $SUDO apt-get -y -qq install "$i" > /dev/null & spinner $! + echo " done!" + else + echo " already installed!" + fi + done } getGitFiles() { - # Setup git repos for base files and web admin - echo ":::" - echo "::: Checking for existing base files..." - if is_repo $piholeFilesDir; then - make_repo $piholeFilesDir $piholeGitUrl - else - update_repo $piholeFilesDir - fi + # Setup git repos for base files and web admin + echo ":::" + echo "::: Checking for existing base files..." + if is_repo $piholeFilesDir; then + make_repo $piholeFilesDir $piholeGitUrl + else + update_repo $piholeFilesDir + fi - echo ":::" - echo "::: Checking for existing web interface..." - if is_repo $webInterfaceDir; then - make_repo $webInterfaceDir $webInterfaceGitUrl - else - update_repo $webInterfaceDir - fi + echo ":::" + echo "::: Checking for existing web interface..." + if is_repo $webInterfaceDir; then + make_repo $webInterfaceDir $webInterfaceGitUrl + else + update_repo $webInterfaceDir + fi } is_repo() { - # If the directory does not have a .git folder it is not a repo - echo -n "::: Checking $1 is a repo..." + # If the directory does not have a .git folder it is not a repo + echo -n "::: Checking $1 is a repo..." if [ -d "$1/.git" ]; then - echo " OK!" + echo " OK!" return 1 fi echo " not found!!" @@ -622,94 +618,94 @@ update_repo() { CreateLogFile() { - # Create logfiles if necessary - echo ":::" - $SUDO echo -n "::: Creating log file and changing owner to dnsmasq..." - if [ ! -f /var/log/pihole.log ]; then - $SUDO touch /var/log/pihole.log - $SUDO chmod 644 /var/log/pihole.log - $SUDO chown dnsmasq:root /var/log/pihole.log - $SUDO echo " done!" - else - $SUDO echo " already exists!" - fi + # Create logfiles if necessary + echo ":::" + $SUDO echo -n "::: Creating log file and changing owner to dnsmasq..." + if [ ! -f /var/log/pihole.log ]; then + $SUDO touch /var/log/pihole.log + $SUDO chmod 644 /var/log/pihole.log + $SUDO chown dnsmasq:root /var/log/pihole.log + $SUDO echo " done!" + else + $SUDO echo " already exists!" + fi } installPiholeWeb() { - # Install the web interface - $SUDO echo ":::" - $SUDO echo -n "::: Installing pihole custom index page..." - if [ -d "/var/www/html/pihole" ]; then - $SUDO echo " Existing page detected, not overwriting" - else - $SUDO mkdir /var/www/html/pihole - if [ -f /var/www/html/index.lighttpd.html ]; then - $SUDO mv /var/www/html/index.lighttpd.html /var/www/html/index.lighttpd.orig - else - printf "\n:::\tNo default index.lighttpd.html file found... not backing up" - fi - $SUDO cp /etc/.pihole/advanced/index.* /var/www/html/pihole/. - $SUDO echo " done!" - fi + # Install the web interface + $SUDO echo ":::" + $SUDO echo -n "::: Installing pihole custom index page..." + if [ -d "/var/www/html/pihole" ]; then + $SUDO echo " Existing page detected, not overwriting" + else + $SUDO mkdir /var/www/html/pihole + if [ -f /var/www/html/index.lighttpd.html ]; then + $SUDO mv /var/www/html/index.lighttpd.html /var/www/html/index.lighttpd.orig + else + printf "\n:::\tNo default index.lighttpd.html file found... not backing up" + fi + $SUDO cp /etc/.pihole/advanced/index.* /var/www/html/pihole/. + $SUDO echo " done!" + fi } installCron() { - # Install the cron job - $SUDO echo ":::" - $SUDO echo -n "::: Installing latest Cron script..." - $SUDO cp /etc/.pihole/advanced/pihole.cron /etc/cron.d/pihole - $SUDO echo " done!" + # Install the cron job + $SUDO echo ":::" + $SUDO echo -n "::: Installing latest Cron script..." + $SUDO cp /etc/.pihole/advanced/pihole.cron /etc/cron.d/pihole + $SUDO echo " done!" } runGravity() { - # Rub gravity.sh to build blacklists - $SUDO echo ":::" - $SUDO echo "::: Preparing to run gravity.sh to refresh hosts..." - if ls /etc/pihole/list* 1> /dev/null 2>&1; then - echo "::: Cleaning up previous install (preserving whitelist/blacklist)" - $SUDO rm /etc/pihole/list.* - fi - echo "::: Running gravity.sh" - $SUDO /opt/pihole/gravity.sh + # Rub gravity.sh to build blacklists + $SUDO echo ":::" + $SUDO echo "::: Preparing to run gravity.sh to refresh hosts..." + if ls /etc/pihole/list* 1> /dev/null 2>&1; then + echo "::: Cleaning up previous install (preserving whitelist/blacklist)" + $SUDO rm /etc/pihole/list.* + fi + echo "::: Running gravity.sh" + $SUDO /opt/pihole/gravity.sh } setUser(){ - # Check if user pihole exists and create if not - echo "::: Checking if user 'pihole' exists..." - if id -u pihole > /dev/null 2>&1; then - echo "::: User 'pihole' already exists" - else + # Check if user pihole exists and create if not + echo "::: Checking if user 'pihole' exists..." + if id -u pihole > /dev/null 2>&1; then + echo "::: User 'pihole' already exists" + else echo "::: User 'pihole' doesn't exist. Creating..." - $SUDO useradd -r -s /usr/sbin/nologin pihole - fi + $SUDO useradd -r -s /usr/sbin/nologin pihole + fi } installPihole() { - # Install base files and web interface - checkForDependencies # done - stopServices - setUser - $SUDO mkdir -p /etc/pihole/ - if [ ! -d "/var/www/html" ]; then - $SUDO mkdir -p /var/www/html - fi - $SUDO chown www-data:www-data /var/www/html - $SUDO chmod 775 /var/www/html - $SUDO usermod -a -G www-data pihole - $SUDO lighty-enable-mod fastcgi fastcgi-php > /dev/null + # Install base files and web interface + checkForDependencies # done + stopServices + setUser + $SUDO mkdir -p /etc/pihole/ + if [ ! -d "/var/www/html" ]; then + $SUDO mkdir -p /var/www/html + fi + $SUDO chown www-data:www-data /var/www/html + $SUDO chmod 775 /var/www/html + $SUDO usermod -a -G www-data pihole + $SUDO lighty-enable-mod fastcgi fastcgi-php > /dev/null - getGitFiles - installScripts - installConfigs - CreateLogFile - installPiholeWeb - installCron - runGravity + getGitFiles + installScripts + installConfigs + CreateLogFile + installPiholeWeb + installCron + runGravity } displayFinalMessage() { - # Final completion message to user - whiptail --msgbox --backtitle "Make it so." --title "Installation Complete!" "Configure your devices to use the Pi-hole as their DNS server using: + # Final completion message to user + whiptail --msgbox --backtitle "Make it so." --title "Installation Complete!" "Configure your devices to use the Pi-hole as their DNS server using: $IPv4addr $piholeIPv6 From c6fb0bad4b71f103aa90557bab6e2815007d71b7 Mon Sep 17 00:00:00 2001 From: Promofaux Date: Sun, 3 Apr 2016 21:45:00 +0100 Subject: [PATCH 85/96] change spinstr to match spinstr in basic-install.sh --- automated install/uninstall.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/automated install/uninstall.sh b/automated install/uninstall.sh index de950a48..7082713a 100755 --- a/automated install/uninstall.sh +++ b/automated install/uninstall.sh @@ -29,7 +29,7 @@ spinner() { local pid=$1 local delay=0.50 - local spinstr='|/-\' + local spinstr='/-\|' while [ "$(ps a | awk '{print $1}' | grep "$pid")" ]; do local temp=${spinstr#?} printf " [%c] " "$spinstr" From 0e6e8040ba661cb24e1258febfccd28d13f52793 Mon Sep 17 00:00:00 2001 From: Promofaux Date: Sun, 3 Apr 2016 21:54:16 +0100 Subject: [PATCH 86/96] Change spinstr to match install and uninstall scripts --- gravity.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gravity.sh b/gravity.sh index c03cc1da..4f6713c1 100755 --- a/gravity.sh +++ b/gravity.sh @@ -74,7 +74,7 @@ fi spinner() { local pid=$1 local delay=0.50 - local spinstr='|/-\' + local spinstr='/-|' while [ "$(ps a | awk '{print $1}' | grep "$pid")" ]; do local temp=${spinstr#?} printf " [%c] " "$spinstr" From d710b97276d3c585d8e04c1ec3646b0f536622be Mon Sep 17 00:00:00 2001 From: Promofaux Date: Sun, 3 Apr 2016 22:10:04 +0100 Subject: [PATCH 87/96] Fix issue raised in #421 (Use variable instead of hardcoded path, do not delete user created pihole.conf!) --- gravity.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gravity.sh b/gravity.sh index 4f6713c1..c8a0d842 100755 --- a/gravity.sh +++ b/gravity.sh @@ -315,7 +315,7 @@ function gravity_reload() { #Clear no longer needed files... echo ":::" echo -n "::: Cleaning up un-needed files..." - $SUDO rm /etc/pihole/pihole.* + $SUDO rm $piholeDir/pihole.*.txt echo " done!" # Reload hosts file From 69e8c014c396bc7c25dd993b83fccfac6a6f25a1 Mon Sep 17 00:00:00 2001 From: nate Date: Sun, 3 Apr 2016 17:25:48 -0500 Subject: [PATCH 88/96] Indentation fix --- automated install/basic-install.sh | 1024 ++++++++++++++-------------- 1 file changed, 506 insertions(+), 518 deletions(-) diff --git a/automated install/basic-install.sh b/automated install/basic-install.sh index 6a618338..cd408887 100755 --- a/automated install/basic-install.sh +++ b/automated install/basic-install.sh @@ -50,28 +50,28 @@ dhcpcdFile=/etc/dhcpcd.conf # Must be root to install echo ":::" if [[ $EUID -eq 0 ]];then - echo "::: You are root." + echo "::: You are root." else - echo "::: sudo will be used for the install." - # Check if it is actually installed - # If it isn't, exit because the install cannot complete - if [[ $(dpkg-query -s sudo) ]];then - export SUDO="sudo" - else - echo "::: Please install sudo or run this as root." - exit 1 - fi + echo "::: sudo will be used for the install." + # Check if it is actually installed + # If it isn't, exit because the install cannot complete + if [[ $(dpkg-query -s sudo) ]];then + export SUDO="sudo" + else + echo "::: Please install sudo or run this as root." + exit 1 + fi fi ####### FUNCTIONS ########## spinner() { - local pid=$1 + local pid=$1 local delay=0.50 local spinstr='/-\|' while [ "$(ps a | awk '{print $1}' | grep "$pid")" ]; do - local temp=${spinstr#?} + local temp=${spinstr#?} printf " [%c] " "$spinstr" local spinstr=$temp${spinstr%"$temp"} sleep $delay @@ -81,523 +81,511 @@ spinner() } backupLegacyPihole() { - # This function detects and backups the pi-hole v1 files. It will not do anything to the current version files. - if [[ -f /etc/dnsmasq.d/adList.conf ]];then - echo "::: Original Pi-hole detected. Initiating sub space transport" - $SUDO mkdir -p /etc/pihole/original/ - $SUDO mv /etc/dnsmasq.d/adList.conf /etc/pihole/original/adList.conf."$(date "+%Y-%m-%d")" - $SUDO mv /etc/dnsmasq.conf /etc/pihole/original/dnsmasq.conf."$(date "+%Y-%m-%d")" - $SUDO mv /etc/resolv.conf /etc/pihole/original/resolv.conf."$(date "+%Y-%m-%d")" - $SUDO mv /etc/lighttpd/lighttpd.conf /etc/pihole/original/lighttpd.conf."$(date "+%Y-%m-%d")" - $SUDO mv /var/www/pihole/index.html /etc/pihole/original/index.html."$(date "+%Y-%m-%d")" - if [ ! -d /opt/pihole ]; then - $SUDO mkdir /opt/pihole - $SUDO chown "$USER":root /opt/pihole - $SUDO chmod u+srwx /opt/pihole - fi - $SUDO mv /opt/pihole/gravity.sh /etc/pihole/original/gravity.sh."$(date "+%Y-%m-%d")" - else - : - fi + # This function detects and backups the pi-hole v1 files. It will not do anything to the current version files. + if [[ -f /etc/dnsmasq.d/adList.conf ]];then + echo "::: Original Pi-hole detected. Initiating sub space transport" + $SUDO mkdir -p /etc/pihole/original/ + $SUDO mv /etc/dnsmasq.d/adList.conf /etc/pihole/original/adList.conf."$(date "+%Y-%m-%d")" + $SUDO mv /etc/dnsmasq.conf /etc/pihole/original/dnsmasq.conf."$(date "+%Y-%m-%d")" + $SUDO mv /etc/resolv.conf /etc/pihole/original/resolv.conf."$(date "+%Y-%m-%d")" + $SUDO mv /etc/lighttpd/lighttpd.conf /etc/pihole/original/lighttpd.conf."$(date "+%Y-%m-%d")" + $SUDO mv /var/www/pihole/index.html /etc/pihole/original/index.html."$(date "+%Y-%m-%d")" + if [ ! -d /opt/pihole ]; then + $SUDO mkdir /opt/pihole + $SUDO chown "$USER":root /opt/pihole + $SUDO chmod u+srwx /opt/pihole + fi + $SUDO mv /opt/pihole/gravity.sh /etc/pihole/original/gravity.sh."$(date "+%Y-%m-%d")" + else + : + fi } welcomeDialogs() { - # Display the welcome dialog - whiptail --msgbox --backtitle "Welcome" --title "Pi-hole automated installer" "This installer will transform your Raspberry Pi into a network-wide ad blocker!" $r $c + # Display the welcome dialog + whiptail --msgbox --backtitle "Welcome" --title "Pi-hole automated installer" "This installer will transform your Raspberry Pi into a network-wide ad blocker!" $r $c - # Support for a part-time dev - whiptail --msgbox --backtitle "Plea" --title "Free and open source" "The Pi-hole is free, but powered by your donations: http://pi-hole.net/donate" $r $c + # Support for a part-time dev + whiptail --msgbox --backtitle "Plea" --title "Free and open source" "The Pi-hole is free, but powered by your donations: http://pi-hole.net/donate" $r $c - # Explain the need for a static address - whiptail --msgbox --backtitle "Initating network interface" --title "Static IP Needed" "The Pi-hole is a SERVER so it needs a STATIC IP ADDRESS to function properly. - In the next section, you can choose to use your current network settings (DHCP) or to manually edit them." $r $c + # Explain the need for a static address + whiptail --msgbox --backtitle "Initating network interface" --title "Static IP Needed" "The Pi-hole is a SERVER so it needs a STATIC IP ADDRESS to function properly. + In the next section, you can choose to use your current network settings (DHCP) or to manually edit them." $r $c } verifyFreeDiskSpace() { - # 50MB is the minimum space needed (45MB install (includes web admin bootstrap/jquery libraries etc) + 5MB one day of logs.) - requiredFreeBytes=51200 + # 50MB is the minimum space needed (45MB install (includes web admin bootstrap/jquery libraries etc) + 5MB one day of logs.) + requiredFreeBytes=51200 - existingFreeBytes=$(df -lk / 2>&1 | awk '{print $4}' | head -2 | tail -1) - if ! [[ "$existingFreeBytes" =~ ^([0-9])+$ ]]; then - existingFreeBytes=$(df -lk /dev 2>&1 | awk '{print $4}' | head -2 | tail -1) - fi + existingFreeBytes=$(df -lk / 2>&1 | awk '{print $4}' | head -2 | tail -1) + if ! [[ "$existingFreeBytes" =~ ^([0-9])+$ ]]; then + existingFreeBytes=$(df -lk /dev 2>&1 | awk '{print $4}' | head -2 | tail -1) + fi - if [[ $existingFreeBytes -lt $requiredFreeBytes ]]; then - whiptail --msgbox --backtitle "Insufficient Disk Space" --title "Insufficient Disk Space" "\nYour system appears to be low on disk space. pi-hole recomends a minimum of $requiredFreeBytes Bytes.\nYou only have $existingFreeBytes Free.\n\nIf this is a new install you may need to expand your disk.\n\nTry running:\n 'sudo raspi-config'\nChoose the 'expand file system option'\n\nAfter rebooting, run this installation again.\n\ncurl -L install.pi-hole.net | bash\n" $r $c - echo "$existingFreeBytes is less than $requiredFreeBytes" - echo "Insufficient free space, exiting..." - exit 1 - fi + if [[ $existingFreeBytes -lt $requiredFreeBytes ]]; then + whiptail --msgbox --backtitle "Insufficient Disk Space" --title "Insufficient Disk Space" "\nYour system appears to be low on disk space. pi-hole recomends a minimum of $requiredFreeBytes Bytes.\nYou only have $existingFreeBytes Free.\n\nIf this is a new install you may need to expand your disk.\n\nTry running:\n 'sudo raspi-config'\nChoose the 'expand file system option'\n\nAfter rebooting, run this installation again.\n\ncurl -L install.pi-hole.net | bash\n" $r $c + echo "$existingFreeBytes is less than $requiredFreeBytes" + echo "Insufficient free space, exiting..." + exit 1 + fi } chooseInterface() { - # Turn the available interfaces into an array so it can be used with a whiptail dialog - interfacesArray=() - firstloop=1 + # Turn the available interfaces into an array so it can be used with a whiptail dialog + interfacesArray=() + firstloop=1 - while read -r line - do - mode="OFF" - if [[ $firstloop -eq 1 ]]; then - firstloop=0 - mode="ON" - fi - interfacesArray+=("$line" "available" "$mode") - done <<< "$availableInterfaces" + while read -r line + do + mode="OFF" + if [[ $firstloop -eq 1 ]]; then + firstloop=0 + mode="ON" + fi + interfacesArray+=("$line" "available" "$mode") + done <<< "$availableInterfaces" - # Find out how many interfaces are available to choose from - interfaceCount=$(echo "$availableInterfaces" | wc -l) - chooseInterfaceCmd=(whiptail --separate-output --radiolist "Choose An Interface" $r $c $interfaceCount) - chooseInterfaceOptions=$("${chooseInterfaceCmd[@]}" "${interfacesArray[@]}" 2>&1 >/dev/tty) - if [[ $? = 0 ]];then - for desiredInterface in $chooseInterfaceOptions - do - piholeInterface=$desiredInterface - echo "::: Using interface: $piholeInterface" - echo "${piholeInterface}" > /tmp/piholeINT - done - else - echo "::: Cancel selected, exiting...." - exit 1 - fi + # Find out how many interfaces are available to choose from + interfaceCount=$(echo "$availableInterfaces" | wc -l) + chooseInterfaceCmd=(whiptail --separate-output --radiolist "Choose An Interface" $r $c $interfaceCount) + chooseInterfaceOptions=$("${chooseInterfaceCmd[@]}" "${interfacesArray[@]}" 2>&1 >/dev/tty) + if [[ $? = 0 ]]; then + for desiredInterface in $chooseInterfaceOptions + do + piholeInterface=$desiredInterface + echo "::: Using interface: $piholeInterface" + echo "${piholeInterface}" > /tmp/piholeINT + done + else + echo "::: Cancel selected, exiting...." + exit 1 + fi } cleanupIPv6() { - # Removes IPv6 indicator file if we are not using IPv6 - if [ -f "/etc/pihole/.useIPv6" ] && [ ! "$useIPv6" ]; then - rm /etc/pihole/.useIPv6 - fi + # Removes IPv6 indicator file if we are not using IPv6 + if [ -f "/etc/pihole/.useIPv6" ] && [ ! "$useIPv6" ]; then + rm /etc/pihole/.useIPv6 + fi } use4andor6() { - # Let use select IPv4 and/or IPv6 - cmd=(whiptail --separate-output --checklist "Select Protocols" $r $c 2) - options=(IPv4 "Block ads over IPv4" on - IPv6 "Block ads over IPv6" off) - choices=$("${cmd[@]}" "${options[@]}" 2>&1 >/dev/tty) - if [[ $? = 0 ]];then - for choice in $choices - do - case $choice in - IPv4 ) useIPv4=true;; - IPv6 ) useIPv6=true;; - esac - done + # Let use select IPv4 and/or IPv6 + cmd=(whiptail --separate-output --checklist "Select Protocols" $r $c 2) + options=(IPv4 "Block ads over IPv4" on + IPv6 "Block ads over IPv6" off) + choices=$("${cmd[@]}" "${options[@]}" 2>&1 >/dev/tty) + if [[ $? = 0 ]];then + for choice in $choices + do + case $choice in + IPv4 ) useIPv4=true;; + IPv6 ) useIPv6=true;; + esac + done - if [ $useIPv4 ] && [ ! $useIPv6 ]; then - getStaticIPv4Settings - setStaticIPv4 - echo "::: Using IPv4 on $IPv4addr" - echo "::: IPv6 will NOT be used." - fi - if [ ! $useIPv4 ] && [ $useIPv6 ]; then - useIPv6dialog - echo "::: IPv4 will NOT be used." - echo "::: Using IPv6 on $piholeIPv6" - fi - if [ $useIPv4 ] && [ $useIPv6 ]; then - getStaticIPv4Settings - setStaticIPv4 - useIPv6dialog - echo "::: Using IPv4 on $IPv4addr" - echo "::: Using IPv6 on $piholeIPv6" - fi - if [ ! $useIPv4 ] && [ ! $useIPv6 ]; then - echo "::: Cannot continue, neither IPv4 or IPv6 selected" - echo "::: Exiting" - exit 1 - fi - cleanupIPv6 - else - echo "::: Cancel selected. Exiting..." - exit 1 - fi + if [ $useIPv4 ] && [ ! $useIPv6 ]; then + getStaticIPv4Settings + setStaticIPv4 + echo "::: Using IPv4 on $IPv4addr" + echo "::: IPv6 will NOT be used." + fi + if [ ! $useIPv4 ] && [ $useIPv6 ]; then + useIPv6dialog + echo "::: IPv4 will NOT be used." + echo "::: Using IPv6 on $piholeIPv6" + fi + if [ $useIPv4 ] && [ $useIPv6 ]; then + getStaticIPv4Settings + setStaticIPv4 + useIPv6dialog + echo "::: Using IPv4 on $IPv4addr" + echo "::: Using IPv6 on $piholeIPv6" + fi + if [ ! $useIPv4 ] && [ ! $useIPv6 ]; then + echo "::: Cannot continue, neither IPv4 or IPv6 selected" + echo "::: Exiting" + exit 1 + fi + cleanupIPv6 + else + echo "::: Cancel selected. Exiting..." + exit 1 + fi } useIPv6dialog() { - # Show the IPv6 address used for blocking - piholeIPv6=$(ip -6 route get 2001:4860:4860::8888 | awk -F " " '{ for(i=1;i<=NF;i++) if ($i == "src") print $(i+1) }') - whiptail --msgbox --backtitle "IPv6..." --title "IPv6 Supported" "$piholeIPv6 will be used to block ads." $r $c + # Show the IPv6 address used for blocking + piholeIPv6=$(ip -6 route get 2001:4860:4860::8888 | awk -F " " '{ for(i=1;i<=NF;i++) if ($i == "src") print $(i+1) }') + whiptail --msgbox --backtitle "IPv6..." --title "IPv6 Supported" "$piholeIPv6 will be used to block ads." $r $c - $SUDO touch /etc/pihole/.useIPv6 + $SUDO touch /etc/pihole/.useIPv6 } getStaticIPv4Settings() { - # Ask if the user wants to use DHCP settings as their static IP - if (whiptail --backtitle "Calibrating network interface" --title "Static IP Address" --yesno "Do you want to use your current network settings as a static address? - IP address: $IPv4addr - Gateway: $IPv4gw" $r $c) then - # If they choose yes, let the user know that the IP address will not be available via DHCP and may cause a conflict. - whiptail --msgbox --backtitle "IP information" --title "FYI: IP Conflict" "It is possible your router could still try to assign this IP to a device, which would cause a conflict. But in most cases the router is smart enough to not do that. - If you are worried, either manually set the address, or modify the DHCP reservation pool so it does not include the IP you want. - It is also possible to use a DHCP reservation, but if you are going to do that, you might as well set a static address." $r $c - # Nothing else to do since the variables are already set above - else - # Otherwise, we need to ask the user to input their desired settings. - # Start by getting the IPv4 address (pre-filling it with info gathered from DHCP) - # Start a loop to let the user enter their information with the chance to go back and edit it if necessary - until [[ $ipSettingsCorrect = True ]] - do - # Ask for the IPv4 address - IPv4addr=$(whiptail --backtitle "Calibrating network interface" --title "IPv4 address" --inputbox "Enter your desired IPv4 address" $r $c "$IPv4addr" 3>&1 1>&2 2>&3) - if [[ $? = 0 ]];then - echo "::: Your static IPv4 address: $IPv4addr" - # Ask for the gateway - IPv4gw=$(whiptail --backtitle "Calibrating network interface" --title "IPv4 gateway (router)" --inputbox "Enter your desired IPv4 default gateway" $r $c "$IPv4gw" 3>&1 1>&2 2>&3) - if [[ $? = 0 ]];then - echo "::: Your static IPv4 gateway: $IPv4gw" - # Give the user a chance to review their settings before moving on - if (whiptail --backtitle "Calibrating network interface" --title "Static IP Address" --yesno "Are these settings correct? - IP address: $IPv4addr - Gateway: $IPv4gw" $r $c)then - # If the settings are correct, then we need to set the piholeIP - # Saving it to a temporary file us to retrieve it later when we run the gravity.sh script - echo "${IPv4addr%/*}" > /tmp/piholeIP - echo "$piholeInterface" > /tmp/piholeINT - # After that's done, the loop ends and we move on - ipSettingsCorrect=True - else - # If the settings are wrong, the loop continues - ipSettingsCorrect=False - fi - else - # Cancelling gateway settings window - ipSettingsCorrect=False - echo "::: Cancel selected. Exiting..." - exit 1 - fi - else - # Cancelling IPv4 settings window - ipSettingsCorrect=False - echo "::: Cancel selected. Exiting..." - exit 1 - fi - done - # End the if statement for DHCP vs. static - fi + # Ask if the user wants to use DHCP settings as their static IP + if (whiptail --backtitle "Calibrating network interface" --title "Static IP Address" --yesno "Do you want to use your current network settings as a static address? + IP address: $IPv4addr + Gateway: $IPv4gw" $r $c) then + # If they choose yes, let the user know that the IP address will not be available via DHCP and may cause a conflict. + whiptail --msgbox --backtitle "IP information" --title "FYI: IP Conflict" "It is possible your router could still try to assign this IP to a device, which would cause a conflict. But in most cases the router is smart enough to not do that. + If you are worried, either manually set the address, or modify the DHCP reservation pool so it does not include the IP you want. + It is also possible to use a DHCP reservation, but if you are going to do that, you might as well set a static address." $r $c + # Nothing else to do since the variables are already set above + else + # Otherwise, we need to ask the user to input their desired settings. + # Start by getting the IPv4 address (pre-filling it with info gathered from DHCP) + # Start a loop to let the user enter their information with the chance to go back and edit it if necessary + until [[ $ipSettingsCorrect = True ]] + do + # Ask for the IPv4 address + IPv4addr=$(whiptail --backtitle "Calibrating network interface" --title "IPv4 address" --inputbox "Enter your desired IPv4 address" $r $c "$IPv4addr" 3>&1 1>&2 2>&3) + if [[ $? = 0 ]];then + echo "::: Your static IPv4 address: $IPv4addr" + # Ask for the gateway + IPv4gw=$(whiptail --backtitle "Calibrating network interface" --title "IPv4 gateway (router)" --inputbox "Enter your desired IPv4 default gateway" $r $c "$IPv4gw" 3>&1 1>&2 2>&3) + if [[ $? = 0 ]];then + echo "::: Your static IPv4 gateway: $IPv4gw" + # Give the user a chance to review their settings before moving on + if (whiptail --backtitle "Calibrating network interface" --title "Static IP Address" --yesno "Are these settings correct? + IP address: $IPv4addr + Gateway: $IPv4gw" $r $c)then + # If the settings are correct, then we need to set the piholeIP + # Saving it to a temporary file us to retrieve it later when we run the gravity.sh script + echo "${IPv4addr%/*}" > /tmp/piholeIP + echo "$piholeInterface" > /tmp/piholeINT + # After that's done, the loop ends and we move on + ipSettingsCorrect=True + else + # If the settings are wrong, the loop continues + ipSettingsCorrect=False + fi + else + # Cancelling gateway settings window + ipSettingsCorrect=False + echo "::: Cancel selected. Exiting..." + exit 1 + fi + else + # Cancelling IPv4 settings window + ipSettingsCorrect=False + echo "::: Cancel selected. Exiting..." + exit 1 + fi + done + # End the if statement for DHCP vs. static + fi } setDHCPCD() { - # Append these lines to dhcpcd.conf to enable a static IP - echo "::: interface $piholeInterface - static ip_address=$IPv4addr - static routers=$IPv4gw - static domain_name_servers=$IPv4gw" | $SUDO tee -a $dhcpcdFile >/dev/null + # Append these lines to dhcpcd.conf to enable a static IP + echo "::: interface $piholeInterface + static ip_address=$IPv4addr + static routers=$IPv4gw + static domain_name_servers=$IPv4gw" | $SUDO tee -a $dhcpcdFile >/dev/null } setStaticIPv4() { - # Tries to set the IPv4 address - if grep -q "$IPv4addr" $dhcpcdFile; then - # address already set, noop - : - else - setDHCPCD - $SUDO ip addr replace dev "$piholeInterface" "$IPv4addr" - echo ":::" - echo "::: Setting IP to $IPv4addr. You may need to restart after the install is complete." - echo ":::" - fi + # Tries to set the IPv4 address + if grep -q "$IPv4addr" $dhcpcdFile; then + # address already set, noop + : + else + setDHCPCD + $SUDO ip addr replace dev "$piholeInterface" "$IPv4addr" + echo ":::" + echo "::: Setting IP to $IPv4addr. You may need to restart after the install is complete." + echo ":::" + fi } function valid_ip() { - local ip=$1 - local stat=1 + local ip=$1 + local stat=1 - if [[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then - OIFS=$IFS - IFS='.' - ip=($ip) - IFS=$OIFS - [[ ${ip[0]} -le 255 && ${ip[1]} -le 255 \ - && ${ip[2]} -le 255 && ${ip[3]} -le 255 ]] - stat=$? - fi - return $stat + if [[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then + OIFS=$IFS + IFS='.' + ip=($ip) + IFS=$OIFS + [[ ${ip[0]} -le 255 && ${ip[1]} -le 255 \ + && ${ip[2]} -le 255 && ${ip[3]} -le 255 ]] + stat=$? + fi + return $stat } setDNS(){ - DNSChoseCmd=(whiptail --separate-output --radiolist "Select Upstream DNS Provider. To use your own, select Custom." $r $c 6) - DNSChooseOptions=(Google "" on - OpenDNS "" off - Level3 "" off - Norton "" off - Comodo "" off - Custom "" off) - DNSchoices=$("${DNSChoseCmd[@]}" "${DNSChooseOptions[@]}" 2>&1 >/dev/tty) - if [[ $? = 0 ]];then - case $DNSchoices in - Google) - echo "::: Using Google DNS servers." - piholeDNS1="8.8.8.8" - piholeDNS2="8.8.4.4" - ;; - OpenDNS) - echo "::: Using OpenDNS servers." - piholeDNS1="208.67.222.222" - piholeDNS2="208.67.220.220" - ;; - Level3) - echo "::: Using Level3 servers." - piholeDNS1="4.2.2.1" - piholeDNS2="4.2.2.2" - ;; - Norton) - echo "::: Using Norton ConnectSafe servers." - piholeDNS1="199.85.126.10" - piholeDNS2="199.85.127.10" - ;; - Comodo) - echo "::: Using Comodo Secure servers." - piholeDNS1="8.26.56.26" - piholeDNS2="8.20.247.20" - ;; - Custom) - until [[ $DNSSettingsCorrect = True ]] - do - - strInvalid="Invalid" - - if [ ! $piholeDNS1 ]; then - if [ ! $piholeDNS2 ]; then - prePopulate="" - else - prePopulate=", $piholeDNS2" - fi - elif [ $piholeDNS1 ] && [ ! $piholeDNS2 ]; then - prePopulate="$piholeDNS1" - elif [ $piholeDNS1 ] && [ $piholeDNS2 ]; then - prePopulate="$piholeDNS1, $piholeDNS2" - fi - - piholeDNS=$(whiptail --backtitle "Specify Upstream DNS Provider(s)" --inputbox "Enter your desired upstream DNS provider(s), seperated by a comma.\n\nFor example '8.8.8.8, 8.8.4.4'" $r $c "$prePopulate" 3>&1 1>&2 2>&3) - if [[ $? = 0 ]];then - piholeDNS1=$(echo "$piholeDNS" | sed 's/[, \t]\+/,/g' | awk -F, '{print$1}') - piholeDNS2=$(echo "$piholeDNS" | sed 's/[, \t]\+/,/g' | awk -F, '{print$2}') - - if ! valid_ip "$piholeDNS1" || [ ! "$piholeDNS1" ]; then - piholeDNS1=$strInvalid - fi - - if ! valid_ip "$piholeDNS2" && [ "$piholeDNS2" ]; then - piholeDNS2=$strInvalid - fi - - else - echo "::: Cancel selected, exiting...." - exit 1 - fi - - if [[ $piholeDNS1 == "$strInvalid" ]] || [[ $piholeDNS2 == "$strInvalid" ]]; then - whiptail --msgbox --backtitle "Invalid IP" --title "Invalid IP" "One or both entered IP addresses were invalid. Please try again.\n\n DNS Server 1: $piholeDNS1\n DNS Server 2: $piholeDNS2" $r $c - - if [[ $piholeDNS1 == "$strInvalid" ]]; then - piholeDNS1="" - fi - - if [[ $piholeDNS2 == "$strInvalid" ]]; then - piholeDNS2="" - fi - - DNSSettingsCorrect=False - else - if (whiptail --backtitle "Specify Upstream DNS Provider(s)" --title "Upstream DNS Provider(s)" --yesno "Are these settings correct?\n DNS Server 1: $piholeDNS1\n DNS Server 2: $piholeDNS2" $r $c) then - DNSSettingsCorrect=True - else - # If the settings are wrong, the loop continues - DNSSettingsCorrect=False - fi - fi - done - ;; - esac - else - echo "::: Cancel selected. Exiting..." - exit 1 - fi + DNSChoseCmd=(whiptail --separate-output --radiolist "Select Upstream DNS Provider. To use your own, select Custom." $r $c 6) + DNSChooseOptions=(Google "" on + OpenDNS "" off + Level3 "" off + Norton "" off + Comodo "" off + Custom "" off) + DNSchoices=$("${DNSChoseCmd[@]}" "${DNSChooseOptions[@]}" 2>&1 >/dev/tty) + if [[ $? = 0 ]];then + case $DNSchoices in + Google) + echo "::: Using Google DNS servers." + piholeDNS1="8.8.8.8" + piholeDNS2="8.8.4.4" + ;; + OpenDNS) + echo "::: Using OpenDNS servers." + piholeDNS1="208.67.222.222" + piholeDNS2="208.67.220.220" + ;; + Level3) + echo "::: Using Level3 servers." + piholeDNS1="4.2.2.1" + piholeDNS2="4.2.2.2" + ;; + Norton) + echo "::: Using Norton ConnectSafe servers." + piholeDNS1="199.85.126.10" + piholeDNS2="199.85.127.10" + ;; + Comodo) + echo "::: Using Comodo Secure servers." + piholeDNS1="8.26.56.26" + piholeDNS2="8.20.247.20" + ;; + Custom) + until [[ $DNSSettingsCorrect = True ]] + do + strInvalid="Invalid" + if [ ! $piholeDNS1 ]; then + if [ ! $piholeDNS2 ]; then + prePopulate="" + else + prePopulate=", $piholeDNS2" + fi + elif [ $piholeDNS1 ] && [ ! $piholeDNS2 ]; then + prePopulate="$piholeDNS1" + elif [ $piholeDNS1 ] && [ $piholeDNS2 ]; then + prePopulate="$piholeDNS1, $piholeDNS2" + fi + piholeDNS=$(whiptail --backtitle "Specify Upstream DNS Provider(s)" --inputbox "Enter your desired upstream DNS provider(s), seperated by a comma.\n\nFor example '8.8.8.8, 8.8.4.4'" $r $c "$prePopulate" 3>&1 1>&2 2>&3) + if [[ $? = 0 ]];then + piholeDNS1=$(echo "$piholeDNS" | sed 's/[, \t]\+/,/g' | awk -F, '{print$1}') + piholeDNS2=$(echo "$piholeDNS" | sed 's/[, \t]\+/,/g' | awk -F, '{print$2}') + if ! valid_ip "$piholeDNS1" || [ ! "$piholeDNS1" ]; then + piholeDNS1=$strInvalid + fi + if ! valid_ip "$piholeDNS2" && [ "$piholeDNS2" ]; then + piholeDNS2=$strInvalid + fi + else + echo "::: Cancel selected, exiting...." + exit 1 + fi + if [[ $piholeDNS1 == "$strInvalid" ]] || [[ $piholeDNS2 == "$strInvalid" ]]; then + whiptail --msgbox --backtitle "Invalid IP" --title "Invalid IP" "One or both entered IP addresses were invalid. Please try again.\n\n DNS Server 1: $piholeDNS1\n DNS Server 2: $piholeDNS2" $r $c + if [[ $piholeDNS1 == "$strInvalid" ]]; then + piholeDNS1="" + fi + if [[ $piholeDNS2 == "$strInvalid" ]]; then + piholeDNS2="" + fi + DNSSettingsCorrect=False + else + if (whiptail --backtitle "Specify Upstream DNS Provider(s)" --title "Upstream DNS Provider(s)" --yesno "Are these settings correct?\n DNS Server 1: $piholeDNS1\n DNS Server 2: $piholeDNS2" $r $c) then + DNSSettingsCorrect=True + else + # If the settings are wrong, the loop continues + DNSSettingsCorrect=False + fi + fi + done + ;; + esac + else + echo "::: Cancel selected. Exiting..." + exit 1 + fi } versionCheckDNSmasq(){ - # Check if /etc/dnsmasq.conf is from pihole. If so replace with an original and install new in .d directory - dnsFile1="/etc/dnsmasq.conf" - dnsFile2="/etc/dnsmasq.conf.orig" - dnsSearch="addn-hosts=/etc/pihole/gravity.list" + # Check if /etc/dnsmasq.conf is from pihole. If so replace with an original and install new in .d directory + dnsFile1="/etc/dnsmasq.conf" + dnsFile2="/etc/dnsmasq.conf.orig" + dnsSearch="addn-hosts=/etc/pihole/gravity.list" + defaultFile="/etc/.pihole/advanced/dnsmasq.conf.original" + newFileToInstall="/etc/.pihole/advanced/01-pihole.conf" + newFileFinalLocation="/etc/dnsmasq.d/01-pihole.conf" - defaultFile="/etc/.pihole/advanced/dnsmasq.conf.original" - newFileToInstall="/etc/.pihole/advanced/01-pihole.conf" - newFileFinalLocation="/etc/dnsmasq.d/01-pihole.conf" + if [ -f $dnsFile1 ]; then + echo -n "::: Existing dnsmasq.conf found..." + if grep -q $dnsSearch $dnsFile1; then + echo " it is from a previous pi-hole install." + echo -n "::: Backing up dnsmasq.conf to dnsmasq.conf.orig..." + $SUDO mv -f $dnsFile1 $dnsFile2 + echo " done." + echo -n "::: Restoring default dnsmasq.conf..." + $SUDO cp $defaultFile $dnsFile1 + echo " done." + else + echo " it is not a pi-hole file, leaving alone!" + fi + else + echo -n "::: No dnsmasq.conf found.. restoring default dnsmasq.conf..." + $SUDO cp $defaultFile $dnsFile1 + echo " done." + fi - if [ -f $dnsFile1 ]; then - echo -n "::: Existing dnsmasq.conf found..." - if grep -q $dnsSearch $dnsFile1; then - echo " it is from a previous pi-hole install." - echo -n "::: Backing up dnsmasq.conf to dnsmasq.conf.orig..." - $SUDO mv -f $dnsFile1 $dnsFile2 - echo " done." - echo -n "::: Restoring default dnsmasq.conf..." - $SUDO cp $defaultFile $dnsFile1 - echo " done." - else - echo " it is not a pi-hole file, leaving alone!" - fi - else - echo -n "::: No dnsmasq.conf found.. restoring default dnsmasq.conf..." - $SUDO cp $defaultFile $dnsFile1 - echo " done." - fi - - echo -n "::: Copying 01-pihole.conf to /etc/dnsmasq.d/01-pihole.conf..." - $SUDO cp $newFileToInstall $newFileFinalLocation - echo " done." - $SUDO sed -i "s/@INT@/$piholeInterface/" $newFileFinalLocation - if [[ "$piholeDNS1" != "" ]]; then - $SUDO sed -i "s/@DNS1@/$piholeDNS1/" $newFileFinalLocation - else - $SUDO sed -i '/^server=@DNS1@/d' $newFileFinalLocation - fi - if [[ "$piholeDNS2" != "" ]]; then - $SUDO sed -i "s/@DNS2@/$piholeDNS2/" $newFileFinalLocation - else - $SUDO sed -i '/^server=@DNS2@/d' $newFileFinalLocation - fi + echo -n "::: Copying 01-pihole.conf to /etc/dnsmasq.d/01-pihole.conf..." + $SUDO cp $newFileToInstall $newFileFinalLocation + echo " done." + $SUDO sed -i "s/@INT@/$piholeInterface/" $newFileFinalLocation + if [[ "$piholeDNS1" != "" ]]; then + $SUDO sed -i "s/@DNS1@/$piholeDNS1/" $newFileFinalLocation + else + $SUDO sed -i '/^server=@DNS1@/d' $newFileFinalLocation + fi + if [[ "$piholeDNS2" != "" ]]; then + $SUDO sed -i "s/@DNS2@/$piholeDNS2/" $newFileFinalLocation + else + $SUDO sed -i '/^server=@DNS2@/d' $newFileFinalLocation + fi } installScripts() { - # Install the scripts from /etc/.pihole to their various locations - $SUDO echo ":::" - $SUDO echo -n "::: Installing scripts to /opt/pihole..." - if [ ! -d /opt/pihole ]; then - $SUDO mkdir /opt/pihole - $SUDO chown "$USER":root /opt/pihole - $SUDO chmod u+srwx /opt/pihole - fi - $SUDO cp /etc/.pihole/gravity.sh /opt/pihole/gravity.sh - $SUDO cp /etc/.pihole/advanced/Scripts/chronometer.sh /opt/pihole/chronometer.sh - $SUDO cp /etc/.pihole/advanced/Scripts/whitelist.sh /opt/pihole/whitelist.sh - $SUDO cp /etc/.pihole/advanced/Scripts/blacklist.sh /opt/pihole/blacklist.sh - $SUDO cp /etc/.pihole/advanced/Scripts/piholeDebug.sh /opt/pihole/piholeDebug.sh - $SUDO cp /etc/.pihole/advanced/Scripts/piholeLogFlush.sh /opt/pihole/piholeLogFlush.sh - $SUDO cp /etc/.pihole/advanced/Scripts/updateDashboard.sh /opt/pihole/updateDashboard.sh - $SUDO cp /etc/.pihole/automated\ install/uninstall.sh /opt/pihole/uninstall.sh - $SUDO cp /etc/.pihole/advanced/Scripts/setupLCD.sh /opt/pihole/setupLCD.sh - $SUDO chmod 755 /opt/pihole/{gravity,chronometer,whitelist,blacklist,piholeLogFlush,updateDashboard,uninstall,setupLCD}.sh - $SUDO cp /etc/.pihole/pihole /usr/local/bin/pihole - $SUDO chmod 755 /usr/local/bin/pihole - $SUDO cp /etc/.pihole/advanced/bash-completion/pihole /etc/bash_completion.d/pihole - . /etc/bash_completion.d/pihole + # Install the scripts from /etc/.pihole to their various locations + $SUDO echo ":::" + $SUDO echo -n "::: Installing scripts to /opt/pihole..." + if [ ! -d /opt/pihole ]; then + $SUDO mkdir /opt/pihole + $SUDO chown "$USER":root /opt/pihole + $SUDO chmod u+srwx /opt/pihole + fi + $SUDO cp /etc/.pihole/gravity.sh /opt/pihole/gravity.sh + $SUDO cp /etc/.pihole/advanced/Scripts/chronometer.sh /opt/pihole/chronometer.sh + $SUDO cp /etc/.pihole/advanced/Scripts/whitelist.sh /opt/pihole/whitelist.sh + $SUDO cp /etc/.pihole/advanced/Scripts/blacklist.sh /opt/pihole/blacklist.sh + $SUDO cp /etc/.pihole/advanced/Scripts/piholeDebug.sh /opt/pihole/piholeDebug.sh + $SUDO cp /etc/.pihole/advanced/Scripts/piholeLogFlush.sh /opt/pihole/piholeLogFlush.sh + $SUDO cp /etc/.pihole/advanced/Scripts/updateDashboard.sh /opt/pihole/updateDashboard.sh + $SUDO cp /etc/.pihole/automated\ install/uninstall.sh /opt/pihole/uninstall.sh + $SUDO cp /etc/.pihole/advanced/Scripts/setupLCD.sh /opt/pihole/setupLCD.sh + $SUDO chmod 755 /opt/pihole/{gravity,chronometer,whitelist,blacklist,piholeLogFlush,updateDashboard,uninstall,setupLCD}.sh + $SUDO cp /etc/.pihole/pihole /usr/local/bin/pihole + $SUDO chmod 755 /usr/local/bin/pihole + $SUDO cp /etc/.pihole/advanced/bash-completion/pihole /etc/bash_completion.d/pihole + . /etc/bash_completion.d/pihole - #Tidy up /usr/local/bin directory if installing over previous install. - oldFiles=( gravity chronometer whitelist blacklist piholeLogFlush updateDashboard uninstall setupLCD piholeDebug) - for i in "${oldFiles[@]}"; do - if [ -f "/usr/local/bin/$i.sh" ]; then - $SUDO rm /usr/local/bin/"$i".sh - fi - done + #Tidy up /usr/local/bin directory if installing over previous install. + oldFiles=( gravity chronometer whitelist blacklist piholeLogFlush updateDashboard uninstall setupLCD piholeDebug) + for i in "${oldFiles[@]}"; do + if [ -f "/usr/local/bin/$i.sh" ]; then + $SUDO rm /usr/local/bin/"$i".sh + fi + done - $SUDO echo " done." + $SUDO echo " done." } installConfigs() { - # Install the configs from /etc/.pihole to their various locations - $SUDO echo ":::" - $SUDO echo "::: Installing configs..." - versionCheckDNSmasq - if [ ! -d "/etc/lighttpd" ]; then - $SUDO mkdir /etc/lighttpd - $SUDO chown "$USER":root /etc/lighttpd - $SUDO mv /etc/lighttpd/lighttpd.conf /etc/lighttpd/lighttpd.conf.orig - fi - $SUDO cp /etc/.pihole/advanced/lighttpd.conf /etc/lighttpd/lighttpd.conf + # Install the configs from /etc/.pihole to their various locations + $SUDO echo ":::" + $SUDO echo "::: Installing configs..." + versionCheckDNSmasq + if [ ! -d "/etc/lighttpd" ]; then + $SUDO mkdir /etc/lighttpd + $SUDO chown "$USER":root /etc/lighttpd + $SUDO mv /etc/lighttpd/lighttpd.conf /etc/lighttpd/lighttpd.conf.orig + fi + $SUDO cp /etc/.pihole/advanced/lighttpd.conf /etc/lighttpd/lighttpd.conf } stopServices() { - # Stop dnsmasq and lighttpd - $SUDO echo ":::" - $SUDO echo -n "::: Stopping services..." - #$SUDO service dnsmasq stop & spinner $! || true - $SUDO service lighttpd stop & spinner $! || true - $SUDO echo " done." + # Stop dnsmasq and lighttpd + $SUDO echo ":::" + $SUDO echo -n "::: Stopping services..." + #$SUDO service dnsmasq stop & spinner $! || true + $SUDO service lighttpd stop & spinner $! || true + $SUDO echo " done." } checkForDependencies() { - #Running apt-get update/upgrade with minimal output can cause some issues with - #requiring user input (e.g password for phpmyadmin see #218) - #We'll change the logic up here, to check to see if there are any updates availible and - # if so, advise the user to run apt-get update/upgrade at their own discretion + #Running apt-get update/upgrade with minimal output can cause some issues with + #requiring user input (e.g password for phpmyadmin see #218) + #We'll change the logic up here, to check to see if there are any updates availible and + # if so, advise the user to run apt-get update/upgrade at their own discretion + #Check to see if apt-get update has already been run today + # it needs to have been run at least once on new installs! - #Check to see if apt-get update has already been run today - # it needs to have been run at least once on new installs! + timestamp=$(stat -c %Y /var/cache/apt/) + timestampAsDate=$(date -d @"$timestamp" "+%b %e") + today=$(date "+%b %e") - timestamp=$(stat -c %Y /var/cache/apt/) - timestampAsDate=$(date -d @"$timestamp" "+%b %e") - today=$(date "+%b %e") - - if [ ! "$today" == "$timestampAsDate" ]; then - #update package lists - echo ":::" - echo -n "::: apt-get update has not been run today. Running now..." - $SUDO apt-get -qq update & spinner $! - echo " done!" - fi - echo ":::" - echo -n "::: Checking apt-get for upgraded packages...." + if [ ! "$today" == "$timestampAsDate" ]; then + #update package lists + echo ":::" + echo -n "::: apt-get update has not been run today. Running now..." + $SUDO apt-get -qq update & spinner $! + echo " done!" + fi + echo ":::" + echo -n "::: Checking apt-get for upgraded packages...." updatesToInstall=$($SUDO apt-get -s -o Debug::NoLocking=true upgrade | grep -c ^Inst) echo " done!" echo ":::" if [[ $updatesToInstall -eq "0" ]]; then - echo "::: Your pi is up to date! Continuing with pi-hole installation..." + echo "::: Your pi is up to date! Continuing with pi-hole installation..." else - echo "::: There are $updatesToInstall updates availible for your pi!" - echo "::: We recommend you run 'sudo apt-get upgrade' after installing Pi-Hole! " - echo ":::" + echo "::: There are $updatesToInstall updates availible for your pi!" + echo "::: We recommend you run 'sudo apt-get upgrade' after installing Pi-Hole! " + echo ":::" fi echo ":::" echo "::: Checking dependencies:" dependencies=( dnsutils bc toilet figlet dnsmasq lighttpd php5-common php5-cgi php5 git curl unzip wget ) - for i in "${dependencies[@]}"; do - echo -n "::: Checking for $i..." - if [ "$(dpkg-query -W -f='${Status}' "$i" 2>/dev/null | grep -c "ok installed")" -eq 0 ]; then - echo -n " Not found! Installing...." - $SUDO apt-get -y -qq install "$i" > /dev/null & spinner $! - echo " done!" - else - echo " already installed!" - fi - done + for i in "${dependencies[@]}"; do + echo -n "::: Checking for $i..." + if [ "$(dpkg-query -W -f='${Status}' "$i" 2>/dev/null | grep -c "ok installed")" -eq 0 ]; then + echo -n " Not found! Installing...." + $SUDO apt-get -y -qq install "$i" > /dev/null & spinner $! + echo " done!" + else + echo " already installed!" + fi + done } getGitFiles() { - # Setup git repos for base files and web admin - echo ":::" - echo "::: Checking for existing base files..." - if is_repo $piholeFilesDir; then - make_repo $piholeFilesDir $piholeGitUrl - else - update_repo $piholeFilesDir - fi + # Setup git repos for base files and web admin + echo ":::" + echo "::: Checking for existing base files..." + if is_repo $piholeFilesDir; then + make_repo $piholeFilesDir $piholeGitUrl + else + update_repo $piholeFilesDir + fi - echo ":::" - echo "::: Checking for existing web interface..." - if is_repo $webInterfaceDir; then - make_repo $webInterfaceDir $webInterfaceGitUrl - else - update_repo $webInterfaceDir - fi + echo ":::" + echo "::: Checking for existing web interface..." + if is_repo $webInterfaceDir; then + make_repo $webInterfaceDir $webInterfaceGitUrl + else + update_repo $webInterfaceDir + fi } is_repo() { - # If the directory does not have a .git folder it is not a repo - echo -n "::: Checking $1 is a repo..." - if [ -d "$1/.git" ]; then - echo " OK!" - return 1 - fi - echo " not found!!" - return 0 + # If the directory does not have a .git folder it is not a repo + echo -n "::: Checking $1 is a repo..." + if [ -d "$1/.git" ]; then + echo " OK!" + return 1 + fi + echo " not found!!" + return 0 } make_repo() { @@ -618,101 +606,101 @@ update_repo() { CreateLogFile() { - # Create logfiles if necessary - echo ":::" - $SUDO echo -n "::: Creating log file and changing owner to dnsmasq..." - if [ ! -f /var/log/pihole.log ]; then - $SUDO touch /var/log/pihole.log - $SUDO chmod 644 /var/log/pihole.log - $SUDO chown dnsmasq:root /var/log/pihole.log - $SUDO echo " done!" - else - $SUDO echo " already exists!" - fi + # Create logfiles if necessary + echo ":::" + $SUDO echo -n "::: Creating log file and changing owner to dnsmasq..." + if [ ! -f /var/log/pihole.log ]; then + $SUDO touch /var/log/pihole.log + $SUDO chmod 644 /var/log/pihole.log + $SUDO chown dnsmasq:root /var/log/pihole.log + $SUDO echo " done!" + else + $SUDO echo " already exists!" + fi } installPiholeWeb() { - # Install the web interface - $SUDO echo ":::" - $SUDO echo -n "::: Installing pihole custom index page..." - if [ -d "/var/www/html/pihole" ]; then - $SUDO echo " Existing page detected, not overwriting" - else - $SUDO mkdir /var/www/html/pihole - if [ -f /var/www/html/index.lighttpd.html ]; then - $SUDO mv /var/www/html/index.lighttpd.html /var/www/html/index.lighttpd.orig - else - printf "\n:::\tNo default index.lighttpd.html file found... not backing up" - fi - $SUDO cp /etc/.pihole/advanced/index.* /var/www/html/pihole/. - $SUDO echo " done!" - fi + # Install the web interface + $SUDO echo ":::" + $SUDO echo -n "::: Installing pihole custom index page..." + if [ -d "/var/www/html/pihole" ]; then + $SUDO echo " Existing page detected, not overwriting" + else + $SUDO mkdir /var/www/html/pihole + if [ -f /var/www/html/index.lighttpd.html ]; then + $SUDO mv /var/www/html/index.lighttpd.html /var/www/html/index.lighttpd.orig + else + printf "\n:::\tNo default index.lighttpd.html file found... not backing up" + fi + $SUDO cp /etc/.pihole/advanced/index.* /var/www/html/pihole/. + $SUDO echo " done!" + fi } installCron() { - # Install the cron job - $SUDO echo ":::" - $SUDO echo -n "::: Installing latest Cron script..." - $SUDO cp /etc/.pihole/advanced/pihole.cron /etc/cron.d/pihole - $SUDO echo " done!" + # Install the cron job + $SUDO echo ":::" + $SUDO echo -n "::: Installing latest Cron script..." + $SUDO cp /etc/.pihole/advanced/pihole.cron /etc/cron.d/pihole + $SUDO echo " done!" } runGravity() { - # Rub gravity.sh to build blacklists - $SUDO echo ":::" - $SUDO echo "::: Preparing to run gravity.sh to refresh hosts..." - if ls /etc/pihole/list* 1> /dev/null 2>&1; then - echo "::: Cleaning up previous install (preserving whitelist/blacklist)" - $SUDO rm /etc/pihole/list.* - fi - echo "::: Running gravity.sh" - $SUDO /opt/pihole/gravity.sh + # Rub gravity.sh to build blacklists + $SUDO echo ":::" + $SUDO echo "::: Preparing to run gravity.sh to refresh hosts..." + if ls /etc/pihole/list* 1> /dev/null 2>&1; then + echo "::: Cleaning up previous install (preserving whitelist/blacklist)" + $SUDO rm /etc/pihole/list.* + fi + echo "::: Running gravity.sh" + $SUDO /opt/pihole/gravity.sh } setUser(){ - # Check if user pihole exists and create if not - echo "::: Checking if user 'pihole' exists..." - if id -u pihole > /dev/null 2>&1; then - echo "::: User 'pihole' already exists" - else - echo "::: User 'pihole' doesn't exist. Creating..." - $SUDO useradd -r -s /usr/sbin/nologin pihole - fi + # Check if user pihole exists and create if not + echo "::: Checking if user 'pihole' exists..." + if id -u pihole > /dev/null 2>&1; then + echo "::: User 'pihole' already exists" + else + echo "::: User 'pihole' doesn't exist. Creating..." + $SUDO useradd -r -s /usr/sbin/nologin pihole + fi } installPihole() { - # Install base files and web interface - checkForDependencies # done - stopServices - setUser - $SUDO mkdir -p /etc/pihole/ - if [ ! -d "/var/www/html" ]; then - $SUDO mkdir -p /var/www/html - fi - $SUDO chown www-data:www-data /var/www/html - $SUDO chmod 775 /var/www/html - $SUDO usermod -a -G www-data pihole - $SUDO lighty-enable-mod fastcgi fastcgi-php > /dev/null + # Install base files and web interface + checkForDependencies # done + stopServices + setUser + $SUDO mkdir -p /etc/pihole/ + if [ ! -d "/var/www/html" ]; then + $SUDO mkdir -p /var/www/html + fi + $SUDO chown www-data:www-data /var/www/html + $SUDO chmod 775 /var/www/html + $SUDO usermod -a -G www-data pihole + $SUDO lighty-enable-mod fastcgi fastcgi-php > /dev/null - getGitFiles - installScripts - installConfigs - CreateLogFile - installPiholeWeb - installCron - runGravity + getGitFiles + installScripts + installConfigs + CreateLogFile + installPiholeWeb + installCron + runGravity } displayFinalMessage() { - # Final completion message to user - whiptail --msgbox --backtitle "Make it so." --title "Installation Complete!" "Configure your devices to use the Pi-hole as their DNS server using: + # Final completion message to user + whiptail --msgbox --backtitle "Make it so." --title "Installation Complete!" "Configure your devices to use the Pi-hole as their DNS server using: -$IPv4addr -$piholeIPv6 + $IPv4addr + $piholeIPv6 -If you set a new IP address, you should restart the Pi. + If you set a new IP address, you should restart the Pi. -The install log is in /etc/pihole." $r $c + The install log is in /etc/pihole." $r $c } ######## SCRIPT ############ From 5347ee48969e9e6306c644d9d9337a052df66215 Mon Sep 17 00:00:00 2001 From: nate Date: Mon, 4 Apr 2016 00:59:24 -0500 Subject: [PATCH 89/96] Write verbose status of processes to debug log & Minor UI Fixes --- advanced/Scripts/piholeDebug.sh | 20 +++++++++++++++++++- automated install/uninstall.sh | 6 +++--- gravity.sh | 14 +++++++------- 3 files changed, 29 insertions(+), 11 deletions(-) diff --git a/advanced/Scripts/piholeDebug.sh b/advanced/Scripts/piholeDebug.sh index e9d95234..7a995c99 100755 --- a/advanced/Scripts/piholeDebug.sh +++ b/advanced/Scripts/piholeDebug.sh @@ -116,6 +116,24 @@ function testNslookup { echo >> $DEBUG_LOG } +function checkProcesses { + echo "#######################################" >> $DEBUG_LOG + echo "########### Processes Check ###########" >> $DEBUG_LOG + echo "#######################################" >> $DEBUG_LOG + echo ":::" + echo "::: Logging status of lighttpd and dnsmasq..." + PROCESSES=( lighttpd dnsmasq ) + for i in "${PROCESSES[@]}" + do + echo "" >> $DEBUG_LOG + echo -n $i >> $DEBUG_LOG + echo " processes status:" >> $DEBUG_LOG + $SUDO systemctl -l status $i >> $DEBUG_LOG + done +} + +### END FUNCTIONS ### + ### Check Pi internet connections ### # Log the IP addresses of this Pi IPADDR=$($SUDO ifconfig | perl -nle 's/dr:(\S+)/print $1/e') @@ -130,10 +148,10 @@ echo "Gateway check:" >> $DEBUG_LOG echo "$GATEWAY_CHECK" >> $DEBUG_LOG echo >> $DEBUG_LOG -# Test the nslookup here compareWhitelist compareBlacklist testNslookup +checkProcesses echo "::: Writing dnsmasq.conf to debug log..." echo "#######################################" >> $DEBUG_LOG diff --git a/automated install/uninstall.sh b/automated install/uninstall.sh index 7082713a..484a544d 100755 --- a/automated install/uninstall.sh +++ b/automated install/uninstall.sh @@ -51,8 +51,8 @@ echo ":::" read -rp "::: Do you wish to remove $i from your system? [y/n]: " yn case $yn in [Yy]* ) printf ":::\tRemoving %s..." "$i"; $SUDO apt-get -y remove --purge "$i" &> /dev/null & spinner $!; printf "done!\n"; break;; - [Nn]* ) printf ":::\tSkipping %s" "$i"; break;; - * ) printf "::: You must answer yes or no!";; + [Nn]* ) printf ":::\tSkipping %s" "$i\n"; break;; + * ) printf "::: You must answer yes or no!\n";; esac done else @@ -127,7 +127,7 @@ function removeNoPurge { echo ":::" printf "::: Finished removing PiHole from your system. Sorry to see you go!\n" printf "::: Reach out to us at https://github.com/pi-hole/pi-hole/issues if you need help\n" - printf "::: Reinstall by simpling running\n:::\n:::\tcurl -L install.pi-hole.net | bash\n:::\n::: at any time!\n:::\n" + printf "::: Reinstall by simpling running\n:::\n:::\tcurl -L https://install.pi-hole.net | bash\n:::\n::: at any time!\n:::\n" printf "::: PLEASE RESET YOUR DNS ON YOUR ROUTER/CLIENTS TO RESTORE INTERNET CONNECTIVITY!\n" } diff --git a/gravity.sh b/gravity.sh index c8a0d842..d741ac80 100755 --- a/gravity.sh +++ b/gravity.sh @@ -124,13 +124,13 @@ function gravity_collapse() { # Temporary hack to allow non-root access to pihole directory # Will update later, needed for existing installs, new installs should # create this directory as non-root - find "$piholeDir" -type f -exec $SUDO chmod 666 {} \; & spinner $! - echo ":::" - else - echo -n "::: Creating pihole directory..." - mkdir $piholeDir & spinner $! $SUDO chmod 777 $piholeDir - echo " done!" + echo ":::" + echo "::: Existing pihole directory found" + else + echo "::: Creating pihole directory..." + mkdir $piholeDir + $SUDO chmod 777 $piholeDir fi } @@ -174,7 +174,7 @@ function gravity_transport() { # spinup - main gravity function function gravity_spinup() { - echo "::: " + echo ":::" # Loop through domain list. Download each one and remove commented lines (lines beginning with '# 'or '/') and # blank lines for ((i = 0; i < "${#sources[@]}"; i++)) do From 7e06769d4427640ebca0af98b216b474a19c9aad Mon Sep 17 00:00:00 2001 From: nate Date: Mon, 4 Apr 2016 01:03:05 -0500 Subject: [PATCH 90/96] Double quoting --- advanced/Scripts/piholeDebug.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/advanced/Scripts/piholeDebug.sh b/advanced/Scripts/piholeDebug.sh index 7a995c99..03d1498a 100755 --- a/advanced/Scripts/piholeDebug.sh +++ b/advanced/Scripts/piholeDebug.sh @@ -126,9 +126,9 @@ function checkProcesses { for i in "${PROCESSES[@]}" do echo "" >> $DEBUG_LOG - echo -n $i >> $DEBUG_LOG + echo -n $i >> "$DEBUG_LOG" echo " processes status:" >> $DEBUG_LOG - $SUDO systemctl -l status $i >> $DEBUG_LOG + $SUDO systemctl -l status $i >> "$DEBUG_LOG" done } From 4f0835978686a462fb6e154dac6b437ec4f8a616 Mon Sep 17 00:00:00 2001 From: Promofaux Date: Mon, 4 Apr 2016 21:08:45 +0100 Subject: [PATCH 91/96] Make blacklist honour pihole.conf file --- advanced/Scripts/blacklist.sh | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/advanced/Scripts/blacklist.sh b/advanced/Scripts/blacklist.sh index 2b194630..20329f1e 100755 --- a/advanced/Scripts/blacklist.sh +++ b/advanced/Scripts/blacklist.sh @@ -24,12 +24,15 @@ if [[ $# = 0 ]]; then fi #globals -blacklist=/etc/pihole/blacklist.txt -adList=/etc/pihole/gravity.list +basename=pihole +piholeDir=/etc/$basename +adList=$piholeDir/gravity.list +blacklist=$piholeDir/blacklist.txt reload=true addmode=true force=false versbose=true + domList=() domToRemoveList=() @@ -42,6 +45,12 @@ piholeIP=${piholeIPCIDR%/*} modifyHost=false +# After setting defaults, check if there's local overrides +if [[ -r $piholeDir/pihole.conf ]];then + echo "::: Local calibration requested..." + . $piholeDir/pihole.conf +fi + if [[ -f $piholeIPv6file ]];then # If the file exists, then the user previously chose to use IPv6 in the automated installer From 0bbfb323b1e13bb2ed3b4c06bd287f455d4526da Mon Sep 17 00:00:00 2001 From: Promofaux Date: Mon, 4 Apr 2016 21:08:56 +0100 Subject: [PATCH 92/96] make whitelist honour pihole.conf file --- advanced/Scripts/whitelist.sh | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/advanced/Scripts/whitelist.sh b/advanced/Scripts/whitelist.sh index 8b57b250..d457d3d7 100755 --- a/advanced/Scripts/whitelist.sh +++ b/advanced/Scripts/whitelist.sh @@ -24,12 +24,15 @@ if [[ $# = 0 ]]; then fi #globals -whitelist=/etc/pihole/whitelist.txt -adList=/etc/pihole/gravity.list +basename=pihole +piholeDir=/etc/$basename +adList=$piholeDir/gravity.list +whitelist=$piholeDir/whitelist.txt reload=true addmode=true force=false versbose=true + domList=() domToRemoveList=() @@ -42,6 +45,11 @@ piholeIP=${piholeIPCIDR%/*} modifyHost=false +# After setting defaults, check if there's local overrides +if [[ -r $piholeDir/pihole.conf ]];then + echo "::: Local calibration requested..." + . $piholeDir/pihole.conf +fi if [[ -f $piholeIPv6file ]];then # If the file exists, then the user previously chose to use IPv6 in the automated installer @@ -127,10 +135,10 @@ function ModifyHostFile(){ awk -F':' '{print $1}' $whitelist | while read -r line; do echo "$piholeIP $line"; done > /etc/pihole/whitelist.tmp awk -F':' '{print $1}' $whitelist | while read -r line; do echo "$piholeIPv6 $line"; done >> /etc/pihole/whitelist.tmp echo "l" >> /etc/pihole/whitelist.tmp - grep -F -x -v -f /etc/pihole/whitelist.tmp /etc/pihole/gravity.list > /etc/pihole/gravity.tmp - rm /etc/pihole/gravity.list - mv /etc/pihole/gravity.tmp /etc/pihole/gravity.list - rm /etc/pihole/whitelist.tmp + grep -F -x -v -f $piholeDir/whitelist.tmp $adList > $piholeDir/gravity.tmp + rm $adList + mv $piholeDir/gravity.tmp $adList + rm $piholeDir/whitelist.tmp echo " done!" fi From c6405bc93be04a248526a1e029281883bae9e253 Mon Sep 17 00:00:00 2001 From: Promofaux Date: Mon, 4 Apr 2016 23:38:46 +0100 Subject: [PATCH 93/96] Ensure addn-hosts value is updated in /etc/dnsmasq.d/01-pihole.conf if user has a custom value set in pihole.conf --- gravity.sh | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/gravity.sh b/gravity.sh index d741ac80..7d03ae7f 100755 --- a/gravity.sh +++ b/gravity.sh @@ -321,6 +321,12 @@ function gravity_reload() { # Reload hosts file echo ":::" echo -n "::: Refresh lists in dnsmasq..." + + #ensure /etc/dnsmasq.d/01-pihole.conf is pointing at the correct list! + #First escape forward slashes in the path: + adList=${adList//\//\\\/} + #Now replace the line in dnsmasq file + $SUDO sed -i "s/^addn-hosts.*/addn-hosts=$adlist/" /etc/dnsmasq.d/01-pihole.conf dnsmasqPid=$(pidof dnsmasq) find "$piholeDir" -type f -exec $SUDO chmod 666 {} \; & spinner $! From 0c0dd914f7950d54fc8573ce02730d0d31ed456e Mon Sep 17 00:00:00 2001 From: Promofaux Date: Mon, 4 Apr 2016 23:48:34 +0100 Subject: [PATCH 94/96] Fix source lists not being skipped if they are already up to date --- gravity.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gravity.sh b/gravity.sh index 7d03ae7f..80f80553 100755 --- a/gravity.sh +++ b/gravity.sh @@ -165,7 +165,7 @@ function gravity_transport() { fi # Silently curl url - curl -s "$cmd_ext" "$heisenbergCompensator" -A "$agent" "$url" > "$patternBuffer" + curl -s $cmd_ext $heisenbergCompensator -A "$agent" $url > $patternBuffer # Check for list updates gravity_patternCheck "$patternBuffer" # Cleanup From 47cc757ed08dc7d93779d18657a9a947f30bf625 Mon Sep 17 00:00:00 2001 From: Promofaux Date: Tue, 5 Apr 2016 00:03:24 +0100 Subject: [PATCH 95/96] Fix incorrect echo --- advanced/Scripts/whitelist.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/advanced/Scripts/whitelist.sh b/advanced/Scripts/whitelist.sh index d457d3d7..1d33e41a 100755 --- a/advanced/Scripts/whitelist.sh +++ b/advanced/Scripts/whitelist.sh @@ -90,7 +90,7 @@ function AddDomain(){ if $bool; then #domain not found in the whitelist file, add it! if $versbose; then - echo -n "::: Adding $1 to whitelist.txt..." + echo -n "::: Adding $1 to $whitelist..." fi echo "$1" >> $whitelist modifyHost=true @@ -99,7 +99,7 @@ function AddDomain(){ fi else if $versbose; then - echo "::: $1 already exists in whitelist.txt, no need to add!" + echo "::: $1 already exists in $whitelist, no need to add!" fi fi } @@ -157,7 +157,7 @@ function ModifyHostFile(){ echo "$rdom" | awk -v ipv4addr="$piholeIP" '{sub(/\r$/,""); print ipv4addr" "$0}' >>$adList echo " done!" fi - echo -n "::: Removing $rdom from whitelist.txt..." + echo -n "::: Removing $rdom from $whitelist..." echo "$rdom" | sed 's/\./\\./g' | xargs -I {} perl -i -ne'print unless /'{}'(?!.)/;' $whitelist echo " done!" done From 849185d3c9cc1618e37e80d0e4e63746cea57bd3 Mon Sep 17 00:00:00 2001 From: Promofaux Date: Tue, 5 Apr 2016 00:03:49 +0100 Subject: [PATCH 96/96] Fix incorrect echo --- advanced/Scripts/blacklist.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/advanced/Scripts/blacklist.sh b/advanced/Scripts/blacklist.sh index 20329f1e..9e5d557b 100755 --- a/advanced/Scripts/blacklist.sh +++ b/advanced/Scripts/blacklist.sh @@ -96,7 +96,7 @@ function AddDomain(){ echo " done!" else if $versbose; then - echo "::: $1 already exists in blacklist.txt! No need to add" + echo "::: $1 already exists in $blacklist! No need to add" fi fi }