diff --git a/automated install/basic-install.sh b/automated install/basic-install.sh index a7bdcb16..7500f86f 100755 --- a/automated install/basic-install.sh +++ b/automated install/basic-install.sh @@ -29,8 +29,8 @@ piholeFilesDir="/etc/.pihole" useUpdateVars=false -IPv4_address="" -IPv6_address="" +IPV4_ADDRESS="" +IPV6_ADDRESS="" # Find the rows and columns will default to 80x24 is it can not be detected screen_size=$(stty size 2>/dev/null || echo 24 80) @@ -143,7 +143,7 @@ spinner() { find_IPv4_information() { # 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)}') - IPv4_address=$(ip -o -f inet addr show dev "$IPv4dev" | awk '{print $4}' | awk 'END {print}') + IPV4_ADDRESS=$(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}') } @@ -226,8 +226,8 @@ chooseInterface() { chooseInterfaceOptions=$("${chooseInterfaceCmd[@]}" "${interfacesArray[@]}" 2>&1 >/dev/tty) if [[ $? = 0 ]]; then for desiredInterface in ${chooseInterfaceOptions}; do - piholeInterface=${desiredInterface} - echo "::: Using interface: $piholeInterface" + PIHOLE_INTERFACE=${desiredInterface} + echo "::: Using interface: $PIHOLE_INTERFACE" done else echo "::: Cancel selected, exiting...." @@ -237,8 +237,8 @@ chooseInterface() { useIPv6dialog() { # Show the IPv6 address used for blocking - IPv6_address=$(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" "$IPv6_address will be used to block ads." ${r} ${c} + IPV6_ADDRESS=$(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" "$IPV6_ADDRESS will be used to block ads." ${r} ${c} } @@ -266,8 +266,8 @@ use4andor6() { if [[ ${useIPv6} ]]; then useIPv6dialog fi - echo "::: IPv4 address: ${IPv4_address}" - echo "::: IPv6 address: ${IPv6_address}" + echo "::: IPv4 address: ${IPV4_ADDRESS}" + echo "::: IPv6 address: ${IPV6_ADDRESS}" if [ ! ${useIPv4} ] && [ ! ${useIPv6} ]; then echo "::: Cannot continue, neither IPv4 or IPv6 selected" echo "::: Exiting" @@ -282,7 +282,7 @@ use4andor6() { 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: ${IPv4_address} + IP address: ${IPV4_ADDRESS} 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. @@ -295,16 +295,16 @@ It is also possible to use a DHCP reservation, but if you are going to do that, # 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 - IPv4_address=$(whiptail --backtitle "Calibrating network interface" --title "IPv4 address" --inputbox "Enter your desired IPv4 address" ${r} ${c} "${IPv4_address}" 3>&1 1>&2 2>&3) + IPV4_ADDRESS=$(whiptail --backtitle "Calibrating network interface" --title "IPv4 address" --inputbox "Enter your desired IPv4 address" ${r} ${c} "${IPV4_ADDRESS}" 3>&1 1>&2 2>&3) if [[ $? = 0 ]]; then - echo "::: Your static IPv4 address: ${IPv4_address}" + echo "::: Your static IPv4 address: ${IPV4_ADDRESS}" # 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: ${IPv4_address} + IP address: ${IPV4_ADDRESS} Gateway: ${IPv4gw}" ${r} ${c}); then # After that's done, the loop ends and we move on ipSettingsCorrect=True @@ -331,8 +331,8 @@ It is also possible to use a DHCP reservation, but if you are going to do that, setDHCPCD() { # Append these lines to dhcpcd.conf to enable a static IP - echo "## interface ${piholeInterface} - static ip_address=${IPv4_address} + echo "## interface ${PIHOLE_INTERFACE} + static ip_address=${IPV4_ADDRESS} static routers=${IPv4gw} static domain_name_servers=${IPv4gw}" | tee -a /etc/dhcpcd.conf >/dev/null } @@ -343,45 +343,45 @@ setStaticIPv4() { local CIDR if [[ -f /etc/dhcpcd.conf ]]; then # Debian Family - if grep -q "${IPv4_address}" /etc/dhcpcd.conf; then + if grep -q "${IPV4_ADDRESS}" /etc/dhcpcd.conf; then echo "::: Static IP already configured" else setDHCPCD - ip addr replace dev "${piholeInterface}" "${IPv4_address}" + ip addr replace dev "${PIHOLE_INTERFACE}" "${IPV4_ADDRESS}" echo ":::" - echo "::: Setting IP to ${IPv4_address}. You may need to restart after the install is complete." + echo "::: Setting IP to ${IPV4_ADDRESS}. You may need to restart after the install is complete." echo ":::" fi - elif [[ -f /etc/sysconfig/network-scripts/ifcfg-${piholeInterface} ]];then + elif [[ -f /etc/sysconfig/network-scripts/ifcfg-${PIHOLE_INTERFACE} ]];then # Fedora Family - IFCFG_FILE=/etc/sysconfig/network-scripts/ifcfg-${piholeInterface} - if grep -q "${IPv4_address}" "${IFCFG_FILE}"; then + IFCFG_FILE=/etc/sysconfig/network-scripts/ifcfg-${PIHOLE_INTERFACE} + if grep -q "${IPV4_ADDRESS}" "${IFCFG_FILE}"; then echo "::: Static IP already configured" else - IPADDR=$(echo "${IPv4_address}" | cut -f1 -d/) - CIDR=$(echo "${IPv4_address}" | cut -f2 -d/) + IPADDR=$(echo "${IPV4_ADDRESS}" | cut -f1 -d/) + CIDR=$(echo "${IPV4_ADDRESS}" | cut -f2 -d/) # Backup existing interface configuration: cp "${IFCFG_FILE}" "${IFCFG_FILE}".pihole.orig # Build Interface configuration file: { echo "# Configured via Pi-Hole installer" - echo "DEVICE=$piholeInterface" + echo "DEVICE=$PIHOLE_INTERFACE" echo "BOOTPROTO=none" echo "ONBOOT=yes" echo "IPADDR=$IPADDR" echo "PREFIX=$CIDR" echo "GATEWAY=$IPv4gw" - echo "DNS1=$piholeDNS1" - echo "DNS2=$piholeDNS2" + echo "DNS1=$PIHOLE_DNS_1" + echo "DNS2=$PIHOLE_DNS_2" echo "USERCTL=no" }>> "${IFCFG_FILE}" - ip addr replace dev "${piholeInterface}" "${IPv4_address}" + ip addr replace dev "${PIHOLE_INTERFACE}" "${IPV4_ADDRESS}" if [ -x "$(command -v nmcli)" ];then # Tell NetworkManager to read our new sysconfig file nmcli con load "${IFCFG_FILE}" > /dev/null fi echo ":::" - echo "::: Setting IP to ${IPv4_address}. You may need to restart after the install is complete." + echo "::: Setting IP to ${IPV4_ADDRESS}. You may need to restart after the install is complete." echo ":::" fi else @@ -419,70 +419,70 @@ setDNS() { case ${DNSchoices} in Google) echo "::: Using Google DNS servers." - piholeDNS1="8.8.8.8" - piholeDNS2="8.8.4.4" + PIHOLE_DNS_1="8.8.8.8" + PIHOLE_DNS_2="8.8.4.4" ;; OpenDNS) echo "::: Using OpenDNS servers." - piholeDNS1="208.67.222.222" - piholeDNS2="208.67.220.220" + PIHOLE_DNS_1="208.67.222.222" + PIHOLE_DNS_2="208.67.220.220" ;; Level3) echo "::: Using Level3 servers." - piholeDNS1="4.2.2.1" - piholeDNS2="4.2.2.2" + PIHOLE_DNS_1="4.2.2.1" + PIHOLE_DNS_2="4.2.2.2" ;; Norton) echo "::: Using Norton ConnectSafe servers." - piholeDNS1="199.85.126.10" - piholeDNS2="199.85.127.10" + PIHOLE_DNS_1="199.85.126.10" + PIHOLE_DNS_2="199.85.127.10" ;; Comodo) echo "::: Using Comodo Secure servers." - piholeDNS1="8.26.56.26" - piholeDNS2="8.20.247.20" + PIHOLE_DNS_1="8.26.56.26" + PIHOLE_DNS_2="8.20.247.20" ;; Custom) until [[ ${DNSSettingsCorrect} = True ]]; do strInvalid="Invalid" - if [ ! ${piholeDNS1} ]; then - if [ ! ${piholeDNS2} ]; then + if [ ! ${PIHOLE_DNS_1} ]; then + if [ ! ${PIHOLE_DNS_2} ]; then prePopulate="" else - prePopulate=", ${piholeDNS2}" + prePopulate=", ${PIHOLE_DNS_2}" fi - elif [ ${piholeDNS1} ] && [ ! ${piholeDNS2} ]; then - prePopulate="${piholeDNS1}" - elif [ ${piholeDNS1} ] && [ ${piholeDNS2} ]; then - prePopulate="${piholeDNS1}, ${piholeDNS2}" + elif [ ${PIHOLE_DNS_1} ] && [ ! ${PIHOLE_DNS_2} ]; then + prePopulate="${PIHOLE_DNS_1}" + elif [ ${PIHOLE_DNS_1} ] && [ ${PIHOLE_DNS_2} ]; then + prePopulate="${PIHOLE_DNS_1}, ${PIHOLE_DNS_2}" 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} + PIHOLE_DNS_1=$(echo "${piholeDNS}" | sed 's/[, \t]\+/,/g' | awk -F, '{print$1}') + PIHOLE_DNS_2=$(echo "${piholeDNS}" | sed 's/[, \t]\+/,/g' | awk -F, '{print$2}') + if ! valid_ip "${PIHOLE_DNS_1}" || [ ! "${PIHOLE_DNS_1}" ]; then + PIHOLE_DNS_1=${strInvalid} fi - if ! valid_ip "${piholeDNS2}" && [ "${piholeDNS2}" ]; then - piholeDNS2=${strInvalid} + if ! valid_ip "${PIHOLE_DNS_2}" && [ "${PIHOLE_DNS_2}" ]; then + PIHOLE_DNS_2=${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="" + if [[ ${PIHOLE_DNS_1} == "${strInvalid}" ]] || [[ ${PIHOLE_DNS_2} == "${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: $PIHOLE_DNS_1\n DNS Server 2: ${PIHOLE_DNS_2}" ${r} ${c} + if [[ ${PIHOLE_DNS_1} == "${strInvalid}" ]]; then + PIHOLE_DNS_1="" fi - if [[ ${piholeDNS2} == "${strInvalid}" ]]; then - piholeDNS2="" + if [[ ${PIHOLE_DNS_2} == "${strInvalid}" ]]; then + PIHOLE_DNS_2="" 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 + if (whiptail --backtitle "Specify Upstream DNS Provider(s)" --title "Upstream DNS Provider(s)" --yesno "Are these settings correct?\n DNS Server 1: $PIHOLE_DNS_1\n DNS Server 2: ${PIHOLE_DNS_2}" ${r} ${c}); then DNSSettingsCorrect=True else # If the settings are wrong, the loop continues @@ -551,14 +551,14 @@ version_check_dnsmasq() { echo -n "::: Copying 01-pihole.conf to /etc/dnsmasq.d/01-pihole.conf..." cp ${dnsmasq_pihole_01_snippet} ${dnsmasq_pihole_01_location} echo " done." - sed -i "s/@INT@/$piholeInterface/" ${dnsmasq_pihole_01_location} - if [[ "${piholeDNS1}" != "" ]]; then - sed -i "s/@DNS1@/$piholeDNS1/" ${dnsmasq_pihole_01_location} + sed -i "s/@INT@/$PIHOLE_INTERFACE/" ${dnsmasq_pihole_01_location} + if [[ "${PIHOLE_DNS_1}" != "" ]]; then + sed -i "s/@DNS1@/$PIHOLE_DNS_1/" ${dnsmasq_pihole_01_location} else sed -i '/^server=@DNS1@/d' ${dnsmasq_pihole_01_location} fi - if [[ "${piholeDNS2}" != "" ]]; then - sed -i "s/@DNS2@/$piholeDNS2/" ${dnsmasq_pihole_01_location} + if [[ "${PIHOLE_DNS_2}" != "" ]]; then + sed -i "s/@DNS2@/$PIHOLE_DNS_2/" ${dnsmasq_pihole_01_location} else sed -i '/^server=@DNS2@/d' ${dnsmasq_pihole_01_location} fi @@ -572,16 +572,16 @@ version_check_dnsmasq() { fi #Replace IPv4 and IPv6 tokens in 01-pihole.conf for pi.hole resolution. - if [[ "${IPv4_address}" != "" ]]; then - tmp=${IPv4_address%/*} + if [[ "${IPV4_ADDRESS}" != "" ]]; then + tmp=${IPV4_ADDRESS%/*} sed -i "s/@IPv4@/$tmp/" ${dnsmasq_pihole_01_location} else sed -i '/^address=\/pi.hole\/@IPv4@/d' ${dnsmasq_pihole_01_location} sed -i '/^address=\/@HOSTNAME@\/@IPv4@/d' ${dnsmasq_pihole_01_location} fi - if [[ "${IPv6_address}" != "" ]]; then - sed -i "s/@IPv6@/$IPv6_address/" ${dnsmasq_pihole_01_location} + if [[ "${IPV6_ADDRESS}" != "" ]]; then + sed -i "s/@IPv6@/$IPV6_ADDRESS/" ${dnsmasq_pihole_01_location} else sed -i '/^address=\/pi.hole\/@IPv6@/d' ${dnsmasq_pihole_01_location} sed -i '/^address=\/@HOSTNAME@\/@IPv6@/d' ${dnsmasq_pihole_01_location} @@ -859,11 +859,11 @@ finalExports() { rm ${setupVars} fi { - echo "piholeInterface=${piholeInterface}" - echo "IPv4_address=${IPv4_address}" - echo "IPv6_address=${IPv6_address}" - echo "piholeDNS1=${piholeDNS1}" - echo "piholeDNS2=${piholeDNS2}" + echo "PIHOLE_INTERFACE=${PIHOLE_INTERFACE}" + echo "IPV4_ADDRESS=${IPV4_ADDRESS}" + echo "IPV6_ADDRESS=${IPV6_ADDRESS}" + echo "PIHOLE_DNS_1=${PIHOLE_DNS_1}" + echo "PIHOLE_DNS_2=${PIHOLE_DNS_2}" echo "QUERY_LOGGING=${QUERY_LOGGING}" }>> "${setupVars}" } @@ -895,10 +895,18 @@ installPihole() { accountForRefactor() { # At some point in the future this list can be pruned, for now we'll need it to ensure updates don't break. + # Refactoring of install script has changed the name of a couple of variables. Sort them out here. sed -i 's/IPv4addr/IPv4_address/g' ${setupVars} sed -i 's/piholeIPv6/IPv6_address/g' ${setupVars} + # Account for renaming of global variables. + sed -i 's/piholeInterface/PIHOLE_INTERFACE/g' ${setupVars} + sed -i 's/IPv4_address/IPV4_ADDRESS/g' ${setupVars} + sed -i 's/IPv6_address/IPV6_ADDRESS/g' ${setupVars} + sed -i 's/piholeDNS1/PIHOLE_DNS_1/g' ${setupVars} + sed -i 's/piholeDNS2/PIHOLE_DNS_2/g' ${setupVars} + } updatePihole() { @@ -940,13 +948,13 @@ 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: -IPv4: ${IPv4_address%/*} -IPv6: ${IPv6_address} +IPv4: ${IPV4_ADDRESS%/*} +IPv6: ${IPV6_ADDRESS} If you set a new IP address, you should restart the Pi. The install log is in /etc/pihole. -View the web interface at http://pi.hole/admin or http://${IPv4_address%/*}/admin" ${r} ${c} +View the web interface at http://pi.hole/admin or http://${IPV4_ADDRESS%/*}/admin" ${r} ${c} } update_dialogs() { @@ -1079,8 +1087,8 @@ main() { echo ":::" if [[ "${useUpdateVars}" == false ]]; then echo "::: Installation Complete! Configure your devices to use the Pi-hole as their DNS server using:" - echo "::: ${IPv4_address%/*}" - echo "::: ${IPv6_address}" + echo "::: ${IPV4_ADDRESS%/*}" + echo "::: ${IPV6_ADDRESS}" echo ":::" echo "::: If you set a new IP address, you should restart the Pi." else @@ -1089,7 +1097,7 @@ main() { echo ":::" echo "::: The install log is located at: /etc/pihole/install.log" - echo "::: View the web interface at http://pi.hole/admin or http://${IPv4_address%/*}/admin" + echo "::: View the web interface at http://pi.hole/admin or http://${IPV4_ADDRESS%/*}/admin" } main "$@"