summaryrefslogtreecommitdiffstats
path: root/core/modules/slx-network-configs-targets
diff options
context:
space:
mode:
authorSimon Rettberg2021-08-11 15:58:09 +0200
committerSimon Rettberg2021-08-11 15:58:09 +0200
commit6995afb6f1b01938e4a3ca0daf375dfe276181d5 (patch)
tree3b8883351554bc4f7f949495c8164a99d0403be5 /core/modules/slx-network-configs-targets
parent[redsocks] Upper- and lowercase proxy env (diff)
downloadmltk-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')
-rw-r--r--core/modules/slx-network-configs-targets/data/etc/sysctl.d/90-openslx.conf3
l---------core/modules/slx-network-configs-targets/data/etc/systemd/system/network-online.target.wants/slx-wait-online.service1
l---------core/modules/slx-network-configs-targets/data/etc/systemd/system/network.target.wants/slx-wait-primary-dhcp.service1
-rw-r--r--core/modules/slx-network-configs-targets/data/etc/systemd/system/slx-wait-online.service7
-rw-r--r--core/modules/slx-network-configs-targets/data/etc/systemd/system/slx-wait-primary-dhcp.service7
-rwxr-xr-xcore/modules/slx-network-configs-targets/data/opt/openslx/scripts/systemd-wait_online21
-rwxr-xr-xcore/modules/slx-network-configs-targets/data/opt/openslx/scripts/systemd-wait_primary_dhcp18
-rw-r--r--core/modules/slx-network-configs-targets/module.build12
-rw-r--r--core/modules/slx-network-configs-targets/module.conf1
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