]> git.ipfire.org Git - thirdparty/dracut.git/commitdiff
Add a --hostonly-nics option
authorKairui Song <kasong@redhat.com>
Wed, 21 Oct 2020 08:18:07 +0000 (16:18 +0800)
committerHarald Hoyer <harald@hoyer.xyz>
Mon, 26 Oct 2020 13:16:19 +0000 (14:16 +0100)
Currently when network is enabled, dracut will install all network
drivers that are currently loaded, but some time only one NIC is needed
for the initramfs.

So for strict hostonly mode, add a --hostonly-nics option, user can
provide a list of NICs to be enabled, and only needed drivers for
specifed NICs will be installed so save space.

Signed-off-by: Kairui Song <kasong@redhat.com>
dracut.sh
modules.d/90kernel-network-modules/module-setup.sh

index c03d9c58cca94e5284259545504c6a24297fe774..0f464839703d29cadb98357795cb37aa127facde 100755 (executable)
--- a/dracut.sh
+++ b/dracut.sh
@@ -175,6 +175,8 @@ Creates initial ramdisk images for preloading modules
   --hostonly-i18n       Install only needed keyboard and font files according
                         to the host configuration (default).
   --no-hostonly-i18n    Install all keyboard and font files available.
+  --hostonly-nics [LIST]
+                        Only enable listed NICs in the initramfs.
   --persistent-policy [POLICY]
                         Use [POLICY] to address disks and partitions.
                         POLICY can be any directory name found in /dev/disk.
@@ -424,6 +426,7 @@ rearrange_params()
         --long kernel-image: \
         --long no-hostonly-i18n \
         --long hostonly-i18n \
+        --long hostonly-nics: \
         --long no-machineid \
         --long version \
         -- "$@")
@@ -587,6 +590,8 @@ while :; do
                        hostonly_cmdline_l="yes" ;;
         --hostonly-i18n)
                        i18n_install_all_l="no" ;;
+        --hostonly-nics)
+                       hostonly_nics_l+=("$2");           PARMS_TO_STORE+=" '$2'"; shift;;
         --no-hostonly-i18n)
                        i18n_install_all_l="yes" ;;
         --no-hostonly-cmdline)
@@ -755,6 +760,7 @@ unset NPATH
 (( ${#fstab_lines_l[@]} )) && fstab_lines+=( "${fstab_lines_l[@]}" )
 (( ${#install_items_l[@]} )) && install_items+=" ${install_items_l[@]} "
 (( ${#install_optional_items_l[@]} )) && install_optional_items+=" ${install_optional_items_l[@]} "
+(( ${#hostonly_nics_l[@]} )) && hostonly_nics+=" ${hostonly_nics_l[@]} "
 
 # these options override the stuff in the config file
 (( ${#dracutmodules_l[@]} )) && dracutmodules="${dracutmodules_l[@]}"
index 6e4069319f2db1076708be02f15cd8920b07593a..09015738444778f6cecdcfae0ac8a9f4629bcc5f 100755 (executable)
@@ -14,15 +14,27 @@ depends() {
 installkernel() {
     # Include wired net drivers, excluding wireless
     local _arch=${DRACUT_ARCH:-$(uname -m)}
-    local _net_drivers='eth_type_trans|register_virtio_device|usbnet_open'
+    local _net_symbols='eth_type_trans|register_virtio_device|usbnet_open'
     local _unwanted_drivers='/(wireless|isdn|uwb|net/ethernet|net/phy|net/team)/'
+    local _net_drivers
 
     if [ "$_arch" = "s390" -o "$_arch" = "s390x" ]; then
-        _s390drivers="=drivers/s390/net"
+        dracut_instmods -o -P ".*${_unwanted_drivers}.*" -s "$_net_symbols" "=drivers/s390/net"
     fi
 
-    dracut_instmods -o -P ".*${_unwanted_drivers}.*" -s "$_net_drivers" "=drivers/net" ${_s390drivers:+"$_s390drivers"}
+    if [[ $hostonly_mode == 'strict' ]] && [[ $hostonly_nics ]]; then
+        for _nic in $hostonly_nics; do
+            _net_drivers=$(get_dev_module /sys/class/net/$_nic)
+            if ! [[ $_net_drivers ]]; then
+                derror "--hostonly-nics contains invalid NIC '$_nic'"
+                continue
+            fi
+            hostonly="" instmods $_net_drivers
+        done
+        return 0
+    fi
 
+    dracut_instmods -o -P ".*${_unwanted_drivers}.*" -s "$_net_symbols" "=drivers/net"
     #instmods() will take care of hostonly
     instmods \
         =drivers/net/phy \