diff options
author | Simon Rettberg | 2021-08-11 15:58:09 +0200 |
---|---|---|
committer | Simon Rettberg | 2021-08-11 15:58:09 +0200 |
commit | 6995afb6f1b01938e4a3ca0daf375dfe276181d5 (patch) | |
tree | 3b8883351554bc4f7f949495c8164a99d0403be5 /core/modules/slx-network-configs-targets | |
parent | [redsocks] Upper- and lowercase proxy env (diff) | |
download | mltk-6995afb6f1b01938e4a3ca0daf375dfe276181d5.tar.gz mltk-6995afb6f1b01938e4a3ca0daf375dfe276181d5.tar.xz mltk-6995afb6f1b01938e4a3ca0daf375dfe276181d5.zip |
Implement blocking network.target and network-online.target
Add two services that will delay reaching the according targets, until
conditions we consider reasonable are reached.
For network.target that is finishing DHCP for the primary interface, for
network-online.target we want to see a default gateway or a proxy server
configured.
Both have a timeout of about 10 seconds for now; this might be increased
later on, if necessary.
Diffstat (limited to 'core/modules/slx-network-configs-targets')
9 files changed, 71 insertions, 0 deletions
diff --git a/core/modules/slx-network-configs-targets/data/etc/sysctl.d/90-openslx.conf b/core/modules/slx-network-configs-targets/data/etc/sysctl.d/90-openslx.conf new file mode 100644 index 00000000..04f988df --- /dev/null +++ b/core/modules/slx-network-configs-targets/data/etc/sysctl.d/90-openslx.conf @@ -0,0 +1,3 @@ +# Make sure ARP replies only go out on the matching interface +net.ipv4.conf.all.arp_filter=1 +net.ipv4.conf.default.arp_filter=1 diff --git a/core/modules/slx-network-configs-targets/data/etc/systemd/system/network-online.target.wants/slx-wait-online.service b/core/modules/slx-network-configs-targets/data/etc/systemd/system/network-online.target.wants/slx-wait-online.service new file mode 120000 index 00000000..8e346eac --- /dev/null +++ b/core/modules/slx-network-configs-targets/data/etc/systemd/system/network-online.target.wants/slx-wait-online.service @@ -0,0 +1 @@ +../slx-wait-online.service
\ No newline at end of file diff --git a/core/modules/slx-network-configs-targets/data/etc/systemd/system/network.target.wants/slx-wait-primary-dhcp.service b/core/modules/slx-network-configs-targets/data/etc/systemd/system/network.target.wants/slx-wait-primary-dhcp.service new file mode 120000 index 00000000..e7f32c14 --- /dev/null +++ b/core/modules/slx-network-configs-targets/data/etc/systemd/system/network.target.wants/slx-wait-primary-dhcp.service @@ -0,0 +1 @@ +../slx-wait-primary-dhcp.service
\ No newline at end of file diff --git a/core/modules/slx-network-configs-targets/data/etc/systemd/system/slx-wait-online.service b/core/modules/slx-network-configs-targets/data/etc/systemd/system/slx-wait-online.service new file mode 100644 index 00000000..7765ebdd --- /dev/null +++ b/core/modules/slx-network-configs-targets/data/etc/systemd/system/slx-wait-online.service @@ -0,0 +1,7 @@ +[Unit] +Description=Wait until we are online, ie. a gateway or proxy is configured +Before=network-online.target + +[Service] +Type=oneshot +ExecStart=/opt/openslx/scripts/systemd-wait_online diff --git a/core/modules/slx-network-configs-targets/data/etc/systemd/system/slx-wait-primary-dhcp.service b/core/modules/slx-network-configs-targets/data/etc/systemd/system/slx-wait-primary-dhcp.service new file mode 100644 index 00000000..68dc13f7 --- /dev/null +++ b/core/modules/slx-network-configs-targets/data/etc/systemd/system/slx-wait-primary-dhcp.service @@ -0,0 +1,7 @@ +[Unit] +Description=Wait until DHCP for the primary NIC has finished +Before=network.target + +[Service] +Type=oneshot +ExecStart=/opt/openslx/scripts/systemd-wait_primary_dhcp diff --git a/core/modules/slx-network-configs-targets/data/opt/openslx/scripts/systemd-wait_online b/core/modules/slx-network-configs-targets/data/opt/openslx/scripts/systemd-wait_online new file mode 100755 index 00000000..aaee9c32 --- /dev/null +++ b/core/modules/slx-network-configs-targets/data/opt/openslx/scripts/systemd-wait_online @@ -0,0 +1,21 @@ +#!/bin/ash + +# Wait until we have a nameserver in resolv.conf +# and we have a gateway configured + +w=0 +while ! grep -q ^nameserver /etc/resolv.conf && [ "$w" -lt 10 ]; do + let w++ + sleep 1 +done + +# We don't consider a missing nameserver fatal, but a missing gateway, if no proxy is set +. /etc/profile +while [ -z "$http_proxy" ] && [ -z "$ALL_PROXY" ] && ! ip route show | grep -q ^default; do + [ "$w" -gt 12 ] && exit 1 # Give up - not online + let w++ + sleep 1 + . /etc/profile +done + +exit 0 diff --git a/core/modules/slx-network-configs-targets/data/opt/openslx/scripts/systemd-wait_primary_dhcp b/core/modules/slx-network-configs-targets/data/opt/openslx/scripts/systemd-wait_primary_dhcp new file mode 100755 index 00000000..3e452549 --- /dev/null +++ b/core/modules/slx-network-configs-targets/data/opt/openslx/scripts/systemd-wait_primary_dhcp @@ -0,0 +1,18 @@ +#!/bin/ash + +flag="/run/network/primary-dhcp.flag" +readonly flag +w=0 + +# Wait a maximum of 10 seconds for the flag file +while ! [ -e "$flag" ] && [ "$w" -lt 10 ]; do + let w++ + sleep 1 +done + +# Then touch it anyways, this will prevent the DHCP +# trigger script from changing the hostname later on +mkdir -p /run/network +touch "$flag" + +exit 0 diff --git a/core/modules/slx-network-configs-targets/module.build b/core/modules/slx-network-configs-targets/module.build new file mode 100644 index 00000000..241bcd5e --- /dev/null +++ b/core/modules/slx-network-configs-targets/module.build @@ -0,0 +1,12 @@ +#!/bin/bash +fetch_source() { + : +} + +build() { + pinfo "Static module, nothing to build." +} + +post_copy() { + : +} diff --git a/core/modules/slx-network-configs-targets/module.conf b/core/modules/slx-network-configs-targets/module.conf new file mode 100644 index 00000000..c01ade29 --- /dev/null +++ b/core/modules/slx-network-configs-targets/module.conf @@ -0,0 +1 @@ +# Nothing |