summaryrefslogtreecommitdiffstats
path: root/modules.d/systemd-networkd-ext/module-setup.sh
diff options
context:
space:
mode:
Diffstat (limited to 'modules.d/systemd-networkd-ext/module-setup.sh')
-rwxr-xr-xmodules.d/systemd-networkd-ext/module-setup.sh77
1 files changed, 77 insertions, 0 deletions
diff --git a/modules.d/systemd-networkd-ext/module-setup.sh b/modules.d/systemd-networkd-ext/module-setup.sh
new file mode 100755
index 00000000..be50973d
--- /dev/null
+++ b/modules.d/systemd-networkd-ext/module-setup.sh
@@ -0,0 +1,77 @@
+#!/bin/bash
+# shameless hacked version of dracut's systemd-networkd module
+# called by dracut
+check() {
+ [[ $mount_needs ]] && return 1
+
+ if dracut_module_included "network"; then
+ derror "The module 'systemd-networkd' conflicts with 'network'. Use either one not both!"
+ return 1
+ fi
+ return 255
+}
+
+# called by dracut
+depends() {
+ echo "systemd kernel-network-modules"
+}
+
+installkernel() {
+ return 0
+}
+
+# called by dracut
+install() {
+ # need initqueue to get a clean network start
+ dracut_need_initqueue
+
+ # install required systemd units
+ inst_multiple -o \
+ $systemdutildir/systemd-networkd \
+ $systemdutildir/systemd-networkd-wait-online \
+ $systemdutildir/systemd-resolved \
+ $systemdsystemunitdir/systemd-networkd-wait-online.service \
+ $systemdsystemunitdir/systemd-networkd.service \
+ $systemdsystemunitdir/systemd-networkd.socket \
+ $systemdsystemunitdir/systemd-resolved.service \
+ networkctl ip
+
+ # active them
+ for i in \
+ systemd-networkd-wait-online.service \
+ systemd-networkd.service \
+ systemd-networkd.socket \
+ systemd-resolved.service
+ do
+ systemctl --root "$initdir" enable "$i"
+ done
+ mkdir $initdir/$systemdsystemunitdir/network.target.wants
+ ln -s $systemdsystemunitdir/systemd-resolved.service \
+ $initdir/$systemdsystemunitdir/network.target.wants/systemd-resolved.service
+ ln -sf /run/systemd/resolve/resolv.conf $initdir/etc/resolv.conf
+
+ # create system users needed
+ for user in \
+ systemd-network \
+ systemd-resolve
+ do
+ grep "^${user}:" /etc/passwd 2>/dev/null >> "$initdir/etc/passwd"
+ grep "^${user}:" /etc/group >> "$initdir/etc/group"
+ done
+
+ # install basic dns libs
+ _arch=$(uname -m)
+ inst_libdir_file {"tls/$_arch/",tls/,"$_arch/",}"libnss_dns.so.*" \
+ {"tls/$_arch/",tls/,"$_arch/",}"libnss_mdns4_minimal.so.*" \
+ {"tls/$_arch/",tls/,"$_arch/",}"libnss_myhostname.so.*" \
+ {"tls/$_arch/",tls/,"$_arch/",}"libnss_resolve.so.*" \
+ {"tls/$_arch/",tls/,"$_arch/",}"libresolve.so.*"
+
+ # the hook script that will parse the "ip=" kernel command line
+ # parameter and generate the .link and .network files needed
+ # by systemd-networkd.
+ inst_hook cmdline 10 "$moddir/hooks/parse-kcl-for-networkd.sh"
+ inst_hook pre-pivot 10 "$moddir/hooks/copy-networkd-files-to-newroot.sh"
+ inst_hook pre-pivot 20 "$moddir/hooks/configure-dhcp-for-newroot.sh"
+}
+