#!/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" }