public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
* [rpms/dracut] rawhide: Upgrade to dracut 111
@ 2026-08-09 20:08 Pavel Valena
  0 siblings, 0 replies; only message in thread
From: Pavel Valena @ 2026-08-09 20:08 UTC (permalink / raw)
  To: git-commits

            A new commit has been pushed.

            Repo   : rpms/dracut
            Branch : rawhide
            Commit : 97095b621a3a1dbf4b63108064abc9477128989c
            Author : Pavel Valena <pvalena@redhat.com>
            Date   : 2026-07-31T10:40:08+02:00
            Stats  : +2120/-2216 in 21 file(s)
            URL    : https://src.fedoraproject.org/rpms/dracut/c/97095b621a3a1dbf4b63108064abc9477128989c?branch=rawhide

            Log:
            Upgrade to dracut 111

From-source-git-commit: ab52e0e495c0f9eb2bed6aa617c514a5db409ef6

---
diff --git a/0001-revert-fix-install.d-correctly-install-pre-genned-im.patch b/0001-revert-fix-install.d-correctly-install-pre-genned-im.patch
index 9815a76..c12a5f6 100644
--- a/0001-revert-fix-install.d-correctly-install-pre-genned-im.patch
+++ b/0001-revert-fix-install.d-correctly-install-pre-genned-im.patch
@@ -1,7 +1,7 @@
-From a56d706d54007ce651415eedc8950fdcff6f08bd Mon Sep 17 00:00:00 2001
+From a50df58ee9c1d9fd2819d6df730199c5214d5076 Mon Sep 17 00:00:00 2001
 From: Pavel Valena <pvalena@redhat.com>
 Date: Wed, 12 Jun 2024 06:30:42 +0200
-Subject: [PATCH 1/7] revert: "fix(install.d): correctly install pre-genned
+Subject: [PATCH 01/12] revert: "fix(install.d): correctly install pre-genned
  image and die if no args"
 
 revert: "fix(install.d): simplify and use what kernel-install gives us"
@@ -234,5 +234,5 @@ index f49d7a77..67c1cfc1 100755
      suffix=$1
      shift
 -- 
-2.52.0
+2.55.0
 

diff --git a/0002-feat-kernel-install-do-nothing-when-KERNEL_INSTALL_I.patch b/0002-feat-kernel-install-do-nothing-when-KERNEL_INSTALL_I.patch
index 96b2efb..d4623c8 100644
--- a/0002-feat-kernel-install-do-nothing-when-KERNEL_INSTALL_I.patch
+++ b/0002-feat-kernel-install-do-nothing-when-KERNEL_INSTALL_I.patch
@@ -1,7 +1,7 @@
-From 011b456c2b873db4437e70e667d8c32f4de0b164 Mon Sep 17 00:00:00 2001
+From bfba1060e7a992936b52ddd49915963442a80831 Mon Sep 17 00:00:00 2001
 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
 Date: Tue, 18 Jan 2022 18:08:42 +0100
-Subject: [PATCH 2/7] feat(kernel-install): do nothing when
+Subject: [PATCH 02/12] feat(kernel-install): do nothing when
  $KERNEL_INSTALL_INITRD_GENERATOR says so
 
 dracut may be installed without being actually used. This is very common in
@@ -68,5 +68,5 @@ index 67c1cfc1..7a03038f 100755
      suffix=$1
      shift
 -- 
-2.52.0
+2.55.0
 

diff --git a/0003-fix-kernel-install-do-not-generate-an-initrd-when-on.patch b/0003-fix-kernel-install-do-not-generate-an-initrd-when-on.patch
index 3afbe17..574ac4c 100644
--- a/0003-fix-kernel-install-do-not-generate-an-initrd-when-on.patch
+++ b/0003-fix-kernel-install-do-not-generate-an-initrd-when-on.patch
@@ -1,7 +1,7 @@
-From dfebc9be588db3d5e5a60abfd9104faf05e31da6 Mon Sep 17 00:00:00 2001
+From 3d2cf5ae78195d445c2258663460f0da87fda763 Mon Sep 17 00:00:00 2001
 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
 Date: Tue, 18 Jan 2022 18:58:58 +0100
-Subject: [PATCH 3/7] fix(kernel-install): do not generate an initrd when one
+Subject: [PATCH 03/12] fix(kernel-install): do not generate an initrd when one
  was specified
 
 According to the synopsis, kernel-install can be called with an
