diff options
Diffstat (limited to 'src/nm-initrd-generator')
| -rw-r--r-- | src/nm-initrd-generator/meson.build | 7 | ||||
| -rwxr-xr-x | src/nm-initrd-generator/nm-initrd-generator.sh | 50 | ||||
| -rw-r--r-- | src/nm-initrd-generator/nmi-cmdline-reader.c | 2 |
3 files changed, 58 insertions, 1 deletions
diff --git a/src/nm-initrd-generator/meson.build b/src/nm-initrd-generator/meson.build index 6b02e066..2315ebe4 100644 --- a/src/nm-initrd-generator/meson.build +++ b/src/nm-initrd-generator/meson.build @@ -46,3 +46,10 @@ executable( install: true, install_dir: nm_libexecdir, ) + +if install_systemdgeneratordir + install_data( + 'nm-initrd-generator.sh', + install_dir: systemd_systemdsystemgeneratordir, + ) +endif 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 diff --git a/src/nm-initrd-generator/nmi-cmdline-reader.c b/src/nm-initrd-generator/nmi-cmdline-reader.c index f9b0fa16..5d91d157 100644 --- a/src/nm-initrd-generator/nmi-cmdline-reader.c +++ b/src/nm-initrd-generator/nmi-cmdline-reader.c @@ -409,7 +409,7 @@ reader_read_all_connections_from_fw(Reader *reader, const char *sysfs_dir) if (!nmi_ibft_update_connection_from_nic(connection, nic, &error)) { _LOGW(LOGD_CORE, "Unable to merge iBFT configuration: %s", error->message); - g_error_free(error); + g_clear_error(&error); continue; } |