mirror of
https://github.com/pi-hole/pi-hole.git
synced 2024-12-01 02:23:21 +00:00
moving to functions
Also download the whitelist script. Ask for donations for IPv6 support.
This commit is contained in:
parent
903aedc9c9
commit
f8a6703eab
1 changed files with 137 additions and 77 deletions
|
@ -29,9 +29,10 @@ IPv4mask=$(ifconfig | awk -F':' '/inet addr/ && !/127.0.0.1/ {print $4}')
|
||||||
IPv4gw=$(ip route show | awk '/default\ via/ {print $3}')
|
IPv4gw=$(ip route show | awk '/default\ via/ {print $3}')
|
||||||
|
|
||||||
# IPv6 support to be added later
|
# IPv6 support to be added later
|
||||||
#IPv6addr=$(ip addr show | awk '/scope\ global/ && /ff:fe/ {print $2}' | cut -d'/' -f1)
|
#IPv6eui64=$(ip addr show | awk '/scope\ global/ && /ff:fe/ {print $2}' | cut -d'/' -f1)
|
||||||
|
#IPv6linkLocal=$(ip addr show | awk '/inet/ && /scope\ link/ && /fe80/ {print $2}' | cut -d'/' -f1)
|
||||||
|
|
||||||
ethernetDevice="eth0"
|
availableInterfaces=$(ip link show | awk -F' ' '/[0-9]: [a-z]/ {print $2}' | grep -v "lo" | cut -d':' -f1)
|
||||||
dhcpcdFile=/etc/dhcpcd.conf
|
dhcpcdFile=/etc/dhcpcd.conf
|
||||||
|
|
||||||
####### FUCNTIONS ##########
|
####### FUCNTIONS ##########
|
||||||
|
@ -51,7 +52,113 @@ else
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
set_static_ip()
|
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
|
||||||
|
|
||||||
|
# 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
|
||||||
|
}
|
||||||
|
|
||||||
|
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 IPv4" off)
|
||||||
|
choices=$("${cmd[@]}" "${options[@]}" 2>&1 >/dev/tty)
|
||||||
|
clear
|
||||||
|
for choice in $choices
|
||||||
|
do
|
||||||
|
case $choice in
|
||||||
|
IPv4)
|
||||||
|
echo "IPv4 selected."
|
||||||
|
useIPv4=true
|
||||||
|
;;
|
||||||
|
IPv6)
|
||||||
|
echo "IPv6 selected."
|
||||||
|
useIPv6=true
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
getStaticIPv4Settings()
|
||||||
|
{
|
||||||
|
# Ask if the user wannts 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
|
||||||
|
Subnet mask: $IPv4mask
|
||||||
|
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 subnet mask
|
||||||
|
IPv4mask=$(whiptail --backtitle "Calibrating network interface" --title "IPv4 netmask" --inputbox "Enter your desired IPv4 subnet mask" $r $c $IPv4mask 3>&1 1>&2 2>&3)
|
||||||
|
if [[ $? = 0 ]];then
|
||||||
|
echo "Your static IPv4 netmask: $IPv4mask"
|
||||||
|
# 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
|
||||||
|
Subnet mask: $IPv4mask
|
||||||
|
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
|
||||||
|
# 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 "User canceled."
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# Cancelling subnet mask settings window
|
||||||
|
ipSettingsCorrect=False
|
||||||
|
echo "User canceled."
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# Cancelling IPv4 settings window
|
||||||
|
ipSettingsCorrect=False
|
||||||
|
echo "User canceled."
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
# End the if statement for DHCP vs. static
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
setStaticIPv4()
|
||||||
{
|
{
|
||||||
# Append these lines to /etc/dhcpcd.conf to enable a static IP
|
# Append these lines to /etc/dhcpcd.conf to enable a static IP
|
||||||
echo "interface $ethernetDevice
|
echo "interface $ethernetDevice
|
||||||
|
@ -76,6 +183,7 @@ sudo service lighttpd stop
|
||||||
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 mv /etc/lighttpd/lighttpd.conf /etc/lighttpd/lighttpd.conf.orig
|
||||||
sudo mv /var/www/html/index.lighttpd.html /var/www/html/index.lighttpd.orig
|
sudo mv /var/www/html/index.lighttpd.html /var/www/html/index.lighttpd.orig
|
||||||
|
sudo mv /etc/crontab /etc/crontab.orig
|
||||||
sudo curl -o /etc/dnsmasq.conf https://raw.githubusercontent.com/jacobsalmela/pi-hole/master/advanced/dnsmasq.conf
|
sudo curl -o /etc/dnsmasq.conf https://raw.githubusercontent.com/jacobsalmela/pi-hole/master/advanced/dnsmasq.conf
|
||||||
sudo curl -o /etc/lighttpd/lighttpd.conf https://raw.githubusercontent.com/jacobsalmela/pi-hole/master/advanced/lighttpd.conf
|
sudo curl -o /etc/lighttpd/lighttpd.conf https://raw.githubusercontent.com/jacobsalmela/pi-hole/master/advanced/lighttpd.conf
|
||||||
sudo mv /etc/crontab /etc/crontab.orig
|
sudo mv /etc/crontab /etc/crontab.orig
|
||||||
|
@ -92,94 +200,46 @@ sudo chmod 644 /var/log/pihole.log
|
||||||
sudo chown dnsmasq:root /var/log/pihole.log
|
sudo chown dnsmasq:root /var/log/pihole.log
|
||||||
sudo curl -o /usr/local/bin/gravity.sh https://raw.githubusercontent.com/jacobsalmela/pi-hole/installation/gravity.sh
|
sudo curl -o /usr/local/bin/gravity.sh https://raw.githubusercontent.com/jacobsalmela/pi-hole/installation/gravity.sh
|
||||||
sudo curl -o /usr/local/bin/chronometer.sh https://raw.githubusercontent.com/jacobsalmela/pi-hole/master/advanced/Scripts/chronometer.sh
|
sudo curl -o /usr/local/bin/chronometer.sh https://raw.githubusercontent.com/jacobsalmela/pi-hole/master/advanced/Scripts/chronometer.sh
|
||||||
|
sudo curl -o /usr/local/bin/whitelist.sh https://raw.githubusercontent.com/jacobsalmela/pi-hole/master/advanced/Scripts/whitelist.sh
|
||||||
sudo chmod 755 /usr/local/bin/gravity.sh
|
sudo chmod 755 /usr/local/bin/gravity.sh
|
||||||
sudo chmod 755 /usr/local/bin/chronometer.sh
|
sudo chmod 755 /usr/local/bin/chronometer.sh
|
||||||
|
sudo chmod 755 /usr/local/bin/whitelist.sh
|
||||||
sudo /usr/local/bin/gravity.sh
|
sudo /usr/local/bin/gravity.sh
|
||||||
sudo service networking restart
|
sudo service networking restart
|
||||||
}
|
}
|
||||||
|
|
||||||
######## SCRIPT ############
|
######## SCRIPT ############
|
||||||
|
# Start the installer
|
||||||
|
welcomeDialogs
|
||||||
|
|
||||||
# Just back up the original Pi-hole right away since it won't take long and it gets it out of the way
|
# Just back up the original Pi-hole right away since it won't take long and it gets it out of the way
|
||||||
backupLegacyPihole
|
backupLegacyPihole
|
||||||
|
|
||||||
# Display the welcome dialog
|
# Let the user decide if they want to block ads over IPv4 and/or IPv6
|
||||||
whiptail --msgbox --backtitle "Welcome" --title "Pi-hole automated installer" "This installer will transform your Raspberry Pi into a network-wide ad blocker!" $r $c
|
use4andor6
|
||||||
|
|
||||||
# Explain the need for a static address
|
# Decide is IPv4 will be used
|
||||||
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.
|
if [[ "$useIPv4" = true ]];then
|
||||||
|
echo "Using IPv4"
|
||||||
In the next section, you can choose to use your current network settings (DHCP) or to manually edit them." $r $c
|
getStaticIPv4Settings
|
||||||
|
setStaticIPv4
|
||||||
# Ask if the user wannts 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
|
|
||||||
Subnet mask: $IPv4mask
|
|
||||||
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
|
else
|
||||||
# Otherwise, we need to ask the user to input their desired settings.
|
echo "IPv4 will NOT be used."
|
||||||
# Start by getting the IPv4 address (pre-filling it with info gathered from DHCP)
|
fi
|
||||||
# Start a loop to let the user enter their information with the chance to go back and edit it if necessary
|
|
||||||
until [[ $ipSettingsCorrect = True ]]
|
# Decide is IPv6 will be used
|
||||||
do
|
if [[ "$useIPv6" = true ]];then
|
||||||
# Ask for the IPv4 address
|
whiptail --msgbox --backtitle "Coming soon..." --title "IPv6 not yet supported" "I need your help. Consider donating at:
|
||||||
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
|
http://pi-hole.net/donate" $r $c
|
||||||
echo "Your static IPv4 address: $IPv4addr"
|
echo "Using IPv6"
|
||||||
# Ask for the subnet mask
|
else
|
||||||
IPv4mask=$(whiptail --backtitle "Calibrating network interface" --title "IPv4 netmask" --inputbox "Enter your desired IPv4 subnet mask" $r $c $IPv4mask 3>&1 1>&2 2>&3)
|
whiptail --msgbox --backtitle "Coming soon..." --title "IPv6 not yet supported" "I need your help. Consider donating at:
|
||||||
if [[ $? = 0 ]];then
|
|
||||||
echo "Your static IPv4 netmask: $IPv4mask"
|
http://pi-hole.net/donate" $r $c
|
||||||
# Ask for the gateway
|
echo "IPv6 will NOT be used."
|
||||||
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
|
|
||||||
Subnet mask: $IPv4mask
|
|
||||||
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
|
|
||||||
# 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 "User canceled."
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
# Cancelling subnet mask settings window
|
|
||||||
ipSettingsCorrect=False
|
|
||||||
echo "User canceled."
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
# Cancelling IPv4 settings window
|
|
||||||
ipSettingsCorrect=False
|
|
||||||
echo "User canceled."
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
# End the if statement for DHCP vs. static
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Set the static address
|
|
||||||
set_static_ip
|
|
||||||
|
|
||||||
# Install and log everything to a file
|
# Install and log everything to a file
|
||||||
installPihole | tee $tmpLog
|
installPihole | tee $tmpLog
|
||||||
|
|
Loading…
Reference in a new issue