BOOTPROTO=none | static | dhcp and /etc/resolv.conf
What does it mean when it says BOOTPROTO=none
in the /etc/sysconfig/network-scripts/ifcfg-eth0
file.
I remember there used to be BOOTPROTO=static
and it was very clear and straight-forward in telling us that if an IPADDR=<x.x.x.x>
is given, the server will come up with the IP address specified. Likewise, BOOTPROTO=dhcp
will look for a DHCP server to obtain a dynamic IP address. Redhat says:
BOOTPROTO=protocol where protocol is one of the following: none — No boot-time protocol should be used. bootp — The BOOTP protocol should be used. dhcp — The DHCP protocol should be used.
- Does it mean if we don’t specify the IP in ifcfg-eth0 file, it will look for a DHCP server and if an IP is specified, it will pick up that static IP?
-
What are the chances that it will look for a DHCP server and modify /etc/resolv.conf even if an IP address is specified with
IPADDR=
when BOOTPROTO is set to none?
Context:- We moved datacenters and had to change IP addresses in many of the servers. We had modified /etc/resolv.conf
with the IP addresses of the new DNS servers, but for some reason, in some of the servers the /etc/resolv.conf
got blanked out, or came up with old DNS IP addresses. In the /etc/init.d/network
script I see it is calling /etc/sysconfig/network-scripts/network-functions
which has this function. Is this the culprit?
# Invoke this when /etc/resolv.conf has changed: change_resolv_conf () { s=$(/bin/grep '^[ ]*option' /etc/resolv.conf 2>/dev/null); if [ "x$s" != "x" ]; then s="$s"$'n'; fi; if [ $# -gt 1 ]; then n_args=$#; while [ $n_args -gt 0 ]; do if [[ "$s" = *$1* ]]; then shift; n_args=$(($n_args-1)); continue; fi; s="$s$1"; shift; if [ $# -gt 0 ]; then s="$s"$'n'; fi; n_args=$(($n_args-1)); done; elif [ $# -eq 1 ]; then if [ "x$s" != "x" ]; then s="$s"$(/bin/grep -vF "$s" $1); else s=$(cat $1); fi; fi; (echo "$s" > /etc/resolv.conf;) >/dev/null 2>&1; r=$? if [ $r -eq 0 ]; then [ -x /sbin/restorecon ] && /sbin/restorecon /etc/resolv.conf >/dev/null 2>&1 # reset the correct context /usr/bin/logger -p local7.notice -t "NET" -i "$0 : updated /etc/resolv.conf"; [ -e /var/lock/subsys/nscd ] && /usr/sbin/nscd -i hosts; # invalidate cache fi; return $r; }
Under what cicumstances are this function called?
I know that setting PEERDNS
to no
will prevent the /etc/resolv.conf from changing, however, I would like to know whether our server had started looking for a DHCP server even though BOOTPROTO
was set to none
and an IP address was specified? if yes, why?
I rebooted the servers issues with this issue a few times to replicate the issue again, but the contents of /etc/resolv.conf
is not changing now. What could’ve caused the /etc/resolv.conf to be changed in the first reboot?
Can we use BOOTPROTO=static
? I read its deprecated. Our machines are all RHEL 6.5
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
If you read /etc/sysconfig/network-scripts/ifup-eth
you’ll see that networking uses DHCP if BOOTPROTO
is set to dhcp
or bootp
, otherwise it’s not used:
if ["${BOOTPROTO}" = "bootp" -o "${BOOTPROTO}" = "dhcp" ]; then DYNCONFIG=true
Further down, if
DYNCONFIG
is not null (and dhclient
is available) then the scripts attempts to use DHCP otherwise static IP addressing is attempted.Using grep -r BOOTPROTO *
within /etc
doesn’t show anything other than the above snippet, suggesting you could use anything in BOOTPROTO
as long as it isn’t one of the two above.
You could use BOOTPROTO=static
, but if we’re told it’s unsupported then you cannot guarantee that it will work like this in the future. Additionally, it won’t make a difference to your issue – static
or none
will cause the script not to use DHCP.
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0