5b5b78bf59
The linux kernel and NetworkManager fight each other over control for interface management when router advertisements are in use. Long story short if the linux kernel configures a network interface for ipv6 before NetworkManager attempts to manage that interface then NM will ignore the interface and not configure ipv4 on it. This can happen because the kernel is configured to send router advertisements solicitations which result in router advertisements which the kernel uses to configure the interface(s). There is a default of a 1 second delay before sending the solicitation which in many cases is long enough that NM has started before then. However, in slower environments like those used for testing with qemu this isn't long enough. Some testing by hand indicates that 15 seconds is about right so increase the delay to 15 seconds via sysctl.conf. Note this may increase boot times in ipv6 only environments (though it is hard to be sure due to how systemd starts everything at once and does socket activation and the like). Change-Id: I475a253091cbaf63687b91c748c31a6753bb0f57
52 lines
1.7 KiB
Bash
Executable file
52 lines
1.7 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
if [ "${DIB_DEBUG_TRACE:-0}" -gt 0 ]; then
|
|
set -x
|
|
fi
|
|
set -eu
|
|
set -o pipefail
|
|
|
|
case "$DIB_INIT_SYSTEM" in
|
|
upstart)
|
|
# nothing to do
|
|
exit 0
|
|
;;
|
|
systemd)
|
|
if [[ ${DISTRO_NAME} =~ (centos|rhel7|fedora) ]]; then
|
|
if [[ ${DIB_SIMPLE_INIT_NETWORKMANAGER} != 1 ]]; then
|
|
# NOTE(pabelanger): Glean requires network.service for
|
|
# these platforms when not using networkmanager
|
|
systemctl enable network.service
|
|
fi
|
|
elif [[ ${DISTRO_NAME} =~ (opensuse) ]]; then
|
|
# on suse, this is named wicked.service, but it's the same
|
|
# as network.service.
|
|
systemctl enable wicked.service
|
|
fi
|
|
;;
|
|
openrc)
|
|
# let dib-init-system's postinstall handle enabling init scripts
|
|
exit 0
|
|
;;
|
|
sysv)
|
|
# nothing to do
|
|
exit 0
|
|
;;
|
|
*)
|
|
echo "Unsupported init system $DIB_INIT_SYSTEM"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
if [[ ${DIB_SIMPLE_INIT_NETWORKMANAGER} != 0 ]]; then
|
|
# If we are using NetworkManager then we have to avoid having the kernel
|
|
# configure ipv6 addresses on an interface (via router advertisements)
|
|
# until NetworkManager starts. If the interface is configured by the
|
|
# kernel before NetworkManager then NetworkManager will ignore the
|
|
# interface and not configure ipv4 on it. It does this because it assumes
|
|
# some other entity is in control of the interface.
|
|
# Debian has a many year old long bug report detailing this behavior with
|
|
# the most interesting comment being at the end:
|
|
# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=755202#331
|
|
echo 'net.ipv6.conf.default.router_solicitation_delay=15' >> /etc/sysctl.conf
|
|
fi
|