File: 50-dhcp-all-interfaces

package info (click to toggle)
python-diskimage-builder 3.39.0-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 5,704 kB
  • sloc: sh: 7,474; python: 6,454; makefile: 37
file content (95 lines) | stat: -rwxr-xr-x 4,506 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#!/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): RHEL, prior to RHEL8 used dhclient by default launched
    # by NetworkManager. In RHEL8, this default switched to the "internal"
    # dhcp client. 
    # This is problematic in RHEL8, with port blocking situations as 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
    if [[ '7' =~ ${DIB_RELEASE} ]]; then
        DIB_DHCP_CLIENT=${DIB_DHCP_CLIENT:-dhclient}
    elif [[ '8' =~ ${DIB_RELEASE} ]]; then
        DIB_DHCP_CLIENT=${DIB_DHCP_CLIENT:-dhclient}
    elif [[ '10' =~ ${DIB_RELEASE} ]]; then
        DIB_DHCP_CLIENT=${DIB_DHCP_CLIENT:-dhcpcd}
    fi
    # NOTE(TheJulia): Centos 9-stream/RHEL9, appear to need to leverage the
    # internal interface. See: https://storyboard.openstack.org/#!/story/2010109
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