Merge pull request #226821 from enc0urage/memtest

Changed files
+21 -59
nixos
modules
system
boot
loader
grub
systemd-boot
tests
+11 -38
nixos/modules/system/boot/loader/grub/memtest.nix
···
-
# This module adds Memtest86+/Memtest86 to the GRUB boot menu.
-
{ config, lib, pkgs, ... }:
with lib;
let
memtest86 = pkgs.memtest86plus;
-
efiSupport = config.boot.loader.grub.efiSupport;
cfg = config.boot.loader.grub.memtest86;
in
···
default = false;
type = types.bool;
description = lib.mdDoc ''
-
Make Memtest86+ (or MemTest86 if EFI support is enabled),
-
a memory testing program, available from the
-
GRUB boot menu. MemTest86 is an unfree program, so
-
this requires `allowUnfree` to be set to
-
`true`.
'';
};
···
};
};
-
config = mkMerge [
-
(mkIf (cfg.enable && efiSupport) {
-
assertions = [
-
{
-
assertion = cfg.params == [];
-
message = "Parameters are not available for MemTest86";
-
}
-
];
-
-
boot.loader.grub.extraFiles = {
-
"memtest86.efi" = "${pkgs.memtest86-efi}/BOOTX64.efi";
-
};
-
-
boot.loader.grub.extraEntries = ''
-
menuentry "Memtest86" {
-
chainloader /memtest86.efi
-
}
-
'';
-
})
-
-
(mkIf (cfg.enable && !efiSupport) {
-
boot.loader.grub.extraEntries = ''
-
menuentry "Memtest86+" {
-
linux16 @bootRoot@/memtest.bin ${toString cfg.params}
-
}
-
'';
-
-
boot.loader.grub.extraFiles."memtest.bin" = "${memtest86}/memtest.bin";
-
})
-
];
}
···
+
# This module adds Memtest86+ to the GRUB boot menu.
{ config, lib, pkgs, ... }:
with lib;
let
memtest86 = pkgs.memtest86plus;
cfg = config.boot.loader.grub.memtest86;
in
···
default = false;
type = types.bool;
description = lib.mdDoc ''
+
Make Memtest86+, a memory testing program, available from the GRUB
+
boot menu.
'';
};
···
};
};
+
config = mkIf cfg.enable {
+
boot.loader.grub.extraEntries = ''
+
menuentry "Memtest86+" {
+
linux @bootRoot@/memtest.bin ${toString cfg.params}
+
}
+
'';
+
boot.loader.grub.extraFiles."memtest.bin" = "${memtest86}/memtest.bin";
+
};
}
+8 -13
nixos/modules/system/boot/loader/systemd-boot/systemd-boot.nix
···
inherit (config.system.nixos) distroName;
-
memtest86 = optionalString cfg.memtest86.enable pkgs.memtest86-efi;
netbootxyz = optionalString cfg.netbootxyz.enable pkgs.netbootxyz-efi;
···
default = false;
type = types.bool;
description = lib.mdDoc ''
-
Make MemTest86 available from the systemd-boot menu. MemTest86 is a
-
program for testing memory. MemTest86 is an unfree program, so
-
this requires `allowUnfree` to be set to
-
`true`.
'';
};
···
default = {};
example = literalExpression ''
{ "memtest86.conf" = '''
-
title MemTest86
-
efi /efi/memtest86/memtest86.efi
'''; }
'';
description = lib.mdDoc ''
···
type = types.attrsOf types.path;
default = {};
example = literalExpression ''
-
{ "efi/memtest86/memtest86.efi" = "''${pkgs.memtest86-efi}/BOOTX64.efi"; }
'';
description = lib.mdDoc ''
A set of files to be copied to {file}`/boot`.
···
boot.loader.supportsInitrdSecrets = true;
boot.loader.systemd-boot.extraFiles = mkMerge [
-
# TODO: This is hard-coded to use the 64-bit EFI app, but it could probably
-
# be updated to use the 32-bit EFI app on 32-bit systems. The 32-bit EFI
-
# app filename is BOOTIA32.efi.
(mkIf cfg.memtest86.enable {
-
"efi/memtest86/BOOTX64.efi" = "${pkgs.memtest86-efi}/BOOTX64.efi";
})
(mkIf cfg.netbootxyz.enable {
"efi/netbootxyz/netboot.xyz.efi" = "${pkgs.netbootxyz-efi}";
···
(mkIf cfg.memtest86.enable {
"${cfg.memtest86.entryFilename}" = ''
title MemTest86
-
efi /efi/memtest86/BOOTX64.efi
'';
})
(mkIf cfg.netbootxyz.enable {
···
inherit (config.system.nixos) distroName;
+
memtest86 = optionalString cfg.memtest86.enable pkgs.memtest86plus;
netbootxyz = optionalString cfg.netbootxyz.enable pkgs.netbootxyz-efi;
···
default = false;
type = types.bool;
description = lib.mdDoc ''
+
Make MemTest86+ available from the systemd-boot menu. MemTest86+ is a
+
program for testing memory.
'';
};
···
default = {};
example = literalExpression ''
{ "memtest86.conf" = '''
+
title MemTest86+
+
efi /efi/memtest86/memtest.efi
'''; }
'';
description = lib.mdDoc ''
···
type = types.attrsOf types.path;
default = {};
example = literalExpression ''
+
{ "efi/memtest86/memtest.efi" = "''${pkgs.memtest86plus}/memtest.efi"; }
'';
description = lib.mdDoc ''
A set of files to be copied to {file}`/boot`.
···
boot.loader.supportsInitrdSecrets = true;
boot.loader.systemd-boot.extraFiles = mkMerge [
(mkIf cfg.memtest86.enable {
+
"efi/memtest86/memtest.efi" = "${pkgs.memtest86plus.efi}";
})
(mkIf cfg.netbootxyz.enable {
"efi/netbootxyz/netboot.xyz.efi" = "${pkgs.netbootxyz-efi}";
···
(mkIf cfg.memtest86.enable {
"${cfg.memtest86.entryFilename}" = ''
title MemTest86
+
efi /efi/memtest86/memtest.efi
'';
})
(mkIf cfg.netbootxyz.enable {
+2 -8
nixos/tests/systemd-boot.nix
···
nodes.machine = { pkgs, lib, ... }: {
imports = [ common ];
boot.loader.systemd-boot.memtest86.enable = true;
-
nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [
-
"memtest86-efi"
-
];
};
testScript = ''
machine.succeed("test -e /boot/loader/entries/memtest86.conf")
-
machine.succeed("test -e /boot/efi/memtest86/BOOTX64.efi")
'';
};
···
imports = [ common ];
boot.loader.systemd-boot.memtest86.enable = true;
boot.loader.systemd-boot.memtest86.entryFilename = "apple.conf";
-
nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [
-
"memtest86-efi"
-
];
};
testScript = ''
machine.fail("test -e /boot/loader/entries/memtest86.conf")
machine.succeed("test -e /boot/loader/entries/apple.conf")
-
machine.succeed("test -e /boot/efi/memtest86/BOOTX64.efi")
'';
};
···
nodes.machine = { pkgs, lib, ... }: {
imports = [ common ];
boot.loader.systemd-boot.memtest86.enable = true;
};
testScript = ''
machine.succeed("test -e /boot/loader/entries/memtest86.conf")
+
machine.succeed("test -e /boot/efi/memtest86/memtest.efi")
'';
};
···
imports = [ common ];
boot.loader.systemd-boot.memtest86.enable = true;
boot.loader.systemd-boot.memtest86.entryFilename = "apple.conf";
};
testScript = ''
machine.fail("test -e /boot/loader/entries/memtest86.conf")
machine.succeed("test -e /boot/loader/entries/apple.conf")
+
machine.succeed("test -e /boot/efi/memtest86/memtest.efi")
'';
};