0
0
Fork 0
mirror of https://github.com/NixOS/nixpkgs.git synced 2025-07-13 13:40:28 +03:00

Merge pull request #183314 from DeterminateSystems/optional-swraid

Make swraid optional
This commit is contained in:
Will Fancher 2023-07-13 16:24:34 -04:00 committed by GitHub
commit 11fec97761
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 63 additions and 36 deletions

View file

@ -1,47 +1,71 @@
{ config, pkgs, lib, ... }: let
cfg = config.boot.initrd.services.swraid;
cfg = config.boot.swraid;
in {
options.boot.initrd.services.swraid = {
options.boot.swraid = {
enable = lib.mkEnableOption (lib.mdDoc "swraid support using mdadm") // {
description = ''
*This will only be used when systemd is used in stage 1.*
description = lib.mdDoc ''
Whether to enable support for Linux MD RAID arrays.
Whether to enable swraid support using mdadm.
When this is enabled, mdadm will be added to the system path,
and MD RAID arrays will be detected and activated
automatically, both in stage-1 (initramfs) and in stage-2 (the
final NixOS system).
This should be enabled if you want to be able to access and/or
boot from MD RAID arrays. {command}`nixos-generate-config`
should detect it correctly in the standard installation
procedure.
'';
default = lib.versionOlder config.system.stateVersion "23.11";
defaultText = lib.mdDoc "`true` if stateVersion is older than 23.11";
};
mdadmConf = lib.mkOption {
description = lib.mdDoc "Contents of {file}`/etc/mdadm.conf` in initrd.";
description = lib.mdDoc "Contents of {file}`/etc/mdadm.conf`.";
type = lib.types.lines;
default = "";
};
};
config = {
config = lib.mkIf cfg.enable {
environment.systemPackages = [ pkgs.mdadm ];
services.udev.packages = [ pkgs.mdadm ];
systemd.packages = [ pkgs.mdadm ];
boot.initrd.availableKernelModules = lib.mkIf (config.boot.initrd.systemd.enable -> cfg.enable) [ "md_mod" "raid0" "raid1" "raid10" "raid456" ];
boot.initrd = {
availableKernelModules = [ "md_mod" "raid0" "raid1" "raid10" "raid456" ];
boot.initrd.extraUdevRulesCommands = lib.mkIf (!config.boot.initrd.systemd.enable) ''
cp -v ${pkgs.mdadm}/lib/udev/rules.d/*.rules $out/
'';
extraUdevRulesCommands = lib.mkIf (!config.boot.initrd.systemd.enable) ''
cp -v ${pkgs.mdadm}/lib/udev/rules.d/*.rules $out/
'';
boot.initrd.systemd = lib.mkIf cfg.enable {
contents."/etc/mdadm.conf" = lib.mkIf (cfg.mdadmConf != "") {
text = cfg.mdadmConf;
extraUtilsCommands = ''
# Add RAID mdadm tool.
copy_bin_and_libs ${pkgs.mdadm}/sbin/mdadm
copy_bin_and_libs ${pkgs.mdadm}/sbin/mdmon
'';
extraUtilsCommandsTest = ''
$out/bin/mdadm --version
'';
extraFiles."/etc/mdadm.conf".source = pkgs.writeText "mdadm.conf" config.boot.swraid.mdadmConf;
systemd = {
contents."/etc/mdadm.conf" = lib.mkIf (cfg.mdadmConf != "") {
text = cfg.mdadmConf;
};
packages = [ pkgs.mdadm ];
initrdBin = [ pkgs.mdadm ];
};
packages = [ pkgs.mdadm ];
initrdBin = [ pkgs.mdadm ];
services.udev.packages = [ pkgs.mdadm ];
};
boot.initrd.services.udev.packages = lib.mkIf cfg.enable [ pkgs.mdadm ];
};
}