134 lines
4.0 KiB
Diff
134 lines
4.0 KiB
Diff
|
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
|
||
|
}
|
||
|
|
||
|
|