Blob Blame History Raw
From 08bdadbf315cced437385228b2434a02a19090e4 Mon Sep 17 00:00:00 2001
From: Lubomir Rintel <lkundrak@v3.sk>
Date: Thu, 30 Aug 2018 16:44:22 +0200
Subject: [PATCH] network-manager: add module

---
 dracut.spec                                 |  1 +
 modules.d/35network-manager/module-setup.sh | 52 +++++++++++++++++++++++++++++
 modules.d/35network-manager/nm-config.sh    |  3 ++
 modules.d/35network-manager/nm-run.sh       | 16 +++++++++
 modules.d/40network/module-setup.sh         |  7 +++-
 5 files changed, 78 insertions(+), 1 deletion(-)

diff --git a/dracut.spec b/dracut.spec
index f6486d50..b6099824 100644
--- a/dracut.spec
+++ b/dracut.spec
@@ -419,6 +419,7 @@ install -m 0755 51-dracut-rescue-postinst.sh $RPM_BUILD_ROOT%{_sysconfdir}/kerne
 
 %files network
 %{dracutlibdir}/modules.d/02systemd-networkd
+%{dracutlibdir}/modules.d/35network-manager
 %{dracutlibdir}/modules.d/35network-legacy
 %{dracutlibdir}/modules.d/40network
 %{dracutlibdir}/modules.d/45ifcfg
diff --git a/modules.d/35network-manager/module-setup.sh b/modules.d/35network-manager/module-setup.sh
new file mode 100755
index 00000000..62aba3c6
--- /dev/null
+++ b/modules.d/35network-manager/module-setup.sh
@@ -0,0 +1,52 @@
+#!/bin/bash
+
+# called by dracut
+check() {
+    local _program
+
+    require_binaries sed grep || return 1
+
+    # do not add this module by default
+    return 255
+}
+
+# called by dracut
+depends() {
+    return 0
+}
+
+# called by dracut
+installkernel() {
+    return 0
+}
+
+# called by dracut
+install() {
+    local _nm_version
+
+    _nm_version=$(NetworkManager --version)
+
+    inst_multiple sed grep
+
+    inst NetworkManager
+    inst /usr/libexec/nm-initrd-generator
+    inst_multiple -o teamd dhclient
+    inst_hook cmdline 99 "$moddir/nm-config.sh"
+    inst_hook initqueue/settled 99 "$moddir/nm-run.sh"
+    inst_rules 85-nm-unmanaged.rules
+    inst_libdir_file "NetworkManager/$_nm_version/libnm-device-plugin-team.so"
+
+    if [[ -x "$initdir/usr/sbin/dhclient" ]]; then
+        inst /usr/libexec/nm-dhcp-helper
+    elif ! [[ -e "$initdir/etc/machine-id" ]]; then
+        # The internal DHCP client silently fails if we
+        # have no machine-id
+        systemd-machine-id-setup --root="$initdir"
+    fi
+
+    # We don't install the ifcfg files from the host automatically.
+    # But if the user chooses to include them, we pull in the machinery to read them.
+    if ! [[ -d "$initdir/etc/sysconfig/network-scripts" ]]; then
+        inst_libdir_file "NetworkManager/$_nm_version/libnm-settings-plugin-ifcfg-rh.so"
+    fi
+}
diff --git a/modules.d/35network-manager/nm-config.sh b/modules.d/35network-manager/nm-config.sh
new file mode 100755
index 00000000..1339ebe7
--- /dev/null
+++ b/modules.d/35network-manager/nm-config.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+/usr/libexec/nm-initrd-generator -- $(getcmdline)
diff --git a/modules.d/35network-manager/nm-run.sh b/modules.d/35network-manager/nm-run.sh
new file mode 100755
index 00000000..f6defa99
--- /dev/null
+++ b/modules.d/35network-manager/nm-run.sh
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+if getargbool 0 rd.debug -d -y rdinitdebug -d -y rdnetdebug; then
+    /usr/sbin/NetworkManager --configure-and-quit=initrd --debug --log-level=trace
+else
+    /usr/sbin/NetworkManager --configure-and-quit=initrd --no-daemon
+fi
+
+for _i in /sys/class/net/*/
+do
+    state=/run/NetworkManager/devices/$(cat $_i/ifindex)
+    grep -q managed=true $state 2>/dev/null || continue
+    ifname=$(basename $_i)
+    sed -n 's/root-path/new_root_path/p' <$state >/tmp/dhclient.$ifname.dhcpopts
+    /sbin/netroot $ifname
+done
diff --git a/modules.d/40network/module-setup.sh b/modules.d/40network/module-setup.sh
index fbd43925..57c0a45e 100755
--- a/modules.d/40network/module-setup.sh
+++ b/modules.d/40network/module-setup.sh
@@ -2,7 +2,12 @@
 
 # called by dracut
 depends() {
-    echo "network-legacy"
+    echo -n "kernel-network-modules "
+    if ! dracut_module_included "network-legacy" && [ -x "/usr/libexec/nm-initrd-generator" ] ; then
+        echo "network-manager"
+    else
+        echo "network-legacy"
+    fi
     return 0
 }