diff options
Diffstat (limited to 'src/nm-initrd-generator/nm-initrd-generator.sh')
| -rwxr-xr-x | src/nm-initrd-generator/nm-initrd-generator.sh | 50 |
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 |