Add element to run DHCP on all network interfaces.
Ensures that all network interfaces are present in /etc/network/interfaces. Any interface not already defined there will be added and configured for DHCP. Change-Id: I27e0902e62804e8d719acd7288109bd0e294fd16
This commit is contained in:
parent
ff7eac3c65
commit
a6b794fffc
14
elements/dhcp-all-interfaces/README.md
Normal file
14
elements/dhcp-all-interfaces/README.md
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
Autodetect network interfaces during boot and configure them for DHCP
|
||||||
|
|
||||||
|
The rationale for this is that we are likely to require multiple
|
||||||
|
network interfaces for use cases such as baremetal and there is no way
|
||||||
|
to know ahead of time which one is which, so we will simply run a
|
||||||
|
DHCP client on all interfaces (except lo) that are visible on the first
|
||||||
|
boot.
|
||||||
|
|
||||||
|
The script /usr/local/sbin/generate-interfaces-file.sh will be called
|
||||||
|
early in each boot and will scan available network interfaces and
|
||||||
|
ensure they are all present in /etc/network/interfaces.
|
||||||
|
|
||||||
|
Note that this element is only expected to be useful on Debian-derived
|
||||||
|
distributions, currently.
|
9
elements/dhcp-all-interfaces/install.d/50-dhcp-all-interfaces
Executable file
9
elements/dhcp-all-interfaces/install.d/50-dhcp-all-interfaces
Executable file
@ -0,0 +1,9 @@
|
|||||||
|
#!/bin/sh -x
|
||||||
|
|
||||||
|
# Prepare the target system for regenerating /etc/network/interfaces
|
||||||
|
# on its first boot.
|
||||||
|
|
||||||
|
SCRIPTDIR=$(dirname $0)
|
||||||
|
|
||||||
|
install -D -g root -o root -m 0755 ${SCRIPTDIR}/generate-interfaces-file.sh /usr/local/sbin/generate-interfaces-file.sh
|
||||||
|
install -D -g root -o root -m 0755 ${SCRIPTDIR}/dhcp-all-interfaces.conf /etc/init/dhcp-all-interfaces.conf
|
@ -0,0 +1,10 @@
|
|||||||
|
# Call a script to generate an /etc/network/interfaces file to DHCP all available interfaces
|
||||||
|
# Then remove this config file so the script is never run again
|
||||||
|
|
||||||
|
description "DHCP any connected, but unconfigured network interfaces"
|
||||||
|
|
||||||
|
start on starting network-interface
|
||||||
|
|
||||||
|
task
|
||||||
|
|
||||||
|
exec /usr/local/sbin/generate-interfaces-file.sh
|
37
elements/dhcp-all-interfaces/install.d/generate-interfaces-file.sh
Executable file
37
elements/dhcp-all-interfaces/install.d/generate-interfaces-file.sh
Executable file
@ -0,0 +1,37 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Generate $INTERFACES_FILE on first boot
|
||||||
|
# This will add any unconfigured network interfaces to /etc/network/interfaces
|
||||||
|
# and configure them for DHCP
|
||||||
|
|
||||||
|
INTERFACES_FILE="/etc/network/interfaces"
|
||||||
|
|
||||||
|
function get_if_link() {
|
||||||
|
cat /sys/class/net/${1}/carrier
|
||||||
|
}
|
||||||
|
|
||||||
|
for interface in $(ls /sys/class/net | grep -v ^lo$) ; do
|
||||||
|
echo -n "Inspecting interface: $interface..."
|
||||||
|
HAS_CONFIG=$(ifquery $interface >/dev/null 2>&1)
|
||||||
|
if [ "$HAS_CONFIG" == "" ]; then
|
||||||
|
ip link set dev $interface up >/dev/null 2>&1
|
||||||
|
HAS_LINK="$(get_if_link $interface)"
|
||||||
|
|
||||||
|
TRIES=3
|
||||||
|
while [ "$HAS_LINK" == "0" -a $TRIES -gt 0 ]; do
|
||||||
|
HAS_LINK="$(get_if_link $interface)"
|
||||||
|
if [ "$HAS_LINK" == "1" ]; then
|
||||||
|
break
|
||||||
|
else
|
||||||
|
sleep 1
|
||||||
|
fi
|
||||||
|
TRIES=$(( TRIES - 1 ))
|
||||||
|
done
|
||||||
|
if [ "$HAS_LINK" == "1" ] ; then
|
||||||
|
printf "auto $interface\r\niface $interface inet dhcp\r\n\r\n" >>$INTERFACES_FILE]
|
||||||
|
echo "Configured"
|
||||||
|
else
|
||||||
|
echo "No link detected, skipping"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
Loading…
Reference in New Issue
Block a user