@@ -35,5 +35,5 @@ index 3f961b11..076b4f5e 100755
              IMAGE_PREGENERATED=${KERNEL_IMAGE%/*}/uki.efi
          else
 -- 
-2.52.0
+2.55.0
 

diff --git a/0004-revert-fix-rescue-make-rescue-always-no-hostonly.patch b/0004-revert-fix-rescue-make-rescue-always-no-hostonly.patch
index 3e9d33a..b26ce6a 100644
--- a/0004-revert-fix-rescue-make-rescue-always-no-hostonly.patch
+++ b/0004-revert-fix-rescue-make-rescue-always-no-hostonly.patch
@@ -1,7 +1,7 @@
-From c168dcf198737dfeb5011df2e9d427fd253eacd6 Mon Sep 17 00:00:00 2001
+From 654b83d269c19ca1dff39f83947aae8d5edbd93b Mon Sep 17 00:00:00 2001
 From: Pavel Valena <pvalena@redhat.com>
 Date: Wed, 29 Jan 2025 20:25:03 +0100
-Subject: [PATCH 4/7] revert: "fix(rescue): make rescue always no-hostonly"
+Subject: [PATCH 04/12] revert: "fix(rescue): make rescue always no-hostonly"
 
 This partly reverts commit 224c00914bfb4ba1dee48e094ebb137facfd5947.
 ---
@@ -24,5 +24,5 @@ index 7a03038f..f0ccb854 100755
                  --kver "$KERNEL_VERSION" \
                  "$BOOT_DIR_ABS/$INITRD"
 -- 
-2.52.0
+2.55.0
 

diff --git a/0005-feat-add-openssl-module.patch b/0005-feat-add-openssl-module.patch
index 01ba7f0..7e7eafc 100644
--- a/0005-feat-add-openssl-module.patch
+++ b/0005-feat-add-openssl-module.patch
@@ -1,7 +1,7 @@
-From 7417d2b044ef455d8b6c360e7c1bcd71558b5951 Mon Sep 17 00:00:00 2001
+From b02aee51f74cc949bd3ee74a610a435e7a692be7 Mon Sep 17 00:00:00 2001
 From: Pavel Valena <pvalena@redhat.com>
 Date: Mon, 20 Jan 2025 14:16:38 +0100
-Subject: [PATCH 5/7] feat: add openssl module
+Subject: [PATCH 05/12] feat: add openssl module
 
 + fix(ossl): build failure bellow resolved
 
@@ -68,10 +68,10 @@ and also fix CFLAGS in case of std=c99.
  create mode 100644 src/ossl/tests/files/providers.cnf.expected
 
 diff --git a/Makefile b/Makefile
-index 24e2fb62..12f001d3 100644
+index d7cab681..ee6ff229 100644
 --- a/Makefile
 +++ b/Makefile
-@@ -66,7 +66,7 @@ manpages = $(man1pages) $(man5pages) $(man7pages) $(man8pages)
+@@ -63,7 +63,7 @@ manpages = $(man1pages) $(man5pages) $(man7pages) $(man8pages)
  
  .PHONY: install clean distclean archive test all check AUTHORS CONTRIBUTORS doc
  
@@ -80,7 +80,7 @@ index 24e2fb62..12f001d3 100644
  
  %.o : %.c
  	$(CC) -c $(CFLAGS) $(CPPFLAGS) $(KMOD_CFLAGS) $(SYSTEMD_CFLAGS) $(if $(SYSTEMD_LIBS),-DHAVE_SYSTEMD) $< -o $@
-@@ -104,6 +104,15 @@ util/util: $(UTIL_OBJECTS)
+@@ -101,6 +101,15 @@ util/util: $(UTIL_OBJECTS)
  dracut-util: src/util/util
  	cp -a $< $@
  
@@ -96,7 +96,7 @@ index 24e2fb62..12f001d3 100644
  .PHONY: indent-c
  indent-c:
  	astyle -n --quiet --options=.astylerc $(wildcard *.[ch] */*.[ch] src/*/*.[ch])
-@@ -257,15 +266,21 @@ endif
+@@ -253,15 +262,21 @@ endif
  		ln -sf ../dracut-initqueue.service \
  		$(DESTDIR)$(systemdsystemunitdir)/initrd.target.wants/dracut-initqueue.service; \
  	fi
@@ -121,7 +121,7 @@ index 24e2fb62..12f001d3 100644
  ifeq ($(enable_dracut_cpio),yes)
  	install -m 0755 dracut-cpio $(DESTDIR)$(pkglibdir)/dracut-cpio
  endif
-@@ -305,7 +320,9 @@ clean:
+@@ -304,7 +319,9 @@ clean:
  	$(RM) dracut.pc
  	$(RM) dracut-cpio src/dracut-cpio/target/release/dracut-cpio*
  	$(RM) -rf build/ doc_site/modules/ROOT/pages/man/*
@@ -1042,5 +1042,5 @@ index 00000000..23b1b7de
 +/usr/lib64/ossl-modules/pkcs11.so
 +/usr/lib64/ossl-modules/oqsprovider.so.0.6.0
 -- 
-2.52.0
+2.55.0
 

diff --git a/0006-fix-ossl-ignore-compiler-warnings.patch b/0006-fix-ossl-ignore-compiler-warnings.patch
index 2a9221d..182669b 100644
--- a/0006-fix-ossl-ignore-compiler-warnings.patch
+++ b/0006-fix-ossl-ignore-compiler-warnings.patch
@@ -1,7 +1,7 @@
-From c4a5caa795983e6867a253ae7965fbec7dbaa6e6 Mon Sep 17 00:00:00 2001
+From 55e55099d77b0e904c4ac03a3ac15018f944a980 Mon Sep 17 00:00:00 2001
 From: Pavel Valena <pvalena@redhat.com>
 Date: Wed, 2 Apr 2025 10:45:51 +0200
-Subject: [PATCH 6/7] fix(ossl): ignore compiler warnings
+Subject: [PATCH 06/12] fix(ossl): ignore compiler warnings
 
 ```
 src/ossl-files.c:37:8: error: type qualifiers ignored on function return type [-Werror=ignored-qualifiers]
@@ -28,5 +28,5 @@ index 86cf14b3..2e76d52a 100644
  
  TESTS_CONFIG = $(wildcard tests/config/*.cnf)
 -- 
-2.52.0
+2.55.0
 

diff --git a/0007-Revert-feat-fips-include-openssl-s-fips.so-and-opens.patch b/0007-Revert-feat-fips-include-openssl-s-fips.so-and-opens.patch
index 1f210da..c316b1e 100644
--- a/0007-Revert-feat-fips-include-openssl-s-fips.so-and-opens.patch
+++ b/0007-Revert-feat-fips-include-openssl-s-fips.so-and-opens.patch
@@ -1,7 +1,7 @@
-From 97ae61dc1e2b4ca313c28f39dcc98c01da03beaf Mon Sep 17 00:00:00 2001
+From c0404ab57a860f98068c1988a9cca5f2dd8186f3 Mon Sep 17 00:00:00 2001
 From: Pavel Valena <pvalena@redhat.com>
 Date: Fri, 4 Jul 2025 02:51:15 +0200
-Subject: [PATCH 7/7] Revert "feat(fips): include openssl's fips.so and
+Subject: [PATCH 07/12] Revert "feat(fips): include openssl's fips.so and
  openssl.cnf"
 
 This reverts commit 97c5d43ceb9d65bc0970f1e7ad44bc43bc93fc26.
@@ -49,5 +49,5 @@ index ee9adcf0..00000000
 -[default_sect]
 -activate = 1
 -- 
-2.52.0
+2.55.0
 

diff --git a/0008-fix-network-legacy-remove-network-legacy-completely-.patch b/0008-fix-network-legacy-remove-network-legacy-completely-.patch
new file mode 100644
index 0000000..7b5c1b0
--- /dev/null
+++ b/0008-fix-network-legacy-remove-network-legacy-completely-.patch
@@ -0,0 +1,1779 @@
+From a98d67bbe4b363303a8760fb5cfac45b49d8a18a Mon Sep 17 00:00:00 2001
+From: Pavel Valena <pvalena@redhat.com>
+Date: Thu, 7 May 2026 00:40:31 +0200
+Subject: [PATCH 08/12] fix(network-legacy): remove network-legacy completely
+ from the codebase
+
+(To not rely solely on a dracut.spec file.)
+---
+ modules.d/35network-legacy/dhclient-script.sh | 305 ----------
+ modules.d/35network-legacy/dhclient.conf      |  11 -
+ modules.d/35network-legacy/dhcp-multi.sh      | 133 -----
+ modules.d/35network-legacy/ifup.sh            | 562 ------------------
+ modules.d/35network-legacy/kill-dhclient.sh   |  15 -
+ modules.d/35network-legacy/module-setup.sh    |  90 ---
+ modules.d/35network-legacy/net-genrules.sh    | 125 ----
+ modules.d/35network-legacy/parse-bond.sh      |  76 ---
+ modules.d/35network-legacy/parse-bridge.sh    |  49 --
+ modules.d/35network-legacy/parse-ibft.sh      |  10 -
+ modules.d/35network-legacy/parse-ifname.sh    |  24 -
+ modules.d/35network-legacy/parse-ip-opts.sh   | 151 -----
+ modules.d/35network-legacy/parse-team.sh      |  66 --
+ modules.d/35network-legacy/parse-vlan.sh      |  37 --
+ 14 files changed, 1654 deletions(-)
+ delete mode 100755 modules.d/35network-legacy/dhclient-script.sh
+ delete mode 100644 modules.d/35network-legacy/dhclient.conf
+ delete mode 100755 modules.d/35network-legacy/dhcp-multi.sh
+ delete mode 100755 modules.d/35network-legacy/ifup.sh
+ delete mode 100755 modules.d/35network-legacy/kill-dhclient.sh
+ delete mode 100755 modules.d/35network-legacy/module-setup.sh
+ delete mode 100755 modules.d/35network-legacy/net-genrules.sh
+ delete mode 100755 modules.d/35network-legacy/parse-bond.sh
+ delete mode 100755 modules.d/35network-legacy/parse-bridge.sh
+ delete mode 100755 modules.d/35network-legacy/parse-ibft.sh
+ delete mode 100755 modules.d/35network-legacy/parse-ifname.sh
+ delete mode 100755 modules.d/35network-legacy/parse-ip-opts.sh
+ delete mode 100755 modules.d/35network-legacy/parse-team.sh
+ delete mode 100755 modules.d/35network-legacy/parse-vlan.sh
+
+diff --git a/modules.d/35network-legacy/dhclient-script.sh b/modules.d/35network-legacy/dhclient-script.sh
+deleted file mode 100755
+index 0cb00ab4..00000000
+--- a/modules.d/35network-legacy/dhclient-script.sh
++++ /dev/null
+@@ -1,305 +0,0 @@
+-#!/bin/sh
+-
+-PATH=/usr/sbin:/usr/bin:/sbin:/bin
+-
+-command -v getarg > /dev/null || . /lib/dracut-lib.sh
+-command -v ip_to_var > /dev/null || . /lib/net-lib.sh
+-
+-# We already need a set netif here
+-netif=$interface
+-
+-setup_interface() {
+-    ip=$new_ip_address
+-    mtu=$new_interface_mtu
+-    mask=$new_subnet_mask
+-    bcast=$new_broadcast_address
+-    gw=${new_routers%%,*}
+-    domain=$new_domain_name
+-    # get rid of control chars
+-    search=$(printf -- "%s" "$new_domain_search" | tr -d '[:cntrl:]')
+-    namesrv=$new_domain_name_servers
+-    hostname=$new_host_name
+-    [ -n "$new_dhcp_lease_time" ] && lease_time=$new_dhcp_lease_time
+-    [ -n "$new_max_life" ] && lease_time=$new_max_life
+-    preferred_lft=$lease_time
+-    [ -n "$new_preferred_life" ] && preferred_lft=$new_preferred_life
+-
+-    # shellcheck disable=SC1090
+-    [ -f /tmp/net."$netif".override ] && . /tmp/net."$netif".override
+-
+-    # Taken from debian dhclient-script:
+-    # The 576 MTU is only used for X.25 and dialup connections
+-    # where the admin wants low latency.  Such a low MTU can cause
+-    # problems with UDP traffic, among other things.  As such,
+-    # disallow MTUs from 576 and below by default, so that broken
+-    # MTUs are ignored, but higher stuff is allowed (1492, 1500, etc).
+-    if [ -n "$mtu" ] && [ "$mtu" -gt 576 ]; then
+-        if ! ip link set "$netif" mtu "$mtu"; then
+-            ip link set "$netif" down
+-            ip link set "$netif" mtu "$mtu"
+-            linkup "$netif"
+-        fi
+-    fi
+-
+-    ip addr add "$ip"${mask:+/$mask} ${bcast:+broadcast $bcast} dev "$netif" \
+-        ${lease_time:+valid_lft $lease_time} \
+-        ${preferred_lft:+preferred_lft ${preferred_lft}}
+-
+-    if [ -n "$gw" ]; then
+-        if [ "$mask" = "255.255.255.255" ]; then
+-            # point-to-point connection => set explicit route to gateway
+-            echo ip route add "$gw" dev "$netif" > /tmp/net."$netif".gw
+-        fi
+-
+-        echo "$gw" | {
+-            IFS=' ' read -r main_gw other_gw
+-            echo ip route replace default via "$main_gw" dev "$netif" >> /tmp/net."$netif".gw
+-            if [ -n "$other_gw" ]; then
+-                for g in $other_gw; do
+-                    echo ip route add default via "$g" dev "$netif" >> /tmp/net."$netif".gw
+-                done
+-            fi
+-        }
+-    fi
+-
+-    if getargbool 1 rd.peerdns; then
+-        [ -n "${search}${domain}" ] && echo "search $search $domain" > /tmp/net."$netif".resolv.conf
+-        if [ -n "$namesrv" ]; then
+-            for s in $namesrv; do
+-                echo nameserver "$s"
+-            done
+-        fi >> /tmp/net."$netif".resolv.conf
+-    fi
+-    # Note: hostname can be fqdn OR short hostname, so chop off any
+-    # trailing domain name and explicitly add any domain if set.
+-    [ -n "$hostname" ] && echo "echo ${hostname%."$domain"}${domain:+.$domain} > /proc/sys/kernel/hostname" > /tmp/net."$netif".hostname
+-}
+-
+-setup_interface6() {
+-    domain=$new_domain_name
+-    # get rid of control chars
+-    search=$(printf -- "%s" "$new_dhcp6_domain_search" | tr -d '[:cntrl:]')
+-    namesrv=$new_dhcp6_name_servers
+-    hostname=$new_host_name
+-    [ -n "$new_dhcp_lease_time" ] && lease_time=$new_dhcp_lease_time
+-    [ -n "$new_max_life" ] && lease_time=$new_max_life
+-    preferred_lft=$lease_time
+-    [ -n "$new_preferred_life" ] && preferred_lft=$new_preferred_life
+-
+-    # shellcheck disable=SC1090
+-    [ -f /tmp/net."$netif".override ] && . /tmp/net."$netif".override
+-
+-    ip -6 addr add "${new_ip6_address}"/"${new_ip6_prefixlen}" \
+-        dev "${netif}" scope global \
+-        ${lease_time:+valid_lft $lease_time} \
+-        ${preferred_lft:+preferred_lft ${preferred_lft}}
+-
+-    if getargbool 1 rd.peerdns; then
+-        [ -n "${search}${domain}" ] && echo "search $search $domain" > /tmp/net."$netif".resolv.conf
+-        if [ -n "$namesrv" ]; then
+-            for s in $namesrv; do
+-                echo nameserver "$s"
+-            done
+-        fi >> /tmp/net."$netif".resolv.conf
+-    fi
+-
+-    # Note: hostname can be fqdn OR short hostname, so chop off any
+-    # trailing domain name and explicitly add any domain if set.
+-    [ -n "$hostname" ] && echo "echo ${hostname%."$domain"}${domain:+.$domain} > /proc/sys/kernel/hostname" > /tmp/net."$netif".hostname
+-}
+-
+-parse_option_121() {
+-    # RFC 3442 classless static routes format:
+-    # Each route is: <mask_width> <dest_octets...> <gateway_4_octets>
+-    # mask_width determines how many destination octets follow (0-4)
+-    #
+-    # This version validates arguments before operations to prevent
+-    # "integer expression expected" and "shift count out of range" errors.
+-
+-    while [ $# -ge 5 ]; do
+-        mask="$1"
+-
+-        # Validate mask is a number between 0-32
+-        case "$mask" in
+-            '' | *[!0-9]*) return 0 ;;
+-        esac
+-        if [ "$mask" -lt 0 ] 2> /dev/null || [ "$mask" -gt 32 ] 2> /dev/null; then
+-            return 0
+-        fi
+-        shift
+-
+-        # Calculate how many destination address bytes we need based on mask
+-        if [ "$mask" -gt 24 ]; then
+-            need_dest=4
+-        elif [ "$mask" -gt 16 ]; then
+-            need_dest=3
+-        elif [ "$mask" -gt 8 ]; then
+-            need_dest=2
+-        elif [ "$mask" -gt 0 ]; then
+-            need_dest=1
+-        else
+-            need_dest=0
+-        fi
+-
+-        # We need: destination bytes + 4 gateway bytes
+-        need_total=$((need_dest + 4))
+-        if [ $# -lt $need_total ]; then
+-            return 0
+-        fi
+-
+-        # Check if destination is multicast (224.0.0.0 - 239.255.255.255)
+-        multicast=0
+-        if [ $need_dest -ge 1 ]; then
+-            case "$1" in
+-                '' | *[!0-9]*) return 0 ;;
+-            esac
+-            if [ "$1" -ge 224 ] 2> /dev/null && [ "$1" -lt 240 ] 2> /dev/null; then
+-                multicast=1
+-            fi
+-        fi
+-
+-        # Build destination address based on mask width
+-        if [ "$mask" -gt 24 ]; then
+-            destination="$1.$2.$3.$4/$mask"
+-            shift 4
+-        elif [ "$mask" -gt 16 ]; then
+-            destination="$1.$2.$3.0/$mask"
+-            shift 3
+-        elif [ "$mask" -gt 8 ]; then
+-            destination="$1.$2.0.0/$mask"
+-            shift 2
+-        elif [ "$mask" -gt 0 ]; then
+-            destination="$1.0.0.0/$mask"
+-            shift 1
+-        else
+-            destination="0.0.0.0/$mask"
+-        fi
+-
+-        # Read gateway (always 4 bytes)
+-        if [ $# -lt 4 ]; then
+-            return 0
+-        fi
+-        gateway="$1.$2.$3.$4"
+-        shift 4
+-
+-        # Build and emit the route command
+-        if [ $multicast -eq 1 ] || [ "$gateway" = "0.0.0.0" ]; then
+-            temp_result="$destination dev $interface"
+-        else
+-            temp_result="$destination via $gateway dev $interface"
+-        fi
+-
+-        echo "/sbin/ip route replace $temp_result"
+-    done
+-}
+-
+-case $reason in
+-    PREINIT)
+-        echo "dhcp: PREINIT $netif up"
+-        linkup "$netif"
+-        ;;
+-
+-    PREINIT6)
+-        echo "dhcp: PREINIT6 $netif up"
+-        linkup "$netif"
+-        wait_for_ipv6_dad_link "$netif"
+-        ;;
+-
+-    BOUND)
+-        echo "dhcp: BOUND setting up $netif"
+-        unset layer2
+-        if [ -f /sys/class/net/"$netif"/device/layer2 ]; then
+-            read -r layer2 < /sys/class/net/"$netif"/device/layer2
+-        fi
+-        if [ "$layer2" != "0" ]; then
+-            if command -v arping2 > /dev/null; then
+-                if arping2 -q -C 1 -c 2 -I "$netif" -0 "$new_ip_address"; then
+-                    warn "Duplicate address detected for $new_ip_address while doing dhcp. retrying"
+-                    exit 1
+-                fi
+-            else
+-                if ! arping -f -q -D -c 2 -I "$netif" "$new_ip_address"; then
+-                    warn "Duplicate address detected for $new_ip_address while doing dhcp. retrying"
+-                    exit 1
+-                fi
+-            fi
+-        fi
+-        unset layer2
+-        setup_interface
+-        set | while read -r line || [ -n "$line" ]; do
+-            [ "${line#new_}" = "$line" ] && continue
+-            echo "$line"
+-        done > /tmp/dhclient."$netif".dhcpopts
+-
+-        {
+-            echo '. /lib/net-lib.sh'
+-            echo "setup_net $netif"
+-            if [ -n "$new_classless_static_routes" ]; then
+-                OLDIFS="$IFS"
+-                IFS=".$IFS"
+-                parse_option_121 "$new_classless_static_routes"
+-                IFS="$OLDIFS"
+-            fi
+-            echo "source_hook initqueue/online $netif"
+-            [ -e /tmp/net."$netif".manualup ] || echo "/sbin/netroot $netif"
+-            echo "rm -f -- $hookdir/initqueue/setup_net_$netif.sh"
+-        } > "$hookdir"/initqueue/setup_net_"$netif".sh
+-
+-        echo "[ -f /tmp/net.$netif.did-setup ]" > "$hookdir"/initqueue/finished/dhclient-"$netif".sh
+-        : > /tmp/net."$netif".up
+-        if [ -e /sys/class/net/"${netif}"/address ]; then
+-            : > "/tmp/net.$(cat /sys/class/net/"${netif}"/address).up"
+-        fi
+-
+-        ;;
+-
+-    RENEW | REBIND)
+-        unset lease_time
+-        [ -n "$new_dhcp_lease_time" ] && lease_time=$new_dhcp_lease_time
+-        [ -n "$new_max_life" ] && lease_time=$new_max_life
+-        preferred_lft=$lease_time
+-        [ -n "$new_preferred_life" ] && preferred_lft=$new_preferred_life
+-        ip -4 addr change "${new_ip_address}"/"${new_subnet_mask}" broadcast "${new_broadcast_address}" dev "${interface}" \
+-            ${lease_time:+valid_lft $lease_time} ${preferred_lft:+preferred_lft ${preferred_lft}} \
+-            > /dev/null 2>&1
+-        ;;
+-
+-    BOUND6)
+-        echo "dhcp: BOUND6 setting up $netif"
+-        setup_interface6
+-
+-        set | while read -r line || [ -n "$line" ]; do
+-            [ "${line#new_}" = "$line" ] && continue
+-            echo "$line"
+-        done > /tmp/dhclient."$netif".dhcpopts
+-
+-        {
+-            echo '. /lib/net-lib.sh'
+-            echo "setup_net $netif"
+-            echo "source_hook initqueue/online $netif"
+-            [ -e /tmp/net."$netif".manualup ] || echo "/sbin/netroot $netif"
+-            echo "rm -f -- $hookdir/initqueue/setup_net_$netif.sh"
+-        } > "$hookdir"/initqueue/setup_net_"$netif".sh
+-
+-        echo "[ -f /tmp/net.$netif.did-setup ]" > "$hookdir"/initqueue/finished/dhclient-"$netif".sh
+-        : > /tmp/net."$netif".up
+-        if [ -e /sys/class/net/"${netif}"/address ]; then
+-            : > "/tmp/net.$(cat /sys/class/net/"${netif}"/address).up"
+-        fi
+-        ;;
+-
+-    RENEW6 | REBIND6)
+-        unset lease_time
+-        [ -n "$new_dhcp_lease_time" ] && lease_time=$new_dhcp_lease_time
+-        [ -n "$new_max_life" ] && lease_time=$new_max_life
+-        preferred_lft=$lease_time
+-        [ -n "$new_preferred_life" ] && preferred_lft=$new_preferred_life
+-        ip -6 addr change "${new_ip6_address}"/"${new_ip6_prefixlen}" dev "${interface}" scope global \
+-            ${lease_time:+valid_lft $lease_time} ${preferred_lft:+preferred_lft ${preferred_lft}} \
+-            > /dev/null 2>&1
+-        ;;
+-
+-    *) echo "dhcp: $reason" ;;
+-esac
+-
+-exit 0
+diff --git a/modules.d/35network-legacy/dhclient.conf b/modules.d/35network-legacy/dhclient.conf
+deleted file mode 100644
+index ffd24ef6..00000000
+--- a/modules.d/35network-legacy/dhclient.conf
++++ /dev/null
+@@ -1,11 +0,0 @@
+-
+-option classless-static-routes code 121 = array of unsigned integer 8;
+-
+-send dhcp-client-identifier = hardware;
+-
+-request subnet-mask, broadcast-address, time-offset, routers,
+-        domain-name, domain-name-servers, domain-search, host-name,
+-        root-path, interface-mtu, classless-static-routes,
+-        netbios-name-servers, netbios-scope, ntp-servers,
+-        dhcp6.domain-search, dhcp6.fqdn,
+-        dhcp6.name-servers, dhcp6.sntp-servers;
+diff --git a/modules.d/35network-legacy/dhcp-multi.sh b/modules.d/35network-legacy/dhcp-multi.sh
+deleted file mode 100755
+index 1c5ee733..00000000
+--- a/modules.d/35network-legacy/dhcp-multi.sh
++++ /dev/null
+@@ -1,133 +0,0 @@
+-#!/bin/sh
+-# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
+-# ex: ts=8 sw=4 sts=4 et filetype=sh
+-#
+-PATH=/usr/sbin:/usr/bin:/sbin:/bin
+-
+-# File to start dhclient requests on different interfaces in parallel
+-
+-command -v getarg > /dev/null || . /lib/dracut-lib.sh
+-. /lib/net-lib.sh
+-
+-netif=$1
+-do_vlan=$2
+-arg=$3
+-
+-# Run dhclient in parallel
+-do_dhclient() {
+-    local _COUNT=0
+-    local _timeout
+-    local _DHCPRETRY
+-    _timeout=$(getarg rd.net.timeout.dhcp=)
+-    _DHCPRETRY=$(getargnum 1 1 1000000000 rd.net.dhcp.retry=)
+-
+-    if [ -n "$_timeout" ]; then
+-        if ! (dhclient --help 2>&1 | grep -qs -F -- '--timeout'); then
+-            warn "rd.net.timeout.dhcp has no effect because dhclient does not implement the --timeout option"
+-            unset _timeout
+-        fi
+-    fi
+-
+-    while [ $_COUNT -lt "$_DHCPRETRY" ]; do
+-        info "Starting dhcp for interface $netif"
+-        dhclient "$arg" \
+-            ${_timeout:+--timeout "$_timeout"} \
+-            -q \
+-            -1 \
+-            -cf /etc/dhclient.conf \
+-            -pf /tmp/dhclient."$netif".pid \
+-            -lf /tmp/dhclient."$netif".lease \
+-            "$netif" &
+-        wait $! 2> /dev/null
+-
+-        # wait will return the return value of dhclient
+-        retv=$?
+-
+-        # dhclient and hence wait returned success, 0.
+-        if [ $retv -eq 0 ]; then
+-            return 0
+-        fi
+-
+-        # If dhclient exited before wait was called, or it was killed by
+-        # another thread for interface whose DHCP succeeded, then it will not
+-        # find the process with that pid and return error code 127. In that
+-        # case we need to check if /tmp/dhclient.$netif.lease exists. If it
+-        # does, it means dhclient finished executing before wait was called,
+-        # and it was successful (return 0). If /tmp/dhclient.$netif.lease
+-        # does not exist, then it means dhclient was killed by another thread
+-        # or it finished execution but failed dhcp on that interface.
+-
+-        if [ $retv -eq 127 ]; then
+-            read -r pid < /tmp/dhclient."$netif".pid
+-            info "PID $pid was not found by wait for $netif"
+-            if [ -e /tmp/dhclient."$netif".lease ]; then
+-                info "PID $pid not found but DHCP successful on $netif"
+-                return 0
+-            fi
+-        fi
+-
+-        _COUNT=$((_COUNT + 1))
+-        [ $_COUNT -lt "$_DHCPRETRY" ] && sleep 1
+-    done
+-    warn "dhcp for interface $netif failed"
+-    # nuke those files since we failed; we might retry dhcp again if it's e.g.
+-    # `ip=dhcp,dhcp6` and we check for the PID file earlier
+-    rm -f /tmp/dhclient."$netif".pid /tmp/dhclient."$netif".lease
+-    return 1
+-}
+-
+-do_dhclient
+-ret=$?
+-
+-# setup nameserver
+-for s in "$dns1" "$dns2" $(getargs nameserver); do
+-    [ -n "$s" ] || continue
+-    echo nameserver "$s" >> /tmp/net."$netif".resolv.conf
+-done
+-
+-if [ $ret -eq 0 ]; then
+-    : > /tmp/net."${netif}".up
+-
+-    if [ -z "$do_vlan" ] && [ -e /sys/class/net/"${netif}"/address ]; then
+-        : > "/tmp/net.$(cat /sys/class/net/"${netif}"/address).up"
+-    fi
+-
+-    # Check if DHCP also succeeded on another interface before this one.
+-    # We will always use the first one on which DHCP succeeded, by using
+-    # a common file $IFNETFILE, to synchronize between threads.
+-    # Consider the race condition in which multiple threads
+-    # corresponding to different interfaces may try to read $IFNETFILE
+-    # and find it does not exist; they may all end up thinking they are the
+-    # first to succeed (hence more than one thread may end up writing to
+-    # $IFNETFILE). To take care of this, instead of checking if $IFNETFILE
+-    # exists to determine if we are the first, we create a symbolic link
+-    # in $IFNETFILE, pointing to the interface name ($netif), thus storing
+-    # the interface name in the link pointer.
+-    # Creating a link will fail, if the link already exists, hence kernel
+-    # will take care of allowing only first thread to create link, which
+-    # takes care of the race condition for us. Subsequent threads will fail.
+-    # Also, the link points to the interface name, which will tell us which
+-    # interface succeeded.
+-
+-    if ln -s "$netif" "$IFNETFILE" 2> /dev/null; then
+-        intf=$(readlink "$IFNETFILE")
+-        if [ -e /tmp/dhclient."$intf".lease ]; then
+-            info "DHCP successful on interface $intf"
+-            # Kill all existing dhclient calls for other interfaces, since we
+-            # already got one successful interface
+-
+-            read -r npid < /tmp/dhclient."$netif".pid
+-            pidlist=$(pgrep dhclient)
+-            for pid in $pidlist; do
+-                [ "$pid" -eq "$npid" ] && continue
+-                kill -9 "$pid" > /dev/null 2>&1
+-            done
+-        else
+-            echo "ERROR! $IFNETFILE exists but /tmp/dhclient.$intf.lease does not exist!!!"
+-        fi
+-    else
+-        info "DHCP success on $netif, and also on $intf"
+-        exit 0
+-    fi
+-    exit $ret
+-fi
+diff --git a/modules.d/35network-legacy/ifup.sh b/modules.d/35network-legacy/ifup.sh
+deleted file mode 100755
+index b2ed4607..00000000
+--- a/modules.d/35network-legacy/ifup.sh
++++ /dev/null
+@@ -1,562 +0,0 @@
+-#!/bin/sh
+-#
+-# We don't need to check for ip= errors here, that is handled by the
+-# cmdline parser script
+-#
+-# without $2 means this is for real netroot case
+-# or it is for manually bring up network ie. for kdump scp vmcore
+-PATH=/usr/sbin:/usr/bin:/sbin:/bin
+-
+-command -v getarg > /dev/null || . /lib/dracut-lib.sh
+-command -v ip_to_var > /dev/null || . /lib/net-lib.sh
+-
+-# Huh? No $1?
+-[ -z "$1" ] && exit 1
+-
+-# $netif reads easier than $1
+-netif=$1
+-
+-# loopback is always handled the same way
+-if [ "$netif" = "lo" ]; then
+-    ip link set lo up
+-    ip addr add 127.0.0.1/8 dev lo
+-    exit 0
+-fi
+-
+-do_dhcp_parallel() {
+-    # dhclient-script will mark the netif up and generate the online
+-    # event for nfsroot
+-    # XXX add -V vendor class and option parsing per kernel
+-
+-    [ -e "/tmp/dhclient.$netif.pid" ] && return 0
+-
+-    if ! iface_has_carrier "$netif"; then
+-        warn "No carrier detected on interface $netif"
+-        return 1
+-    fi
+-
+-    bootintf=$(readlink "$IFNETFILE")
+-    if [ -n "$bootintf" ] && [ -e "/tmp/dhclient.${bootintf}.lease" ]; then
+-        info "DHCP already succeeded for $bootintf, exiting for $netif"
+-        return 1
+-    fi
+-
+-    if [ ! -e /run/NetworkManager/conf.d/10-dracut-dhclient.conf ]; then
+-        mkdir -p /run/NetworkManager/conf.d
+-        echo '[main]' > /run/NetworkManager/conf.d/10-dracut-dhclient.conf
+-        echo 'dhcp=dhclient' >> /run/NetworkManager/conf.d/10-dracut-dhclient.conf
+-    fi
+-
+-    /sbin/dhcp-multi.sh "$netif" "$DO_VLAN" "$@" &
+-    return 0
+-}
+-
+-# Run dhclient
+-do_dhcp() {
+-    # dhclient-script will mark the netif up and generate the online
+-    # event for nfsroot
+-    # XXX add -V vendor class and option parsing per kernel
+-
+-    local _COUNT
+-    local _timeout
+-    local _DHCPRETRY
+-
+-    _COUNT=0
+-    _timeout=$(getarg rd.net.timeout.dhcp=)
+-    _DHCPRETRY=$(getargnum 1 1 1000000000 rd.net.dhcp.retry=)
+-
+-    [ -e "/tmp/dhclient.${netif}.pid" ] && return 0
+-
+-    if ! iface_has_carrier "$netif"; then
+-        warn "No carrier detected on interface $netif"
+-        return 1
+-    fi
+-
+-    if [ -n "$_timeout" ]; then
+-        if ! (dhclient --help 2>&1 | grep -qs -F -- '--timeout'); then
+-            warn "rd.net.timeout.dhcp has no effect because dhclient does not implement the --timeout option"
+-            unset _timeout
+-        fi
+-    fi
+-
+-    if [ ! -e /run/NetworkManager/conf.d/10-dracut-dhclient.conf ]; then
+-        mkdir -p /run/NetworkManager/conf.d
+-        echo '[main]' > /run/NetworkManager/conf.d/10-dracut-dhclient.conf
+-        echo 'dhcp=dhclient' >> /run/NetworkManager/conf.d/10-dracut-dhclient.conf
+-    fi
+-
+-    while [ "$_COUNT" -lt "$_DHCPRETRY" ]; do
+-        info "Starting dhcp for interface $netif"
+-        dhclient "$@" \
+-            ${_timeout:+--timeout "$_timeout"} \
+-            -q \
+-            -1 \
+-            -cf /etc/dhclient.conf \
+-            -pf "/tmp/dhclient.${netif}.pid" \
+-            -lf "/tmp/dhclient.${netif}.lease" \
+-            "$netif" \
+-            && return 0
+-        _COUNT=$((_COUNT + 1))
+-        [ "$_COUNT" -lt "$_DHCPRETRY" ] && sleep 1
+-    done
+-    warn "dhcp for interface $netif failed"
+-    # nuke those files since we failed; we might retry dhcp again if it's e.g.
+-    # `ip=dhcp,dhcp6` and we check for the PID file at the top
+-    rm -f /tmp/dhclient."$netif".pid /tmp/dhclient."$netif".lease
+-    return 1
+-}
+-
+-load_ipv6() {
+-    [ -d /proc/sys/net/ipv6 ] && return
+-    modprobe ipv6
+-    i=0
+-    while [ ! -d /proc/sys/net/ipv6 ]; do
+-        i=$((i + 1))
+-        [ $i -gt 10 ] && break
+-        sleep 0.1
+-    done
+-}
+-
+-do_ipv6auto() {
+-    local ret
+-    load_ipv6
+-    echo 0 > /proc/sys/net/ipv6/conf/"${netif}"/forwarding
+-    echo 1 > /proc/sys/net/ipv6/conf/"${netif}"/accept_ra
+-    echo 1 > /proc/sys/net/ipv6/conf/"${netif}"/accept_redirects
+-    linkup "$netif"
+-    wait_for_ipv6_auto "$netif"
+-    ret=$?
+-
+-    [ -n "$hostname" ] && echo "echo $hostname > /proc/sys/kernel/hostname" > "/tmp/net.${netif}.hostname"
+-
+-    return "$ret"
+-}
+-
+-do_ipv6link() {
+-    local ret
+-    load_ipv6
+-    echo 0 > /proc/sys/net/ipv6/conf/"${netif}"/forwarding
+-    echo 0 > /proc/sys/net/ipv6/conf/"${netif}"/accept_ra
+-    echo 0 > /proc/sys/net/ipv6/conf/"${netif}"/accept_redirects
+-    linkup "$netif"
+-
+-    [ -n "$hostname" ] && echo "echo $hostname > /proc/sys/kernel/hostname" > "/tmp/net.${netif}.hostname"
+-
+-    return "$ret"
+-}
+-
+-# Handle static ip configuration
+-do_static() {
+-    strglobin "$ip" '*:*:*' && load_ipv6
+-
+-    if ! iface_has_carrier "$netif"; then
+-        warn "No carrier detected on interface $netif"
+-        return 1
+-    elif ! linkup "$netif"; then
+-        warn "Could not bring interface $netif up!"
+-        return 1
+-    fi
+-
+-    ip route get "$ip" 2> /dev/null | {
+-        read -r a rest
+-        if [ "$a" = "local" ]; then
+-            warn "Not assigning $ip to interface $netif, cause it is already assigned!"
+-            return 1
+-        fi
+-        return 0
+-    } || return 1
+-
+-    [ -n "$macaddr" ] && ip link set address "$macaddr" dev "$netif"
+-    [ -n "$mtu" ] && ip link set mtu "$mtu" dev "$netif"
+-    if strglobin "$ip" '*:*:*'; then
+-        # note no ip addr flush for ipv6
+-        ip addr add "$ip/$mask" ${srv:+peer "$srv"} dev "$netif"
+-        echo 0 > /proc/sys/net/ipv6/conf/"${netif}"/forwarding
+-        echo 1 > /proc/sys/net/ipv6/conf/"${netif}"/accept_ra
+-        echo 1 > /proc/sys/net/ipv6/conf/"${netif}"/accept_redirects
+-        wait_for_ipv6_dad "$netif"
+-    else
+-        if [ -z "$srv" ]; then
+-            if command -v arping2 > /dev/null; then
+-                if arping2 -q -C 1 -c 2 -I "$netif" -0 "$ip"; then
+-                    warn "Duplicate address detected for $ip for interface $netif."
+-                    return 1
+-                fi
+-            else
+-                if ! arping -f -q -D -c 2 -I "$netif" "$ip"; then
+-                    warn "Duplicate address detected for $ip for interface $netif."
+-                    return 1
+-                fi
+-            fi
+-        fi
+-        ip addr flush dev "$netif"
+-        ip addr add "$ip/$mask" ${srv:+peer "$srv"} brd + dev "$netif"
+-    fi
+-
+-    [ -n "$gw" ] && echo "ip route replace default via '$gw' dev '$netif'" > "/tmp/net.$netif.gw"
+-    [ -n "$hostname" ] && echo "echo '$hostname' > /proc/sys/kernel/hostname" > "/tmp/net.$netif.hostname"
+-
+-    return 0
+-}
+-
+-get_vid() {
+-    case "$1" in
+-        vlan*)
+-            echo "${1#vlan}"
+-            ;;
+-        *.*)
+-            echo "${1##*.}"
+-            ;;
+-    esac
+-}
+-
+-# check, if we need VLAN's for this interface
+-if [ -z "$DO_VLAN_PHY" ] && [ -e "/tmp/vlan.${netif}.phy" ]; then
+-    unset DO_VLAN
+-    NO_AUTO_DHCP=yes DO_VLAN_PHY=yes ifup "$netif"
+-    modprobe -b -q 8021q
+-
+-    for i in /tmp/vlan.*."${netif}"; do
+-        [ -e "$i" ] || continue
+-        unset vlanname
+-        unset phydevice
+-        # shellcheck disable=SC1090
+-        . "$i"
+-        if [ -n "$vlanname" ]; then
+-            linkup "$phydevice"
+-            ip link add dev "$vlanname" link "$phydevice" type vlan id "$(get_vid "$vlanname")"
+-            ifup "$vlanname"
+-        fi
+-    done
+-    exit 0
+-fi
+-
+-# Check, if interface is VLAN interface
+-if ! [ -e "/tmp/vlan.${netif}.phy" ]; then
+-    for i in "/tmp/vlan.${netif}".*; do
+-        [ -e "$i" ] || continue
+-        export DO_VLAN=yes
+-        break
+-    done
+-fi
+-
+-# bridge this interface?
+-if [ -z "$NO_BRIDGE_MASTER" ]; then
+-    for i in /tmp/bridge.*.info; do
+-        [ -e "$i" ] || continue
+-        unset bridgeslaves
+-        unset bridgename
+-        # shellcheck disable=SC1090
+-        . "$i"
+-        for ethname in $bridgeslaves; do
+-            [ "$netif" != "$ethname" ] && continue
+-
+-            NO_BRIDGE_MASTER=yes NO_AUTO_DHCP=yes ifup "$ethname"
+-            linkup "$ethname"
+-            if [ ! -e "/tmp/bridge.$bridgename.up" ]; then
+-                ip link add name "$bridgename" type bridge
+-                echo 0 > "/sys/devices/virtual/net/$bridgename/bridge/forward_delay"
+-                : > "/tmp/bridge.$bridgename.up"
+-            fi
+-            ip link set dev "$ethname" master "$bridgename"
+-            ifup "$bridgename"
+-            exit 0
+-        done
+-    done
+-fi
+-
+-# enslave this interface to bond?
+-if [ -z "$NO_BOND_MASTER" ]; then
+-    for i in /tmp/bond.*.info; do
+-        [ -e "$i" ] || continue
+-        unset bondslaves
+-        unset bondname
+-        # shellcheck disable=SC1090
+-        . "$i"
+-        for testslave in $bondslaves; do
+-            [ "$netif" != "$testslave" ] && continue
+-
+-            # already setup
+-            [ -e "/tmp/bond.$bondname.up" ] && exit 0
+-
+-            # wait for all slaves to show up
+-            for slave in $bondslaves; do
+-                # try to create the slave (maybe vlan or bridge)
+-                NO_BOND_MASTER=yes NO_AUTO_DHCP=yes ifup "$slave"
+-
+-                if ! ip link show dev "$slave" > /dev/null 2>&1; then
+-                    # wait for the last slave to show up
+-                    exit 0
+-                fi
+-            done
+-
+-            modprobe -q -b bonding
+-            echo "+$bondname" > /sys/class/net/bonding_masters 2> /dev/null
+-            ip link set "$bondname" down
+-
+-            # Stolen from ifup-eth
+-            # add the bits to setup driver parameters here
+-            for arg in $bondoptions; do
+-                key=${arg%%=*}
+-                value=${arg##*=}
+-                # %{value:0:1} is replaced with non-bash specific construct
+-                if [ "${key}" = "arp_ip_target" ] && [ "${#value}" != "0" ] && [ "+${value%%+*}" != "+" ]; then
+-                    OLDIFS=$IFS
+-                    IFS=','
+-                    for arp_ip in $value; do
+-                        echo "+$arp_ip" > "/sys/class/net/${bondname}/bonding/$key"
+-                    done
+-                    IFS=$OLDIFS
+-                else
+-                    echo "$value" > "/sys/class/net/${bondname}/bonding/$key"
+-                fi
+-            done
+-
+-            linkup "$bondname"
+-
+-            for slave in $bondslaves; do
+-                cat "/sys/class/net/$slave/address" > "/tmp/net.${bondname}.${slave}.hwaddr"
+-                ip link set "$slave" down
+-                echo "+$slave" > "/sys/class/net/$bondname/bonding/slaves"
+-                linkup "$slave"
+-            done
+-
+-            # Set mtu on bond master
+-            [ -n "$bondmtu" ] && ip link set mtu "$bondmtu" dev "$bondname"
+-
+-            # add the bits to setup the needed post enslavement parameters
+-            for arg in $bondoptions; do
+-                key=${arg%%=*}
+-                value=${arg##*=}
+-                if [ "${key}" = "primary" ]; then
+-                    echo "$value" > "/sys/class/net/${bondname}/bonding/$key"
+-                fi
+-            done
+-
+-            : > "/tmp/bond.$bondname.up"
+-
+-            NO_BOND_MASTER=yes ifup "$bondname"
+-            exit $?
+-        done
+-    done
+-fi
+-
+-if [ -z "$NO_TEAM_MASTER" ]; then
+-    for i in /tmp/team.*.info; do
+-        [ -e "$i" ] || continue
+-        unset teammaster
+-        unset teamslaves
+-        # shellcheck disable=SC1090
+-        . "$i"
+-        for testslave in $teamslaves; do
+-            [ "$netif" != "$testslave" ] && continue
+-
+-            [ -e "/tmp/team.$teammaster.up" ] && exit 0
+-
+-            # wait for all slaves to show up
+-            for slave in $teamslaves; do
+-                # try to create the slave (maybe vlan or bridge)
+-                NO_TEAM_MASTER=yes NO_AUTO_DHCP=yes ifup "$slave"
+-
+-                if ! ip link show dev "$slave" > /dev/null 2>&1; then
+-                    # wait for the last slave to show up
+-                    exit 0
+-                fi
+-            done
+-
+-            if [ ! -e "/tmp/team.$teammaster.up" ]; then
+-                # We shall only bring up those _can_ come up
+-                # in case of some slave is gone in active-backup mode
+-                working_slaves=""
+-                for slave in $teamslaves; do
+-                    teamdctl "${teammaster}" port present "${slave}" 2> /dev/null \
+-                        && continue
+-                    ip link set dev "$slave" up 2> /dev/null
+-                    if wait_for_if_up "$slave"; then
+-                        working_slaves="$working_slaves$slave "
+-                    fi
+-                done
+-                # Do not add slaves now
+-                teamd -d -U -n -N -t "$teammaster" -f "/etc/teamd/${teammaster}.conf"
+-                for slave in $working_slaves; do
+-                    # team requires the slaves to be down before joining team
+-                    ip link set dev "$slave" down
+-                    (
+-                        unset TEAM_PORT_CONFIG
+-                        read -r _hwaddr < "/sys/class/net/$slave/address"
+-                        _subchannels=$(iface_get_subchannels "$slave")
+-                        if [ -n "$_hwaddr" ] && [ -e "/etc/sysconfig/network-scripts/mac-${_hwaddr}.conf" ]; then
+-                            # shellcheck disable=SC1090
+-                            . "/etc/sysconfig/network-scripts/mac-${_hwaddr}.conf"
+-                        elif [ -n "$_subchannels" ] && [ -e "/etc/sysconfig/network-scripts/ccw-${_subchannels}.conf" ]; then
+-                            # shellcheck disable=SC1090
+-                            . "/etc/sysconfig/network-scripts/ccw-${_subchannels}.conf"
+-                        elif [ -e "/etc/sysconfig/network-scripts/ifcfg-${slave}" ]; then
+-                            # shellcheck disable=SC1090
+-                            . "/etc/sysconfig/network-scripts/ifcfg-${slave}"
+-                        fi
+-
+-                        if [ -n "${TEAM_PORT_CONFIG}" ]; then
+-                            /usr/bin/teamdctl "${teammaster}" port config update "${slave}" "${TEAM_PORT_CONFIG}"
+-                        fi
+-                    )
+-                    teamdctl "$teammaster" port add "$slave"
+-                done
+-
+-                ip link set dev "$teammaster" up
+-
+-                : > "/tmp/team.$teammaster.up"
+-                NO_TEAM_MASTER=yes ifup "$teammaster"
+-                exit $?
+-            fi
+-        done
+-    done
+-fi
+-
+-# all synthetic interfaces done.. now check if the interface is available
+-if ! ip link show dev "$netif" > /dev/null 2>&1; then
+-    exit 1
+-fi
+-
+-# disable manual ifup while netroot is set for simplifying our logic
+-# in netroot case we prefer netroot to bringup $netif automatically
+-[ -n "$2" ] && [ "$2" = "-m" ] && [ -z "$netroot" ] && manualup="$2"
+-
+-if [ -n "$manualup" ]; then
+-    : > "/tmp/net.$netif.manualup"
+-    rm -f "/tmp/net.${netif}.did-setup"
+-else
+-    [ -e "/tmp/net.${netif}.did-setup" ] && exit 0
+-    [ -z "$DO_VLAN" ] \
+-        && [ -e "/sys/class/net/$netif/address" ] \
+-        && [ -e "/tmp/net.$(cat "/sys/class/net/$netif/address").did-setup" ] && exit 0
+-fi
+-
+-# Specific configuration, spin through the kernel command line
+-# looking for ip= lines
+-for p in $(getargs ip=); do
+-    ip_to_var "$p"
+-    # skip ibft
+-    [ "$autoconf" = "ibft" ] && continue
+-
+-    case "$dev" in
+-        ??:??:??:??:??:??) # MAC address
+-            _dev=$(iface_for_mac "$dev")
+-            [ -n "$_dev" ] && dev="$_dev"
+-            ;;
+-        ??-??-??-??-??-??) # MAC address in BOOTIF form
+-            _dev=$(iface_for_mac "$(fix_bootif "$dev")")
+-            [ -n "$_dev" ] && dev="$_dev"
+-            ;;
+-    esac
+-
+-    # If this option isn't directed at our interface, skip it
+-    if [ -n "$dev" ]; then
+-        if [ "$dev" != "$netif" ]; then
+-            [ ! -e "/sys/class/net/$dev" ] \
+-                && warn "Network interface '$dev' does not exist!"
+-            continue
+-        fi
+-    else
+-        iface_is_enslaved "$netif" && continue
+-    fi
+-
+-    # Store config for later use
+-    for i in ip srv gw mask hostname macaddr mtu dns1 dns2; do
+-        eval '[ "$'$i'" ] && echo '$i'="$'$i'"'
+-    done > "/tmp/net.$netif.override"
+-
+-    for autoopt in $(str_replace "$autoconf" "," " "); do
+-        case $autoopt in
+-            dhcp | on | any)
+-                do_dhcp -4
+-                ;;
+-            single-dhcp)
+-                do_dhcp_parallel -4
+-                exit 0
+-                ;;
+-            dhcp6)
+-                load_ipv6
+-                do_dhcp -6
+-                ;;
+-            auto6)
+-                do_ipv6auto
+-                ;;
+-            either6)
+-                do_ipv6auto || do_dhcp -6
+-                ;;
+-            link6)
+-                do_ipv6link
+-                ;;
+-            *)
+-                do_static
+-                ;;
+-        esac
+-    done
+-    ret=$?
+-
+-    # setup nameserver
+-    for s in "$dns1" "$dns2" $(getargs nameserver); do
+-        [ -n "$s" ] || continue
+-        echo "nameserver $s" >> "/tmp/net.$netif.resolv.conf"
+-    done
+-
+-    if [ $ret -eq 0 ]; then
+-        : > "/tmp/net.${netif}.up"
+-
+-        if [ -z "$DO_VLAN" ] && [ -e "/sys/class/net/${netif}/address" ]; then
+-            : > "/tmp/net.$(cat "/sys/class/net/${netif}/address").up"
+-        fi
+-
+-        # and finally, finish interface set up if there isn't already a script
+-        # to do so (which is the case in the dhcp path)
+-        if [ ! -e "$hookdir/initqueue/setup_net_$netif.sh" ]; then
+-            setup_net "$netif"
+-            source_hook initqueue/online "$netif"
+-            if [ -z "$manualup" ]; then
+-                /sbin/netroot "$netif"
+-            fi
+-        fi
+-
+-        exit $ret
+-    fi
+-done
+-
+-# no ip option directed at our interface?
+-if [ -z "$NO_AUTO_DHCP" ] && [ ! -e "/tmp/net.${netif}.up" ]; then
+-    ret=1
+-    if [ -e /tmp/net.bootdev ]; then
+-        read -r BOOTDEV < /tmp/net.bootdev
+-        if [ "$netif" = "$BOOTDEV" ] || [ "$BOOTDEV" = "$(cat "/sys/class/net/${netif}/address")" ]; then
+-            do_dhcp
+-            ret=$?
+-        fi
+-    else
+-        # No ip lines, no bootdev -> default to dhcp
+-        ip=$(getarg ip)
+-
+-        if getargs 'ip=dhcp6' > /dev/null || [ -z "$ip" ] && [ "$netroot" = "dhcp6" ]; then
+-            load_ipv6
+-            do_dhcp -6
+-            ret=$?
+-        fi
+-        if getargs 'ip=dhcp' > /dev/null || [ -z "$ip" ] && [ "$netroot" != "dhcp6" ]; then
+-            do_dhcp -4
+-            ret=$?
+-        fi
+-    fi
+-
+-    for s in $(getargs nameserver); do
+-        [ -n "$s" ] || continue
+-        echo "nameserver $s" >> "/tmp/net.$netif.resolv.conf"
+-    done
+-
+-    if [ "$ret" -eq 0 ] && [ -n "$(ls "/tmp/leaseinfo.${netif}"* 2> /dev/null)" ]; then
+-        : > "/tmp/net.${netif}.did-setup"
+-        if [ -e "/sys/class/net/${netif}/address" ]; then
+-            : > "/tmp/net.$(cat "/sys/class/net/${netif}/address").did-setup"
+-        fi
+-    fi
+-fi
+-
+-exit 0
+diff --git a/modules.d/35network-legacy/kill-dhclient.sh b/modules.d/35network-legacy/kill-dhclient.sh
+deleted file mode 100755
+index 9ed615fd..00000000
+--- a/modules.d/35network-legacy/kill-dhclient.sh
++++ /dev/null
+@@ -1,15 +0,0 @@
+-#!/bin/sh
+-
+-for f in /tmp/dhclient.*.pid; do
+-    [ -e "$f" ] || continue
+-    read -r PID < "$f"
+-    kill "$PID" > /dev/null 2>&1
+-done
+-
+-sleep 0.1
+-
+-for f in /tmp/dhclient.*.pid; do
+-    [ -e "$f" ] || continue
+-    read -r PID < "$f"
+-    kill -9 "$PID" > /dev/null 2>&1
+-done
+diff --git a/modules.d/35network-legacy/module-setup.sh b/modules.d/35network-legacy/module-setup.sh
+deleted file mode 100755
+index 463b2b98..00000000
+--- a/modules.d/35network-legacy/module-setup.sh
++++ /dev/null
+@@ -1,90 +0,0 @@
+-#!/bin/bash
+-
+-# called by dracut
+-check() {
+-    require_binaries ip dhclient sed awk grep pgrep tr expr || return 1
+-    require_any_binary arping arping2 || return 1
+-
+-    return 255
+-}
+-
+-# called by dracut
+-depends() {
+-    echo net-lib kernel-network-modules initqueue
+-    return 0
+-}
+-
+-# called by dracut
+-install() {
+-    # Adding default link and (if exists) 98-default-mac-none.link
+-    if dracut_module_included "systemd"; then
+-        inst_multiple -o \
+-            "${systemdnetwork}/99-default.link" \
+-            "${systemdnetwork}/98-default-mac-none.link"
+-        [[ $hostonly ]] && inst_multiple -H -o "${systemdnetworkconfdir}/*.link"
+-    fi
+-
+-    inst_multiple ip dhclient sed awk grep pgrep tr expr
+-
+-    inst_multiple -o arping arping2
+-    strstr "$(arping 2>&1)" "ARPing 2" && mv "$initdir/bin/arping" "$initdir/bin/arping2"
+-
+-    inst_multiple -o ping ping6
+-    inst_multiple -o teamd teamdctl teamnl
+-    inst_simple /etc/libnl/classid
+-    inst_script "$moddir/ifup.sh" "/sbin/ifup"
+-    inst_script "$moddir/dhcp-multi.sh" "/sbin/dhcp-multi.sh"
+-    inst_script "$moddir/dhclient-script.sh" "/sbin/dhclient-script"
+-    inst_simple -H "/etc/dhclient.conf"
+-    cat "$moddir/dhclient.conf" >> "${initdir}/etc/dhclient.conf"
+-    inst_hook pre-udev 60 "$moddir/net-genrules.sh"
+-    inst_hook cmdline 92 "$moddir/parse-ibft.sh"
+-    inst_hook cmdline 95 "$moddir/parse-vlan.sh"
+-    inst_hook cmdline 96 "$moddir/parse-bond.sh"
+-    inst_hook cmdline 96 "$moddir/parse-team.sh"
+-    inst_hook cmdline 97 "$moddir/parse-bridge.sh"
+-    inst_hook cmdline 98 "$moddir/parse-ip-opts.sh"
+-    inst_hook cmdline 99 "$moddir/parse-ifname.sh"
+-    inst_hook cleanup 10 "$moddir/kill-dhclient.sh"
+-
+-    # install all config files for teaming
+-    unset TEAM_MASTER
+-    unset TEAM_CONFIG
+-    unset TEAM_PORT_CONFIG
+-    unset HWADDR
+-    unset SUBCHANNELS
+-    for i in /etc/sysconfig/network-scripts/ifcfg-*; do
+-        [ -e "$i" ] || continue
+-        case "$i" in
+-            *~ | *.bak | *.orig | *.rpmnew | *.rpmorig | *.rpmsave)
+-                continue
+-                ;;
+-        esac
+-        (
+-            # shellcheck disable=SC1090
+-            . "$i"
+-            if ! [ "${ONBOOT}" = "no" ] || [ "${ONBOOT}" = "NO" ] \
+-                && [ -n "${TEAM_MASTER}${TEAM_CONFIG}${TEAM_PORT_CONFIG}" ]; then
+-                if [ -n "$TEAM_CONFIG" ] && [ -n "$DEVICE" ]; then
+-                    mkdir -p "$initdir"/etc/teamd
+-                    printf -- "%s" "$TEAM_CONFIG" > "$initdir/etc/teamd/${DEVICE}.conf"
+-                elif [ -n "$TEAM_PORT_CONFIG" ]; then
+-                    inst_simple "$i"
+-
+-                    HWADDR="$(echo "$HWADDR" | sed 'y/ABCDEF/abcdef/')"
+-                    if [ -n "$HWADDR" ]; then
+-                        ln_r "$i" "/etc/sysconfig/network-scripts/mac-${HWADDR}.conf"
+-                    fi
+-
+-                    SUBCHANNELS="$(echo "$SUBCHANNELS" | sed 'y/ABCDEF/abcdef/')"
+-                    if [ -n "$SUBCHANNELS" ]; then
+-                        ln_r "$i" "/etc/sysconfig/network-scripts/ccw-${SUBCHANNELS}.conf"
+-                    fi
+-                fi
+-            fi
+-        )
+-    done
+-
+-    inst_libdir_file {"tls/$DRACUT_ARCH/",tls/,"$DRACUT_ARCH/",}"libnss_dns.so.*" \
+-        {"tls/$DRACUT_ARCH/",tls/,"$DRACUT_ARCH/",}"libnss_mdns4_minimal.so.*"
+-}
+diff --git a/modules.d/35network-legacy/net-genrules.sh b/modules.d/35network-legacy/net-genrules.sh
+deleted file mode 100755
+index cd5a669a..00000000
+--- a/modules.d/35network-legacy/net-genrules.sh
++++ /dev/null
+@@ -1,125 +0,0 @@
+-#!/bin/sh
+-
+-getargbool 0 rd.neednet && NEEDNET=1
+-
+-# Don't continue if we don't need network
+-if [ -z "$netroot" ] && [ ! -e "/tmp/net.ifaces" ] && [ "$NEEDNET" != "1" ]; then
+-    return
+-fi
+-
+-command -v fix_bootif > /dev/null || . /lib/net-lib.sh
+-
+-# Write udev rules
+-{
+-    # bridge: attempt only the defined interface
+-    for i in /tmp/bridge.*.info; do
+-        [ -e "$i" ] || continue
+-        unset bridgeslaves
+-        unset bridgename
+-        # shellcheck disable=SC1090
+-        . "$i"
+-        RAW_IFACES="$RAW_IFACES $bridgeslaves"
+-        MASTER_IFACES="$MASTER_IFACES $bridgename"
+-    done
+-
+-    # bond: attempt only the defined interface (override bridge defines)
+-    for i in /tmp/bond.*.info; do
+-        [ -e "$i" ] || continue
+-        unset bondslaves
+-        unset bondname
+-        # shellcheck disable=SC1090
+-        . "$i"
+-        # It is enough to fire up only one
+-        RAW_IFACES="$RAW_IFACES $bondslaves"
+-        MASTER_IFACES="$MASTER_IFACES ${bondname}"
+-    done
+-
+-    for i in /tmp/team.*.info; do
+-        [ -e "$i" ] || continue
+-        unset teamslaves
+-        unset teammaster
+-        # shellcheck disable=SC1090
+-        . "$i"
+-        RAW_IFACES="$RAW_IFACES ${teamslaves}"
+-        MASTER_IFACES="$MASTER_IFACES ${teammaster}"
+-    done
+-
+-    for i in /tmp/vlan.*.phy; do
+-        [ -e "$i" ] || continue
+-        unset phydevice
+-        # shellcheck disable=SC1090
+-        . "$i"
+-        RAW_IFACES="$RAW_IFACES $phydevice"
+-        for j in /tmp/vlan.*".${phydevice}"; do
+-            [ -e "$j" ] || continue
+-            unset vlanname
+-            # shellcheck disable=SC1090
+-            . "$j"
+-            MASTER_IFACES="$MASTER_IFACES ${vlanname}"
+-        done
+-    done
+-
+-    MASTER_IFACES="$(trim "$MASTER_IFACES")"
+-    RAW_IFACES="$(trim "$RAW_IFACES")"
+-
+-    if [ -z "$IFACES" ]; then
+-        [ -e /tmp/net.ifaces ] && read -r IFACES < /tmp/net.ifaces
+-    fi
+-
+-    if [ -e /tmp/net.bootdev ]; then
+-        read -r bootdev < /tmp/net.bootdev
+-    fi
+-
+-    # shellcheck disable=SC2016
+-    ifup='/sbin/ifup $name'
+-
+-    runcmd="RUN+=\"/sbin/initqueue --name ifup-\$name --unique --onetime $ifup\""
+-
+-    # We have some specific interfaces to handle
+-    if [ -n "${RAW_IFACES}${IFACES}" ]; then
+-        echo 'SUBSYSTEM!="net", GOTO="net_end"'
+-        echo 'ACTION!="add|change|move", GOTO="net_end"'
+-        for iface in $IFACES $RAW_IFACES; do
+-            case "$iface" in
+-                ??:??:??:??:??:??) # MAC address
+-                    cond="ATTR{address}==\"$iface\""
+-                    echo "$cond, $runcmd, GOTO=\"net_end\""
+-                    ;;
+-                ??-??-??-??-??-??) # MAC address in BOOTIF form
+-                    cond="ATTR{address}==\"$(fix_bootif "$iface")\""
+-                    echo "$cond, $runcmd, GOTO=\"net_end\""
+-                    ;;
+-                *) # an interface name
+-                    cond="ENV{INTERFACE}==\"$iface\""
+-                    echo "$cond, $runcmd, GOTO=\"net_end\""
+-                    cond="NAME==\"$iface\""
+-                    echo "$cond, $runcmd, GOTO=\"net_end\""
+-                    ;;
+-            esac
+-            # The GOTO prevents us from trying to ifup the same device twice
+-        done
+-        echo 'LABEL="net_end"'
+-
+-        for iface in $IFACES; do
+-            if [ "$bootdev" = "$iface" ] || [ "$NEEDNET" = "1" ]; then
+-                if [ -n "$netroot" ] && [ -n "${DRACUT_SYSTEMD-}" ]; then
+-                    echo "systemctl is-active initrd-root-device.target || [ -f /tmp/net.${iface}.did-setup ]"
+-                else
+-                    echo "[ -f /tmp/net.${iface}.did-setup ]"
+-                fi > "$hookdir"/initqueue/finished/wait-"$iface".sh
+-            fi
+-        done
+-    # Default: We don't know the interface to use, handle all
+-    # Fixme: waiting for the interface as well.
+-    else
+-        cond='ACTION=="add", SUBSYSTEM=="net", ENV{DEVTYPE}!="wlan|wwan"'
+-        # if you change the name of "91-default-net.rules", also change modules.d/[0-9][0-9]cms/cmssetup.sh
+-        echo "$cond, $runcmd" > /etc/udev/rules.d/91-default-net.rules
+-        if [ "$NEEDNET" = "1" ]; then
+-            # shellcheck disable=SC2016
+-            echo 'for i in /tmp/net.*.did-setup; do [ -f "$i" ]  && exit 0; done; exit 1' > "$hookdir"/initqueue/finished/wait-network.sh
+-        fi
+-    fi
+-
+-    # if you change the name of "90-net.rules", also change modules.d/[0-9][0-9]cms/cmssetup.sh
+-} > /etc/udev/rules.d/90-net.rules
+diff --git a/modules.d/35network-legacy/parse-bond.sh b/modules.d/35network-legacy/parse-bond.sh
+deleted file mode 100755
+index ba30a3bc..00000000
+--- a/modules.d/35network-legacy/parse-bond.sh
++++ /dev/null
+@@ -1,76 +0,0 @@
+-#!/bin/sh
+-#
+-# Format:
+-#       bond=<bondname>[:<bondslaves>[:<options>[:<mtu>]]]
+-#
+-#       bondslaves is a comma-separated list of physical (ethernet) interfaces
+-#       options is a comma-separated list on bonding options (modinfo bonding for details) in format compatible with initscripts
+-#       if options include multi-valued arp_ip_target option, then its values should be separated by semicolon.
+-#
+-#       bond without parameters assumes bond=bond0:eth0,eth1:mode=balance-rr
+-#
+-#       if the mtu is specified, it will be set on the bond master
+-#
+-
+-# We translate list of slaves to space-separated here to make it easier to loop over them in ifup
+-# Ditto for bonding options
+-parsebond() {
+-    local v="${1}":
+-    set --
+-    while [ -n "$v" ]; do
+-        set -- "$@" "${v%%:*}"
+-        v=${v#*:}
+-    done
+-
+-    case $# in
+-        0)
+-            bondname=bond0
+-            bondslaves="eth0 eth1"
+-            ;;
+-        1)
+-            bondname=$1
+-            bondslaves="eth0 eth1"
+-            ;;
+-        2)
+-            bondname=$1
+-            bondslaves=$(str_replace "$2" "," " ")
+-            ;;
+-        3)
+-            bondname=$1
+-            bondslaves=$(str_replace "$2" "," " ")
+-            bondoptions=$(str_replace "$3" "," " ")
+-            ;;
+-        4)
+-            bondname=$1
+-            bondslaves=$(str_replace "$2" "," " ")
+-            bondoptions=$(str_replace "$3" "," " ")
+-            bondmtu=$4
+-            ;;
+-        *) die "bond= requires zero to four parameters" ;;
+-    esac
+-}
+-
+-# Parse bond for bondname, bondslaves, bondmode, bondoptions and bondmtu
+-for bond in $(getargs bond=); do
+-    unset bondname
+-    unset bondslaves
+-    unset bondoptions
+-    unset bondmtu
+-    if [ "$bond" != "bond" ]; then
+-        parsebond "$bond"
+-    fi
+-    # Simple default bond
+-    if [ -z "$bondname" ]; then
+-        bondname=bond0
+-        bondslaves="eth0 eth1"
+-    fi
+-    # Make it suitable for initscripts export
+-    bondoptions=$(str_replace "$bondoptions" ";" ",")
+-
+-    {
+-        echo "bondname=$bondname"
+-        echo "bondslaves=\"$bondslaves\""
+-        echo "bondoptions=\"$bondoptions\""
+-        echo "bondmtu=\"$bondmtu\""
+-    } > "/tmp/bond.${bondname}.info"
+-done
+diff --git a/modules.d/35network-legacy/parse-bridge.sh b/modules.d/35network-legacy/parse-bridge.sh
+deleted file mode 100755
+index d331f9d7..00000000
+--- a/modules.d/35network-legacy/parse-bridge.sh
++++ /dev/null
+@@ -1,49 +0,0 @@
+-#!/bin/sh
+-#
+-# Format:
+-#       bridge=<bridgename>:<bridgeslaves>
+-#
+-#       <bridgeslaves> is a comma-separated list of physical (ethernet) interfaces
+-#       bridge without parameters assumes bridge=br0:eth0
+-#
+-
+-parsebridge() {
+-    local v="${1}":
+-    set --
+-    while [ -n "$v" ]; do
+-        set -- "$@" "${v%%:*}"
+-        v=${v#*:}
+-    done
+-    case $# in
+-        0)
+-            bridgename=br0
+-            bridgeslaves=$iface
+-            ;;
+-        1) die "bridge= requires two parameters" ;;
+-        2)
+-            bridgename=$1
+-            bridgeslaves=$(str_replace "$2" "," " ")
+-            ;;
+-        *) die "bridge= requires two parameters" ;;
+-    esac
+-}
+-
+-# Parse bridge for bridgename and bridgeslaves
+-for bridge in $(getargs bridge=); do
+-    unset bridgename
+-    unset bridgeslaves
+-    iface=eth0
+-    # Read bridge= parameters if they exist
+-    if [ "$bridge" != "bridge" ]; then
+-        parsebridge "$bridge"
+-    fi
+-    # Simple default bridge
+-    if [ -z "$bridgename" ]; then
+-        bridgename=br0
+-        bridgeslaves=$iface
+-    fi
+-    {
+-        echo "bridgename=$bridgename"
+-        echo "bridgeslaves=\"$bridgeslaves\""
+-    } > "/tmp/bridge.${bridgename}.info"
+-done
+diff --git a/modules.d/35network-legacy/parse-ibft.sh b/modules.d/35network-legacy/parse-ibft.sh
+deleted file mode 100755
+index 1937f138..00000000
+--- a/modules.d/35network-legacy/parse-ibft.sh
++++ /dev/null
+@@ -1,10 +0,0 @@
+-#!/bin/sh
+-
+-command -v getarg > /dev/null || . /lib/dracut-lib.sh
+-command -v ibft_to_cmdline > /dev/null || . /lib/net-lib.sh
+-
+-if getargbool 0 rd.iscsi.ibft -d "ip=ibft"; then
+-    modprobe -b -q iscsi_boot_sysfs 2> /dev/null
+-    modprobe -b -q iscsi_ibft
+-    ibft_to_cmdline
+-fi
+diff --git a/modules.d/35network-legacy/parse-ifname.sh b/modules.d/35network-legacy/parse-ifname.sh
+deleted file mode 100755
+index be7b6ad6..00000000
+--- a/modules.d/35network-legacy/parse-ifname.sh
++++ /dev/null
+@@ -1,24 +0,0 @@
+-#!/bin/sh
+-#
+-# Format:
+-#       ifname=<interface>:<mac>
+-#
+-# Note letters in the macaddress must be lowercase!
+-#
+-# Examples:
+-# ifname=eth0:4a:3f:4c:04:f8:d7
+-#
+-# Note when using ifname= to get persistent interface names, you must specify
+-# an ifname= argument for each interface used in an ip= or fcoe= argument
+-
+-# check if there are any ifname parameters
+-if ! getarg ifname= > /dev/null; then
+-    return
+-fi
+-
+-command -v parse_ifname_opts > /dev/null || . /lib/net-lib.sh
+-
+-# Check ifname= lines
+-for p in $(getargs ifname=); do
+-    parse_ifname_opts "$p"
+-done
+diff --git a/modules.d/35network-legacy/parse-ip-opts.sh b/modules.d/35network-legacy/parse-ip-opts.sh
+deleted file mode 100755
+index eea71e40..00000000
+--- a/modules.d/35network-legacy/parse-ip-opts.sh
++++ /dev/null
+@@ -1,151 +0,0 @@
+-#!/bin/sh
+-#
+-# Format:
+-#       ip=[dhcp|on|any|single-dhcp]
+-#
+-#       ip=<interface>:[dhcp|on|any][:[<mtu>][:<macaddr>]]
+-#
+-#       ip=<client-IP-number>:<server-IP-number>:<gateway-IP-number>:<netmask>:<client-hostname>:<interface>:{dhcp|on|any|none|off}[:[<mtu>][:<macaddr>]]
+-#
+-# When supplying more than only ip= line, <interface> is mandatory and
+-# bootdev= must contain the name of the primary interface to use for
+-# routing,dns,dhcp-options,etc.
+-#
+-
+-# we really need to use `expr substr` with dash
+-# shellcheck disable=SC2003 disable=SC2308
+-
+-command -v getarg > /dev/null || . /lib/dracut-lib.sh
+-
+-if [ -n "$netroot" ] && [ -z "$(getarg ip=)" ] && [ -z "$(getarg BOOTIF=)" ]; then
+-    # No ip= argument(s) for netroot provided, defaulting to DHCP
+-    return
+-fi
+-
+-# Count ip= lines to decide whether we need bootdev= or not
+-if [ -z "$NEEDBOOTDEV" ]; then
+-    count=0
+-    for p in $(getargs ip=); do
+-        case "$p" in
+-            ibft)
+-                continue
+-                ;;
+-        esac
+-        count=$((count + 1))
+-    done
+-    [ $count -gt 1 ] && NEEDBOOTDEV=1
+-fi
+-unset count
+-
+-# If needed, check if bootdev= contains anything usable
+-BOOTDEV=$(getarg bootdev=)
+-
+-if [ -n "$NEEDBOOTDEV" ] && getargbool 1 rd.neednet; then
+-    #[ -z "$BOOTDEV" ] && warn "Please supply bootdev argument for multiple ip= lines"
+-    echo "rd.neednet=1" > /etc/cmdline.d/20-dracut-neednet.conf
+-    info "Multiple ip= arguments: assuming rd.neednet=1"
+-else
+-    unset NEEDBOOTDEV
+-fi
+-
+-# Check ip= lines
+-# XXX Would be nice if we could errorcheck ip addresses here as well
+-for p in $(getargs ip=); do
+-    ip_to_var "$p"
+-
+-    # make first device specified the BOOTDEV
+-    if [ -n "$NEEDBOOTDEV" ] && [ -z "$BOOTDEV" ] && [ -n "$dev" ]; then
+-        BOOTDEV="$dev"
+-        info "Setting bootdev to '$BOOTDEV'"
+-    fi
+-
+-    # skip ibft since we did it above
+-    [ "$autoconf" = "ibft" ] && continue
+-
+-    # Empty autoconf defaults to 'dhcp'
+-    if [ -z "$autoconf" ]; then
+-        warn "Empty autoconf values default to dhcp"
+-        autoconf="dhcp"
+-    fi
+-
+-    # Error checking for autoconf in combination with other values
+-    for autoopt in $(str_replace "$autoconf" "," " "); do
+-        case $autoopt in
+-            error) die "Error parsing option 'ip=$p'" ;;
+-            bootp | rarp | both) die "Sorry, ip=$autoopt is currently unsupported" ;;
+-            none | off)
+-                [ -z "$ip" ] \
+-                    && die "For argument 'ip=$p'\nValue '$autoopt' without static configuration does not make sense"
+-                [ -z "$mask" ] \
+-                    && die "Sorry, automatic calculation of netmask is not yet supported"
+-                ;;
+-            auto6 | link6) ;;
+-            either6) ;;
+-            dhcp | dhcp6 | on | any | single-dhcp)
+-                [ -n "$NEEDBOOTDEV" ] && [ -z "$dev" ] \
+-                    && die "Sorry, 'ip=$p' does not make sense for multiple interface configurations"
+-                [ -n "$ip" ] \
+-                    && die "For argument 'ip=$p'\nSorry, setting client-ip does not make sense for '$autoopt'"
+-                ;;
+-            *) die "For argument 'ip=$p'\nSorry, unknown value '$autoopt'" ;;
+-        esac
+-    done
+-
+-    if [ -n "$dev" ]; then
+-        # We don't like duplicate device configs
+-        if [ -n "$IFACES" ]; then
+-            for i in $IFACES; do
+-                [ "$dev" = "$i" ] && die "For argument 'ip=$p'\nDuplication configurations for '$dev'"
+-            done
+-        fi
+-        # IFACES list for later use
+-        IFACES="$IFACES $dev"
+-
+-        # Interface should exist
+-        if [ ! -e "/sys/class/net/$dev" ]; then
+-            warn "Network interface '$dev' does not exist"
+-        fi
+-    fi
+-
+-    # Do we need to check for specific options?
+-    if [ -n "$NEEDDHCP" ] || [ -n "$DHCPORSERVER" ]; then
+-        # Correct device? (Empty is ok as well)
+-        [ "$dev" = "$BOOTDEV" ] || continue
+-        # Server-ip is there?
+-        [ -n "$DHCPORSERVER" ] && [ -n "$srv" ] && continue
+-        # dhcp? (It's simpler to check for a set ip. Checks above ensure that if
+-        # ip is there, we're static
+-        [ -z "$ip" ] && continue
+-        # Not good!
+-        die "Server-ip or dhcp for netboot needed, but current arguments say otherwise"
+-    fi
+-
+-    if str_starts "$dev" "enx" && [ ${#dev} -eq 15 ]; then
+-        # shellcheck disable=SC2003
+-        printf -- "ifname=%s:%s:%s:%s:%s:%s:%s\n" \
+-            "$dev" \
+-            "$(expr substr "$dev" 3 2)" \
+-            "$(expr substr "$dev" 5 2)" \
+-            "$(expr substr "$dev" 7 2)" \
+-            "$(expr substr "$dev" 9 2)" \
+-            "$(expr substr "$dev" 11 2)" \
+-            "$(expr substr "$dev" 13 2)" \
+-            >> /etc/cmdline.d/20-enx.conf
+-    fi
+-done
+-
+-# put BOOTIF in IFACES to make sure it comes up
+-if getargbool 1 "rd.bootif" && BOOTIF="$(getarg BOOTIF=)"; then
+-    BOOTDEV=$(fix_bootif "$BOOTIF")
+-    IFACES="$BOOTDEV $IFACES"
+-fi
+-
+-# This ensures that BOOTDEV is always first in IFACES
+-if [ -n "$BOOTDEV" ] && [ -n "$IFACES" ]; then
+-    IFACES="${IFACES%"$BOOTDEV"*} ${IFACES#*"$BOOTDEV"}"
+-    IFACES="$BOOTDEV $IFACES"
+-fi
+-
+-# Store BOOTDEV and IFACES for later use
+-[ -n "$BOOTDEV" ] && echo "$BOOTDEV" > /tmp/net.bootdev
+-[ -n "$IFACES" ] && echo "$IFACES" > /tmp/net.ifaces
+diff --git a/modules.d/35network-legacy/parse-team.sh b/modules.d/35network-legacy/parse-team.sh
+deleted file mode 100755
+index 83badc99..00000000
+--- a/modules.d/35network-legacy/parse-team.sh
++++ /dev/null
+@@ -1,66 +0,0 @@
+-#!/bin/sh
+-#
+-# Format:
+-#       team=<teammaster>:<teamslaves>[:<teamrunner>]
+-#
+-#       teamslaves is a comma-separated list of physical (ethernet) interfaces
+-#       teamrunner is the runner type to be used (see teamd.conf(5)); defaults to activebackup
+-#
+-#       team without parameters assumes team=team0:eth0,eth1:activebackup
+-#
+-
+-parseteam() {
+-    local v="${1}":
+-    set --
+-    while [ -n "$v" ]; do
+-        set -- "$@" "${v%%:*}"
+-        v=${v#*:}
+-    done
+-
+-    case $# in
+-        0)
+-            teammaster=team0
+-            teamslaves="eth0 eth1"
+-            teamrunner="activebackup"
+-            ;;
+-        1)
+-            teammaster=$1
+-            teamslaves="eth0 eth1"
+-            teamrunner="activebackup"
+-            ;;
+-        2)
+-            teammaster=$1
+-            teamslaves=$(str_replace "$2" "," " ")
+-            teamrunner="activebackup"
+-            ;;
+-        3)
+-            teammaster=$1
+-            teamslaves=$(str_replace "$2" "," " ")
+-            teamrunner=$3
+-            ;;
+-        *) die "team= requires zero to three parameters" ;;
+-    esac
+-    return 0
+-}
+-
+-for team in $(getargs team); do
+-    [ "$team" = "team" ] && continue
+-
+-    unset teammaster
+-    unset teamslaves
+-    unset teamrunner
+-
+-    parseteam "$team" || continue
+-
+-    {
+-        echo "teammaster=$teammaster"
+-        echo "teamslaves=\"$teamslaves\""
+-        echo "teamrunner=\"$teamrunner\""
+-    } > /tmp/team."${teammaster}".info
+-
+-    if ! [ -e /etc/teamd/"${teammaster}".conf ]; then
+-        warn "Team master $teammaster specified, but no /etc/teamd/$teammaster.conf present. Using $teamrunner."
+-        mkdir -p /etc/teamd
+-        printf -- "%s" "{\"runner\": {\"name\": \"$teamrunner\"}, \"link_watch\": {\"name\": \"ethtool\"}}" > "/tmp/${teammaster}.conf"
+-    fi
+-done
+diff --git a/modules.d/35network-legacy/parse-vlan.sh b/modules.d/35network-legacy/parse-vlan.sh
+deleted file mode 100755
+index c23f8331..00000000
+--- a/modules.d/35network-legacy/parse-vlan.sh
++++ /dev/null
+@@ -1,37 +0,0 @@
+-#!/bin/sh
+-#
+-# Format:
+-#	vlan=<vlanname>:<phydevice>
+-#
+-
+-parsevlan() {
+-    local v="${1}":
+-    set --
+-    while [ -n "$v" ]; do
+-        set -- "$@" "${v%%:*}"
+-        v=${v#*:}
+-    done
+-
+-    unset vlanname phydevice
+-    case $# in
+-        2)
+-            vlanname=$1
+-            phydevice=$2
+-            ;;
+-        *) die "vlan= requires two parameters" ;;
+-    esac
+-}
+-
+-for vlan in $(getargs vlan=); do
+-    unset vlanname
+-    unset phydevice
+-    if [ ! "$vlan" = "vlan" ]; then
+-        parsevlan "$vlan"
+-    fi
+-
+-    echo "phydevice=\"$phydevice\"" > /tmp/vlan."${phydevice}".phy
+-    {
+-        echo "vlanname=\"$vlanname\""
+-        echo "phydevice=\"$phydevice\""
+-    } > /tmp/vlan."${vlanname}"."${phydevice}"
+-done
+-- 
+2.55.0
+

diff --git a/0008-fix-systemd-cryptsetup-load-libcryptsetup-via-dlopen.patch b/0008-fix-systemd-cryptsetup-load-libcryptsetup-via-dlopen.patch
deleted file mode 100644
index e9a6af3..0000000
--- a/0008-fix-systemd-cryptsetup-load-libcryptsetup-via-dlopen.patch
+++ /dev/null
@@ -1,59 +0,0 @@
-From 763296d6423cad091b33291cee8e34c2aea3d0ca Mon Sep 17 00:00:00 2001
-From: Antonio Alvarez Feijoo <antonio.feijoo@suse.com>
-Date: Thu, 23 Apr 2026 10:18:59 +0200
-Subject: [PATCH 8/8] fix(systemd-cryptsetup): load libcryptsetup via dlopen
-
-The `systemd-cryptsetup` binary no longer depends on `libcryptsetup`, and there
-is no other binary installed with the `systemd-cryptsetup` or `crypt` modules
-that installs it.
-
-```
-switch_root:/root# systemd-cryptsetup --version | head -1
-systemd 261 (261~devel+git20260423.43dab5ea8)
-switch_root:/root# systemd-cryptsetup help
-Shared library 'libcryptsetup.so.12' is not available: libcryptsetup.so.12: cannot open shared object file: No such file or directory
-switch_root:/root# echo $?
-1
-```
-
-Required since https://github.com/systemd/systemd/commit/43dab5ea8797e45e0702f8ee89cdf25e577a652b
-
-(cherry picked from commit 60a5e034604d9740d460881ff1d03794b9a9b08a)
-
-Resolves: rhbz#2481748
----
- modules.d/11systemd-cryptsetup/module-setup.sh | 11 +++++++++++
- 1 file changed, 11 insertions(+)
-
-diff --git a/modules.d/11systemd-cryptsetup/module-setup.sh b/modules.d/11systemd-cryptsetup/module-setup.sh
-index 6bb0a42f..09c2082f 100755
---- a/modules.d/11systemd-cryptsetup/module-setup.sh
-+++ b/modules.d/11systemd-cryptsetup/module-setup.sh
-@@ -42,6 +42,11 @@ depends() {
-     return 0
- }
- 
-+# called by dracut
-+config() {
-+    add_dlopen_features+=" libsystemd-shared-*.so:cryptsetup "
-+}
-+
- # called by dracut
- install() {
-     # the cryptsetup targets are already pulled in by 00systemd, but not
-@@ -56,6 +61,12 @@ install() {
-         "$systemdsystemunitdir"/remote-cryptsetup.target \
-         "$systemdsystemunitdir"/initrd-root-device.target.wants/remote-cryptsetup.target
- 
-+    # Install required libraries.
-+    if [[ ! $USE_SYSTEMD_DLOPEN_DEPS ]]; then
-+        inst_libdir_file \
-+            {"tls/$DRACUT_ARCH/",tls/,"$DRACUT_ARCH/",}"libcryptsetup.so.*"
-+    fi
-+
-     if [[ $hostonly ]] && [[ -f $initdir/etc/crypttab ]]; then
-         # for each entry in /etc/crypttab check if the key file is backed by a socket unit and if so,
-         # include it along with its corresponding service unit.
--- 
-2.54.0
-

diff --git a/0009-feat-systemd-sysext-include-systemd-sys-conf-ext-sys.patch b/0009-feat-systemd-sysext-include-systemd-sys-conf-ext-sys.patch
deleted file mode 100644
index 6a18245..0000000
--- a/0009-feat-systemd-sysext-include-systemd-sys-conf-ext-sys.patch
+++ /dev/null
@@ -1,71 +0,0 @@
-From 3771f52df17d0f80205a11cf0c3bd375f4923d91 Mon Sep 17 00:00:00 2001
-From: Vitaly Kuznetsov <vkuznets@redhat.com>
-Date: Fri, 10 Apr 2026 14:55:30 +0200
-Subject: [PATCH 9/9] feat(systemd-sysext): include
- systemd-{sys,conf}ext-sysroot services
-
-systemd v261 introduces a pair of new systemd-{sys,conf}ext-sysroot services
-that are used to merge system and configuration extensions for the main system
-from the initramfs. This allows the extensions to update any part of the main
-system, including services that run during early boot.
-
-Include these services in the initramfs. systemd enables them by
-default (through 90-systemd-initrd.preset), but dracut does not yet support
-systemd presets, so these services are enabled manually. If the newly
-introduced logic is undesirable for any reason, systemd provides the
-'systemd.{sys,conf}ext=' kernel command-line options, meaning dracut does not
-need its own.
-
-(cherry picked from commit 420977f82467d048927a82bf9625132f79e028cd)
----
- modules.d/11systemd-sysext/module-setup.sh | 19 +++++++++++++++----
- 1 file changed, 15 insertions(+), 4 deletions(-)
-
-diff --git a/modules.d/11systemd-sysext/module-setup.sh b/modules.d/11systemd-sysext/module-setup.sh
-index fd26fd61..f0af9774 100755
---- a/modules.d/11systemd-sysext/module-setup.sh
-+++ b/modules.d/11systemd-sysext/module-setup.sh
-@@ -44,17 +44,24 @@ install() {
-         "/usr/lib/extension-release.d/extension-release.*" \
-         "$systemdsystemunitdir"/systemd-confext${_suffix}.service \
-         "$systemdsystemunitdir/systemd-confext${_suffix}.service.d/*.conf" \
-+        "$systemdsystemunitdir"/systemd-confext-sysroot.service \
-+        "$systemdsystemunitdir/systemd-confext-sysroot.service.d/*.conf" \
-         "$systemdsystemunitdir"/systemd-sysext${_suffix}.service \
-         "$systemdsystemunitdir/systemd-sysext${_suffix}.service.d/*.conf" \
-+        "$systemdsystemunitdir"/systemd-sysext-sysroot.service \
-+        "$systemdsystemunitdir/systemd-sysext-sysroot.service.d/*.conf" \
-         "$systemdsystemunitdir"/initrd.target.wants/systemd-confext${_suffix}.service \
-         "$systemdsystemunitdir"/initrd.target.wants/systemd-sysext${_suffix}.service \
-         systemd-confext systemd-sysext
- 
--    # Enable systemd type unit(s) for systemd < v258 which doesn't ship
--    # initrd.target.wants symlinks.
-+    # Enable systemd-{confext, sysext} systemd type unit(s) for systemd < v258
-+    # which doesn't ship initrd.target.wants symlinks and systemd-{confext,sysext}-sysroot.service
-+    # which are enabled through systemd-initrd.preset.
-     for i in \
-         systemd-confext.service \
--        systemd-sysext.service; do
-+        systemd-sysext.service \
-+        systemd-confext-sysroot.service \
-+        systemd-sysext-sysroot.service; do
-         if [[ -e "$initdir$systemdsystemunitdir"/"$i" ]]; then
-             $SYSTEMCTL -q --root "$initdir" enable "$i"
-         fi
-@@ -67,7 +74,11 @@ install() {
-             "$systemdsystemconfdir"/systemd-confext${_suffix}.service \
-             "$systemdsystemconfdir/systemd-confext${_suffix}.service.d/*.conf" \
-             "$systemdsystemconfdir"/systemd-sysext${_suffix}.service \
--            "$systemdsystemconfdir/systemd-sysext${_suffix}.service.d/*.conf"
-+            "$systemdsystemconfdir/systemd-sysext${_suffix}.service.d/*.conf" \
-+            "$systemdsystemconfdir"/systemd-confext-sysroot.service \
-+            "$systemdsystemconfdir/systemd-confext-sysroot.service.d/*.conf" \
-+            "$systemdsystemconfdir"/systemd-sysext-sysroot.service \
-+            "$systemdsystemconfdir/systemd-sysext-sysroot.service.d/*.conf"
-     fi
- 
- }
--- 
-2.54.0
-

diff --git a/0009-fix-iscsi-replace-echo-writes-with-printf-to-prevent.patch b/0009-fix-iscsi-replace-echo-writes-with-printf-to-prevent.patch
new file mode 100644
index 0000000..86e9b2c
--- /dev/null
+++ b/0009-fix-iscsi-replace-echo-writes-with-printf-to-prevent.patch
@@ -0,0 +1,97 @@
+From aadea48ad5b46e25b758cb419eb085533f9fa31f Mon Sep 17 00:00:00 2001
+From: Pavel Valena <pvalena@redhat.com>
+Date: Thu, 7 May 2026 00:45:31 +0200
+Subject: [PATCH 09/12] fix(iscsi): replace `echo` writes with `printf` to
+ prevent variable injection
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Use printf with explicit variable escaping `%q` for shell scripts:
+  - mount-lun.sh hookdir script (iscsi_lun variable)
+  - udev rule (iscsi_lun sanitized via tr -d '"')
+  - initiatorname.iscsi (sourced as shell at iscsiroot.sh:161-163)
+
+Note: initiatorname.iscsi is also read by iscsid as plain text (no
+shell unquoting). For valid IQNs ([a-z0-9.:_-]), %q is a no-op, so
+iscsid sees the value unchanged. For malicious values with special
+characters, %q would produce shell escaping that iscsid reads
+literally — breaking the connection rather than allowing injection.
+---
+ modules.d/74iscsi/iscsiroot.sh       | 10 +++++-----
+ modules.d/74iscsi/parse-iscsiroot.sh |  4 ++--
+ 2 files changed, 7 insertions(+), 7 deletions(-)
+
+diff --git a/modules.d/74iscsi/iscsiroot.sh b/modules.d/74iscsi/iscsiroot.sh
+index 50b10259..50030e20 100755
+--- a/modules.d/74iscsi/iscsiroot.sh
++++ b/modules.d/74iscsi/iscsiroot.sh
+@@ -144,7 +144,7 @@ handle_netroot() {
+ 
+     if [ -z "$iscsi_initiator" ] && [ -f /sys/firmware/ibft/initiator/initiator-name ] && ! [ -f /tmp/iscsi_set_initiator ]; then
+         iscsi_initiator=$(while read -r line || [ -n "$line" ]; do echo "$line"; done < /sys/firmware/ibft/initiator/initiator-name)
+-        echo "InitiatorName=$iscsi_initiator" > /run/initiatorname.iscsi
++        printf 'InitiatorName=%q\n' "$iscsi_initiator" > /run/initiatorname.iscsi
+         rm -f /etc/iscsi/initiatorname.iscsi
+         mkdir -p /etc/iscsi
+         ln -fs /run/initiatorname.iscsi /etc/iscsi/initiatorname.iscsi
+@@ -165,7 +165,7 @@ handle_netroot() {
+ 
+     if [ -z "$iscsi_initiator" ]; then
+         iscsi_initiator=$(iscsi-iname)
+-        echo "InitiatorName=$iscsi_initiator" > /run/initiatorname.iscsi
++        printf 'InitiatorName=%q\n' "$iscsi_initiator" > /run/initiatorname.iscsi
+         rm -f /etc/iscsi/initiatorname.iscsi
+         mkdir -p /etc/iscsi
+         ln -fs /run/initiatorname.iscsi /etc/iscsi/initiatorname.iscsi
+@@ -189,7 +189,7 @@ handle_netroot() {
+         iscsi_lun=0
+     fi
+ 
+-    echo "InitiatorName=$iscsi_initiator" > /run/initiatorname.iscsi
++    printf 'InitiatorName=%q\n' "$iscsi_initiator" > /run/initiatorname.iscsi
+     ln -fs /run/initiatorname.iscsi /dev/.initiatorname.iscsi
+     if ! [ -e /etc/iscsi/initiatorname.iscsi ]; then
+         mkdir -p /etc/iscsi
+@@ -210,14 +210,14 @@ handle_netroot() {
+ 
+     if [ "$root" = "dhcp" ] || [ "$netroot" = "dhcp" ]; then
+         # if root is not specified try to mount the whole iSCSI LUN
+-        printf 'SYMLINK=="disk/by-path/*-iscsi-*-%s", SYMLINK+="root"\n' "$iscsi_lun" >> /etc/udev/rules.d/99-iscsi-root.rules
++        printf 'SYMLINK=="disk/by-path/*-iscsi-*-%s", SYMLINK+="root"\n' "$(printf '%s' "$iscsi_lun" | tr -d '"')" >> /etc/udev/rules.d/99-iscsi-root.rules
+         udevadm control --reload
+         write_fs_tab /dev/root
+         wait_for_dev -n /dev/root
+ 
+         # install mount script
+         [ -z "${DRACUT_SYSTEMD-}" ] \
+-            && echo "iscsi_lun=$iscsi_lun . /bin/mount-lun.sh " > "$hookdir"/mount/01-$$-iscsi.sh
++            && printf 'iscsi_lun=%q . /bin/mount-lun.sh\n' "$iscsi_lun" > "$hookdir"/mount/01-$$-iscsi.sh
+     fi
+ 
+     if strglobin "$iscsi_target_ip" '*:*:*' && ! strglobin "$iscsi_target_ip" '['; then
+diff --git a/modules.d/74iscsi/parse-iscsiroot.sh b/modules.d/74iscsi/parse-iscsiroot.sh
+index 0b12d35b..95860804 100755
+--- a/modules.d/74iscsi/parse-iscsiroot.sh
++++ b/modules.d/74iscsi/parse-iscsiroot.sh
+@@ -111,7 +111,7 @@ fi
+ 
+ if arg=$(getarg rd.iscsi.initiator -d iscsi_initiator=) && [ -n "$arg" ] && ! [ -f /run/initiatorname.iscsi ]; then
+     iscsi_initiator=$arg
+-    echo "InitiatorName=$iscsi_initiator" > /run/initiatorname.iscsi
++    printf 'InitiatorName=%q\n' "$iscsi_initiator" > /run/initiatorname.iscsi
+     ln -fs /run/initiatorname.iscsi /dev/.initiatorname.iscsi
+     rm -f /etc/iscsi/initiatorname.iscsi
+     mkdir -p /etc/iscsi
+@@ -127,7 +127,7 @@ fi
+ if [ -z "$iscsi_initiator" ] && [ -f /sys/firmware/ibft/initiator/initiator-name ] && ! [ -f /tmp/iscsi_set_initiator ]; then
+     iscsi_initiator=$(while read -r line || [ -n "$line" ]; do echo "$line"; done < /sys/firmware/ibft/initiator/initiator-name)
+     if [ -n "$iscsi_initiator" ]; then
+-        echo "InitiatorName=$iscsi_initiator" > /run/initiatorname.iscsi
++        printf 'InitiatorName=%q\n' "$iscsi_initiator" > /run/initiatorname.iscsi
+         rm -f /etc/iscsi/initiatorname.iscsi
+         mkdir -p /etc/iscsi
+         ln -fs /run/initiatorname.iscsi /etc/iscsi/initiatorname.iscsi
+-- 
+2.55.0
+

diff --git a/0010-fix-base-escape-arguments-in-initqueue-hook-script-g.patch b/0010-fix-base-escape-arguments-in-initqueue-hook-script-g.patch
new file mode 100644
index 0000000..0d1cde9
--- /dev/null
+++ b/0010-fix-base-escape-arguments-in-initqueue-hook-script-g.patch
@@ -0,0 +1,71 @@
+From b2aefb19d596a64d481b9bd916b053abf81037c7 Mon Sep 17 00:00:00 2001
+From: Pavel Valena <pvalena@redhat.com>
+Date: Thu, 14 May 2026 14:20:17 +0200
+Subject: [PATCH 10/12] fix(base): escape arguments in initqueue hook script
+ generation
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+initqueue.sh writes arguments directly into generated hook scripts
+via `echo "$exe" "$@"`. These scripts are later sourced by
+dracut-initqueue.sh, so shell metacharacters in arguments (e.g.
+DHCP-derived $netroot passed from parse-iscsiroot.sh) execute as
+root in initramfs.
+
+Replace `echo` with `printf '%q'` to shell-escape all arguments
+before writing them into the hook script, preventing command
+injection via DHCP-controlled netroot values.
+
+Remove the fragile embedded single-quote wrapping ("'$var'") from
+parse-iscsiroot.sh call sites (lines 90, 102) — those relied on
+echo writing quotes verbatim for the shell to strip when sourcing.
+With printf '%q', initqueue now handles escaping centrally, so the
+manual wrapping is no longer needed and would cause literal quote
+characters to leak into iscsiroot arguments.
+
+Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
+---
+ modules.d/74iscsi/parse-iscsiroot.sh | 4 ++--
+ modules.d/77initqueue/initqueue.sh   | 3 ++-
+ 2 files changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/modules.d/74iscsi/parse-iscsiroot.sh b/modules.d/74iscsi/parse-iscsiroot.sh
+index 95860804..b87f19a1 100755
+--- a/modules.d/74iscsi/parse-iscsiroot.sh
++++ b/modules.d/74iscsi/parse-iscsiroot.sh
+@@ -89,7 +89,7 @@ if [ -n "$iscsi_firmware" ]; then
+     echo "${DRACUT_SYSTEMD+systemctl is-active initrd-root-device.target || }[ -f '/tmp/iscsistarted-firmware' ]" > "$hookdir"/initqueue/finished/iscsi_started.sh
+     /sbin/initqueue --unique --online /sbin/iscsiroot online "iscsi:" "$NEWROOT"
+     /sbin/initqueue --unique --onetime --timeout /sbin/iscsiroot timeout "iscsi:" "$NEWROOT"
+-    /sbin/initqueue --unique --onetime --settled /sbin/iscsiroot online "iscsi:" "'$NEWROOT'"
++    /sbin/initqueue --unique --onetime --settled /sbin/iscsiroot online "iscsi:" "$NEWROOT"
+ fi
+ 
+ # ISCSI actually supported?
+@@ -105,7 +105,7 @@ modprobe -b -q be2iscsi
+ 
+ if [ -n "$netroot" ] && [ "$root" != "/dev/root" ] && [ "$root" != "dhcp" ]; then
+     if ! getargbool 1 rd.neednet > /dev/null || ! getarg "ip="; then
+-        /sbin/initqueue --unique --onetime --settled /sbin/iscsiroot dummy "'$netroot'" "'$NEWROOT'"
++        /sbin/initqueue --unique --onetime --settled /sbin/iscsiroot dummy "$netroot" "$NEWROOT"
+     fi
+ fi
+ 
+diff --git a/modules.d/77initqueue/initqueue.sh b/modules.d/77initqueue/initqueue.sh
+index 46a00d2a..1caa5273 100755
+--- a/modules.d/77initqueue/initqueue.sh
++++ b/modules.d/77initqueue/initqueue.sh
+@@ -64,7 +64,8 @@ fi
+     # shellcheck disable=SC2016
+     [ -n "$onetime" ] && echo '[ -e "$job" ] && rm -f -- "$job"'
+     [ -n "$env" ] && echo "$env"
+-    echo "$exe" "$@"
++    printf '%q ' "$exe" "$@"
++    printf '\n'
+ } > "/tmp/$$-${job}.sh"
+ 
+ mv -f "/tmp/$$-${job}.sh" "$hookdir/initqueue${qname}/${job}.sh"
+-- 
+2.55.0
+

diff --git a/0010-fix-network-legacy-remove-network-legacy-completely-.patch b/0010-fix-network-legacy-remove-network-legacy-completely-.patch
deleted file mode 100644
index 10c3b02..0000000
--- a/0010-fix-network-legacy-remove-network-legacy-completely-.patch
+++ /dev/null
@@ -1,1753 +0,0 @@
-From 2b6302d54965dd354768e5f8509a5e9eb5853754 Mon Sep 17 00:00:00 2001
-From: Pavel Valena <pvalena@redhat.com>
-Date: Thu, 7 May 2026 00:40:31 +0200
-Subject: [PATCH 10/14] fix(network-legacy): remove network-legacy completely
- from the codebase
-
-(To not rely solely on a dracut.spec file.)
----
- modules.d/35network-legacy/dhclient-script.sh | 275 ---------
- modules.d/35network-legacy/dhclient.conf      |  11 -
- modules.d/35network-legacy/dhcp-multi.sh      | 133 -----
- modules.d/35network-legacy/ifup.sh            | 562 ------------------
- modules.d/35network-legacy/kill-dhclient.sh   |  15 -
- modules.d/35network-legacy/module-setup.sh    |  94 ---
- modules.d/35network-legacy/net-genrules.sh    | 125 ----
- modules.d/35network-legacy/parse-bond.sh      |  76 ---
- modules.d/35network-legacy/parse-bridge.sh    |  49 --
- modules.d/35network-legacy/parse-ibft.sh      |  10 -
- modules.d/35network-legacy/parse-ifname.sh    |  24 -
- modules.d/35network-legacy/parse-ip-opts.sh   | 151 -----
- modules.d/35network-legacy/parse-team.sh      |  66 --
- modules.d/35network-legacy/parse-vlan.sh      |  37 --
- 14 files changed, 1628 deletions(-)
- delete mode 100755 modules.d/35network-legacy/dhclient-script.sh
- delete mode 100644 modules.d/35network-legacy/dhclient.conf
- delete mode 100755 modules.d/35network-legacy/dhcp-multi.sh
- delete mode 100755 modules.d/35network-legacy/ifup.sh
- delete mode 100755 modules.d/35network-legacy/kill-dhclient.sh
- delete mode 100755 modules.d/35network-legacy/module-setup.sh
- delete mode 100755 modules.d/35network-legacy/net-genrules.sh
- delete mode 100755 modules.d/35network-legacy/parse-bond.sh
- delete mode 100755 modules.d/35network-legacy/parse-bridge.sh
- delete mode 100755 modules.d/35network-legacy/parse-ibft.sh
- delete mode 100755 modules.d/35network-legacy/parse-ifname.sh
- delete mode 100755 modules.d/35network-legacy/parse-ip-opts.sh
- delete mode 100755 modules.d/35network-legacy/parse-team.sh
- delete mode 100755 modules.d/35network-legacy/parse-vlan.sh
-
-diff --git a/modules.d/35network-legacy/dhclient-script.sh b/modules.d/35network-legacy/dhclient-script.sh
-deleted file mode 100755
-index 6751f2d6..00000000
---- a/modules.d/35network-legacy/dhclient-script.sh
-+++ /dev/null
-@@ -1,275 +0,0 @@
--#!/bin/sh
--
--PATH=/usr/sbin:/usr/bin:/sbin:/bin
--
--command -v getarg > /dev/null || . /lib/dracut-lib.sh
--command -v ip_to_var > /dev/null || . /lib/net-lib.sh
--
--# We already need a set netif here
--netif=$interface
--
--setup_interface() {
--    ip=$new_ip_address
--    mtu=$new_interface_mtu
--    mask=$new_subnet_mask
--    bcast=$new_broadcast_address
--    gw=${new_routers%%,*}
--    domain=$new_domain_name
--    # get rid of control chars
--    search=$(printf -- "%s" "$new_domain_search" | tr -d '[:cntrl:]')
--    namesrv=$new_domain_name_servers
--    hostname=$new_host_name
--    [ -n "$new_dhcp_lease_time" ] && lease_time=$new_dhcp_lease_time
--    [ -n "$new_max_life" ] && lease_time=$new_max_life
--    preferred_lft=$lease_time
--    [ -n "$new_preferred_life" ] && preferred_lft=$new_preferred_life
--
--    # shellcheck disable=SC1090
--    [ -f /tmp/net."$netif".override ] && . /tmp/net."$netif".override
--
--    # Taken from debian dhclient-script:
--    # The 576 MTU is only used for X.25 and dialup connections
--    # where the admin wants low latency.  Such a low MTU can cause
--    # problems with UDP traffic, among other things.  As such,
--    # disallow MTUs from 576 and below by default, so that broken
--    # MTUs are ignored, but higher stuff is allowed (1492, 1500, etc).
--    if [ -n "$mtu" ] && [ "$mtu" -gt 576 ]; then
--        if ! ip link set "$netif" mtu "$mtu"; then
--            ip link set "$netif" down
--            ip link set "$netif" mtu "$mtu"
--            linkup "$netif"
--        fi
--    fi
--
--    ip addr add "$ip"${mask:+/$mask} ${bcast:+broadcast $bcast} dev "$netif" \
--        ${lease_time:+valid_lft $lease_time} \
--        ${preferred_lft:+preferred_lft ${preferred_lft}}
--
--    if [ -n "$gw" ]; then
--        if [ "$mask" = "255.255.255.255" ]; then
--            # point-to-point connection => set explicit route to gateway
--            echo ip route add "$gw" dev "$netif" > /tmp/net."$netif".gw
--        fi
--
--        echo "$gw" | {
--            IFS=' ' read -r main_gw other_gw
--            echo ip route replace default via "$main_gw" dev "$netif" >> /tmp/net."$netif".gw
--            if [ -n "$other_gw" ]; then
--                for g in $other_gw; do
--                    echo ip route add default via "$g" dev "$netif" >> /tmp/net."$netif".gw
--                done
--            fi
--        }
--    fi
--
--    if getargbool 1 rd.peerdns; then
--        [ -n "${search}${domain}" ] && echo "search $search $domain" > /tmp/net."$netif".resolv.conf
--        if [ -n "$namesrv" ]; then
--            for s in $namesrv; do
--                echo nameserver "$s"
--            done
--        fi >> /tmp/net."$netif".resolv.conf
--    fi
--    # Note: hostname can be fqdn OR short hostname, so chop off any
--    # trailing domain name and explicitly add any domain if set.
--    [ -n "$hostname" ] && echo "echo ${hostname%."$domain"}${domain:+.$domain} > /proc/sys/kernel/hostname" > /tmp/net."$netif".hostname
--}
--
--setup_interface6() {
--    domain=$new_domain_name
--    # get rid of control chars
--    search=$(printf -- "%s" "$new_dhcp6_domain_search" | tr -d '[:cntrl:]')
--    namesrv=$new_dhcp6_name_servers
--    hostname=$new_host_name
--    [ -n "$new_dhcp_lease_time" ] && lease_time=$new_dhcp_lease_time
--    [ -n "$new_max_life" ] && lease_time=$new_max_life
--    preferred_lft=$lease_time
--    [ -n "$new_preferred_life" ] && preferred_lft=$new_preferred_life
--
--    # shellcheck disable=SC1090
--    [ -f /tmp/net."$netif".override ] && . /tmp/net."$netif".override
--
--    ip -6 addr add "${new_ip6_address}"/"${new_ip6_prefixlen}" \
--        dev "${netif}" scope global \
--        ${lease_time:+valid_lft $lease_time} \
--        ${preferred_lft:+preferred_lft ${preferred_lft}}
--
--    if getargbool 1 rd.peerdns; then
--        [ -n "${search}${domain}" ] && echo "search $search $domain" > /tmp/net."$netif".resolv.conf
--        if [ -n "$namesrv" ]; then
--            for s in $namesrv; do
--                echo nameserver "$s"
--            done
--        fi >> /tmp/net."$netif".resolv.conf
--    fi
--
--    # Note: hostname can be fqdn OR short hostname, so chop off any
--    # trailing domain name and explicitly add any domain if set.
--    [ -n "$hostname" ] && echo "echo ${hostname%."$domain"}${domain:+.$domain} > /proc/sys/kernel/hostname" > /tmp/net."$netif".hostname
--}
--
--parse_option_121() {
--    while [ $# -ne 0 ]; do
--        mask="$1"
--        shift
--
--        # Is the destination a multicast group?
--        if [ "$1" -ge 224 ] && [ "$1" -lt 240 ]; then
--            multicast=1
--        else
--            multicast=0
--        fi
--
--        # Parse the arguments into a CIDR net/mask string
--        if [ "$mask" -gt 24 ]; then
--            destination="$1.$2.$3.$4/$mask"
--            shift
--            shift
--            shift
--            shift
--        elif [ "$mask" -gt 16 ]; then
--            destination="$1.$2.$3.0/$mask"
--            shift
--            shift
--            shift
--        elif [ "$mask" -gt 8 ]; then
--            destination="$1.$2.0.0/$mask"
--            shift
--            shift
--        elif [ "$mask" -gt 0 ]; then
--            destination="$1.0.0.0/$mask"
--            shift
--        else
--            destination="0.0.0.0/$mask"
--        fi
--
--        # Read the gateway
--        gateway="$1.$2.$3.$4"
--        shift
--        shift
--        shift
--        shift
--
--        # Multicast routing on Linux
--        #  - If you set a next-hop address for a multicast group, this breaks with Cisco switches
--        #  - If you simply leave it link-local and attach it to an interface, it works fine.
--        if [ $multicast -eq 1 ] || [ "$gateway" = "0.0.0.0" ]; then
--            temp_result="$destination dev $interface"
--        else
--            temp_result="$destination via $gateway dev $interface"
--        fi
--
--        echo "/sbin/ip route replace $temp_result"
--    done
--}
--
--case $reason in
--    PREINIT)
--        echo "dhcp: PREINIT $netif up"
--        linkup "$netif"
--        ;;
--
--    PREINIT6)
--        echo "dhcp: PREINIT6 $netif up"
--        linkup "$netif"
--        wait_for_ipv6_dad_link "$netif"
--        ;;
--
--    BOUND)
--        echo "dhcp: BOUND setting up $netif"
--        unset layer2
--        if [ -f /sys/class/net/"$netif"/device/layer2 ]; then
--            read -r layer2 < /sys/class/net/"$netif"/device/layer2
--        fi
--        if [ "$layer2" != "0" ]; then
--            if command -v arping2 > /dev/null; then
--                if arping2 -q -C 1 -c 2 -I "$netif" -0 "$new_ip_address"; then
--                    warn "Duplicate address detected for $new_ip_address while doing dhcp. retrying"
--                    exit 1
--                fi
--            else
--                if ! arping -f -q -D -c 2 -I "$netif" "$new_ip_address"; then
--                    warn "Duplicate address detected for $new_ip_address while doing dhcp. retrying"
--                    exit 1
--                fi
--            fi
--        fi
--        unset layer2
--        setup_interface
--        set | while read -r line || [ -n "$line" ]; do
--            [ "${line#new_}" = "$line" ] && continue
--            echo "$line"
--        done > /tmp/dhclient."$netif".dhcpopts
--
--        {
--            echo '. /lib/net-lib.sh'
--            echo "setup_net $netif"
--            if [ -n "$new_classless_static_routes" ]; then
--                OLDIFS="$IFS"
--                IFS=".$IFS"
--                parse_option_121 "$new_classless_static_routes"
--                IFS="$OLDIFS"
--            fi
--            echo "source_hook initqueue/online $netif"
--            [ -e /tmp/net."$netif".manualup ] || echo "/sbin/netroot $netif"
--            echo "rm -f -- $hookdir/initqueue/setup_net_$netif.sh"
--        } > "$hookdir"/initqueue/setup_net_"$netif".sh
--
--        echo "[ -f /tmp/net.$netif.did-setup ]" > "$hookdir"/initqueue/finished/dhclient-"$netif".sh
--        : > /tmp/net."$netif".up
--        if [ -e /sys/class/net/"${netif}"/address ]; then
--            : > "/tmp/net.$(cat /sys/class/net/"${netif}"/address).up"
--        fi
--
--        ;;
--
--    RENEW | REBIND)
--        unset lease_time
--        [ -n "$new_dhcp_lease_time" ] && lease_time=$new_dhcp_lease_time
--        [ -n "$new_max_life" ] && lease_time=$new_max_life
--        preferred_lft=$lease_time
--        [ -n "$new_preferred_life" ] && preferred_lft=$new_preferred_life
--        ip -4 addr change "${new_ip_address}"/"${new_subnet_mask}" broadcast "${new_broadcast_address}" dev "${interface}" \
--            ${lease_time:+valid_lft $lease_time} ${preferred_lft:+preferred_lft ${preferred_lft}} \
--            > /dev/null 2>&1
--        ;;
--
--    BOUND6)
--        echo "dhcp: BOUND6 setting up $netif"
--        setup_interface6
--
--        set | while read -r line || [ -n "$line" ]; do
--            [ "${line#new_}" = "$line" ] && continue
--            echo "$line"
--        done > /tmp/dhclient."$netif".dhcpopts
--
--        {
--            echo '. /lib/net-lib.sh'
--            echo "setup_net $netif"
--            echo "source_hook initqueue/online $netif"
--            [ -e /tmp/net."$netif".manualup ] || echo "/sbin/netroot $netif"
--            echo "rm -f -- $hookdir/initqueue/setup_net_$netif.sh"
--        } > "$hookdir"/initqueue/setup_net_"$netif".sh
--
--        echo "[ -f /tmp/net.$netif.did-setup ]" > "$hookdir"/initqueue/finished/dhclient-"$netif".sh
--        : > /tmp/net."$netif".up
--        if [ -e /sys/class/net/"${netif}"/address ]; then
--            : > "/tmp/net.$(cat /sys/class/net/"${netif}"/address).up"
--        fi
--        ;;
--
--    RENEW6 | REBIND6)
--        unset lease_time
--        [ -n "$new_dhcp_lease_time" ] && lease_time=$new_dhcp_lease_time
--        [ -n "$new_max_life" ] && lease_time=$new_max_life
--        preferred_lft=$lease_time
--        [ -n "$new_preferred_life" ] && preferred_lft=$new_preferred_life
--        ip -6 addr change "${new_ip6_address}"/"${new_ip6_prefixlen}" dev "${interface}" scope global \
--            ${lease_time:+valid_lft $lease_time} ${preferred_lft:+preferred_lft ${preferred_lft}} \
--            > /dev/null 2>&1
--        ;;
--
--    *) echo "dhcp: $reason" ;;
--esac
--
--exit 0
-diff --git a/modules.d/35network-legacy/dhclient.conf b/modules.d/35network-legacy/dhclient.conf
-deleted file mode 100644
-index ffd24ef6..00000000
---- a/modules.d/35network-legacy/dhclient.conf
-+++ /dev/null
-@@ -1,11 +0,0 @@
--
--option classless-static-routes code 121 = array of unsigned integer 8;
--
--send dhcp-client-identifier = hardware;
--
--request subnet-mask, broadcast-address, time-offset, routers,
--        domain-name, domain-name-servers, domain-search, host-name,
--        root-path, interface-mtu, classless-static-routes,
--        netbios-name-servers, netbios-scope, ntp-servers,
--        dhcp6.domain-search, dhcp6.fqdn,
--        dhcp6.name-servers, dhcp6.sntp-servers;
-diff --git a/modules.d/35network-legacy/dhcp-multi.sh b/modules.d/35network-legacy/dhcp-multi.sh
-deleted file mode 100755
-index 1c5ee733..00000000
---- a/modules.d/35network-legacy/dhcp-multi.sh
-+++ /dev/null
-@@ -1,133 +0,0 @@
--#!/bin/sh
--# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
--# ex: ts=8 sw=4 sts=4 et filetype=sh
--#
--PATH=/usr/sbin:/usr/bin:/sbin:/bin
--
--# File to start dhclient requests on different interfaces in parallel
--
--command -v getarg > /dev/null || . /lib/dracut-lib.sh
--. /lib/net-lib.sh
--
--netif=$1
--do_vlan=$2
--arg=$3
--
--# Run dhclient in parallel
--do_dhclient() {
--    local _COUNT=0
--    local _timeout
--    local _DHCPRETRY
--    _timeout=$(getarg rd.net.timeout.dhcp=)
--    _DHCPRETRY=$(getargnum 1 1 1000000000 rd.net.dhcp.retry=)
--
--    if [ -n "$_timeout" ]; then
--        if ! (dhclient --help 2>&1 | grep -qs -F -- '--timeout'); then
--            warn "rd.net.timeout.dhcp has no effect because dhclient does not implement the --timeout option"
--            unset _timeout
--        fi
--    fi
--
--    while [ $_COUNT -lt "$_DHCPRETRY" ]; do
--        info "Starting dhcp for interface $netif"
--        dhclient "$arg" \
--            ${_timeout:+--timeout "$_timeout"} \
--            -q \
--            -1 \
--            -cf /etc/dhclient.conf \
--            -pf /tmp/dhclient."$netif".pid \
--            -lf /tmp/dhclient."$netif".lease \
--            "$netif" &
--        wait $! 2> /dev/null
--
--        # wait will return the return value of dhclient
--        retv=$?
--
--        # dhclient and hence wait returned success, 0.
--        if [ $retv -eq 0 ]; then
--            return 0
--        fi
--
--        # If dhclient exited before wait was called, or it was killed by
--        # another thread for interface whose DHCP succeeded, then it will not
--        # find the process with that pid and return error code 127. In that
--        # case we need to check if /tmp/dhclient.$netif.lease exists. If it
--        # does, it means dhclient finished executing before wait was called,
--        # and it was successful (return 0). If /tmp/dhclient.$netif.lease
--        # does not exist, then it means dhclient was killed by another thread
--        # or it finished execution but failed dhcp on that interface.
--
--        if [ $retv -eq 127 ]; then
--            read -r pid < /tmp/dhclient."$netif".pid
--            info "PID $pid was not found by wait for $netif"
--            if [ -e /tmp/dhclient."$netif".lease ]; then
--                info "PID $pid not found but DHCP successful on $netif"
--                return 0
--            fi
--        fi
--
--        _COUNT=$((_COUNT + 1))
--        [ $_COUNT -lt "$_DHCPRETRY" ] && sleep 1
--    done
--    warn "dhcp for interface $netif failed"
--    # nuke those files since we failed; we might retry dhcp again if it's e.g.
--    # `ip=dhcp,dhcp6` and we check for the PID file earlier
--    rm -f /tmp/dhclient."$netif".pid /tmp/dhclient."$netif".lease
--    return 1
--}
--
--do_dhclient
--ret=$?
--
--# setup nameserver
--for s in "$dns1" "$dns2" $(getargs nameserver); do
--    [ -n "$s" ] || continue
--    echo nameserver "$s" >> /tmp/net."$netif".resolv.conf
--done
--
--if [ $ret -eq 0 ]; then
--    : > /tmp/net."${netif}".up
--
--    if [ -z "$do_vlan" ] && [ -e /sys/class/net/"${netif}"/address ]; then
--        : > "/tmp/net.$(cat /sys/class/net/"${netif}"/address).up"
--    fi
--
--    # Check if DHCP also succeeded on another interface before this one.
--    # We will always use the first one on which DHCP succeeded, by using
--    # a common file $IFNETFILE, to synchronize between threads.
--    # Consider the race condition in which multiple threads
--    # corresponding to different interfaces may try to read $IFNETFILE
--    # and find it does not exist; they may all end up thinking they are the
--    # first to succeed (hence more than one thread may end up writing to
--    # $IFNETFILE). To take care of this, instead of checking if $IFNETFILE
--    # exists to determine if we are the first, we create a symbolic link
--    # in $IFNETFILE, pointing to the interface name ($netif), thus storing
--    # the interface name in the link pointer.
--    # Creating a link will fail, if the link already exists, hence kernel
--    # will take care of allowing only first thread to create link, which
--    # takes care of the race condition for us. Subsequent threads will fail.
--    # Also, the link points to the interface name, which will tell us which
--    # interface succeeded.
--
--    if ln -s "$netif" "$IFNETFILE" 2> /dev/null; then
--        intf=$(readlink "$IFNETFILE")
--        if [ -e /tmp/dhclient."$intf".lease ]; then
--            info "DHCP successful on interface $intf"
--            # Kill all existing dhclient calls for other interfaces, since we
--            # already got one successful interface
--
--            read -r npid < /tmp/dhclient."$netif".pid
--            pidlist=$(pgrep dhclient)
--            for pid in $pidlist; do
--                [ "$pid" -eq "$npid" ] && continue
--                kill -9 "$pid" > /dev/null 2>&1
--            done
--        else
--            echo "ERROR! $IFNETFILE exists but /tmp/dhclient.$intf.lease does not exist!!!"
--        fi
--    else
--        info "DHCP success on $netif, and also on $intf"
--        exit 0
--    fi
--    exit $ret
--fi
-diff --git a/modules.d/35network-legacy/ifup.sh b/modules.d/35network-legacy/ifup.sh
-deleted file mode 100755
-index b2ed4607..00000000
---- a/modules.d/35network-legacy/ifup.sh
-+++ /dev/null
-@@ -1,562 +0,0 @@
--#!/bin/sh
--#
--# We don't need to check for ip= errors here, that is handled by the
--# cmdline parser script
--#
--# without $2 means this is for real netroot case
--# or it is for manually bring up network ie. for kdump scp vmcore
--PATH=/usr/sbin:/usr/bin:/sbin:/bin
--
--command -v getarg > /dev/null || . /lib/dracut-lib.sh
--command -v ip_to_var > /dev/null || . /lib/net-lib.sh
--
--# Huh? No $1?
--[ -z "$1" ] && exit 1
--
--# $netif reads easier than $1
--netif=$1
--
--# loopback is always handled the same way
--if [ "$netif" = "lo" ]; then
--    ip link set lo up
--    ip addr add 127.0.0.1/8 dev lo
--    exit 0
--fi
--
--do_dhcp_parallel() {
--    # dhclient-script will mark the netif up and generate the online
--    # event for nfsroot
--    # XXX add -V vendor class and option parsing per kernel
--
--    [ -e "/tmp/dhclient.$netif.pid" ] && return 0
--
--    if ! iface_has_carrier "$netif"; then
--        warn "No carrier detected on interface $netif"
--        return 1
--    fi
--
--    bootintf=$(readlink "$IFNETFILE")
--    if [ -n "$bootintf" ] && [ -e "/tmp/dhclient.${bootintf}.lease" ]; then
--        info "DHCP already succeeded for $bootintf, exiting for $netif"
--        return 1
--    fi
--
--    if [ ! -e /run/NetworkManager/conf.d/10-dracut-dhclient.conf ]; then
--        mkdir -p /run/NetworkManager/conf.d
--        echo '[main]' > /run/NetworkManager/conf.d/10-dracut-dhclient.conf
--        echo 'dhcp=dhclient' >> /run/NetworkManager/conf.d/10-dracut-dhclient.conf
--    fi
--
--    /sbin/dhcp-multi.sh "$netif" "$DO_VLAN" "$@" &
--    return 0
--}
--
--# Run dhclient
--do_dhcp() {
--    # dhclient-script will mark the netif up and generate the online
--    # event for nfsroot
--    # XXX add -V vendor class and option parsing per kernel
--
--    local _COUNT
--    local _timeout
--    local _DHCPRETRY
--
--    _COUNT=0
--    _timeout=$(getarg rd.net.timeout.dhcp=)
--    _DHCPRETRY=$(getargnum 1 1 1000000000 rd.net.dhcp.retry=)
--
--    [ -e "/tmp/dhclient.${netif}.pid" ] && return 0
--
--    if ! iface_has_carrier "$netif"; then
--        warn "No carrier detected on interface $netif"
--        return 1
--    fi
--
--    if [ -n "$_timeout" ]; then
--        if ! (dhclient --help 2>&1 | grep -qs -F -- '--timeout'); then
--            warn "rd.net.timeout.dhcp has no effect because dhclient does not implement the --timeout option"
--            unset _timeout
--        fi
--    fi
--
--    if [ ! -e /run/NetworkManager/conf.d/10-dracut-dhclient.conf ]; then
--        mkdir -p /run/NetworkManager/conf.d
--        echo '[main]' > /run/NetworkManager/conf.d/10-dracut-dhclient.conf
--        echo 'dhcp=dhclient' >> /run/NetworkManager/conf.d/10-dracut-dhclient.conf
--    fi
--
--    while [ "$_COUNT" -lt "$_DHCPRETRY" ]; do
--        info "Starting dhcp for interface $netif"
--        dhclient "$@" \
--            ${_timeout:+--timeout "$_timeout"} \
--            -q \
--            -1 \
--            -cf /etc/dhclient.conf \
--            -pf "/tmp/dhclient.${netif}.pid" \
--            -lf "/tmp/dhclient.${netif}.lease" \
--            "$netif" \
--            && return 0
--        _COUNT=$((_COUNT + 1))
--        [ "$_COUNT" -lt "$_DHCPRETRY" ] && sleep 1
--    done
--    warn "dhcp for interface $netif failed"
--    # nuke those files since we failed; we might retry dhcp again if it's e.g.
--    # `ip=dhcp,dhcp6` and we check for the PID file at the top
--    rm -f /tmp/dhclient."$netif".pid /tmp/dhclient."$netif".lease
--    return 1
--}
--
--load_ipv6() {
--    [ -d /proc/sys/net/ipv6 ] && return
--    modprobe ipv6
--    i=0
--    while [ ! -d /proc/sys/net/ipv6 ]; do
--        i=$((i + 1))
--        [ $i -gt 10 ] && break
--        sleep 0.1
--    done
--}
--
--do_ipv6auto() {
--    local ret
--    load_ipv6
--    echo 0 > /proc/sys/net/ipv6/conf/"${netif}"/forwarding
--    echo 1 > /proc/sys/net/ipv6/conf/"${netif}"/accept_ra
--    echo 1 > /proc/sys/net/ipv6/conf/"${netif}"/accept_redirects
--    linkup "$netif"
--    wait_for_ipv6_auto "$netif"
--    ret=$?
--
--    [ -n "$hostname" ] && echo "echo $hostname > /proc/sys/kernel/hostname" > "/tmp/net.${netif}.hostname"
--
--    return "$ret"
--}
--
--do_ipv6link() {
--    local ret
--    load_ipv6
--    echo 0 > /proc/sys/net/ipv6/conf/"${netif}"/forwarding
--    echo 0 > /proc/sys/net/ipv6/conf/"${netif}"/accept_ra
--    echo 0 > /proc/sys/net/ipv6/conf/"${netif}"/accept_redirects
--    linkup "$netif"
--
--    [ -n "$hostname" ] && echo "echo $hostname > /proc/sys/kernel/hostname" > "/tmp/net.${netif}.hostname"
--
--    return "$ret"
--}
--
--# Handle static ip configuration
--do_static() {
--    strglobin "$ip" '*:*:*' && load_ipv6
--
--    if ! iface_has_carrier "$netif"; then
--        warn "No carrier detected on interface $netif"
--        return 1
--    elif ! linkup "$netif"; then
--        warn "Could not bring interface $netif up!"
--        return 1
--    fi
--
--    ip route get "$ip" 2> /dev/null | {
--        read -r a rest
--        if [ "$a" = "local" ]; then
--            warn "Not assigning $ip to interface $netif, cause it is already assigned!"
--            return 1
--        fi
--        return 0
--    } || return 1
--
--    [ -n "$macaddr" ] && ip link set address "$macaddr" dev "$netif"
--    [ -n "$mtu" ] && ip link set mtu "$mtu" dev "$netif"
--    if strglobin "$ip" '*:*:*'; then
--        # note no ip addr flush for ipv6
--        ip addr add "$ip/$mask" ${srv:+peer "$srv"} dev "$netif"
--        echo 0 > /proc/sys/net/ipv6/conf/"${netif}"/forwarding
--        echo 1 > /proc/sys/net/ipv6/conf/"${netif}"/accept_ra
--        echo 1 > /proc/sys/net/ipv6/conf/"${netif}"/accept_redirects
--        wait_for_ipv6_dad "$netif"
--    else
--        if [ -z "$srv" ]; then
--            if command -v arping2 > /dev/null; then
--                if arping2 -q -C 1 -c 2 -I "$netif" -0 "$ip"; then
--                    warn "Duplicate address detected for $ip for interface $netif."
--                    return 1
--                fi
--            else
--                if ! arping -f -q -D -c 2 -I "$netif" "$ip"; then
--                    warn "Duplicate address detected for $ip for interface $netif."
--                    return 1
--                fi
--            fi
--        fi
--        ip addr flush dev "$netif"
--        ip addr add "$ip/$mask" ${srv:+peer "$srv"} brd + dev "$netif"
--    fi
--
--    [ -n "$gw" ] && echo "ip route replace default via '$gw' dev '$netif'" > "/tmp/net.$netif.gw"
--    [ -n "$hostname" ] && echo "echo '$hostname' > /proc/sys/kernel/hostname" > "/tmp/net.$netif.hostname"
--
--    return 0
--}
--
--get_vid() {
--    case "$1" in
--        vlan*)
--            echo "${1#vlan}"
--            ;;
--        *.*)
--            echo "${1##*.}"
--            ;;
--    esac
--}
--
--# check, if we need VLAN's for this interface
--if [ -z "$DO_VLAN_PHY" ] && [ -e "/tmp/vlan.${netif}.phy" ]; then
--    unset DO_VLAN
--    NO_AUTO_DHCP=yes DO_VLAN_PHY=yes ifup "$netif"
--    modprobe -b -q 8021q
--
--    for i in /tmp/vlan.*."${netif}"; do
--        [ -e "$i" ] || continue
--        unset vlanname
--        unset phydevice
--        # shellcheck disable=SC1090
--        . "$i"
--        if [ -n "$vlanname" ]; then
--            linkup "$phydevice"
--            ip link add dev "$vlanname" link "$phydevice" type vlan id "$(get_vid "$vlanname")"
--            ifup "$vlanname"
--        fi
--    done
--    exit 0
--fi
--
--# Check, if interface is VLAN interface
--if ! [ -e "/tmp/vlan.${netif}.phy" ]; then
--    for i in "/tmp/vlan.${netif}".*; do
--        [ -e "$i" ] || continue
--        export DO_VLAN=yes
--        break
--    done
--fi
--
--# bridge this interface?
--if [ -z "$NO_BRIDGE_MASTER" ]; then
--    for i in /tmp/bridge.*.info; do
--        [ -e "$i" ] || continue
--        unset bridgeslaves
--        unset bridgename
--        # shellcheck disable=SC1090
--        . "$i"
--        for ethname in $bridgeslaves; do
--            [ "$netif" != "$ethname" ] && continue
--
--            NO_BRIDGE_MASTER=yes NO_AUTO_DHCP=yes ifup "$ethname"
--            linkup "$ethname"
--            if [ ! -e "/tmp/bridge.$bridgename.up" ]; then
--                ip link add name "$bridgename" type bridge
--                echo 0 > "/sys/devices/virtual/net/$bridgename/bridge/forward_delay"
--                : > "/tmp/bridge.$bridgename.up"
--            fi
--            ip link set dev "$ethname" master "$bridgename"
--            ifup "$bridgename"
--            exit 0
--        done
--    done
--fi
--
--# enslave this interface to bond?
--if [ -z "$NO_BOND_MASTER" ]; then
--    for i in /tmp/bond.*.info; do
--        [ -e "$i" ] || continue
--        unset bondslaves
--        unset bondname
--        # shellcheck disable=SC1090
--        . "$i"
--        for testslave in $bondslaves; do
--            [ "$netif" != "$testslave" ] && continue
--
--            # already setup
--            [ -e "/tmp/bond.$bondname.up" ] && exit 0
--
--            # wait for all slaves to show up
--            for slave in $bondslaves; do
--                # try to create the slave (maybe vlan or bridge)
--                NO_BOND_MASTER=yes NO_AUTO_DHCP=yes ifup "$slave"
--
--                if ! ip link show dev "$slave" > /dev/null 2>&1; then
--                    # wait for the last slave to show up
--                    exit 0
--                fi
--            done
--
--            modprobe -q -b bonding
--            echo "+$bondname" > /sys/class/net/bonding_masters 2> /dev/null
--            ip link set "$bondname" down
--
--            # Stolen from ifup-eth
--            # add the bits to setup driver parameters here
--            for arg in $bondoptions; do
--                key=${arg%%=*}
--                value=${arg##*=}
--                # %{value:0:1} is replaced with non-bash specific construct
--                if [ "${key}" = "arp_ip_target" ] && [ "${#value}" != "0" ] && [ "+${value%%+*}" != "+" ]; then
--                    OLDIFS=$IFS
--                    IFS=','
--                    for arp_ip in $value; do
--                        echo "+$arp_ip" > "/sys/class/net/${bondname}/bonding/$key"
--                    done
--                    IFS=$OLDIFS
--                else
--                    echo "$value" > "/sys/class/net/${bondname}/bonding/$key"
--                fi
--            done
--
--            linkup "$bondname"
--
--            for slave in $bondslaves; do
--                cat "/sys/class/net/$slave/address" > "/tmp/net.${bondname}.${slave}.hwaddr"
--                ip link set "$slave" down
--                echo "+$slave" > "/sys/class/net/$bondname/bonding/slaves"
--                linkup "$slave"
--            done
--
--            # Set mtu on bond master
--            [ -n "$bondmtu" ] && ip link set mtu "$bondmtu" dev "$bondname"
--
--            # add the bits to setup the needed post enslavement parameters
--            for arg in $bondoptions; do
--                key=${arg%%=*}
--                value=${arg##*=}
--                if [ "${key}" = "primary" ]; then
--                    echo "$value" > "/sys/class/net/${bondname}/bonding/$key"
--                fi
--            done
--
--            : > "/tmp/bond.$bondname.up"
--
--            NO_BOND_MASTER=yes ifup "$bondname"
--            exit $?
--        done
--    done
--fi
--
--if [ -z "$NO_TEAM_MASTER" ]; then
--    for i in /tmp/team.*.info; do
--        [ -e "$i" ] || continue
--        unset teammaster
--        unset teamslaves
--        # shellcheck disable=SC1090
--        . "$i"
--        for testslave in $teamslaves; do
--            [ "$netif" != "$testslave" ] && continue
--
--            [ -e "/tmp/team.$teammaster.up" ] && exit 0
--
--            # wait for all slaves to show up
--            for slave in $teamslaves; do
--                # try to create the slave (maybe vlan or bridge)
--                NO_TEAM_MASTER=yes NO_AUTO_DHCP=yes ifup "$slave"
--
--                if ! ip link show dev "$slave" > /dev/null 2>&1; then
--                    # wait for the last slave to show up
--                    exit 0
--                fi
--            done
--
--            if [ ! -e "/tmp/team.$teammaster.up" ]; then
--                # We shall only bring up those _can_ come up
--                # in case of some slave is gone in active-backup mode
--                working_slaves=""
--                for slave in $teamslaves; do
--                    teamdctl "${teammaster}" port present "${slave}" 2> /dev/null \
--                        && continue
--                    ip link set dev "$slave" up 2> /dev/null
--                    if wait_for_if_up "$slave"; then
--                        working_slaves="$working_slaves$slave "
--                    fi
--                done
--                # Do not add slaves now
--                teamd -d -U -n -N -t "$teammaster" -f "/etc/teamd/${teammaster}.conf"
--                for slave in $working_slaves; do
--                    # team requires the slaves to be down before joining team
--                    ip link set dev "$slave" down
--                    (
--                        unset TEAM_PORT_CONFIG
--                        read -r _hwaddr < "/sys/class/net/$slave/address"
--                        _subchannels=$(iface_get_subchannels "$slave")
--                        if [ -n "$_hwaddr" ] && [ -e "/etc/sysconfig/network-scripts/mac-${_hwaddr}.conf" ]; then
--                            # shellcheck disable=SC1090
--                            . "/etc/sysconfig/network-scripts/mac-${_hwaddr}.conf"
--                        elif [ -n "$_subchannels" ] && [ -e "/etc/sysconfig/network-scripts/ccw-${_subchannels}.conf" ]; then
--                            # shellcheck disable=SC1090
--                            . "/etc/sysconfig/network-scripts/ccw-${_subchannels}.conf"
--                        elif [ -e "/etc/sysconfig/network-scripts/ifcfg-${slave}" ]; then
--                            # shellcheck disable=SC1090
--                            . "/etc/sysconfig/network-scripts/ifcfg-${slave}"
--                        fi
--
--                        if [ -n "${TEAM_PORT_CONFIG}" ]; then
--                            /usr/bin/teamdctl "${teammaster}" port config update "${slave}" "${TEAM_PORT_CONFIG}"
--                        fi
--                    )
--                    teamdctl "$teammaster" port add "$slave"
--                done
--
--                ip link set dev "$teammaster" up
--
--                : > "/tmp/team.$teammaster.up"
--                NO_TEAM_MASTER=yes ifup "$teammaster"
--                exit $?
--            fi
--        done
--    done
--fi
--
--# all synthetic interfaces done.. now check if the interface is available
--if ! ip link show dev "$netif" > /dev/null 2>&1; then
--    exit 1
--fi
--
--# disable manual ifup while netroot is set for simplifying our logic
--# in netroot case we prefer netroot to bringup $netif automatically
--[ -n "$2" ] && [ "$2" = "-m" ] && [ -z "$netroot" ] && manualup="$2"
--
--if [ -n "$manualup" ]; then
--    : > "/tmp/net.$netif.manualup"
--    rm -f "/tmp/net.${netif}.did-setup"
--else
--    [ -e "/tmp/net.${netif}.did-setup" ] && exit 0
--    [ -z "$DO_VLAN" ] \
--        && [ -e "/sys/class/net/$netif/address" ] \
--        && [ -e "/tmp/net.$(cat "/sys/class/net/$netif/address").did-setup" ] && exit 0
--fi
--
--# Specific configuration, spin through the kernel command line
--# looking for ip= lines
--for p in $(getargs ip=); do
--    ip_to_var "$p"
--    # skip ibft
--    [ "$autoconf" = "ibft" ] && continue
--
--    case "$dev" in
--        ??:??:??:??:??:??) # MAC address
--            _dev=$(iface_for_mac "$dev")
--            [ -n "$_dev" ] && dev="$_dev"
--            ;;
--        ??-??-??-??-??-??) # MAC address in BOOTIF form
--            _dev=$(iface_for_mac "$(fix_bootif "$dev")")
--            [ -n "$_dev" ] && dev="$_dev"
--            ;;
--    esac
--
--    # If this option isn't directed at our interface, skip it
--    if [ -n "$dev" ]; then
--        if [ "$dev" != "$netif" ]; then
--            [ ! -e "/sys/class/net/$dev" ] \
--                && warn "Network interface '$dev' does not exist!"
--            continue
--        fi
--    else
--        iface_is_enslaved "$netif" && continue
--    fi
--
--    # Store config for later use
--    for i in ip srv gw mask hostname macaddr mtu dns1 dns2; do
--        eval '[ "$'$i'" ] && echo '$i'="$'$i'"'
--    done > "/tmp/net.$netif.override"
--
--    for autoopt in $(str_replace "$autoconf" "," " "); do
--        case $autoopt in
--            dhcp | on | any)
--                do_dhcp -4
--                ;;
--            single-dhcp)
--                do_dhcp_parallel -4
--                exit 0
--                ;;
--            dhcp6)
--                load_ipv6
--                do_dhcp -6
--                ;;
--            auto6)
--                do_ipv6auto
--                ;;
--            either6)
--                do_ipv6auto || do_dhcp -6
--                ;;
--            link6)
--                do_ipv6link
--                ;;
--            *)
--                do_static
--                ;;
--        esac
--    done
--    ret=$?
--
--    # setup nameserver
--    for s in "$dns1" "$dns2" $(getargs nameserver); do
--        [ -n "$s" ] || continue
--        echo "nameserver $s" >> "/tmp/net.$netif.resolv.conf"
--    done
--
--    if [ $ret -eq 0 ]; then
--        : > "/tmp/net.${netif}.up"
--
--        if [ -z "$DO_VLAN" ] && [ -e "/sys/class/net/${netif}/address" ]; then
--            : > "/tmp/net.$(cat "/sys/class/net/${netif}/address").up"
--        fi
--
--        # and finally, finish interface set up if there isn't already a script
--        # to do so (which is the case in the dhcp path)
--        if [ ! -e "$hookdir/initqueue/setup_net_$netif.sh" ]; then
--            setup_net "$netif"
--            source_hook initqueue/online "$netif"
--            if [ -z "$manualup" ]; then
--                /sbin/netroot "$netif"
--            fi
--        fi
--
--        exit $ret
--    fi
--done
--
--# no ip option directed at our interface?
--if [ -z "$NO_AUTO_DHCP" ] && [ ! -e "/tmp/net.${netif}.up" ]; then
--    ret=1
--    if [ -e /tmp/net.bootdev ]; then
--        read -r BOOTDEV < /tmp/net.bootdev
--        if [ "$netif" = "$BOOTDEV" ] || [ "$BOOTDEV" = "$(cat "/sys/class/net/${netif}/address")" ]; then
--            do_dhcp
--            ret=$?
--        fi
--    else
--        # No ip lines, no bootdev -> default to dhcp
--        ip=$(getarg ip)
--
--        if getargs 'ip=dhcp6' > /dev/null || [ -z "$ip" ] && [ "$netroot" = "dhcp6" ]; then
--            load_ipv6
--            do_dhcp -6
--            ret=$?
--        fi
--        if getargs 'ip=dhcp' > /dev/null || [ -z "$ip" ] && [ "$netroot" != "dhcp6" ]; then
--            do_dhcp -4
--            ret=$?
--        fi
--    fi
--
--    for s in $(getargs nameserver); do
--        [ -n "$s" ] || continue
--        echo "nameserver $s" >> "/tmp/net.$netif.resolv.conf"
--    done
--
--    if [ "$ret" -eq 0 ] && [ -n "$(ls "/tmp/leaseinfo.${netif}"* 2> /dev/null)" ]; then
--        : > "/tmp/net.${netif}.did-setup"
--        if [ -e "/sys/class/net/${netif}/address" ]; then
--            : > "/tmp/net.$(cat "/sys/class/net/${netif}/address").did-setup"
--        fi
--    fi
--fi
--
--exit 0
-diff --git a/modules.d/35network-legacy/kill-dhclient.sh b/modules.d/35network-legacy/kill-dhclient.sh
-deleted file mode 100755
-index 9ed615fd..00000000
---- a/modules.d/35network-legacy/kill-dhclient.sh
-+++ /dev/null
-@@ -1,15 +0,0 @@
--#!/bin/sh
--
--for f in /tmp/dhclient.*.pid; do
--    [ -e "$f" ] || continue
--    read -r PID < "$f"
--    kill "$PID" > /dev/null 2>&1
--done
--
--sleep 0.1
--
--for f in /tmp/dhclient.*.pid; do
--    [ -e "$f" ] || continue
--    read -r PID < "$f"
--    kill -9 "$PID" > /dev/null 2>&1
--done
-diff --git a/modules.d/35network-legacy/module-setup.sh b/modules.d/35network-legacy/module-setup.sh
-deleted file mode 100755
-index d7162ad5..00000000
---- a/modules.d/35network-legacy/module-setup.sh
-+++ /dev/null
-@@ -1,94 +0,0 @@
--#!/bin/bash
--
--# called by dracut
--check() {
--    require_binaries ip dhclient sed awk grep pgrep tr expr || return 1
--    require_any_binary arping arping2 || return 1
--
--    return 255
--}
--
--# called by dracut
--depends() {
--    echo net-lib kernel-network-modules initqueue
--    return 0
--}
--
--# called by dracut
--install() {
--    local _arch
--
--    # Adding default link and (if exists) 98-default-mac-none.link
--    if dracut_module_included "systemd"; then
--        inst_multiple -o \
--            "${systemdnetwork}/99-default.link" \
--            "${systemdnetwork}/98-default-mac-none.link"
--        [[ $hostonly ]] && inst_multiple -H -o "${systemdnetworkconfdir}/*.link"
--    fi
--
--    inst_multiple ip dhclient sed awk grep pgrep tr expr
--
--    inst_multiple -o arping arping2
--    strstr "$(arping 2>&1)" "ARPing 2" && mv "$initdir/bin/arping" "$initdir/bin/arping2"
--
--    inst_multiple -o ping ping6
--    inst_multiple -o teamd teamdctl teamnl
--    inst_simple /etc/libnl/classid
--    inst_script "$moddir/ifup.sh" "/sbin/ifup"
--    inst_script "$moddir/dhcp-multi.sh" "/sbin/dhcp-multi.sh"
--    inst_script "$moddir/dhclient-script.sh" "/sbin/dhclient-script"
--    inst_simple -H "/etc/dhclient.conf"
--    cat "$moddir/dhclient.conf" >> "${initdir}/etc/dhclient.conf"
--    inst_hook pre-udev 60 "$moddir/net-genrules.sh"
--    inst_hook cmdline 92 "$moddir/parse-ibft.sh"
--    inst_hook cmdline 95 "$moddir/parse-vlan.sh"
--    inst_hook cmdline 96 "$moddir/parse-bond.sh"
--    inst_hook cmdline 96 "$moddir/parse-team.sh"
--    inst_hook cmdline 97 "$moddir/parse-bridge.sh"
--    inst_hook cmdline 98 "$moddir/parse-ip-opts.sh"
--    inst_hook cmdline 99 "$moddir/parse-ifname.sh"
--    inst_hook cleanup 10 "$moddir/kill-dhclient.sh"
--
--    # install all config files for teaming
--    unset TEAM_MASTER
--    unset TEAM_CONFIG
--    unset TEAM_PORT_CONFIG
--    unset HWADDR
--    unset SUBCHANNELS
--    for i in /etc/sysconfig/network-scripts/ifcfg-*; do
--        [ -e "$i" ] || continue
--        case "$i" in
--            *~ | *.bak | *.orig | *.rpmnew | *.rpmorig | *.rpmsave)
--                continue
--                ;;
--        esac
--        (
--            # shellcheck disable=SC1090
--            . "$i"
--            if ! [ "${ONBOOT}" = "no" ] || [ "${ONBOOT}" = "NO" ] \
--                && [ -n "${TEAM_MASTER}${TEAM_CONFIG}${TEAM_PORT_CONFIG}" ]; then
--                if [ -n "$TEAM_CONFIG" ] && [ -n "$DEVICE" ]; then
--                    mkdir -p "$initdir"/etc/teamd
--                    printf -- "%s" "$TEAM_CONFIG" > "$initdir/etc/teamd/${DEVICE}.conf"
--                elif [ -n "$TEAM_PORT_CONFIG" ]; then
--                    inst_simple "$i"
--
--                    HWADDR="$(echo "$HWADDR" | sed 'y/ABCDEF/abcdef/')"
--                    if [ -n "$HWADDR" ]; then
--                        ln_r "$i" "/etc/sysconfig/network-scripts/mac-${HWADDR}.conf"
--                    fi
--
--                    SUBCHANNELS="$(echo "$SUBCHANNELS" | sed 'y/ABCDEF/abcdef/')"
--                    if [ -n "$SUBCHANNELS" ]; then
--                        ln_r "$i" "/etc/sysconfig/network-scripts/ccw-${SUBCHANNELS}.conf"
--                    fi
--                fi
--            fi
--        )
--    done
--
--    _arch=${DRACUT_ARCH:-$(uname -m)}
--
--    inst_libdir_file {"tls/$_arch/",tls/,"$_arch/",}"libnss_dns.so.*" \
--        {"tls/$_arch/",tls/,"$_arch/",}"libnss_mdns4_minimal.so.*"
--}
-diff --git a/modules.d/35network-legacy/net-genrules.sh b/modules.d/35network-legacy/net-genrules.sh
-deleted file mode 100755
-index 13bcced3..00000000
---- a/modules.d/35network-legacy/net-genrules.sh
-+++ /dev/null
-@@ -1,125 +0,0 @@
--#!/bin/sh
--
--getargbool 0 rd.neednet && NEEDNET=1
--
--# Don't continue if we don't need network
--if [ -z "$netroot" ] && [ ! -e "/tmp/net.ifaces" ] && [ "$NEEDNET" != "1" ]; then
--    return
--fi
--
--command -v fix_bootif > /dev/null || . /lib/net-lib.sh
--
--# Write udev rules
--{
--    # bridge: attempt only the defined interface
--    for i in /tmp/bridge.*.info; do
--        [ -e "$i" ] || continue
--        unset bridgeslaves
--        unset bridgename
--        # shellcheck disable=SC1090
--        . "$i"
--        RAW_IFACES="$RAW_IFACES $bridgeslaves"
--        MASTER_IFACES="$MASTER_IFACES $bridgename"
--    done
--
--    # bond: attempt only the defined interface (override bridge defines)
--    for i in /tmp/bond.*.info; do
--        [ -e "$i" ] || continue
--        unset bondslaves
--        unset bondname
--        # shellcheck disable=SC1090
--        . "$i"
--        # It is enough to fire up only one
--        RAW_IFACES="$RAW_IFACES $bondslaves"
--        MASTER_IFACES="$MASTER_IFACES ${bondname}"
--    done
--
--    for i in /tmp/team.*.info; do
--        [ -e "$i" ] || continue
--        unset teamslaves
--        unset teammaster
--        # shellcheck disable=SC1090
--        . "$i"
--        RAW_IFACES="$RAW_IFACES ${teamslaves}"
--        MASTER_IFACES="$MASTER_IFACES ${teammaster}"
--    done
--
--    for i in /tmp/vlan.*.phy; do
--        [ -e "$i" ] || continue
--        unset phydevice
--        # shellcheck disable=SC1090
--        . "$i"
--        RAW_IFACES="$RAW_IFACES $phydevice"
--        for j in /tmp/vlan.*".${phydevice}"; do
--            [ -e "$j" ] || continue
--            unset vlanname
--            # shellcheck disable=SC1090
--            . "$j"
--            MASTER_IFACES="$MASTER_IFACES ${vlanname}"
--        done
--    done
--
--    MASTER_IFACES="$(trim "$MASTER_IFACES")"
--    RAW_IFACES="$(trim "$RAW_IFACES")"
--
--    if [ -z "$IFACES" ]; then
--        [ -e /tmp/net.ifaces ] && read -r IFACES < /tmp/net.ifaces
--    fi
--
--    if [ -e /tmp/net.bootdev ]; then
--        read -r bootdev < /tmp/net.bootdev
--    fi
--
--    # shellcheck disable=SC2016
--    ifup='/sbin/ifup $name'
--
--    runcmd="RUN+=\"/sbin/initqueue --name ifup-\$name --unique --onetime $ifup\""
--
--    # We have some specific interfaces to handle
--    if [ -n "${RAW_IFACES}${IFACES}" ]; then
--        echo 'SUBSYSTEM!="net", GOTO="net_end"'
--        echo 'ACTION!="add|change|move", GOTO="net_end"'
--        for iface in $IFACES $RAW_IFACES; do
--            case "$iface" in
--                ??:??:??:??:??:??) # MAC address
--                    cond="ATTR{address}==\"$iface\""
--                    echo "$cond, $runcmd, GOTO=\"net_end\""
--                    ;;
--                ??-??-??-??-??-??) # MAC address in BOOTIF form
--                    cond="ATTR{address}==\"$(fix_bootif "$iface")\""
--                    echo "$cond, $runcmd, GOTO=\"net_end\""
--                    ;;
--                *) # an interface name
--                    cond="ENV{INTERFACE}==\"$iface\""
--                    echo "$cond, $runcmd, GOTO=\"net_end\""
--                    cond="NAME==\"$iface\""
--                    echo "$cond, $runcmd, GOTO=\"net_end\""
--                    ;;
--            esac
--            # The GOTO prevents us from trying to ifup the same device twice
--        done
--        echo 'LABEL="net_end"'
--
--        for iface in $IFACES; do
--            if [ "$bootdev" = "$iface" ] || [ "$NEEDNET" = "1" ]; then
--                if [ -n "$netroot" ] && [ -n "${DRACUT_SYSTEMD-}" ]; then
--                    echo "systemctl is-active initrd-root-device.target || [ -f /tmp/net.${iface}.did-setup ]"
--                else
--                    echo "[ -f /tmp/net.${iface}.did-setup ]"
--                fi > "$hookdir"/initqueue/finished/wait-"$iface".sh
--            fi
--        done
--    # Default: We don't know the interface to use, handle all
--    # Fixme: waiting for the interface as well.
--    else
--        cond='ACTION=="add", SUBSYSTEM=="net", ENV{DEVTYPE}!="wlan|wwan"'
--        # if you change the name of "91-default-net.rules", also change modules.d/80cms/cmssetup.sh
--        echo "$cond, $runcmd" > /etc/udev/rules.d/91-default-net.rules
--        if [ "$NEEDNET" = "1" ]; then
--            # shellcheck disable=SC2016
--            echo 'for i in /tmp/net.*.did-setup; do [ -f "$i" ]  && exit 0; done; exit 1' > "$hookdir"/initqueue/finished/wait-network.sh
--        fi
--    fi
--
--    # if you change the name of "90-net.rules", also change modules.d/80cms/cmssetup.sh
--} > /etc/udev/rules.d/90-net.rules
-diff --git a/modules.d/35network-legacy/parse-bond.sh b/modules.d/35network-legacy/parse-bond.sh
-deleted file mode 100755
-index ba30a3bc..00000000
---- a/modules.d/35network-legacy/parse-bond.sh
-+++ /dev/null
-@@ -1,76 +0,0 @@
--#!/bin/sh
--#
--# Format:
--#       bond=<bondname>[:<bondslaves>[:<options>[:<mtu>]]]
--#
--#       bondslaves is a comma-separated list of physical (ethernet) interfaces
--#       options is a comma-separated list on bonding options (modinfo bonding for details) in format compatible with initscripts
--#       if options include multi-valued arp_ip_target option, then its values should be separated by semicolon.
--#
--#       bond without parameters assumes bond=bond0:eth0,eth1:mode=balance-rr
--#
--#       if the mtu is specified, it will be set on the bond master
--#
--
--# We translate list of slaves to space-separated here to make it easier to loop over them in ifup
--# Ditto for bonding options
--parsebond() {
--    local v="${1}":
--    set --
--    while [ -n "$v" ]; do
--        set -- "$@" "${v%%:*}"
--        v=${v#*:}
--    done
--
--    case $# in
--        0)
--            bondname=bond0
--            bondslaves="eth0 eth1"
--            ;;
--        1)
--            bondname=$1
--            bondslaves="eth0 eth1"
--            ;;
--        2)
--            bondname=$1
--            bondslaves=$(str_replace "$2" "," " ")
--            ;;
--        3)
--            bondname=$1
--            bondslaves=$(str_replace "$2" "," " ")
--            bondoptions=$(str_replace "$3" "," " ")
--            ;;
--        4)
--            bondname=$1
--            bondslaves=$(str_replace "$2" "," " ")
--            bondoptions=$(str_replace "$3" "," " ")
--            bondmtu=$4
--            ;;
--        *) die "bond= requires zero to four parameters" ;;
--    esac
--}
--
--# Parse bond for bondname, bondslaves, bondmode, bondoptions and bondmtu
--for bond in $(getargs bond=); do
--    unset bondname
--    unset bondslaves
--    unset bondoptions
--    unset bondmtu
--    if [ "$bond" != "bond" ]; then
--        parsebond "$bond"
--    fi
--    # Simple default bond
--    if [ -z "$bondname" ]; then
--        bondname=bond0
--        bondslaves="eth0 eth1"
--    fi
--    # Make it suitable for initscripts export
--    bondoptions=$(str_replace "$bondoptions" ";" ",")
--
--    {
--        echo "bondname=$bondname"
--        echo "bondslaves=\"$bondslaves\""
--        echo "bondoptions=\"$bondoptions\""
--        echo "bondmtu=\"$bondmtu\""
--    } > "/tmp/bond.${bondname}.info"
--done
-diff --git a/modules.d/35network-legacy/parse-bridge.sh b/modules.d/35network-legacy/parse-bridge.sh
-deleted file mode 100755
-index d331f9d7..00000000
---- a/modules.d/35network-legacy/parse-bridge.sh
-+++ /dev/null
-@@ -1,49 +0,0 @@
--#!/bin/sh
--#
--# Format:
--#       bridge=<bridgename>:<bridgeslaves>
--#
--#       <bridgeslaves> is a comma-separated list of physical (ethernet) interfaces
--#       bridge without parameters assumes bridge=br0:eth0
--#
--
--parsebridge() {
--    local v="${1}":
--    set --
--    while [ -n "$v" ]; do
--        set -- "$@" "${v%%:*}"
--        v=${v#*:}
--    done
--    case $# in
--        0)
--            bridgename=br0
--            bridgeslaves=$iface
--            ;;
--        1) die "bridge= requires two parameters" ;;
--        2)
--            bridgename=$1
--            bridgeslaves=$(str_replace "$2" "," " ")
--            ;;
--        *) die "bridge= requires two parameters" ;;
--    esac
--}
--
--# Parse bridge for bridgename and bridgeslaves
--for bridge in $(getargs bridge=); do
--    unset bridgename
--    unset bridgeslaves
--    iface=eth0
--    # Read bridge= parameters if they exist
--    if [ "$bridge" != "bridge" ]; then
--        parsebridge "$bridge"
--    fi
--    # Simple default bridge
--    if [ -z "$bridgename" ]; then
--        bridgename=br0
--        bridgeslaves=$iface
--    fi
--    {
--        echo "bridgename=$bridgename"
--        echo "bridgeslaves=\"$bridgeslaves\""
--    } > "/tmp/bridge.${bridgename}.info"
--done
-diff --git a/modules.d/35network-legacy/parse-ibft.sh b/modules.d/35network-legacy/parse-ibft.sh
-deleted file mode 100755
-index 1937f138..00000000
---- a/modules.d/35network-legacy/parse-ibft.sh
-+++ /dev/null
-@@ -1,10 +0,0 @@
--#!/bin/sh
--
--command -v getarg > /dev/null || . /lib/dracut-lib.sh
--command -v ibft_to_cmdline > /dev/null || . /lib/net-lib.sh
--
--if getargbool 0 rd.iscsi.ibft -d "ip=ibft"; then
--    modprobe -b -q iscsi_boot_sysfs 2> /dev/null
--    modprobe -b -q iscsi_ibft
--    ibft_to_cmdline
--fi
-diff --git a/modules.d/35network-legacy/parse-ifname.sh b/modules.d/35network-legacy/parse-ifname.sh
-deleted file mode 100755
-index be7b6ad6..00000000
---- a/modules.d/35network-legacy/parse-ifname.sh
-+++ /dev/null
-@@ -1,24 +0,0 @@
--#!/bin/sh
--#
--# Format:
--#       ifname=<interface>:<mac>
--#
--# Note letters in the macaddress must be lowercase!
--#
--# Examples:
--# ifname=eth0:4a:3f:4c:04:f8:d7
--#
--# Note when using ifname= to get persistent interface names, you must specify
--# an ifname= argument for each interface used in an ip= or fcoe= argument
--
--# check if there are any ifname parameters
--if ! getarg ifname= > /dev/null; then
--    return
--fi
--
--command -v parse_ifname_opts > /dev/null || . /lib/net-lib.sh
--
--# Check ifname= lines
--for p in $(getargs ifname=); do
--    parse_ifname_opts "$p"
--done
-diff --git a/modules.d/35network-legacy/parse-ip-opts.sh b/modules.d/35network-legacy/parse-ip-opts.sh
-deleted file mode 100755
-index eea71e40..00000000
---- a/modules.d/35network-legacy/parse-ip-opts.sh
-+++ /dev/null
-@@ -1,151 +0,0 @@
--#!/bin/sh
--#
--# Format:
--#       ip=[dhcp|on|any|single-dhcp]
--#
--#       ip=<interface>:[dhcp|on|any][:[<mtu>][:<macaddr>]]
--#
--#       ip=<client-IP-number>:<server-IP-number>:<gateway-IP-number>:<netmask>:<client-hostname>:<interface>:{dhcp|on|any|none|off}[:[<mtu>][:<macaddr>]]
--#
--# When supplying more than only ip= line, <interface> is mandatory and
--# bootdev= must contain the name of the primary interface to use for
--# routing,dns,dhcp-options,etc.
--#
--
--# we really need to use `expr substr` with dash
--# shellcheck disable=SC2003 disable=SC2308
--
--command -v getarg > /dev/null || . /lib/dracut-lib.sh
--
--if [ -n "$netroot" ] && [ -z "$(getarg ip=)" ] && [ -z "$(getarg BOOTIF=)" ]; then
--    # No ip= argument(s) for netroot provided, defaulting to DHCP
--    return
--fi
--
--# Count ip= lines to decide whether we need bootdev= or not
--if [ -z "$NEEDBOOTDEV" ]; then
--    count=0
--    for p in $(getargs ip=); do
--        case "$p" in
--            ibft)
--                continue
--                ;;
--        esac
--        count=$((count + 1))
--    done
--    [ $count -gt 1 ] && NEEDBOOTDEV=1
--fi
--unset count
--
--# If needed, check if bootdev= contains anything usable
--BOOTDEV=$(getarg bootdev=)
--
--if [ -n "$NEEDBOOTDEV" ] && getargbool 1 rd.neednet; then
--    #[ -z "$BOOTDEV" ] && warn "Please supply bootdev argument for multiple ip= lines"
--    echo "rd.neednet=1" > /etc/cmdline.d/20-dracut-neednet.conf
--    info "Multiple ip= arguments: assuming rd.neednet=1"
--else
--    unset NEEDBOOTDEV
--fi
--
--# Check ip= lines
--# XXX Would be nice if we could errorcheck ip addresses here as well
--for p in $(getargs ip=); do
--    ip_to_var "$p"
--
--    # make first device specified the BOOTDEV
--    if [ -n "$NEEDBOOTDEV" ] && [ -z "$BOOTDEV" ] && [ -n "$dev" ]; then
--        BOOTDEV="$dev"
--        info "Setting bootdev to '$BOOTDEV'"
--    fi
--
--    # skip ibft since we did it above
--    [ "$autoconf" = "ibft" ] && continue
--
--    # Empty autoconf defaults to 'dhcp'
--    if [ -z "$autoconf" ]; then
--        warn "Empty autoconf values default to dhcp"
--        autoconf="dhcp"
--    fi
--
--    # Error checking for autoconf in combination with other values
--    for autoopt in $(str_replace "$autoconf" "," " "); do
--        case $autoopt in
--            error) die "Error parsing option 'ip=$p'" ;;
--            bootp | rarp | both) die "Sorry, ip=$autoopt is currently unsupported" ;;
--            none | off)
--                [ -z "$ip" ] \
--                    && die "For argument 'ip=$p'\nValue '$autoopt' without static configuration does not make sense"
--                [ -z "$mask" ] \
--                    && die "Sorry, automatic calculation of netmask is not yet supported"
--                ;;
--            auto6 | link6) ;;
--            either6) ;;
--            dhcp | dhcp6 | on | any | single-dhcp)
--                [ -n "$NEEDBOOTDEV" ] && [ -z "$dev" ] \
--                    && die "Sorry, 'ip=$p' does not make sense for multiple interface configurations"
--                [ -n "$ip" ] \
--                    && die "For argument 'ip=$p'\nSorry, setting client-ip does not make sense for '$autoopt'"
--                ;;
--            *) die "For argument 'ip=$p'\nSorry, unknown value '$autoopt'" ;;
--        esac
--    done
--
--    if [ -n "$dev" ]; then
--        # We don't like duplicate device configs
--        if [ -n "$IFACES" ]; then
--            for i in $IFACES; do
--                [ "$dev" = "$i" ] && die "For argument 'ip=$p'\nDuplication configurations for '$dev'"
--            done
--        fi
--        # IFACES list for later use
--        IFACES="$IFACES $dev"
--
--        # Interface should exist
--        if [ ! -e "/sys/class/net/$dev" ]; then
--            warn "Network interface '$dev' does not exist"
--        fi
--    fi
--
--    # Do we need to check for specific options?
--    if [ -n "$NEEDDHCP" ] || [ -n "$DHCPORSERVER" ]; then
--        # Correct device? (Empty is ok as well)
--        [ "$dev" = "$BOOTDEV" ] || continue
--        # Server-ip is there?
--        [ -n "$DHCPORSERVER" ] && [ -n "$srv" ] && continue
--        # dhcp? (It's simpler to check for a set ip. Checks above ensure that if
--        # ip is there, we're static
--        [ -z "$ip" ] && continue
--        # Not good!
--        die "Server-ip or dhcp for netboot needed, but current arguments say otherwise"
--    fi
--
--    if str_starts "$dev" "enx" && [ ${#dev} -eq 15 ]; then
--        # shellcheck disable=SC2003
--        printf -- "ifname=%s:%s:%s:%s:%s:%s:%s\n" \
--            "$dev" \
--            "$(expr substr "$dev" 3 2)" \
--            "$(expr substr "$dev" 5 2)" \
--            "$(expr substr "$dev" 7 2)" \
--            "$(expr substr "$dev" 9 2)" \
--            "$(expr substr "$dev" 11 2)" \
--            "$(expr substr "$dev" 13 2)" \
--            >> /etc/cmdline.d/20-enx.conf
--    fi
--done
--
--# put BOOTIF in IFACES to make sure it comes up
--if getargbool 1 "rd.bootif" && BOOTIF="$(getarg BOOTIF=)"; then
--    BOOTDEV=$(fix_bootif "$BOOTIF")
--    IFACES="$BOOTDEV $IFACES"
--fi
--
--# This ensures that BOOTDEV is always first in IFACES
--if [ -n "$BOOTDEV" ] && [ -n "$IFACES" ]; then
--    IFACES="${IFACES%"$BOOTDEV"*} ${IFACES#*"$BOOTDEV"}"
--    IFACES="$BOOTDEV $IFACES"
--fi
--
--# Store BOOTDEV and IFACES for later use
--[ -n "$BOOTDEV" ] && echo "$BOOTDEV" > /tmp/net.bootdev
--[ -n "$IFACES" ] && echo "$IFACES" > /tmp/net.ifaces
-diff --git a/modules.d/35network-legacy/parse-team.sh b/modules.d/35network-legacy/parse-team.sh
-deleted file mode 100755
-index 83badc99..00000000
---- a/modules.d/35network-legacy/parse-team.sh
-+++ /dev/null
-@@ -1,66 +0,0 @@
--#!/bin/sh
--#
--# Format:
--#       team=<teammaster>:<teamslaves>[:<teamrunner>]
--#
--#       teamslaves is a comma-separated list of physical (ethernet) interfaces
--#       teamrunner is the runner type to be used (see teamd.conf(5)); defaults to activebackup
--#
--#       team without parameters assumes team=team0:eth0,eth1:activebackup
--#
--
--parseteam() {
--    local v="${1}":
--    set --
--    while [ -n "$v" ]; do
--        set -- "$@" "${v%%:*}"
--        v=${v#*:}
--    done
--
--    case $# in
--        0)
--            teammaster=team0
--            teamslaves="eth0 eth1"
--            teamrunner="activebackup"
--            ;;
--        1)
--            teammaster=$1
--            teamslaves="eth0 eth1"
--            teamrunner="activebackup"
--            ;;
--        2)
--            teammaster=$1
--            teamslaves=$(str_replace "$2" "," " ")
--            teamrunner="activebackup"
--            ;;
--        3)
--            teammaster=$1
--            teamslaves=$(str_replace "$2" "," " ")
--            teamrunner=$3
--            ;;
--        *) die "team= requires zero to three parameters" ;;
--    esac
--    return 0
--}
--
--for team in $(getargs team); do
--    [ "$team" = "team" ] && continue
--
--    unset teammaster
--    unset teamslaves
--    unset teamrunner
--
--    parseteam "$team" || continue
--
--    {
--        echo "teammaster=$teammaster"
--        echo "teamslaves=\"$teamslaves\""
--        echo "teamrunner=\"$teamrunner\""
--    } > /tmp/team."${teammaster}".info
--
--    if ! [ -e /etc/teamd/"${teammaster}".conf ]; then
--        warn "Team master $teammaster specified, but no /etc/teamd/$teammaster.conf present. Using $teamrunner."
--        mkdir -p /etc/teamd
--        printf -- "%s" "{\"runner\": {\"name\": \"$teamrunner\"}, \"link_watch\": {\"name\": \"ethtool\"}}" > "/tmp/${teammaster}.conf"
--    fi
--done
-diff --git a/modules.d/35network-legacy/parse-vlan.sh b/modules.d/35network-legacy/parse-vlan.sh
-deleted file mode 100755
-index c23f8331..00000000
---- a/modules.d/35network-legacy/parse-vlan.sh
-+++ /dev/null
-@@ -1,37 +0,0 @@
--#!/bin/sh
--#
--# Format:
--#	vlan=<vlanname>:<phydevice>
--#
--
--parsevlan() {
--    local v="${1}":
--    set --
--    while [ -n "$v" ]; do
--        set -- "$@" "${v%%:*}"
--        v=${v#*:}
--    done
--
--    unset vlanname phydevice
--    case $# in
--        2)
--            vlanname=$1
--            phydevice=$2
--            ;;
--        *) die "vlan= requires two parameters" ;;
--    esac
--}
--
--for vlan in $(getargs vlan=); do
--    unset vlanname
--    unset phydevice
--    if [ ! "$vlan" = "vlan" ]; then
--        parsevlan "$vlan"
--    fi
--
--    echo "phydevice=\"$phydevice\"" > /tmp/vlan."${phydevice}".phy
--    {
--        echo "vlanname=\"$vlanname\""
--        echo "phydevice=\"$phydevice\""
--    } > /tmp/vlan."${vlanname}"."${phydevice}"
--done
--- 
-2.54.0
-

diff --git a/0011-fix-iscsi-replace-echo-writes-with-printf-to-prevent.patch b/0011-fix-iscsi-replace-echo-writes-with-printf-to-prevent.patch
deleted file mode 100644
index dddcead..0000000
--- a/0011-fix-iscsi-replace-echo-writes-with-printf-to-prevent.patch
+++ /dev/null
@@ -1,97 +0,0 @@
-From 137076e2918518e02a54d88e6045930ee1024983 Mon Sep 17 00:00:00 2001
-From: Pavel Valena <pvalena@redhat.com>
-Date: Thu, 7 May 2026 00:45:31 +0200
-Subject: [PATCH 11/14] fix(iscsi): replace `echo` writes with `printf` to
- prevent variable injection
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Use printf with explicit variable escaping `%q` for shell scripts:
-  - mount-lun.sh hookdir script (iscsi_lun variable)
-  - udev rule (iscsi_lun sanitized via tr -d '"')
-  - initiatorname.iscsi (sourced as shell at iscsiroot.sh:161-163)
-
-Note: initiatorname.iscsi is also read by iscsid as plain text (no
-shell unquoting). For valid IQNs ([a-z0-9.:_-]), %q is a no-op, so
-iscsid sees the value unchanged. For malicious values with special
-characters, %q would produce shell escaping that iscsid reads
-literally — breaking the connection rather than allowing injection.
----
- modules.d/74iscsi/iscsiroot.sh       | 10 +++++-----
- modules.d/74iscsi/parse-iscsiroot.sh |  4 ++--
- 2 files changed, 7 insertions(+), 7 deletions(-)
-
-diff --git a/modules.d/74iscsi/iscsiroot.sh b/modules.d/74iscsi/iscsiroot.sh
-index 50b10259..50030e20 100755
---- a/modules.d/74iscsi/iscsiroot.sh
-+++ b/modules.d/74iscsi/iscsiroot.sh
-@@ -144,7 +144,7 @@ handle_netroot() {
- 
-     if [ -z "$iscsi_initiator" ] && [ -f /sys/firmware/ibft/initiator/initiator-name ] && ! [ -f /tmp/iscsi_set_initiator ]; then
-         iscsi_initiator=$(while read -r line || [ -n "$line" ]; do echo "$line"; done < /sys/firmware/ibft/initiator/initiator-name)
--        echo "InitiatorName=$iscsi_initiator" > /run/initiatorname.iscsi
-+        printf 'InitiatorName=%q\n' "$iscsi_initiator" > /run/initiatorname.iscsi
-         rm -f /etc/iscsi/initiatorname.iscsi
-         mkdir -p /etc/iscsi
-         ln -fs /run/initiatorname.iscsi /etc/iscsi/initiatorname.iscsi
-@@ -165,7 +165,7 @@ handle_netroot() {
- 
-     if [ -z "$iscsi_initiator" ]; then
-         iscsi_initiator=$(iscsi-iname)
--        echo "InitiatorName=$iscsi_initiator" > /run/initiatorname.iscsi
-+        printf 'InitiatorName=%q\n' "$iscsi_initiator" > /run/initiatorname.iscsi
-         rm -f /etc/iscsi/initiatorname.iscsi
-         mkdir -p /etc/iscsi
-         ln -fs /run/initiatorname.iscsi /etc/iscsi/initiatorname.iscsi
-@@ -189,7 +189,7 @@ handle_netroot() {
-         iscsi_lun=0
-     fi
- 
--    echo "InitiatorName=$iscsi_initiator" > /run/initiatorname.iscsi
-+    printf 'InitiatorName=%q\n' "$iscsi_initiator" > /run/initiatorname.iscsi
-     ln -fs /run/initiatorname.iscsi /dev/.initiatorname.iscsi
-     if ! [ -e /etc/iscsi/initiatorname.iscsi ]; then
-         mkdir -p /etc/iscsi
-@@ -210,14 +210,14 @@ handle_netroot() {
- 
-     if [ "$root" = "dhcp" ] || [ "$netroot" = "dhcp" ]; then
-         # if root is not specified try to mount the whole iSCSI LUN
--        printf 'SYMLINK=="disk/by-path/*-iscsi-*-%s", SYMLINK+="root"\n' "$iscsi_lun" >> /etc/udev/rules.d/99-iscsi-root.rules
-+        printf 'SYMLINK=="disk/by-path/*-iscsi-*-%s", SYMLINK+="root"\n' "$(printf '%s' "$iscsi_lun" | tr -d '"')" >> /etc/udev/rules.d/99-iscsi-root.rules
-         udevadm control --reload
-         write_fs_tab /dev/root
-         wait_for_dev -n /dev/root
- 
-         # install mount script
-         [ -z "${DRACUT_SYSTEMD-}" ] \
--            && echo "iscsi_lun=$iscsi_lun . /bin/mount-lun.sh " > "$hookdir"/mount/01-$$-iscsi.sh
-+            && printf 'iscsi_lun=%q . /bin/mount-lun.sh\n' "$iscsi_lun" > "$hookdir"/mount/01-$$-iscsi.sh
-     fi
- 
-     if strglobin "$iscsi_target_ip" '*:*:*' && ! strglobin "$iscsi_target_ip" '['; then
-diff --git a/modules.d/74iscsi/parse-iscsiroot.sh b/modules.d/74iscsi/parse-iscsiroot.sh
-index 0b12d35b..95860804 100755
---- a/modules.d/74iscsi/parse-iscsiroot.sh
-+++ b/modules.d/74iscsi/parse-iscsiroot.sh
-@@ -111,7 +111,7 @@ fi
- 
- if arg=$(getarg rd.iscsi.initiator -d iscsi_initiator=) && [ -n "$arg" ] && ! [ -f /run/initiatorname.iscsi ]; then
-     iscsi_initiator=$arg
--    echo "InitiatorName=$iscsi_initiator" > /run/initiatorname.iscsi
-+    printf 'InitiatorName=%q\n' "$iscsi_initiator" > /run/initiatorname.iscsi
-     ln -fs /run/initiatorname.iscsi /dev/.initiatorname.iscsi
-     rm -f /etc/iscsi/initiatorname.iscsi
-     mkdir -p /etc/iscsi
-@@ -127,7 +127,7 @@ fi
- if [ -z "$iscsi_initiator" ] && [ -f /sys/firmware/ibft/initiator/initiator-name ] && ! [ -f /tmp/iscsi_set_initiator ]; then
-     iscsi_initiator=$(while read -r line || [ -n "$line" ]; do echo "$line"; done < /sys/firmware/ibft/initiator/initiator-name)
-     if [ -n "$iscsi_initiator" ]; then
--        echo "InitiatorName=$iscsi_initiator" > /run/initiatorname.iscsi
-+        printf 'InitiatorName=%q\n' "$iscsi_initiator" > /run/initiatorname.iscsi
-         rm -f /etc/iscsi/initiatorname.iscsi
-         mkdir -p /etc/iscsi
-         ln -fs /run/initiatorname.iscsi /etc/iscsi/initiatorname.iscsi
--- 
-2.54.0
-

diff --git a/0011-fix-net-lib-warn-on-suspicious-shell-metacharacters-.patch b/0011-fix-net-lib-warn-on-suspicious-shell-metacharacters-.patch
new file mode 100644
index 0000000..9740016
--- /dev/null
+++ b/0011-fix-net-lib-warn-on-suspicious-shell-metacharacters-.patch
@@ -0,0 +1,46 @@
+From 44d9b8904a973731c529ec2c01773b3aa708acd0 Mon Sep 17 00:00:00 2001
+From: Pavel Valena <pvalena@redhat.com>
+Date: Thu, 14 May 2026 14:25:07 +0200
+Subject: [PATCH 11/12] fix(net-lib): warn on suspicious shell metacharacters
+ in hostname file
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+setup_net() sources /tmp/net.$netif.hostname as shell, which is written
+by dhclient-script.sh or ifup.sh. Add a defensive check that warns if
+the file contains shell metacharacters ($, `, ;, &, |, () that should
+never appear in a legitimate hostname, indicating possible DHCP-based
+command injection attempts.
+
+The file is still sourced for compatibility — the writer-side fix
+(printf '%q') already prevents execution of injected content.
+
+Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
+---
+ modules.d/45net-lib/net-lib.sh | 9 +++++++--
+ 1 file changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/modules.d/45net-lib/net-lib.sh b/modules.d/45net-lib/net-lib.sh
+index a0b87408..a9c5cd3e 100755
+--- a/modules.d/45net-lib/net-lib.sh
++++ b/modules.d/45net-lib/net-lib.sh
+@@ -131,8 +131,13 @@ setup_net() {
+     [ -e "/tmp/net.ifaces" ] && read -r IFACES < /tmp/net.ifaces
+     [ -z "$IFACES" ] && IFACES="$netif"
+     # run the scripts written by ifup
+-    # shellcheck disable=SC1090
+-    [ -e /tmp/net."$netif".hostname ] && . /tmp/net."$netif".hostname
++    if [ -e /tmp/net."$netif".hostname ]; then
++        if grep -qE '[$`;&|(]' /tmp/net."$netif".hostname 2> /dev/null; then
++            warn "setup_net $netif: /tmp/net.$netif.hostname contains suspicious shell metacharacters"
++        fi
++        # shellcheck disable=SC1090
++        . /tmp/net."$netif".hostname
++    fi
+     # shellcheck disable=SC1090
+     [ -e /tmp/net."$netif".override ] && . /tmp/net."$netif".override
+     # shellcheck disable=SC1090
+-- 
+2.55.0
+

diff --git a/0012-fix-base-escape-arguments-in-initqueue-hook-script-g.patch b/0012-fix-base-escape-arguments-in-initqueue-hook-script-g.patch
deleted file mode 100644
index b35f24c..0000000
--- a/0012-fix-base-escape-arguments-in-initqueue-hook-script-g.patch
+++ /dev/null
@@ -1,71 +0,0 @@
-From d68df76ef94362270bb5ffc77eb5f4ed45363496 Mon Sep 17 00:00:00 2001
-From: Pavel Valena <pvalena@redhat.com>
-Date: Thu, 14 May 2026 14:20:17 +0200
-Subject: [PATCH 12/14] fix(base): escape arguments in initqueue hook script
- generation
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-initqueue.sh writes arguments directly into generated hook scripts
-via `echo "$exe" "$@"`. These scripts are later sourced by
-dracut-initqueue.sh, so shell metacharacters in arguments (e.g.
-DHCP-derived $netroot passed from parse-iscsiroot.sh) execute as
-root in initramfs.
-
-Replace `echo` with `printf '%q'` to shell-escape all arguments
-before writing them into the hook script, preventing command
-injection via DHCP-controlled netroot values.
-
-Remove the fragile embedded single-quote wrapping ("'$var'") from
-parse-iscsiroot.sh call sites (lines 90, 102) — those relied on
-echo writing quotes verbatim for the shell to strip when sourcing.
-With printf '%q', initqueue now handles escaping centrally, so the
-manual wrapping is no longer needed and would cause literal quote
-characters to leak into iscsiroot arguments.
-
-Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
----
- modules.d/74iscsi/parse-iscsiroot.sh | 4 ++--
- modules.d/77initqueue/initqueue.sh   | 3 ++-
- 2 files changed, 4 insertions(+), 3 deletions(-)
-
-diff --git a/modules.d/74iscsi/parse-iscsiroot.sh b/modules.d/74iscsi/parse-iscsiroot.sh
-index 95860804..b87f19a1 100755
---- a/modules.d/74iscsi/parse-iscsiroot.sh
-+++ b/modules.d/74iscsi/parse-iscsiroot.sh
-@@ -89,7 +89,7 @@ if [ -n "$iscsi_firmware" ]; then
-     echo "${DRACUT_SYSTEMD+systemctl is-active initrd-root-device.target || }[ -f '/tmp/iscsistarted-firmware' ]" > "$hookdir"/initqueue/finished/iscsi_started.sh
-     /sbin/initqueue --unique --online /sbin/iscsiroot online "iscsi:" "$NEWROOT"
-     /sbin/initqueue --unique --onetime --timeout /sbin/iscsiroot timeout "iscsi:" "$NEWROOT"
--    /sbin/initqueue --unique --onetime --settled /sbin/iscsiroot online "iscsi:" "'$NEWROOT'"
-+    /sbin/initqueue --unique --onetime --settled /sbin/iscsiroot online "iscsi:" "$NEWROOT"
- fi
- 
- # ISCSI actually supported?
-@@ -105,7 +105,7 @@ modprobe -b -q be2iscsi
- 
- if [ -n "$netroot" ] && [ "$root" != "/dev/root" ] && [ "$root" != "dhcp" ]; then
-     if ! getargbool 1 rd.neednet > /dev/null || ! getarg "ip="; then
--        /sbin/initqueue --unique --onetime --settled /sbin/iscsiroot dummy "'$netroot'" "'$NEWROOT'"
-+        /sbin/initqueue --unique --onetime --settled /sbin/iscsiroot dummy "$netroot" "$NEWROOT"
-     fi
- fi
- 
-diff --git a/modules.d/77initqueue/initqueue.sh b/modules.d/77initqueue/initqueue.sh
-index 46a00d2a..1caa5273 100755
---- a/modules.d/77initqueue/initqueue.sh
-+++ b/modules.d/77initqueue/initqueue.sh
-@@ -64,7 +64,8 @@ fi
-     # shellcheck disable=SC2016
-     [ -n "$onetime" ] && echo '[ -e "$job" ] && rm -f -- "$job"'
-     [ -n "$env" ] && echo "$env"
--    echo "$exe" "$@"
-+    printf '%q ' "$exe" "$@"
-+    printf '\n'
- } > "/tmp/$$-${job}.sh"
- 
- mv -f "/tmp/$$-${job}.sh" "$hookdir/initqueue${qname}/${job}.sh"
--- 
-2.54.0
-

diff --git a/0012-fix-systemd-networkd-escape-DHCP-lease-values-in-dhc.patch b/0012-fix-systemd-networkd-escape-DHCP-lease-values-in-dhc.patch
new file mode 100644
index 0000000..2a996ca
--- /dev/null
+++ b/0012-fix-systemd-networkd-escape-DHCP-lease-values-in-dhc.patch
@@ -0,0 +1,46 @@
+From f1120c9dca684544d3e4b9634b730ae5429da5c1 Mon Sep 17 00:00:00 2001
+From: Pavel Valena <pvalena@redhat.com>
+Date: Thu, 14 May 2026 16:08:00 +0200
+Subject: [PATCH 12/12] fix(systemd-networkd): escape DHCP lease values in
+ dhcpopts generation
+
+networkd-run.sh converts DHCP lease values (ROOT_PATH, NEXT_SERVER)
+into shell variable assignments written to /tmp/dhclient.<ifname>.dhcpopts,
+which is later sourced by netroot.sh, net-lib.sh, and nfs-lib.sh. The
+previous sed-based pipeline wrapped values in single quotes without
+escaping embedded single quotes, allowing a rogue DHCP server to inject
+arbitrary shell commands via a crafted ROOT_PATH or NEXT_SERVER value.
+
+Replace the grep|sed pipeline with a while-read loop that uses
+printf '%q' to shell-escape values before writing, consistent with how
+the NetworkManager equivalent (nm-run.sh) already handles this.
+
+Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
+---
+ modules.d/11systemd-networkd/networkd-run.sh | 10 ++++++----
+ 1 file changed, 6 insertions(+), 4 deletions(-)
+
+diff --git a/modules.d/11systemd-networkd/networkd-run.sh b/modules.d/11systemd-networkd/networkd-run.sh
+index b14a43f4..d4a94e19 100755
+--- a/modules.d/11systemd-networkd/networkd-run.sh
++++ b/modules.d/11systemd-networkd/networkd-run.sh
+@@ -12,10 +12,12 @@ for ifpath in /sys/class/net/*; do
+         leases_file="/run/systemd/netif/leases/$(cat "$ifpath"/ifindex)"
+         dhcpopts_file="/tmp/dhclient.${ifname}.dhcpopts"
+         if [ -r "$leases_file" ]; then
+-            grep -E "^(NEXT_SERVER|ROOT_PATH)=" "$leases_file" \
+-                | sed -e "s/NEXT_SERVER=/new_next_server='/" \
+-                    -e "s/ROOT_PATH=/new_root_path='/" \
+-                    -e "s/$/'/" > "$dhcpopts_file" || true
++            while IFS='=' read -r key val; do
++                case "$key" in
++                    NEXT_SERVER) printf 'new_next_server=%q\n' "$val" ;;
++                    ROOT_PATH) printf 'new_root_path=%q\n' "$val" ;;
++                esac
++            done < "$leases_file" > "$dhcpopts_file"
+         fi
+ 
+         source_hook initqueue/online "$ifname"
+-- 
+2.55.0
+

diff --git a/0013-fix-net-lib-warn-on-suspicious-shell-metacharacters-.patch b/0013-fix-net-lib-warn-on-suspicious-shell-metacharacters-.patch
deleted file mode 100644
index 12b68d4..0000000
--- a/0013-fix-net-lib-warn-on-suspicious-shell-metacharacters-.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From 111138c4241343b873e42dc108718e1ef62d398b Mon Sep 17 00:00:00 2001
-From: Pavel Valena <pvalena@redhat.com>
-Date: Thu, 14 May 2026 14:25:07 +0200
-Subject: [PATCH 13/14] fix(net-lib): warn on suspicious shell metacharacters
- in hostname file
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-setup_net() sources /tmp/net.$netif.hostname as shell, which is written
-by dhclient-script.sh or ifup.sh. Add a defensive check that warns if
-the file contains shell metacharacters ($, `, ;, &, |, () that should
-never appear in a legitimate hostname, indicating possible DHCP-based
-command injection attempts.
-
-The file is still sourced for compatibility — the writer-side fix
-(printf '%q') already prevents execution of injected content.
-
-Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
----
- modules.d/45net-lib/net-lib.sh | 9 +++++++--
- 1 file changed, 7 insertions(+), 2 deletions(-)
-
-diff --git a/modules.d/45net-lib/net-lib.sh b/modules.d/45net-lib/net-lib.sh
-index a0b87408..a9c5cd3e 100755
---- a/modules.d/45net-lib/net-lib.sh
-+++ b/modules.d/45net-lib/net-lib.sh
-@@ -131,8 +131,13 @@ setup_net() {
-     [ -e "/tmp/net.ifaces" ] && read -r IFACES < /tmp/net.ifaces
-     [ -z "$IFACES" ] && IFACES="$netif"
-     # run the scripts written by ifup
--    # shellcheck disable=SC1090
--    [ -e /tmp/net."$netif".hostname ] && . /tmp/net."$netif".hostname
-+    if [ -e /tmp/net."$netif".hostname ]; then
-+        if grep -qE '[$`;&|(]' /tmp/net."$netif".hostname 2> /dev/null; then
-+            warn "setup_net $netif: /tmp/net.$netif.hostname contains suspicious shell metacharacters"
-+        fi
-+        # shellcheck disable=SC1090
-+        . /tmp/net."$netif".hostname
-+    fi
-     # shellcheck disable=SC1090
-     [ -e /tmp/net."$netif".override ] && . /tmp/net."$netif".override
-     # shellcheck disable=SC1090
--- 
-2.54.0
-

diff --git a/0014-fix-systemd-networkd-escape-DHCP-lease-values-in-dhc.patch b/0014-fix-systemd-networkd-escape-DHCP-lease-values-in-dhc.patch
deleted file mode 100644
index 562db61..0000000
--- a/0014-fix-systemd-networkd-escape-DHCP-lease-values-in-dhc.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From 24d7e205f754236acae25498782b8af943c9b270 Mon Sep 17 00:00:00 2001
-From: Pavel Valena <pvalena@redhat.com>
-Date: Thu, 14 May 2026 16:08:00 +0200
-Subject: [PATCH 14/14] fix(systemd-networkd): escape DHCP lease values in
- dhcpopts generation
-
-networkd-run.sh converts DHCP lease values (ROOT_PATH, NEXT_SERVER)
-into shell variable assignments written to /tmp/dhclient.<ifname>.dhcpopts,
-which is later sourced by netroot.sh, net-lib.sh, and nfs-lib.sh. The
-previous sed-based pipeline wrapped values in single quotes without
-escaping embedded single quotes, allowing a rogue DHCP server to inject
-arbitrary shell commands via a crafted ROOT_PATH or NEXT_SERVER value.
-
-Replace the grep|sed pipeline with a while-read loop that uses
-printf '%q' to shell-escape values before writing, consistent with how
-the NetworkManager equivalent (nm-run.sh) already handles this.
-
-Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
----
- modules.d/11systemd-networkd/networkd-run.sh | 10 ++++++----
- 1 file changed, 6 insertions(+), 4 deletions(-)
-
-diff --git a/modules.d/11systemd-networkd/networkd-run.sh b/modules.d/11systemd-networkd/networkd-run.sh
-index b14a43f4..d4a94e19 100755
---- a/modules.d/11systemd-networkd/networkd-run.sh
-+++ b/modules.d/11systemd-networkd/networkd-run.sh
-@@ -12,10 +12,12 @@ for ifpath in /sys/class/net/*; do
-         leases_file="/run/systemd/netif/leases/$(cat "$ifpath"/ifindex)"
-         dhcpopts_file="/tmp/dhclient.${ifname}.dhcpopts"
-         if [ -r "$leases_file" ]; then
--            grep -E "^(NEXT_SERVER|ROOT_PATH)=" "$leases_file" \
--                | sed -e "s/NEXT_SERVER=/new_next_server='/" \
--                    -e "s/ROOT_PATH=/new_root_path='/" \
--                    -e "s/$/'/" > "$dhcpopts_file" || true
-+            while IFS='=' read -r key val; do
-+                case "$key" in
-+                    NEXT_SERVER) printf 'new_next_server=%q\n' "$val" ;;
-+                    ROOT_PATH) printf 'new_root_path=%q\n' "$val" ;;
-+                esac
-+            done < "$leases_file" > "$dhcpopts_file"
-         fi
- 
-         source_hook initqueue/online "$ifname"
--- 
-2.54.0
-

diff --git a/dracut.spec b/dracut.spec
index 84efd8a..a336658 100644
--- a/dracut.spec
+++ b/dracut.spec
@@ -7,8 +7,8 @@
 %global __requires_exclude pkg-config
 
 Name: dracut
-Version: 109
-Release: 7%{?dist}
+Version: 111
+Release: 1%{?dist}
 
 Summary: Initramfs generator using udev
 
@@ -17,9 +17,9 @@ Summary: Initramfs generator using udev
 # except util/* which is GPLv2
 License: GPL-2.0-or-later AND LGPL-2.1-or-later AND GPL-2.0-only
 
-URL: https://github.com/dracut-ng/dracut-ng/wiki/
+URL: https://github.com/dracut-ng/dracut/wiki/
 
-Source0: https://github.com/dracut-ng/dracut-ng/archive/refs/tags/%{version}.tar.gz
+Source0: https://github.com/dracut-ng/dracut/archive/refs/tags/%{version}.tar.gz
 
 Source1: https://www.gnu.org/licenses/lgpl-2.1.txt
 # revert: "fix(install.d): correctly install pre-genned image and die if no args"
@@ -43,27 +43,21 @@ Patch6:  0006-fix-ossl-ignore-compiler-warnings.patch
 # Revert "feat(fips): include openssl's fips.so and openssl.cnf"
 # Author: Pavel Valena <pvalena@redhat.com>
 Patch7:  0007-Revert-feat-fips-include-openssl-s-fips.so-and-opens.patch
-# fix(systemd-cryptsetup): load libcryptsetup via dlopen
-# Author: Antonio Alvarez Feijoo <antonio.feijoo@suse.com>
-Patch8:  0008-fix-systemd-cryptsetup-load-libcryptsetup-via-dlopen.patch
-# feat(systemd-sysext): include systemd-{sys,conf}ext-sysroot services
-# Author: Vitaly Kuznetsov <vkuznets@redhat.com>
-Patch9:  0009-feat-systemd-sysext-include-systemd-sys-conf-ext-sys.patch
 # fix(network-legacy): remove network-legacy completely from the codebase
 # Author: Pavel Valena <pvalena@redhat.com>
-Patch10: 0010-fix-network-legacy-remove-network-legacy-completely-.patch
+Patch8:  0008-fix-network-legacy-remove-network-legacy-completely-.patch
 # fix(iscsi): replace `echo` writes with `printf` to prevent variable injection
 # Author: Pavel Valena <pvalena@redhat.com>
-Patch11: 0011-fix-iscsi-replace-echo-writes-with-printf-to-prevent.patch
+Patch9:  0009-fix-iscsi-replace-echo-writes-with-printf-to-prevent.patch
 # fix(base): escape arguments in initqueue hook script generation
 # Author: Pavel Valena <pvalena@redhat.com>
-Patch12: 0012-fix-base-escape-arguments-in-initqueue-hook-script-g.patch
+Patch10: 0010-fix-base-escape-arguments-in-initqueue-hook-script-g.patch
 # fix(net-lib): warn on suspicious shell metacharacters in hostname file
 # Author: Pavel Valena <pvalena@redhat.com>
-Patch13: 0013-fix-net-lib-warn-on-suspicious-shell-metacharacters-.patch
+Patch11: 0011-fix-net-lib-warn-on-suspicious-shell-metacharacters-.patch
 # fix(systemd-networkd): escape DHCP lease values in dhcpopts generation
 # Author: Pavel Valena <pvalena@redhat.com>
-Patch14: 0014-fix-systemd-networkd-escape-DHCP-lease-values-in-dhc.patch
+Patch12: 0012-fix-systemd-networkd-escape-DHCP-lease-values-in-dhc.patch
 
 # Please use source-git to work with this spec file:
 # HowTo: https://packit.dev/source-git/work-with-source-git
@@ -201,24 +195,30 @@ This package provides a dracut module to build an initramfs, but store most file
 in a squashfs image, result in a smaller initramfs size and reduce runtime memory
 usage.
 
+
 %prep
-%autosetup -n %{name}-ng-%{version} -S git_am
+%autosetup -n %{name}-%{version} -S git_am
 cp %{SOURCE1} .
 
+
 %build
+# Makefile tries to remove of network-legacy (nonexistent) unless --enable-network-legacy
 %configure  --systemdsystemunitdir=%{_unitdir} \
             --bashcompletiondir=$(pkg-config --variable=completionsdir bash-completion) \
             --libdir=%{_prefix}/lib \
             --enable-dracut-cpio \
+            --enable-network-legacy \
 %if %{without doc}
             --disable-documentation \
 %endif
             ${NULL}
 
-%make_build
+
+%make_build DRACUT_FULL_VERSION="%{version}-%{release}"
+
 
 %install
-%make_install %{?_smp_mflags} \
+%make_install DRACUT_FULL_VERSION="%{version}-%{release}" %{?_smp_mflags} \
      libdir=%{_prefix}/lib
 
 echo "DRACUT_VERSION=%{version}-%{release}" > $RPM_BUILD_ROOT/%{dracutlibdir}/dracut-version.sh
@@ -229,9 +229,6 @@ rm -fr -- $RPM_BUILD_ROOT/%{dracutlibdir}/modules.d/10dash
 # we do not support mksh in the initramfs
 rm -fr -- $RPM_BUILD_ROOT/%{dracutlibdir}/modules.d/00mksh
 
-# Remove obsolete module
-rm -fr -- $RPM_BUILD_ROOT/%{dracutlibdir}/modules.d/35network-legacy
-
 %ifnarch s390 s390x
 # remove architecture specific modules
 rm -fr -- $RPM_BUILD_ROOT/%{dracutlibdir}/modules.d/68cms
@@ -278,7 +275,6 @@ echo 'dracut_rescue_image="yes"' > $RPM_BUILD_ROOT%{dracutlibdir}/dracut.conf.d/
 %dir %{dracutlibdir}
 %dir %{dracutlibdir}/modules.d
 %{dracutlibdir}/dracut-functions.sh
-%{dracutlibdir}/dracut-init.sh
 %{dracutlibdir}/dracut-functions
 %{dracutlibdir}/dracut-version.sh
 %{dracutlibdir}/dracut-logger.sh
@@ -313,29 +309,29 @@ echo 'dracut_rescue_image="yes"' > $RPM_BUILD_ROOT%{dracutlibdir}/dracut.conf.d/
 %ifnarch s390 s390x
 %{dracutlibdir}/modules.d/10warpclock
 %endif
+
 %{dracutlibdir}/modules.d/11fips
 %{dracutlibdir}/modules.d/11fips-crypto-policies
 %{dracutlibdir}/modules.d/11systemd-ac-power
 %{dracutlibdir}/modules.d/11systemd-ask-password
-%{dracutlibdir}/modules.d/11systemd-bsod
 %{dracutlibdir}/modules.d/11systemd-battery-check
+%{dracutlibdir}/modules.d/11systemd-bsod
 %{dracutlibdir}/modules.d/11systemd-coredump
 %{dracutlibdir}/modules.d/11systemd-creds
-%{dracutlibdir}/modules.d/11systemd-cryptsetup
 %{dracutlibdir}/modules.d/11systemd-hostnamed
 %{dracutlibdir}/modules.d/11systemd-initrd
 %{dracutlibdir}/modules.d/11systemd-integritysetup
 %{dracutlibdir}/modules.d/11systemd-journald
 %{dracutlibdir}/modules.d/11systemd-ldconfig
 %{dracutlibdir}/modules.d/11systemd-modules-load
-%{dracutlibdir}/modules.d/11systemd-pcrphase
+%{dracutlibdir}/modules.d/11systemd-pcrextend
 %{dracutlibdir}/modules.d/11systemd-portabled
 %{dracutlibdir}/modules.d/11systemd-pstore
 %{dracutlibdir}/modules.d/11systemd-repart
 %{dracutlibdir}/modules.d/11systemd-resolved
-%{dracutlibdir}/modules.d/11systemd-sysext
 %{dracutlibdir}/modules.d/11systemd-sysctl
-%{dracutlibdir}/modules.d/78systemd-sysusers
+%{dracutlibdir}/modules.d/11systemd-sysext
+%{dracutlibdir}/modules.d/11systemd-sysusers-service
 %{dracutlibdir}/modules.d/11systemd-timedated
 %{dracutlibdir}/modules.d/11systemd-timesyncd
 %{dracutlibdir}/modules.d/11systemd-tmpfiles
@@ -352,29 +348,36 @@ echo 'dracut_rescue_image="yes"' > $RPM_BUILD_ROOT%{dracutlibdir}/dracut.conf.d/
 %{dracutlibdir}/modules.d/20i18n
 %{dracutlibdir}/modules.d/30convertfs
 %{dracutlibdir}/modules.d/45drm
-%{dracutlibdir}/modules.d/45simpledrm
 %{dracutlibdir}/modules.d/45net-lib
 %{dracutlibdir}/modules.d/45plymouth
+%{dracutlibdir}/modules.d/45simpledrm
+%{dracutlibdir}/modules.d/45systemd-import
 %{dracutlibdir}/modules.d/45url-lib
-%{dracutlibdir}/modules.d/70bluetooth
 %{dracutlibdir}/modules.d/68lvmmerge
 %{dracutlibdir}/modules.d/68lvmthinpool-monitor
+%{dracutlibdir}/modules.d/70bluetooth
 %{dracutlibdir}/modules.d/70btrfs
 %{dracutlibdir}/modules.d/70crypt
+%{dracutlibdir}/modules.d/70crypt-lib
+%{dracutlibdir}/modules.d/70devicetree-firmware
 %{dracutlibdir}/modules.d/70dm
 %{dracutlibdir}/modules.d/70dmraid
+%{dracutlibdir}/modules.d/70fs-lib
 %{dracutlibdir}/modules.d/70kernel-modules
 %{dracutlibdir}/modules.d/70kernel-modules-export
 %{dracutlibdir}/modules.d/70kernel-modules-extra
 %{dracutlibdir}/modules.d/70lvm
 %{dracutlibdir}/modules.d/70mdraid
+%{dracutlibdir}/modules.d/70memdisk
 %{dracutlibdir}/modules.d/70multipath
-%{dracutlibdir}/modules.d/70nvdimm
 %{dracutlibdir}/modules.d/70numlock
+%{dracutlibdir}/modules.d/70nvdimm
 %{dracutlibdir}/modules.d/70overlayfs
-%{dracutlibdir}/modules.d/70ppcmac
 %{dracutlibdir}/modules.d/70pcmcia
+%{dracutlibdir}/modules.d/70ppcmac
 %{dracutlibdir}/modules.d/70qemu
+%{dracutlibdir}/modules.d/71overlayfs-crypt
+%{dracutlibdir}/modules.d/71systemd-cryptsetup
 %{dracutlibdir}/modules.d/73crypt-gpg
 %{dracutlibdir}/modules.d/73crypt-loop
 %{dracutlibdir}/modules.d/73fido2
@@ -392,34 +395,36 @@ echo 'dracut_rescue_image="yes"' > $RPM_BUILD_ROOT%{dracutlibdir}/dracut.conf.d/
 %{dracutlibdir}/modules.d/74udev-rules
 %{dracutlibdir}/modules.d/74virtfs
 %{dracutlibdir}/modules.d/74virtiofs
-%ifarch s390 s390x
-%{dracutlibdir}/modules.d/68cms
-%{dracutlibdir}/modules.d/69cio_ignore
-%{dracutlibdir}/modules.d/73zipl
-%{dracutlibdir}/modules.d/74dasd
-%{dracutlibdir}/modules.d/74dasd_mod
-%{dracutlibdir}/modules.d/74dcssblk
-%{dracutlibdir}/modules.d/74zfcp
-%endif
 %{dracutlibdir}/modules.d/75securityfs
-%{dracutlibdir}/modules.d/76masterkey
-%{dracutlibdir}/modules.d/77integrity
 %{dracutlibdir}/modules.d/76biosdevname
+%{dracutlibdir}/modules.d/76masterkey
 %{dracutlibdir}/modules.d/76systemd-emergency
 %{dracutlibdir}/modules.d/77dracut-systemd
 %{dracutlibdir}/modules.d/77ecryptfs
+%{dracutlibdir}/modules.d/77initqueue
+%{dracutlibdir}/modules.d/77integrity
 %{dracutlibdir}/modules.d/77pollcdrom
 %{dracutlibdir}/modules.d/77selinux
 %{dracutlibdir}/modules.d/77syslog
 %{dracutlibdir}/modules.d/77usrmount
-%{dracutlibdir}/modules.d/77initqueue
+%{dracutlibdir}/modules.d/78systemd-sysusers
 %{dracutlibdir}/modules.d/80base
 %{dracutlibdir}/modules.d/81busybox
 %{dracutlibdir}/modules.d/84memstrack
-%{dracutlibdir}/modules.d/70fs-lib
-%{dracutlibdir}/modules.d/99openssl
-%{dracutlibdir}/modules.d/86shutdown
 %{dracutlibdir}/modules.d/85shell-interpreter
+%{dracutlibdir}/modules.d/86shutdown
+%{dracutlibdir}/modules.d/99openssl
+
+%ifarch s390 s390x
+%{dracutlibdir}/modules.d/68cms
+%{dracutlibdir}/modules.d/69cio_ignore
+%{dracutlibdir}/modules.d/73zipl
+%{dracutlibdir}/modules.d/74dasd
+%{dracutlibdir}/modules.d/74dasd_mod
+%{dracutlibdir}/modules.d/74dcssblk
+%{dracutlibdir}/modules.d/74zfcp
+%endif
+
 %attr(0644,root,root) %ghost %config(missingok,noreplace) %{_localstatedir}/log/dracut.log
 %dir %{_sharedstatedir}/initramfs
 %if %{defined _unitdir}
@@ -497,6 +502,9 @@ echo 'dracut_rescue_image="yes"' > $RPM_BUILD_ROOT%{dracutlibdir}/dracut.conf.d/
 %{_prefix}/lib/kernel/install.d/51-dracut-rescue.install
 
 %changelog
+* Fri Jul 31 2026 Pavel Valena <pvalena@redhat.com> - 111-1
+- build: upgrade to dracut 111
+
 * Wed Jul 15 2026 Fedora Release Engineering <releng@fedoraproject.org> - 109-7
 - Rebuilt for https://fedoraproject.org/wiki/Fedora_45_Mass_Rebuild
 

diff --git a/sources b/sources
index a80d607..d4d5e4d 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (109.tar.gz) = c1fb0191911b3b3eac4f568db1cbc8184e2b518a70a0567777b72ef8a5af70a8bdb1b3f8acce2d92eb2dc807e056d5b75aed93292cd05bc8c333efe5d4b98adc
+SHA512 (111.tar.gz) = 4c8a3e1e82bfc1dbe155241564bc93bedc2b321566002ccc643697b50173b8e564d03b1bbff4f49602e0cb7abbee21dfb14aadc453ac9703a846c160d070b4bc

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2026-08-09 20:08 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-08-09 20:08 [rpms/dracut] rawhide: Upgrade to dracut 111 Pavel Valena

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox