#!/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 # Exports variables for use with Pi-hole # # 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. # First check if the user running the script is root. # If they are, they have root access and the SUDO variable will be set to nothing if [[ $EUID -eq 0 ]];then echo "You are root." else # sudo will be used during install and to restart services in gravity.sh export SUDO="sudo" fi # Find the rows and columns rows=$(tput lines) columns=$(tput cols) # Divide by two so the dialogs take up half of the screen, which looks nice. r=$(( rows / 2 )) 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}') IPv4gw=$(ip route get 8.8.8.8 | awk '{print $3}') # System files export dnsmsqConfDir=/etc/dnsmasq.d export lighttpConfDir=/etc/lighttpd export cronFolder=/etc/cron.d export dhcpcdFile=/etc/dhcpcd.conf export dnsmasqConfigFile=$dnsmsqConfDir/01-pihole.conf export lighttpdConfigFile=$lighttpConfDir/lighttpd.conf export webRootDir=/var/www/html export webRootPiholeDir=$webRootDir/pihole export webRootAdminDir=$webRootDir/admin export piholeIndexHtmlFile=$webRootPiholeDir/index.html export adminIndexPhpFile=$webRootAdminDir/index.php export logDir=/var/log export webAccessLog=$logDir/lighttpd/access.log export webErrorLog=$logDir/lighttpd/error.log export piholeLog=$logDir/pihole.log # Local Pi-hole directory export basename=pihole export piholeDir=/usr/local/etc/$basename export piholeGitDir=/usr/local/etc/.$basename # Scripts export scriptDir=/usr/local/bin export gravityScript=$scriptDir/gravity.sh export chronometerScript=$scriptDir/chronometer.sh export piholeLogFlushScript=$scriptDir/piholeLogFlush.sh export blacklistScript=$scriptDir/blacklist.sh export whitelistScript=$scriptDir/whitelist.sh export piholeCron=$cronFolder/pihole # Variables for various stages of downloading and formatting the list export tmpLocation=/tmp export adListFile=$piholeDir/adlists.list export adListDefault=$piholeDir/gravity.list export blacklist=$piholeDir/blacklist.txt export whitelist=$piholeDir/whitelist.txt export latentWhitelist=$piholeDir/latentWhitelist.txt export justDomainsExtension=domains export matter=$basename.0.matterandlight.txt export supernova=$basename.1.supernova.txt export eventHorizon=$basename.2.eventHorizon.txt export accretionDisc=$basename.3.accretionDisc.txt export tmpInstallLog=$tmpLocation/pihole-install.log export instalLogLoc=$piholeDir/install.log # These files are empty but checked for existence export piholeInterfaceFile=$tmpLocation/.piholeInterface export piholeIPv4static=$tmpLocation/.useIPv4 export piholeIPv4file=$piholeDir/.useIPv4 export piholeIPv6file=$piholeDir/.useIPv6 # This is checked during the initial install if [[ -f $piholeIPv4static ]];then # If the tmp file exists, it means it was created from the installation script and we should use that value instead of detecting it in this script # This is because the installer asks to set a static IP address # The file can be removed because once the address is set, it won't change # But then make an invisible file to be contigious with IPv6 export piholeIPv4=$(cat $piholeIPv4static) rm -f $piholeIPv4static $SUDO touch $piholeIPv4file 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 export IPv4dev=$(ip route get 8.8.8.8 | awk '{for(i=1;i<=NF;i++)if($i~/dev/)print $(i+1)}') export piholeIPv4CIDR=$(ip -o -f inet addr show dev $IPv4dev | awk '{print $4}' | awk 'END {print}') export piholeIPv4=${piholeIPv4CIDR%/*} fi if [[ -f $piholeIPv6file ]];then # If the file exists, then the user previously chose to use IPv6 in the automated installer export piholeIPv6=$(ip -6 route get 2001:4860:4860::8888 | awk -F " " '{ for(i=1;i<=NF;i++) if ($i == "src") print $(i+1) }') fi # This is used in more than one script, so just make it a function so we don't repeat code reloadHostsFile(){ dnsmasqPid=$(pidof dnsmasq) if [[ $dnsmasqPid ]]; then # The service already running - reload config $SUDO kill -HUP $dnsmasqPid else # The service is not running so start it up $SUDO service dnsmasq start fi } echo "Variables have been sourced."