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