85 lines
4 KiB
Bash
Executable file
85 lines
4 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
|
|
install -D -g root -o root -m 0644 ${SCRIPTDIR}/udev-net-setup-link.rules /etc/udev/rules.d/80-net-setup-link.rules
|
|
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
|