Added nginx as an optional server.

Why? For the glory of satan of course...
Also, many people tends to use their PIs for multiple purposes. As mail
servers, webpage hosting etc. Usually in that cases nginx is used as far
more powerful alternative to lighttpd, and fair more lighter than
apache. This patch allows them to unleash the power of pi-hole without
too much hacking.

Also, I'm the one of those people, and needed it ;).
This commit is contained in:
Igor Rzegocki 2016-01-28 20:42:16 +01:00
parent 60bf14d4dd
commit 34ff9b309a
4 changed files with 183 additions and 56 deletions

View file

@ -0,0 +1,23 @@
server {
listen 80;
listen [::]:80;
root /var/www/html;
error_page 404 /pihole/index.html;
location ~ ^/admin/ {
index index.php;
add_header X-Pi-hole "The Pi-hole Web interface is working!";
location ~ .php$ {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
location / {
add_header X-Pi-hole "A black hole for Internet advertisements.";
}
}

View file

@ -96,7 +96,12 @@ backupLegacyPihole(){
$SUDO mv /etc/dnsmasq.d/adList.conf /etc/pihole/original/adList.conf.$(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/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/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") if [[ -f /etc/lighttpd/lighttpd.conf ]]; then
$SUDO mv /etc/lighttpd/lighttpd.conf /etc/pihole/original/lighttpd.conf.$(date "+%Y-%m-%d")
fi
if [[ -f /etc/nginx/conf.d/nginx-pi-hole.conf ]]; then
$SUDO mv /etc/nginx/conf.d/nginx-pi-hole.conf /etc/pihole/original/nginx-pi-hole.conf.$(date "+%Y-%m-%d")
fi
$SUDO mv /var/www/pihole/index.html /etc/pihole/original/index.html.$(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 /usr/local/bin/gravity.sh /etc/pihole/original/gravity.sh.$(date "+%Y-%m-%d")
else else
@ -107,12 +112,12 @@ backupLegacyPihole(){
welcomeDialogs(){ welcomeDialogs(){
# Display the welcome dialog # 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 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 # 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 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 # 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 In the next section, you can choose to use your current network settings (DHCP) or to manually edit them." $r $c
} }
@ -120,7 +125,7 @@ chooseInterface(){
# Turn the available interfaces into an array so it can be used with a whiptail dialog # Turn the available interfaces into an array so it can be used with a whiptail dialog
interfacesArray=() interfacesArray=()
firstloop=1 firstloop=1
while read -r line while read -r line
do do
mode="OFF" mode="OFF"
@ -130,12 +135,12 @@ chooseInterface(){
fi fi
interfacesArray+=("$line" "available" "$mode") interfacesArray+=("$line" "available" "$mode")
done <<< "$availableInterfaces" done <<< "$availableInterfaces"
# Find out how many interfaces are available to choose from # Find out how many interfaces are available to choose from
interfaceCount=$(echo "$availableInterfaces" | wc -l) interfaceCount=$(echo "$availableInterfaces" | wc -l)
chooseInterfaceCmd=(whiptail --separate-output --radiolist "Choose An Interface" $r $c $interfaceCount) chooseInterfaceCmd=(whiptail --separate-output --radiolist "Choose An Interface" $r $c $interfaceCount)
chooseInterfaceOptions=$("${chooseInterfaceCmd[@]}" "${interfacesArray[@]}" 2>&1 >/dev/tty) chooseInterfaceOptions=$("${chooseInterfaceCmd[@]}" "${interfacesArray[@]}" 2>&1 >/dev/tty)
for desiredInterface in $chooseInterfaceOptions for desiredInterface in $chooseInterfaceOptions
do do
piholeInterface=$desiredInterface piholeInterface=$desiredInterface
@ -144,6 +149,22 @@ chooseInterface(){
done done
} }
chooseWebserver(){
webserversArray=()
webserversArray+=("lighttpd" "recommended if not sure, or building a standalone configuration" "ON")
webserversArray+=("nginx" "for advanced users building custom solutions" "OFF")
# Find out how many interfaces are available to choose from
chooseWebserverCmd=(whiptail --separate-output --radiolist "Choose a Webserver" $r $c 2)
chooseWebserverOptions=$("${chooseWebserverCmd[@]}" "${webserversArray[@]}" 2>&1 >/dev/tty)
for desiredWebserver in $chooseWebserverOptions
do
piholeWebserver=$desiredWebserver
echo "::: Using webserver: $piholeWebserver"
echo ${piholeWebserver} > /tmp/piholeWEB
done
}
use4andor6(){ use4andor6(){
# Let use select IPv4 and/or IPv6 # Let use select IPv4 and/or IPv6
@ -186,7 +207,7 @@ use4andor6(){
useIPv6dialog(){ useIPv6dialog(){
piholeIPv6=$(ip -6 route get 2001:4860:4860::8888 | awk -F " " '{ for(i=1;i<=NF;i++) if ($i == "src") print $(i+1) }') 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 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
} }
@ -269,13 +290,13 @@ setStaticIPv4(){
installScripts(){ installScripts(){
$SUDO echo ":::" $SUDO echo ":::"
$SUDO echo -n "::: Installing scripts..." $SUDO echo -n "::: Installing scripts..."
$SUDO cp /etc/.pihole/gravity.sh /usr/local/bin/gravity.sh $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/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/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/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/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/updateDashboard.sh /usr/local/bin/updateDashboard.sh
$SUDO chmod 755 /usr/local/bin/{gravity,chronometer,whitelist,blacklist,piholeLogFlush,updateDashboard}.sh $SUDO chmod 755 /usr/local/bin/{gravity,chronometer,whitelist,blacklist,piholeLogFlush,updateDashboard}.sh
$SUDO echo " done." $SUDO echo " done."
} }
@ -283,9 +304,15 @@ installConfigs(){
$SUDO echo ":::" $SUDO echo ":::"
$SUDO echo -n "::: Installing configs..." $SUDO echo -n "::: Installing configs..."
$SUDO mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig $SUDO mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig
$SUDO mv /etc/lighttpd/lighttpd.conf /etc/lighttpd/lighttpd.conf.orig $SUDO cp /etc/.pihole/advanced/dnsmasq.conf /etc/dnsmasq.conf
$SUDO cp /etc/.pihole/advanced/dnsmasq.conf /etc/dnsmasq.conf if [ $piholeWebserver == 'lighttpd' ]; then
$SUDO cp /etc/.pihole/advanced/lighttpd.conf /etc/lighttpd/lighttpd.conf $SUDO mv /etc/lighttpd/lighttpd.conf /etc/lighttpd/lighttpd.conf.orig
$SUDO cp /etc/.pihole/advanced/lighttpd.conf /etc/lighttpd/lighttpd.conf
fi
if [ $piholeWebserver == 'nginx' ]; then
$SUDO cp /etc/.pihole/advanced/nginx-pi-hole.conf /etc/nginx/conf.d/nginx-pi-hole.conf
$SUDO rm /etc/nginx/sites-enabled/default
fi
$SUDO sed -i "s/@INT@/$piholeInterface/" /etc/dnsmasq.conf $SUDO sed -i "s/@INT@/$piholeInterface/" /etc/dnsmasq.conf
$SUDO echo " done." $SUDO echo " done."
} }
@ -293,52 +320,77 @@ installConfigs(){
stopServices(){ stopServices(){
$SUDO echo ":::" $SUDO echo ":::"
$SUDO echo -n "::: Stopping services..." $SUDO echo -n "::: Stopping services..."
$SUDO service dnsmasq stop & spinner $! || true $SUDO service dnsmasq stop & spinner $! || true
$SUDO service lighttpd stop & spinner $! || true if [ $piholeWebserver == 'lighttpd' ]; then
$SUDO service lighttpd stop & spinner $! || true
fi
if [ $piholeWebserver == 'nginx' ]; then
$SUDO service nginx stop & spinner $! || true
fi
$SUDO echo " done." $SUDO echo " done."
} }
checkForDependencies(){ checkForDependencies(){
#Running apt-get update/upgrade with minimal output can cause some issues with #Running apt-get update/upgrade with minimal output can cause some issues with
#requiring user input (e.g password for phpmyadmin see #218) #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 #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 # 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 #Check to see if apt-get update has already been run today
# it needs to have been run at least once on new installs! # it needs to have been run at least once on new installs!
timestamp=$(stat -c %Y /var/cache/apt/) timestamp=$(stat -c %Y /var/cache/apt/)
timestampAsDate=$(date -d @$timestamp "+%b %e") timestampAsDate=$(date -d @$timestamp "+%b %e")
today=$(date "+%b %e") today=$(date "+%b %e")
if [ ! "$today" == "$timestampAsDate" ]; then if [ ! "$today" == "$timestampAsDate" ]; then
#update package lists #update package lists
echo ":::" echo ":::"
echo -n "::: apt-get update has not been run today. Running now..." echo -n "::: apt-get update has not been run today. Running now..."
$SUDO apt-get -qq update & spinner $! $SUDO apt-get -qq update & spinner $!
echo " done!" echo " done!"
fi fi
echo ":::" echo ":::"
echo -n "::: Checking apt-get for upgraded packages...." echo -n "::: Checking apt-get for upgraded packages...."
updatesToInstall=$(sudo apt-get -s -o Debug::NoLocking=true upgrade | grep -c ^Inst) updatesToInstall=$(sudo apt-get -s -o Debug::NoLocking=true upgrade | grep -c ^Inst)
echo " done!" echo " done!"
echo ":::" echo ":::"
if [[ $updatesToInstall -eq "0" ]]; then 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 else
echo "::: There are $updatesToInstall updates availible for your pi!" echo "::: There are $updatesToInstall updates availible for your pi!"
echo "::: We recommend you run 'sudo apt-get upgrade' after installing Pi-Hole! " echo "::: We recommend you run 'sudo apt-get upgrade' after installing Pi-Hole! "
echo ":::" echo ":::"
fi fi
echo ":::" echo ":::"
echo "::: Checking dependencies:" echo "::: Checking dependencies:"
dependencies=( dnsutils bc toilet figlet dnsmasq lighttpd php5-common php5-cgi php5 git curl unzip wget ) dependencies=( dnsutils bc toilet figlet dnsmasq git curl unzip wget )
if [ $piholeWebserver == 'lighttpd' ]; then
dependencies+=( lighttpd php5-cgi )
if [ $(dpkg-query -W -f='${Status}' nginx 2>/dev/null | grep -c "ok installed") -eq 1 ]; then
echo -n "::: Lighttpd selected, but nginx found! Uninstalling...."
$SUDO apt-get -y -qq remove nginx > /dev/null & spinner $!
$SUDO apt-get -y -qq autoremove > /dev/null & spinner $!
echo " done!"
fi
fi
if [ $piholeWebserver == 'nginx' ]; then
dependencies+=( nginx php5-fpm )
if [ $(dpkg-query -W -f='${Status}' lighttpd 2>/dev/null | grep -c "ok installed") -eq 1 ]; then
echo -n "::: Nginx selected, but lighttpd found! Uninstalling...."
$SUDO apt-get -y -qq remove lighttpd > /dev/null & spinner $!
$SUDO apt-get -y -qq autoremove > /dev/null & spinner $!
echo " done!"
fi
fi
dependencies+=( php5-common php5 )
for i in "${dependencies[@]}" for i in "${dependencies[@]}"
do do
: :
@ -354,29 +406,29 @@ checkForDependencies(){
} }
getGitFiles(){ getGitFiles(){
echo ":::" echo ":::"
echo "::: Checking for existing base files..." echo "::: Checking for existing base files..."
if is_repo $piholeFilesDir; then if is_repo $piholeFilesDir; then
make_repo $piholeFilesDir $piholeGitUrl make_repo $piholeFilesDir $piholeGitUrl
else else
update_repo $piholeFilesDir update_repo $piholeFilesDir
fi fi
echo ":::" echo ":::"
echo "::: Checking for existing web interface..." echo "::: Checking for existing web interface..."
if is_repo $webInterfaceDir; then if is_repo $webInterfaceDir; then
make_repo $webInterfaceDir $webInterfaceGitUrl make_repo $webInterfaceDir $webInterfaceGitUrl
else else
update_repo $webInterfaceDir update_repo $webInterfaceDir
fi fi
} }
is_repo() { is_repo() {
echo -n "::: Checking $1 is a repo..." echo -n "::: Checking $1 is a repo..."
# if the directory does not have a .git folder # if the directory does not have a .git folder
# it is not a repo # it is not a repo
if [ -d "$1/.git" ]; then if [ -d "$1/.git" ]; then
echo " OK!" echo " OK!"
@ -384,7 +436,7 @@ is_repo() {
fi fi
echo " not found!!" echo " not found!!"
return 0 return 0
} }
make_repo() { make_repo() {
@ -415,7 +467,7 @@ CreateLogFile(){
else else
$SUDO echo " already exists!" $SUDO echo " already exists!"
fi fi
} }
installPiholeWeb(){ installPiholeWeb(){
@ -425,11 +477,16 @@ installPiholeWeb(){
$SUDO echo " Existing page detected, not overwriting" $SUDO echo " Existing page detected, not overwriting"
else else
$SUDO mkdir /var/www/html/pihole $SUDO mkdir /var/www/html/pihole
$SUDO mv /var/www/html/index.lighttpd.html /var/www/html/index.lighttpd.orig if [ $piholeWebserver == 'lighttpd' ]; then
$SUDO mv /var/www/html/index.lighttpd.html /var/www/html/index.lighttpd.orig
fi
if [ $piholeWebserver == 'nginx' ]; then
$SUDO mv /var/www/html/index.nginx-debian.html /var/www/html/index.nginx-debian.orig
fi
$SUDO cp /etc/.pihole/advanced/index.html /var/www/html/pihole/index.html $SUDO cp /etc/.pihole/advanced/index.html /var/www/html/pihole/index.html
$SUDO echo " done!" $SUDO echo " done!"
fi fi
} }
installCron(){ installCron(){
@ -449,9 +506,9 @@ runGravity(){
#Don't run as SUDO, this was causing issues #Don't run as SUDO, this was causing issues
echo "::: Running gravity.sh" echo "::: Running gravity.sh"
echo ":::" echo ":::"
/usr/local/bin/gravity.sh /usr/local/bin/gravity.sh
} }
@ -462,9 +519,11 @@ installPihole(){
$SUDO chown www-data:www-data /var/www/html $SUDO chown www-data:www-data /var/www/html
$SUDO chmod 775 /var/www/html $SUDO chmod 775 /var/www/html
$SUDO usermod -a -G www-data pi $SUDO usermod -a -G www-data pi
$SUDO lighty-enable-mod fastcgi fastcgi-php > /dev/null if [ $piholeWebserver == 'lighttpd' ]; then
$SUDO lighty-enable-mod fastcgi fastcgi-php > /dev/null
getGitFiles fi
getGitFiles
installScripts installScripts
installConfigs installConfigs
#installWebAdmin #installWebAdmin
@ -494,6 +553,8 @@ welcomeDialogs
backupLegacyPihole backupLegacyPihole
# Find interfaces and let the user choose one # Find interfaces and let the user choose one
chooseInterface chooseInterface
# Let the user decide which webserver they prefer
chooseWebserver
# Let the user decide if they want to block ads over IPv4 and/or IPv6 # Let the user decide if they want to block ads over IPv4 and/or IPv6
use4andor6 use4andor6
@ -505,4 +566,9 @@ $SUDO mv $tmpLog $instalLogLoc
displayFinalMessage displayFinalMessage
$SUDO service dnsmasq start $SUDO service dnsmasq start
$SUDO service lighttpd start if [ $piholeWebserver == 'lighttpd' ]; then
$SUDO service lighttpd start
fi
if [ $piholeWebserver == 'nginx' ]; then
$SUDO service nginx start
fi

View file

@ -25,15 +25,24 @@ fi
######### SCRIPT ########### ######### SCRIPT ###########
if [ $(dpkg-query -W -f='${Status}' lighttpd 2>/dev/null | grep -c "ok installed") -eq 1 ]; then
$SUDO apt-get -y remove --purge lighttpd php5-cli
fi
if [ $(dpkg-query -W -f='${Status}' nginx 2>/dev/null | grep -c "ok installed") -eq 1 ]; then
$SUDO apt-get -y remove --purge nginx php5-fpm
fi
$SUDO apt-get -y remove --purge dnsutils bc toilet $SUDO apt-get -y remove --purge dnsutils bc toilet
$SUDO apt-get -y remove --purge dnsmasq $SUDO apt-get -y remove --purge dnsmasq
$SUDO apt-get -y remove --purge lighttpd php5-common php5-cgi php5 $SUDO apt-get -y remove --purge php5-common php5
$SUDO apt-get -y autoremove --purge
# Only web directories/files that are created by pihole should be removed. # 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 $SUDO rm -rf /var/www/html/admin
$SUDO rm -rf /var/www/html/pihole $SUDO rm -rf /var/www/html/pihole
$SUDO rm /var/www/html/index.lighttpd.orig $SUDO rm /var/www/html/index.lighttpd.orig
$SUDO rm /var/www/html/index.nginx-debian.orig
# If the web directory is empty after removing these files, then the parent html folder can be removed. # 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 if [[ ! "$(ls -A /var/www/html)" ]]; then
@ -63,6 +72,7 @@ fi
echo "Removing config files and scripts..." echo "Removing config files and scripts..."
$SUDO rm /etc/dnsmasq.conf $SUDO rm /etc/dnsmasq.conf
$SUDO rm -rf /etc/lighttpd/ $SUDO rm -rf /etc/lighttpd/
$SUDO rm -rf /etc/nginx/
$SUDO rm /var/log/pihole.log $SUDO rm /var/log/pihole.log
$SUDO rm /usr/local/bin/gravity.sh $SUDO rm /usr/local/bin/gravity.sh
$SUDO rm /usr/local/bin/chronometer.sh $SUDO rm /usr/local/bin/chronometer.sh

View file

@ -0,0 +1,28 @@
server {
listen 80;
listen [::]:80;
root /var/www/html;
error_page 404 /pihole/index.html;
location ~ ^/admin/ {
index index.php;
add_header X-Pi-hole "The Pi-hole Web interface is working!";
location ~ .php$ {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
location / {
add_header X-Pi-hole "A black hole for Internet advertisements.";
}
}
server {
server_name ads.hulu.com ads-v-darwin.hulu.com;
return 301 http://192.168.1.101:8200/MediaItems/19.mov;
}