Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/pi-hole/pi-hole.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'gravity.sh')
-rwxr-xr-xgravity.sh272
1 files changed, 133 insertions, 139 deletions
diff --git a/gravity.sh b/gravity.sh
index 3d9c05c4..112b42b6 100755
--- a/gravity.sh
+++ b/gravity.sh
@@ -13,36 +13,38 @@
# Run this script as root or under sudo
echo ":::"
-helpFunc()
-{
- echo "::: Pull in domains from adlists"
- echo ":::"
- echo "::: Usage: pihole -g"
- echo ":::"
- echo "::: Options:"
- echo "::: -f, --force Force lists to be downloaded, even if they don't need updating."
- echo "::: -h, --help Show this help dialog"
+helpFunc() {
+ cat << EOM
+::: Pull in domains from adlists
+:::
+::: Usage: pihole -g
+:::
+::: Options:
+::: -f, --force Force lists to be downloaded, even if they don't need updating.
+::: -h, --help Show this help dialog
+EOM
exit 1
}
adListFile=/etc/pihole/adlists.list
adListDefault=/etc/pihole/adlists.default
-whitelistScript=/opt/pihole/whitelist.sh
-blacklistScript=/opt/pihole/blacklist.sh
+whitelistScript="pihole -w"
+whitelistFile=/etc/pihole/whitelist.txt
+blacklistFile=/etc/pihole/blacklist.txt
#Source the setupVars from install script for the IP
setupVars=/etc/pihole/setupVars.conf
if [[ -f ${setupVars} ]];then
- . /etc/pihole/setupVars.conf
+ . /etc/pihole/setupVars.conf
else
- echo "::: WARNING: /etc/pihole/setupVars.conf missing. Possible installation failure."
- echo "::: Please run 'pihole -r', and choose the 'reconfigure' option to reconfigure."
- exit 1
+ echo "::: WARNING: /etc/pihole/setupVars.conf missing. Possible installation failure."
+ echo "::: Please run 'pihole -r', and choose the 'reconfigure' option to reconfigure."
+ exit 1
fi
#Remove the /* from the end of the IPv4addr.
-IPv4addr=${IPv4_address%/*}
+IPv4_address=${IPv4_address%/*}
# Variables for various stages of downloading and formatting the list
basename=pihole
@@ -51,12 +53,15 @@ adList=${piholeDir}/gravity.list
justDomainsExtension=domains
matterAndLight=${basename}.0.matterandlight.txt
supernova=${basename}.1.supernova.txt
-eventHorizon=${basename}.2.eventHorizon.txt
+preEventHorizon=list.preEventHorizon
+eventHorizon=${basename}.2.supernova.txt
accretionDisc=${basename}.3.accretionDisc.txt
+skipDownload=false
+
# Warn users still using pihole.conf that it no longer has any effect (I imagine about 2 people use it)
-if [[ -r ${piholeDir}/pihole.conf ]];then
- echo "::: pihole.conf file no longer supported. Over-rides in this file are ignored."
+if [[ -r ${piholeDir}/pihole.conf ]]; then
+ echo "::: pihole.conf file no longer supported. Over-rides in this file are ignored."
fi
###########################
@@ -92,31 +97,17 @@ gravity_collapse() {
done < ${adListDefault}
echo " done!"
fi
-
- # Create the pihole resource directory if it doesn't exist. Future files will be stored here
- if [[ -d ${piholeDir} ]];then
- # 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
- chmod 777 ${piholeDir}
- echo ":::"
- echo "::: Existing pihole directory found"
- else
- echo "::: Creating pihole directory..."
- mkdir ${piholeDir}
- chmod 777 ${piholeDir}
- fi
}
# patternCheck - check to see if curl downloaded any new files.
gravity_patternCheck() {
patternBuffer=$1
# check if the patternbuffer is a non-zero length file
- if [[ -s "$patternBuffer" ]];then
+ if [[ -s "${patternBuffer}" ]]; then
# 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"
+ mv "${patternBuffer}" "${saveLocation}"
echo " List updated, transport successful!"
else
# curl didn't download any host files, probably because of the date check
@@ -135,51 +126,49 @@ gravity_transport() {
heisenbergCompensator=""
if [[ -r ${saveLocation} ]]; then
# if domain has been saved, add file for date check to only download newer
- heisenbergCompensator="-z $saveLocation"
+ heisenbergCompensator="-z ${saveLocation}"
fi
# Silently curl url
- curl -s -L ${cmd_ext} ${heisenbergCompensator} -A "$agent" ${url} > ${patternBuffer}
+ curl -s -L ${cmd_ext} ${heisenbergCompensator} -A "${agent}" ${url} > ${patternBuffer}
# Check for list updates
- gravity_patternCheck "$patternBuffer"
- # Cleanup
- rm -f "$patternBuffer"
+ gravity_patternCheck "${patternBuffer}"
}
# spinup - main gravity function
gravity_spinup() {
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
- url=${sources[$i]}
- # Get just the domain from the URL
- domain=$(echo "$url" | cut -d'/' -f3)
-
- # Save the file as list.#.domain
- saveLocation=${piholeDir}/list.${i}.${domain}.${justDomainsExtension}
- activeDomains[$i]=${saveLocation}
+ for ((i = 0; i < "${#sources[@]}"; i++)); do
+ url=${sources[$i]}
+ # Get just the domain from the URL
+ domain=$(echo "${url}" | cut -d'/' -f3)
- agent="Mozilla/10.0"
+ # Save the file as list.#.domain
+ saveLocation=${piholeDir}/list.${i}.${domain}.${justDomainsExtension}
+ activeDomains[$i]=${saveLocation}
- echo -n "::: Getting $domain list..."
+ agent="Mozilla/10.0"
- # 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 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36'
- cmd_ext="-e http://forum.xda-developers.com/"
- ;;
+ # 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 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36'
+ 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=""
esac
- gravity_transport "$url" "$cmd_ext" "$agent"
+ if [[ "${skipDownload}" == false ]]; then
+ echo -n "::: Getting $domain list..."
+ gravity_transport "$url" "$cmd_ext" "$agent"
+ fi
done
}
@@ -189,74 +178,89 @@ gravity_Schwarzchild() {
# Find all active domains and compile them into one file and remove CRs
echo -n "::: Aggregating list of domains..."
truncate -s 0 ${piholeDir}/${matterAndLight}
- for i in "${activeDomains[@]}"
- do
- cat "$i" | tr -d '\r' >> ${piholeDir}/${matterAndLight}
+ for i in "${activeDomains[@]}"; do
+ cat "${i}" | tr -d '\r' >> ${piholeDir}/${matterAndLight}
done
echo " done!"
}
-gravity_Blacklist(){
- # Append blacklist entries if they exist
- echo -n "::: Running blacklist script to update HOSTS file...."
- ${blacklistScript} -f -nr -q > /dev/null
+gravity_Blacklist() {
+ # Append blacklist entries to eventHorizon if they exist
+ if [[ -f "${blacklistFile}" ]]; then
+ numBlacklisted=$(wc -l < "${blacklistFile}")
+ plural=; [[ "$numBlacklisted" != "1" ]] && plural=s
+ echo -n "::: BlackListing $numBlacklisted domain${plural}..."
+ cat ${blacklistFile} >> ${piholeDir}/${eventHorizon}
+ echo " done!"
+ else
+ echo "::: Nothing to blacklist!"
+ fi
- numBlacklisted=$(wc -l < "/etc/pihole/blacklist.txt")
- plural=; [[ "$numBlacklisted" != "1" ]] && plural=s
- echo " $numBlacklisted domain${plural} blacklisted!"
}
gravity_Whitelist() {
+ #${piholeDir}/${eventHorizon})
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..."
+ echo -n "::: Adding adlist source${plural} to the whitelist..."
urls=()
- for url in "${sources[@]}"
- do
- tmp=$(echo "$url" | awk -F '/' '{print $3}')
- urls=("${urls[@]}" ${tmp})
+ for url in "${sources[@]}"; do
+ tmp=$(echo "${url}" | awk -F '/' '{print $3}')
+ urls=("${urls[@]}" ${tmp})
done
echo " done!"
- echo -n "::: Running whitelist script to update HOSTS file...."
- ${whitelistScript} -f -nr -q "${urls[@]}" > /dev/null
- numWhitelisted=$(wc -l < "/etc/pihole/whitelist.txt")
- plural=; [[ "$numWhitelisted" != "1" ]] && plural=s
- echo " $numWhitelisted domain${plural} whitelisted!"
+ # Ensure adlist domains are in whitelist.txt
+ ${whitelistScript} -nr -q "${urls[@]}" > /dev/null
+
+ # Check whitelist.txt exists.
+ if [[ -f "${whitelistFile}" ]]; then
+ # Remove anything in whitelist.txt from the Event Horizon
+ numWhitelisted=$(wc -l < "${whitelistFile}")
+ plural=; [[ "$numWhitelisted" != "1" ]] && plural=s
+ echo -n "::: Whitelisting $numWhitelisted domain${plural}..."
+ #print everything from preEventHorizon into eventHorizon EXCEPT domains in whitelist.txt
+ grep -F -x -v -f ${whitelistFile} ${piholeDir}/${preEventHorizon} > ${piholeDir}/${eventHorizon}
+ echo " done!"
+ else
+ echo "::: Nothing to whitelist!"
+ fi
}
gravity_unique() {
# Sort and remove duplicates
echo -n "::: Removing duplicate domains...."
- sort -u ${piholeDir}/${supernova} > ${piholeDir}/${eventHorizon}
+ sort -u ${piholeDir}/${supernova} > ${piholeDir}/${preEventHorizon}
echo " done!"
- numberOf=$(wc -l < ${piholeDir}/${eventHorizon})
+ numberOf=$(wc -l < ${piholeDir}/${preEventHorizon})
echo "::: $numberOf unique domains trapped in the event horizon."
}
gravity_hostFormat() {
# Format domain list as "192.168.x.x domain.com"
echo "::: Formatting domains into a HOSTS file..."
- if [[ -f /etc/hostname ]]; then
- hostname=$(</etc/hostname)
- elif [ -x "$(command -v hostname)" ]; then
- hostname=$(hostname -f)
- else
- echo "::: Error: Unable to determine fully qualified domain name of host"
- fi
- # 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 "${IPv6_address}" ]];then
- # 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 "$IPv4addr $hostname\n$IPv6_address $hostname\n$IPv4addr pi.hole\n$IPv6_address pi.hole" > ${piholeDir}/${accretionDisc}
- cat ${piholeDir}/${eventHorizon} | awk -v ipv4addr="$IPv4addr" -v ipv6addr="$IPv6_address" '{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 "$IPv4addr $hostname\n$IPv4addr pi.hole" > ${piholeDir}/${accretionDisc}
- cat ${piholeDir}/${eventHorizon} | awk -v ipv4addr="$IPv4addr" '{sub(/\r$/,""); print ipv4addr" "$0}' >> ${piholeDir}/${accretionDisc}
- fi
+ # Check vars from setupVars.conf to see if we're using IPv4, IPv6, Or both.
+ if [[ -n "${IPv4_address}" && -n "${IPv6_address}" ]];then
+
+ # Both IPv4 and IPv6
+ cat ${piholeDir}/${eventHorizon} | awk -v ipv4addr="$IPv4_address" -v ipv6addr="$IPv6_address" '{sub(/\r$/,""); print ipv4addr" "$0"\n"ipv6addr" "$0}' >> ${piholeDir}/${accretionDisc}
+
+ elif [[ -n "${IPv4_address}" && -z "${IPv6_address}" ]];then
+
+ # Only IPv4
+ cat ${piholeDir}/${eventHorizon} | awk -v ipv4addr="$IPv4_address" '{sub(/\r$/,""); print ipv4addr" "$0}' >> ${piholeDir}/${accretionDisc}
+
+ elif [[ -z "${IPv4_address}" && -n "${IPv6_address}" ]];then
+
+ # Only IPv6
+ cat ${piholeDir}/${eventHorizon} | awk -v ipv6addr="$IPv6_address" '{sub(/\r$/,""); print ipv6addr" "$0}' >> ${piholeDir}/${accretionDisc}
+
+ elif [[ -z "${IPv4_address}" && -z "${IPv6_address}" ]];then
+ echo "::: No IP Values found! Please run 'pihole -r' and choose reconfigure to restore values"
+ exit 1
+ fi
# Copy the file over as /etc/pihole/gravity.list so dnsmasq can use it
cp ${piholeDir}/${accretionDisc} ${adList}
@@ -265,13 +269,12 @@ gravity_hostFormat() {
# blackbody - remove any remnant files from script processes
gravity_blackbody() {
# Loop through list files
- for file in ${piholeDir}/*.${justDomainsExtension}
- do
+ for file in ${piholeDir}/*.${justDomainsExtension}; do
# If list is in active array then leave it (noop) else rm the list
if [[ " ${activeDomains[@]} " =~ ${file} ]]; then
:
else
- rm -f "$file"
+ rm -f "${file}"
fi
done
}
@@ -289,7 +292,7 @@ gravity_advanced() {
echo " done!"
numberOf=$(wc -l < ${piholeDir}/${supernova})
- echo "::: $numberOf domains being pulled in by gravity..."
+ echo "::: ${numberOf} domains being pulled in by gravity..."
gravity_unique
}
@@ -303,44 +306,26 @@ gravity_reload() {
# Reload hosts file
echo ":::"
- echo -n "::: Refresh lists in dnsmasq..."
-
+ echo "::: 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
- sed -i "s/^addn-hosts.*/addn-hosts=$adList/" /etc/dnsmasq.d/01-pihole.conf
- find "$piholeDir" -type f -exec chmod 666 {} \;
-
- dnsmasqPid=$(pidof dnsmasq)
+# sed -i "s/^addn-hosts.*/addn-hosts=$adList/" /etc/dnsmasq.d/01-pihole.conf
- if [[ ${dnsmasqPid} ]]; then
- # service already running - reload config
- if [ -x "$(command -v systemctl)" ]; then
- systemctl restart dnsmasq
- else
- service dnsmasq restart
- fi
- else
- # service not running, start it up
- if [ -x "$(command -v systemctl)" ]; then
- systemctl start dnsmasq
- else
- service dnsmasq start
- fi
- fi
+ pihole restartdns
}
-
-for var in "$@"
-do
- case "$var" in
- "-f" | "--force" ) forceGrav=true;;
- "-h" | "--help" ) helpFunc;;
- esac
+for var in "$@"; do
+ case "${var}" in
+ "-f" | "--force" ) forceGrav=true;;
+ "-h" | "--help" ) helpFunc;;
+ "-sd" | "--skip-download" ) skipDownload=true;;
+ esac
done
-if [[ ${forceGrav} == true ]]; then
+if [[ "${forceGrav}" == true ]]; then
echo -n "::: Deleting exising list cache..."
rm /etc/pihole/list.*
echo " done!"
@@ -350,10 +335,19 @@ fi
cp /etc/.pihole/adlists.default /etc/pihole/adlists.default
gravity_collapse
gravity_spinup
-gravity_Schwarzchild
-gravity_advanced
-gravity_hostFormat
-gravity_blackbody
+if [[ "${skipDownload}" == false ]]; then
+ gravity_Schwarzchild
+ gravity_advanced
+else
+ echo "::: Using cached Event Horizon list..."
+ numberOf=$(wc -l < ${piholeDir}/${preEventHorizon})
+ echo "::: $numberOf unique domains trapped in the event horizon."
+fi
gravity_Whitelist
gravity_Blacklist
+
+gravity_hostFormat
+gravity_blackbody
+
gravity_reload
+pihole status