about summary refs log tree commit diff
path: root/src/nm-initrd-generator/nm-initrd-generator.sh
diff options
context:
space:
mode:
Diffstat (limited to 'src/nm-initrd-generator/nm-initrd-generator.sh')
-rwxr-xr-xsrc/nm-initrd-generator/nm-initrd-generator.sh50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/nm-initrd-generator/nm-initrd-generator.sh b/src/nm-initrd-generator/nm-initrd-generator.sh
new file mode 100755
index 00000000..20ff78cc
--- /dev/null
+++ b/src/nm-initrd-generator/nm-initrd-generator.sh
@@ -0,0 +1,50 @@
+#!/bin/bash
+# SPDX-License-Identifier: LGPL-2.1-or-later
+
+# initrd-specific units
+initrd_units=(
+    NetworkManager-config-initrd.service
+    NetworkManager-initrd.service
+    NetworkManager-wait-online-initrd.service
+)
+
+# host-specific units
+host_units=(
+    NetworkManager.service
+    NetworkManager-dispatcher.service
+    NetworkManager-wait-online.service
+)
+
+# Get generator normal directory
+normal_dir=$1
+
+# Since NetworkManager-initrd.service and NetworkManager.service are allocated
+# for the same bus name org.freedesktop.NetworkManager, we should mask one of
+# them depending on if we are in the initrd or on the host.
+if [ "$SYSTEMD_IN_INITRD" != 1 ]; then
+    # Mask initrd units in the host
+    for unit in "${initrd_units[@]}"; do
+        ln -s /dev/null "$normal_dir"/"$unit" 2> /dev/null
+    done
+    # Nothing else to do
+    exit 0
+fi
+
+# Mask host units in the initrd
+for unit in "${host_units[@]}"; do
+    ln -s /dev/null "$normal_dir"/"$unit" 2> /dev/null
+done
+
+# Install initrd units in the unit file hierarchy
+mkdir -p "$normal_dir"/initrd.target.wants
+mkdir -p "$normal_dir"/network-online.target.wants
+for unit in "${initrd_units[@]}"; do
+    ln -s /usr/lib/systemd/system/"$unit" \
+        "$normal_dir"/initrd.target.wants/"$unit"
+    if [ "$unit" = "NetworkManager-wait-online-initrd.service" ]; then
+        ln -s /usr/lib/systemd/system/"$unit" \
+            "$normal_dir"/network-online.target.wants/"$unit"
+    fi
+done
+
+exit 0