summary refs log tree commit diff
path: root/nixos
diff options
context:
space:
mode:
authorLuflosi <luflosi@luflosi.de>2021-11-07 20:49:45 +0100
committerLuflosi <luflosi@luflosi.de>2022-01-24 22:56:14 +0100
commit1c58cdbeed880e99d816c234a954d4cdfc073b6c (patch)
treedc7ce1d03b4305ce425959d71b26baab038b57c6 /nixos
parent68eafd0937d33eda3a88389345da6bb32f2a6d3b (diff)
downloadnixpkgs-1c58cdbeed880e99d816c234a954d4cdfc073b6c.tar
nixpkgs-1c58cdbeed880e99d816c234a954d4cdfc073b6c.tar.gz
nixpkgs-1c58cdbeed880e99d816c234a954d4cdfc073b6c.tar.bz2
nixpkgs-1c58cdbeed880e99d816c234a954d4cdfc073b6c.tar.lz
nixpkgs-1c58cdbeed880e99d816c234a954d4cdfc073b6c.tar.xz
nixpkgs-1c58cdbeed880e99d816c234a954d4cdfc073b6c.tar.zst
nixpkgs-1c58cdbeed880e99d816c234a954d4cdfc073b6c.zip
nixos/modprobe: add boot.initrd.extraModprobeConfig option
This option behaves exactly like `boot.extraModprobeConfig`, except that it also includes the generated modprobe.d file in the initrd.
Many years ago, someone tried to include the normal modprobe.d/nixos.conf file generated by `boot.extraModprobeConfig` in the initrd: 0aa2c1dc46779a3df6c4e02d3fae39b0de297be8. This file contains a reference to a directory with firmware files inside. Including firmware in the initrd made it too big, so the commit was reverted again in 4a4c051a95b6b8da3a13d7955087e915e6dd4bf7.
The `boot.extraModprobeConfig` option not changing the initrd caused me much confusion because I tried to set the maximum cache size for ZFS and it didn't work.
Closes https://github.com/NixOS/nixpkgs/issues/25456.
Diffstat (limited to 'nixos')
-rw-r--r--nixos/doc/manual/from_md/release-notes/rl-2205.section.xml8
-rw-r--r--nixos/doc/manual/release-notes/rl-2205.section.md2
-rw-r--r--nixos/modules/system/boot/modprobe.nix20
-rw-r--r--nixos/modules/system/boot/stage-1.nix3
4 files changed, 33 insertions, 0 deletions
diff --git a/nixos/doc/manual/from_md/release-notes/rl-2205.section.xml b/nixos/doc/manual/from_md/release-notes/rl-2205.section.xml
index ea2388c1bdb..d1692c66a4b 100644
--- a/nixos/doc/manual/from_md/release-notes/rl-2205.section.xml
+++ b/nixos/doc/manual/from_md/release-notes/rl-2205.section.xml
@@ -609,6 +609,14 @@
       </listitem>
       <listitem>
         <para>
+          A new option
+          <literal>boot.initrd.extraModprobeConfig</literal> has been
+          added which can be used to configure kernel modules that are
+          loaded in the initrd.
+        </para>
+      </listitem>
+      <listitem>
+        <para>
           <literal>fetchFromSourcehut</literal> now allows fetching
           repositories recursively using <literal>fetchgit</literal> or
           <literal>fetchhg</literal> if the argument
diff --git a/nixos/doc/manual/release-notes/rl-2205.section.md b/nixos/doc/manual/release-notes/rl-2205.section.md
index 673a82a408c..f2484c911e7 100644
--- a/nixos/doc/manual/release-notes/rl-2205.section.md
+++ b/nixos/doc/manual/release-notes/rl-2205.section.md
@@ -211,6 +211,8 @@ In addition to numerous new and upgraded packages, this release has the followin
 
 - The option `services.duplicati.dataDir` has been added to allow changing the location of duplicati's files.
 
+- A new option `boot.initrd.extraModprobeConfig` has been added which can be used to configure kernel modules that are loaded in the initrd.
+
 - `fetchFromSourcehut` now allows fetching repositories recursively
   using `fetchgit` or `fetchhg` if the argument `fetchSubmodules`
   is set to `true`.
diff --git a/nixos/modules/system/boot/modprobe.nix b/nixos/modules/system/boot/modprobe.nix
index c75f32c4d99..7426d148891 100644
--- a/nixos/modules/system/boot/modprobe.nix
+++ b/nixos/modules/system/boot/modprobe.nix
@@ -34,6 +34,23 @@ with lib;
       type = types.lines;
     };
 
+    boot.initrd.extraModprobeConfig = mkOption {
+      default = "";
+      example =
+        ''
+          options zfs zfs_arc_max=1073741824
+        '';
+      description = ''
+        Does exactly the same thing as
+        <option>boot.extraModprobeConfig</option>, except
+        that the generated <filename>modprobe.conf</filename>
+        file is also included in the initrd.
+        This is useful for setting module options for kernel
+        modules that are loaded during early boot in the initrd.
+      '';
+      type = types.lines;
+    };
+
   };
 
 
@@ -50,6 +67,9 @@ with lib;
         '')}
         ${config.boot.extraModprobeConfig}
       '';
+    environment.etc."modprobe.d/nixos-initrd.conf".text = ''
+        ${config.boot.initrd.extraModprobeConfig}
+      '';
     environment.etc."modprobe.d/debian.conf".source = pkgs.kmod-debian-aliases;
 
     environment.systemPackages = [ pkgs.kmod ];
diff --git a/nixos/modules/system/boot/stage-1.nix b/nixos/modules/system/boot/stage-1.nix
index 6dfe6b939ab..9c684fbada2 100644
--- a/nixos/modules/system/boot/stage-1.nix
+++ b/nixos/modules/system/boot/stage-1.nix
@@ -338,6 +338,9 @@ let
         { object = pkgs.writeText "mdadm.conf" config.boot.initrd.mdadmConf;
           symlink = "/etc/mdadm.conf";
         }
+        { object = config.environment.etc."modprobe.d/nixos-initrd.conf".source;
+          symlink = "/etc/modprobe.d/nixos-initrd.conf";
+        }
         { object = pkgs.runCommand "initrd-kmod-blacklist-ubuntu" {
               src = "${pkgs.kmod-blacklist-ubuntu}/modprobe.conf";
               preferLocalBuild = true;