nixos/udev: Put all initrd options into a namespace
This commit is contained in:
parent
fb44ecd129
commit
7024b4e5e3
2 changed files with 58 additions and 50 deletions
|
@ -197,34 +197,6 @@ in
|
|||
apply = map getBin;
|
||||
};
|
||||
|
||||
initrdPackages = mkOption {
|
||||
type = types.listOf types.path;
|
||||
default = [];
|
||||
visible = false;
|
||||
description = ''
|
||||
<emphasis>This will only be used when systemd is used in stage 1.</emphasis>
|
||||
|
||||
List of packages containing <command>udev</command> rules that will be copied to stage 1.
|
||||
All files found in
|
||||
<filename><replaceable>pkg</replaceable>/etc/udev/rules.d</filename> and
|
||||
<filename><replaceable>pkg</replaceable>/lib/udev/rules.d</filename>
|
||||
will be included.
|
||||
'';
|
||||
};
|
||||
|
||||
initrdBinPackages = mkOption {
|
||||
type = types.listOf types.path;
|
||||
default = [];
|
||||
visible = false;
|
||||
description = ''
|
||||
<emphasis>This will only be used when systemd is used in stage 1.</emphasis>
|
||||
|
||||
Packages to search for binaries that are referenced by the udev rules in stage 1.
|
||||
This list always contains /bin of the initrd.
|
||||
'';
|
||||
apply = map getBin;
|
||||
};
|
||||
|
||||
path = mkOption {
|
||||
type = types.listOf types.path;
|
||||
default = [];
|
||||
|
@ -234,20 +206,6 @@ in
|
|||
'';
|
||||
};
|
||||
|
||||
initrdRules = mkOption {
|
||||
default = "";
|
||||
example = ''
|
||||
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:1D:60:B9:6D:4F", KERNEL=="eth*", NAME="my_fast_network_card"
|
||||
'';
|
||||
type = types.lines;
|
||||
description = ''
|
||||
<command>udev</command> rules to include in the initrd
|
||||
<emphasis>only</emphasis>. They'll be written into file
|
||||
<filename>99-local.rules</filename>. Thus they are read and applied
|
||||
after the essential initrd rules.
|
||||
'';
|
||||
};
|
||||
|
||||
extraRules = mkOption {
|
||||
default = "";
|
||||
example = ''
|
||||
|
@ -315,6 +273,52 @@ in
|
|||
'';
|
||||
};
|
||||
|
||||
boot.initrd.services.udev = {
|
||||
|
||||
packages = mkOption {
|
||||
type = types.listOf types.path;
|
||||
default = [];
|
||||
visible = false;
|
||||
description = ''
|
||||
<emphasis>This will only be used when systemd is used in stage 1.</emphasis>
|
||||
|
||||
List of packages containing <command>udev</command> rules that will be copied to stage 1.
|
||||
All files found in
|
||||
<filename><replaceable>pkg</replaceable>/etc/udev/rules.d</filename> and
|
||||
<filename><replaceable>pkg</replaceable>/lib/udev/rules.d</filename>
|
||||
will be included.
|
||||
'';
|
||||
};
|
||||
|
||||
binPackages = mkOption {
|
||||
type = types.listOf types.path;
|
||||
default = [];
|
||||
visible = false;
|
||||
description = ''
|
||||
<emphasis>This will only be used when systemd is used in stage 1.</emphasis>
|
||||
|
||||
Packages to search for binaries that are referenced by the udev rules in stage 1.
|
||||
This list always contains /bin of the initrd.
|
||||
'';
|
||||
apply = map getBin;
|
||||
};
|
||||
|
||||
rules = mkOption {
|
||||
default = "";
|
||||
example = ''
|
||||
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:1D:60:B9:6D:4F", KERNEL=="eth*", NAME="my_fast_network_card"
|
||||
'';
|
||||
type = types.lines;
|
||||
description = ''
|
||||
<command>udev</command> rules to include in the initrd
|
||||
<emphasis>only</emphasis>. They'll be written into file
|
||||
<filename>99-local.rules</filename>. Thus they are read and applied
|
||||
after the essential initrd rules.
|
||||
'';
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
@ -330,10 +334,10 @@ in
|
|||
|
||||
boot.kernelParams = mkIf (!config.networking.usePredictableInterfaceNames) [ "net.ifnames=0" ];
|
||||
|
||||
boot.initrd.extraUdevRulesCommands = optionalString (!config.boot.initrd.systemd.enable && cfg.initrdRules != "")
|
||||
boot.initrd.extraUdevRulesCommands = optionalString (!config.boot.initrd.systemd.enable && config.boot.initrd.services.udev.rules != "")
|
||||
''
|
||||
cat <<'EOF' > $out/99-local.rules
|
||||
${cfg.initrdRules}
|
||||
${config.boot.initrd.services.udev.rules}
|
||||
EOF
|
||||
'';
|
||||
|
||||
|
@ -348,25 +352,25 @@ in
|
|||
boot.initrd.systemd.storePaths = [
|
||||
"${config.boot.initrd.systemd.package}/lib/systemd/systemd-udevd"
|
||||
"${config.boot.initrd.systemd.package}/lib/udev"
|
||||
] ++ map toString cfg.initrdBinPackages;
|
||||
] ++ map (x: "${x}/bin") config.boot.initrd.services.udev.binPackages;
|
||||
|
||||
# Generate the udev rules for the initrd
|
||||
boot.initrd.systemd.contents = {
|
||||
"/etc/udev/rules.d".source = udevRulesFor {
|
||||
name = "initrd-udev-rules";
|
||||
initrdBin = config.boot.initrd.systemd.contents."/bin".source;
|
||||
udevPackages = cfg.initrdPackages;
|
||||
udevPackages = config.boot.initrd.services.udev.packages;
|
||||
udevPath = config.boot.initrd.systemd.contents."/bin".source;
|
||||
udev = config.boot.initrd.systemd.package;
|
||||
systemd = config.boot.initrd.systemd.package;
|
||||
binPackages = cfg.initrdBinPackages ++ [ config.boot.initrd.systemd.contents."/bin".source ];
|
||||
binPackages = config.boot.initrd.services.udev.binPackages ++ [ config.boot.initrd.systemd.contents."/bin".source ];
|
||||
};
|
||||
};
|
||||
# Insert custom rules
|
||||
services.udev.initrdPackages = mkIf (cfg.initrdRules != "") (pkgs.writeTextFile {
|
||||
boot.initrd.services.udev.packages = mkIf (config.boot.initrd.services.udev.rules != "") (pkgs.writeTextFile {
|
||||
name = "initrd-udev-rules";
|
||||
destination = "/etc/udev/rules.d/99-local.rules";
|
||||
text = cfg.initrdRules;
|
||||
text = config.boot.initrd.services.udev.rules;
|
||||
});
|
||||
|
||||
environment.etc =
|
||||
|
@ -408,4 +412,8 @@ in
|
|||
};
|
||||
|
||||
};
|
||||
|
||||
imports = [
|
||||
(mkRenamedOptionModule [ "services" "udev" "initrdRules" ] [ "boot" "initrd" "services" "udev" "rules" ])
|
||||
];
|
||||
}
|
||||
|
|
|
@ -878,7 +878,7 @@ let
|
|||
linkConfig.Name = "custom_name";
|
||||
};
|
||||
}
|
||||
else { services.udev.initrdRules = ''
|
||||
else { boot.initrd.services.udev.rules = ''
|
||||
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="52:54:00:12:01:01", KERNEL=="eth*", NAME="custom_name"
|
||||
'';
|
||||
});
|
||||
|
|
Loading…
Reference in a new issue