e7c52139aa
NetworkManager is quite capable to do automatic interface configuration. NetworkManager will by default try to auto-configure any interface with no configuration. It will use DHCP for IPv4 and Router Advertisements to decide how to initialize IPv6. It will most likely do it just as good, or better than the dhcp-all-interfaces.sh script. Since dhcp-all-interfaces clean out all ifcfg files in 60-remove-cloud-image-interfaces it means NetworkManager will by default attempt auto configuration for all interfaces. This change add's and environment variable: DIB_DHCP_NETWORK_MANAGER_AUTO (default: false) When DIB_DHCP_NETWORK_MANAGER_AUTO is set to `true` only the NetworkManager config will be written. The dhcp-all-interfaces service will not be installed. Hence dhcp-all-interfaces will not write any config files, allowing NetworkManager to just do it's thing. Change-Id: Id6f8d6aaaf52a78175bb6c065ec88274c364834e
84 lines
3.9 KiB
Bash
Executable file
84 lines
3.9 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
if [ ${DIB_DEBUG_TRACE:-1} -gt 0 ]; then
|
|
set -x
|
|
fi
|
|
set -eu
|
|
set -o pipefail
|
|
|
|
SCRIPTDIR=$(dirname $0)
|
|
|
|
if [ -e "/etc/redhat-release" ]; then
|
|
# NOTE(TheJulia): While the internal client which every networkmanager user
|
|
# should have is internal, dhclient has better behavior which includes
|
|
# shutting down the port between retries which is critical for recovery
|
|
# from LACP port blocking situations. As such, we'll force it to dhclient.
|
|
# For more information, see https://storyboard.openstack.org/#!/story/2008001
|
|
DIB_DHCP_CLIENT=${DIB_DHCP_CLIENT:-dhclient}
|
|
fi
|
|
|
|
|
|
# Sets appropriate NetworkManager configuration, if the folder is present.
|
|
if [ -x "/etc/NetworkManager" ]; then
|
|
install -D -g root -o root -m 0644 ${SCRIPTDIR}/NetworkManager-conf.d-00-main.conf /etc/NetworkManager/conf.d/00-main.conf
|
|
sed -i "s/DIB_DHCP_CLIENT/${DIB_DHCP_CLIENT:-internal}/g" /etc/NetworkManager/conf.d/00-main.conf
|
|
sed -i "s/DIB_DHCP_TIMEOUT/${DIB_DHCP_TIMEOUT:-30}/g" /etc/NetworkManager/conf.d/00-main.conf
|
|
if [ "${DIB_DHCP_NETWORK_MANAGER_AUTO:-false}" == true ]; then
|
|
# Use NetworkManager for auto configuration, it will behave just as
|
|
# good as dhcp-all-interfaces.sh in most cases.
|
|
exit 0
|
|
fi
|
|
fi
|
|
|
|
if [ -e "/etc/redhat-release" ]; then
|
|
# TODO(hjensas): Once ndisc6 package is available in EPEL8 drop this,
|
|
# and add the package back in pkg-map.
|
|
# See: https://bugzilla.redhat.com/show_bug.cgi?id=1779134
|
|
if type dnf &>/dev/null; then
|
|
dnf -v -y install ndisc6 || true
|
|
else
|
|
yum -v -y install ndisc6 || true
|
|
fi
|
|
fi
|
|
|
|
|
|
# this script is not needed on Gentoo.
|
|
if [ "$DISTRO_NAME" != "gentoo" ]; then
|
|
install -D -g root -o root -m 0755 ${SCRIPTDIR}/dhcp-all-interfaces.sh /usr/local/sbin/dhcp-all-interfaces.sh
|
|
sed -i "s/DIB_DHCP_TIMEOUT/${DIB_DHCP_TIMEOUT:-30}/" /usr/local/sbin/dhcp-all-interfaces.sh
|
|
fi
|
|
|
|
if [ -f /etc/dhcp/dhclient.conf ] ; then
|
|
# Set the dhclient timeout configurations to match DIB_DHCP_TIMEOUT,
|
|
if grep -o "^timeout " /etc/dhcp/dhclient.conf ; then
|
|
sed -i -e "s/^timeout .*/# \"timeout\" Value set by dhcp-all-interfaces\ntimeout ${DIB_DHCP_TIMEOUT:-30};/" /etc/dhcp/dhclient.conf
|
|
else
|
|
echo -e "# \"timeout\" Value set by dhcp-all-interfaces\ntimeout ${DIB_DHCP_TIMEOUT:-30};" >> /etc/dhcp/dhclient.conf
|
|
fi
|
|
if grep -o "^retry " /etc/dhcp/dhclient.conf ; then
|
|
sed -i -e '/^retry/s/^/# \"retry\" Value commented by dhcp-all-interfaces\n# /g' /etc/dhcp/dhclient.conf
|
|
fi
|
|
fi
|
|
|
|
if [ "$DIB_INIT_SYSTEM" == "upstart" ]; then
|
|
if [ -e "/etc/redhat-release" ] ; then
|
|
# the init system is upstart but networking is using sysv compatibility (i.e. Centos/RHEL 6)
|
|
install -D -g root -o root -m 0755 ${SCRIPTDIR}/dhcp-all-interfaces.init /etc/init.d/dhcp-all-interfaces
|
|
chkconfig dhcp-all-interfaces on
|
|
else
|
|
install -D -g root -o root -m 0755 ${SCRIPTDIR}/dhcp-all-interfaces.conf /etc/init/dhcp-all-interfaces.conf
|
|
fi
|
|
elif [ "$DIB_INIT_SYSTEM" == "systemd" ]; then
|
|
install -D -g root -o root -m 0644 ${SCRIPTDIR}/dhcp-interface@.service /usr/lib/systemd/system/dhcp-interface@.service
|
|
install -D -g root -o root -m 0644 ${SCRIPTDIR}/dhcp-all-interfaces-udev.rules /etc/udev/rules.d/99-dhcp-all-interfaces.rules
|
|
sed -i "s/TimeoutStartSec=DIB_DHCP_TIMEOUT/TimeoutStartSec=$(( ${DIB_DHCP_TIMEOUT:-30} * 2 ))s/" /usr/lib/systemd/system/dhcp-interface@.service
|
|
elif [ "$DIB_INIT_SYSTEM" == "sysv" ]; then
|
|
install -D -g root -o root -m 0755 ${SCRIPTDIR}/dhcp-all-interfaces.init /etc/init.d/dhcp-all-interfaces
|
|
update-rc.d dhcp-all-interfaces defaults
|
|
elif [ "$DISTRO_NAME" == "gentoo" ]; then
|
|
# let ipv6 use normal slaac
|
|
sed -i 's/slaac/#slaac/g' /etc/dhcpcd.conf
|
|
# don't let dhcpcd set domain name or hostname
|
|
sed -i 's/domain_name\,\ domain_search\,\ host_name/domain_search/g' /etc/dhcpcd.conf
|
|
rc-update add dhcpcd default
|
|
fi
|