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:
commit
11fec97761
7 changed files with 63 additions and 36 deletions
|
@ -381,6 +381,7 @@ sub in {
|
|||
|
||||
my $fileSystems;
|
||||
my %fsByDev;
|
||||
my $useSwraid = 0;
|
||||
foreach my $fs (read_file("/proc/self/mountinfo")) {
|
||||
chomp $fs;
|
||||
my @fields = split / /, $fs;
|
||||
|
@ -510,8 +511,8 @@ EOF
|
|||
# boot.initrd.luks.devices entry.
|
||||
if (-e $device) {
|
||||
my $deviceName = basename(abs_path($device));
|
||||
if (-e "/sys/class/block/$deviceName"
|
||||
&& read_file("/sys/class/block/$deviceName/dm/uuid", err_mode => 'quiet') =~ /^CRYPT-LUKS/)
|
||||
my $dmUuid = read_file("/sys/class/block/$deviceName/dm/uuid", err_mode => 'quiet');
|
||||
if ($dmUuid =~ /^CRYPT-LUKS/)
|
||||
{
|
||||
my @slaves = glob("/sys/class/block/$deviceName/slaves/*");
|
||||
if (scalar @slaves == 1) {
|
||||
|
@ -527,8 +528,14 @@ EOF
|
|||
}
|
||||
}
|
||||
}
|
||||
if (-e "/sys/class/block/$deviceName/md/uuid") {
|
||||
$useSwraid = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($useSwraid) {
|
||||
push @attrs, "boot.swraid.enable = true;\n\n";
|
||||
}
|
||||
|
||||
|
||||
# Generate the hardware configuration file.
|
||||
|
|
|
@ -106,6 +106,8 @@ with lib;
|
|||
systemdStage1Network
|
||||
];
|
||||
|
||||
boot.swraid.enable = true;
|
||||
|
||||
# Show all debug messages from the kernel but don't log refused packets
|
||||
# because we have the firewall enabled. This makes installs from the
|
||||
# console less cumbersome if the machine has a public IP.
|
||||
|
|
|
@ -133,10 +133,6 @@ let
|
|||
copy_bin_and_libs ${getBin pkgs.lvm2}/bin/dmsetup
|
||||
copy_bin_and_libs ${getBin pkgs.lvm2}/bin/lvm
|
||||
|
||||
# Add RAID mdadm tool.
|
||||
copy_bin_and_libs ${pkgs.mdadm}/sbin/mdadm
|
||||
copy_bin_and_libs ${pkgs.mdadm}/sbin/mdmon
|
||||
|
||||
# Copy udev.
|
||||
copy_bin_and_libs ${udev}/bin/udevadm
|
||||
copy_bin_and_libs ${udev}/lib/systemd/systemd-sysctl
|
||||
|
@ -225,7 +221,6 @@ let
|
|||
$out/bin/udevadm --version
|
||||
$out/bin/dmsetup --version 2>&1 | tee -a log | grep -q "version:"
|
||||
LVM_SYSTEM_DIR=$out $out/bin/lvm version 2>&1 | tee -a log | grep -q "LVM"
|
||||
$out/bin/mdadm --version
|
||||
${optionalString config.services.multipath.enable ''
|
||||
($out/bin/multipath || true) 2>&1 | grep -q 'need to be root'
|
||||
($out/bin/multipathd || true) 2>&1 | grep -q 'need to be root'
|
||||
|
@ -354,9 +349,6 @@ let
|
|||
[ { object = bootStage1;
|
||||
symlink = "/init";
|
||||
}
|
||||
{ object = pkgs.writeText "mdadm.conf" config.boot.initrd.services.swraid.mdadmConf;
|
||||
symlink = "/etc/mdadm.conf";
|
||||
}
|
||||
{ object = pkgs.runCommand "initrd-kmod-blacklist-ubuntu" {
|
||||
src = "${pkgs.kmod-blacklist-ubuntu}/modprobe.conf";
|
||||
preferLocalBuild = true;
|
||||
|
@ -727,6 +719,6 @@ in
|
|||
};
|
||||
|
||||
imports = [
|
||||
(mkRenamedOptionModule [ "boot" "initrd" "mdadmConf" ] [ "boot" "initrd" "services" "swraid" "mdadmConf" ])
|
||||
(mkRenamedOptionModule [ "boot" "initrd" "mdadmConf" ] [ "boot" "swraid" "mdadmConf" ])
|
||||
];
|
||||
}
|
||||
|
|
|
@ -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 ];
|
||||
};
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue