Remove option to set static IP address if DHCPCD is installed (#5111)

This commit is contained in:
Adam Warner 2023-06-04 22:09:04 +01:00 committed by GitHub
commit 499998c537
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -500,9 +500,6 @@ find_IPv4_information() {
# disabled as we intentionally want to split on whitespace and have printf populate # disabled as we intentionally want to split on whitespace and have printf populate
# the variable with just the first field. # the variable with just the first field.
printf -v IPv4bare "$(printf ${route#*src })" printf -v IPv4bare "$(printf ${route#*src })"
# Get the default gateway IPv4 address (the way to reach the Internet)
# shellcheck disable=SC2059,SC2086
printf -v IPv4gw "$(printf ${route#*via })"
if ! valid_ip "${IPv4bare}" ; then if ! valid_ip "${IPv4bare}" ; then
IPv4bare="127.0.0.1" IPv4bare="127.0.0.1"
@ -663,135 +660,11 @@ find_IPv6_information() {
# A function to collect IPv4 and IPv6 information of the device # A function to collect IPv4 and IPv6 information of the device
collect_v4andv6_information() { collect_v4andv6_information() {
find_IPv4_information find_IPv4_information
# Echo the information to the user
printf " %b IPv4 address: %s\\n" "${INFO}" "${IPV4_ADDRESS}" printf " %b IPv4 address: %s\\n" "${INFO}" "${IPV4_ADDRESS}"
# if `dhcpcd` is used offer to set this as static IP for the device
if [[ -f "/etc/dhcpcd.conf" ]]; then
# configure networking via dhcpcd
getStaticIPv4Settings
fi
find_IPv6_information find_IPv6_information
printf " %b IPv6 address: %s\\n" "${INFO}" "${IPV6_ADDRESS}" printf " %b IPv6 address: %s\\n" "${INFO}" "${IPV6_ADDRESS}"
} }
getStaticIPv4Settings() {
# Local, named variables
local ipSettingsCorrect
local DHCPChoice
# Ask if the user wants to use DHCP settings as their static IP
# This is useful for users that are using DHCP reservations; we can use the information gathered
DHCPChoice=$(dialog --no-shadow --keep-tite --output-fd 1 \
--cancel-label "Exit" --ok-label "Continue" \
--backtitle "Calibrating network interface" \
--title "Static IP Address" \
--menu "Do you want to use your current network settings as a static address?\\n \
IP address: ${IPV4_ADDRESS}\\n \
Gateway: ${IPv4gw}\\n" \
"${r}" "${c}" 3 \
"Yes" "Set static IP using current values" \
"No" "Set static IP using custom values" \
"Skip" "I will set a static IP later, or have already done so")
result=$?
case ${result} in
"${DIALOG_CANCEL}" | "${DIALOG_ESC}")
printf " %b Cancel was selected, exiting installer%b\\n" "${COL_LIGHT_RED}" "${COL_NC}"
exit 1
;;
esac
case ${DHCPChoice} in
"Skip")
return
;;
"Yes")
# If they choose yes, let the user know that the IP address will not be available via DHCP and may cause a conflict.
dialog --no-shadow --keep-tite \
--cancel-label "Exit" \
--backtitle "IP information" \
--title "FYI: IP Conflict" \
--msgbox "\\nIt 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.\n\n\
If you are worried, either manually set the address, or modify the DHCP reservation pool so it does not include the IP you want.\n\n\
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}" && result=0 || result=$?
case ${result} in
"${DIALOG_CANCEL}" | "${DIALOG_ESC}")
printf " %b Cancel was selected, exiting installer%b\\n" "${COL_LIGHT_RED}" "${COL_NC}"
exit 1
;;
esac
;;
"No")
# 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
ipSettingsCorrect=false
until [[ "${ipSettingsCorrect}" = True ]]; do
# Ask for the IPv4 address
_staticIPv4Temp=$(dialog --no-shadow --keep-tite --output-fd 1 \
--cancel-label "Exit" \
--ok-label "Continue" \
--backtitle "Calibrating network interface" \
--title "IPv4 Address" \
--form "\\nEnter your desired IPv4 address" \
"${r}" "${c}" 0 \
"IPv4 Address:" 1 1 "${IPV4_ADDRESS}" 1 15 19 0 \
"IPv4 Gateway:" 2 1 "${IPv4gw}" 2 15 19 0)
result=$?
case ${result} in
"${DIALOG_CANCEL}" | "${DIALOG_ESC}")
printf " %b Cancel was selected, exiting installer%b\\n" "${COL_LIGHT_RED}" "${COL_NC}"
exit 1
;;
esac
IPV4_ADDRESS=${_staticIPv4Temp%$'\n'*}
IPv4gw=${_staticIPv4Temp#*$'\n'}
# Give the user a chance to review their settings before moving on
dialog --no-shadow --keep-tite \
--no-label "Edit IP" \
--backtitle "Calibrating network interface" \
--title "Static IP Address" \
--defaultno \
--yesno "Are these settings correct?
IP address: ${IPV4_ADDRESS}
Gateway: ${IPv4gw}" \
"${r}" "${c}" && ipSettingsCorrect=True
done
;;
esac
setDHCPCD
}
# Configure networking via dhcpcd
setDHCPCD() {
# Regex for matching a non-commented static ip address setting
local regex="^[ \t]*static ip_address[ \t]*=[ \t]*${IPV4_ADDRESS}"
# Check if static IP is already set in file
if grep -q "${regex}" /etc/dhcpcd.conf; then
printf " %b Static IP already configured\\n" "${INFO}"
# If it's not,
else
# we can append these lines to dhcpcd.conf to enable a static IP
echo "interface ${PIHOLE_INTERFACE}
static ip_address=${IPV4_ADDRESS}
static routers=${IPv4gw}
static domain_name_servers=${PIHOLE_DNS_1} ${PIHOLE_DNS_2}" | tee -a /etc/dhcpcd.conf >/dev/null
# Then use the ip command to immediately set the new address
ip addr replace dev "${PIHOLE_INTERFACE}" "${IPV4_ADDRESS}"
# Also give a warning that the user may need to reboot their system
printf " %b Set IP address to %s\\n" "${TICK}" "${IPV4_ADDRESS%/*}"
printf " %b You may need to restart after the install is complete\\n" "${INFO}"
fi
}
# Check an IP address to see if it is a valid one # Check an IP address to see if it is a valid one
valid_ip() { valid_ip() {
# Local, named variables # Local, named variables