2020-04-11 20:38:55 +00:00
|
|
|
{ system ? builtins.currentSystem,
|
|
|
|
config ? {},
|
|
|
|
pkgs ? import ../.. { inherit system config; }
|
|
|
|
}:
|
|
|
|
|
|
|
|
with import ../lib/testing-python.nix { inherit system pkgs; };
|
|
|
|
with pkgs.lib;
|
|
|
|
|
2020-06-14 18:14:43 +00:00
|
|
|
let
|
|
|
|
common = {
|
2020-04-11 20:38:55 +00:00
|
|
|
virtualisation.useBootLoader = true;
|
2020-12-23 19:58:12 +00:00
|
|
|
virtualisation.useEFIBoot = true;
|
2020-04-11 20:38:55 +00:00
|
|
|
boot.loader.systemd-boot.enable = true;
|
2020-06-14 03:25:34 +00:00
|
|
|
boot.loader.efi.canTouchEfiVariables = true;
|
|
|
|
environment.systemPackages = [ pkgs.efibootmgr ];
|
2020-04-11 20:38:55 +00:00
|
|
|
};
|
2024-02-01 02:51:12 +00:00
|
|
|
|
|
|
|
commonXbootldr = { config, lib, pkgs, ... }:
|
|
|
|
let
|
|
|
|
diskImage = import ../lib/make-disk-image.nix {
|
|
|
|
inherit config lib pkgs;
|
|
|
|
label = "nixos";
|
|
|
|
format = "qcow2";
|
|
|
|
partitionTableType = "efixbootldr";
|
|
|
|
touchEFIVars = true;
|
|
|
|
installBootLoader = true;
|
|
|
|
};
|
|
|
|
in
|
|
|
|
{
|
|
|
|
imports = [ common ];
|
|
|
|
virtualisation.useBootLoader = lib.mkForce false; # Only way to tell qemu-vm not to create the default system image
|
|
|
|
virtualisation.directBoot.enable = false; # But don't direct boot either because we're testing systemd-boot
|
|
|
|
|
|
|
|
system.build.diskImage = diskImage; # Use custom disk image with an XBOOTLDR partition
|
|
|
|
virtualisation.efi.variables = "${diskImage}/efi-vars.fd";
|
|
|
|
|
|
|
|
virtualisation.useDefaultFilesystems = false; # Needs custom setup for `diskImage`
|
|
|
|
virtualisation.bootPartition = null;
|
|
|
|
virtualisation.fileSystems = {
|
|
|
|
"/" = {
|
|
|
|
device = "/dev/vda3";
|
|
|
|
fsType = "ext4";
|
|
|
|
};
|
|
|
|
"/boot" = {
|
|
|
|
device = "/dev/vda2";
|
|
|
|
fsType = "vfat";
|
|
|
|
noCheck = true;
|
|
|
|
};
|
|
|
|
"/efi" = {
|
|
|
|
device = "/dev/vda1";
|
|
|
|
fsType = "vfat";
|
|
|
|
noCheck = true;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
boot.loader.systemd-boot.enable = true;
|
|
|
|
boot.loader.efi.efiSysMountPoint = "/efi";
|
|
|
|
boot.loader.systemd-boot.xbootldrMountPoint = "/boot";
|
|
|
|
};
|
|
|
|
|
|
|
|
customDiskImage = nodes: ''
|
|
|
|
import os
|
|
|
|
import subprocess
|
|
|
|
import tempfile
|
|
|
|
|
|
|
|
tmp_disk_image = tempfile.NamedTemporaryFile()
|
|
|
|
|
|
|
|
subprocess.run([
|
|
|
|
"${nodes.machine.virtualisation.qemu.package}/bin/qemu-img",
|
|
|
|
"create",
|
|
|
|
"-f",
|
|
|
|
"qcow2",
|
|
|
|
"-b",
|
|
|
|
"${nodes.machine.system.build.diskImage}/nixos.qcow2",
|
|
|
|
"-F",
|
|
|
|
"qcow2",
|
|
|
|
tmp_disk_image.name,
|
|
|
|
])
|
|
|
|
|
|
|
|
# Set NIX_DISK_IMAGE so that the qemu script finds the right disk image.
|
|
|
|
os.environ['NIX_DISK_IMAGE'] = tmp_disk_image.name
|
|
|
|
'';
|
2020-06-14 18:14:43 +00:00
|
|
|
in
|
2024-01-11 00:00:43 +00:00
|
|
|
{
|
2020-06-14 18:14:43 +00:00
|
|
|
basic = makeTest {
|
|
|
|
name = "systemd-boot";
|
2023-11-04 01:38:11 +00:00
|
|
|
meta.maintainers = with pkgs.lib.maintainers; [ danielfullmer julienmalka ];
|
2020-06-14 18:14:43 +00:00
|
|
|
|
2022-03-20 23:15:30 +00:00
|
|
|
nodes.machine = common;
|
2020-06-14 18:14:43 +00:00
|
|
|
|
|
|
|
testScript = ''
|
|
|
|
machine.start()
|
|
|
|
machine.wait_for_unit("multi-user.target")
|
2020-04-11 20:38:55 +00:00
|
|
|
|
2020-06-14 18:14:43 +00:00
|
|
|
machine.succeed("test -e /boot/loader/entries/nixos-generation-1.conf")
|
systemd-boot: introduce options to set a sort-key for systemd-boot entries
Without sort-keys specified on entries, the entries are sorted only by
file name (in decreasing order, so starting at the end of the alphabet!),
without taking any other fields into account (see
[the boot loader specification reference][1]).
Moreover, entries without a sort-key are always ordered after all
entries with a sort-key, so by not adding a sort-key to the NixOS ones,
we cannot add a sort-key to any other entry while keeping it below the
NixOS entries.
So currently we have options to set the file names for additional entries like
memtest and netbootxyz.
However, as mentioned above, the sorting by file name is not very intuitive and
actually sorts in the opposite order of what is currently mentioned in the option
descriptions.
With this commit, we set a configurable sort-key on all NixOS entries,
and add options for setting the sort-keys for the memtest and netbootxyz
entries.
The sorting by sort-key is more intuitive (it starts at the start of the
alphabet) and also takes into account the machine-id and version for entries
with identical sort-keys.
We use a bootspec extension to store the sort keys, which allows us to
redefine the sort key for individual specialisations without needing any
special casing.
[1]: https://uapi-group.org/specifications/specs/boot_loader_specification/#sorting
2024-01-24 17:15:28 +00:00
|
|
|
machine.succeed("grep 'sort-key nixos' /boot/loader/entries/nixos-generation-1.conf")
|
2020-06-14 18:14:43 +00:00
|
|
|
|
|
|
|
# Ensure we actually booted using systemd-boot
|
|
|
|
# Magic number is the vendor UUID used by systemd-boot.
|
|
|
|
machine.succeed(
|
|
|
|
"test -e /sys/firmware/efi/efivars/LoaderEntrySelected-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f"
|
|
|
|
)
|
2020-06-14 03:25:34 +00:00
|
|
|
|
|
|
|
# "bootctl install" should have created an EFI entry
|
|
|
|
machine.succeed('efibootmgr | grep "Linux Boot Manager"')
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
|
2024-02-04 13:28:30 +00:00
|
|
|
# Test that systemd-boot works with secure boot
|
|
|
|
secureBoot = makeTest {
|
|
|
|
name = "systemd-boot-secure-boot";
|
|
|
|
|
|
|
|
nodes.machine = {
|
|
|
|
imports = [ common ];
|
|
|
|
environment.systemPackages = [ pkgs.sbctl ];
|
|
|
|
virtualisation.useSecureBoot = true;
|
|
|
|
};
|
|
|
|
|
2024-03-01 21:34:43 +00:00
|
|
|
testScript = let
|
|
|
|
efiArch = pkgs.stdenv.hostPlatform.efiArch;
|
|
|
|
in { nodes, ... }: ''
|
2024-02-04 13:28:30 +00:00
|
|
|
machine.start(allow_reboot=True)
|
|
|
|
machine.wait_for_unit("multi-user.target")
|
|
|
|
|
|
|
|
machine.succeed("sbctl create-keys")
|
|
|
|
machine.succeed("sbctl enroll-keys --yes-this-might-brick-my-machine")
|
2024-03-01 21:34:43 +00:00
|
|
|
machine.succeed('sbctl sign /boot/EFI/systemd/systemd-boot${efiArch}.efi')
|
|
|
|
machine.succeed('sbctl sign /boot/EFI/BOOT/BOOT${toUpper efiArch}.EFI')
|
|
|
|
machine.succeed('sbctl sign /boot/EFI/nixos/*${nodes.machine.system.boot.loader.kernelFile}.efi')
|
2024-02-04 13:28:30 +00:00
|
|
|
|
|
|
|
machine.reboot()
|
|
|
|
|
|
|
|
assert "Secure Boot: enabled (user)" in machine.succeed("bootctl status")
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
|
2024-02-01 02:51:12 +00:00
|
|
|
basicXbootldr = makeTest {
|
|
|
|
name = "systemd-boot-xbootldr";
|
|
|
|
meta.maintainers = with pkgs.lib.maintainers; [ sdht0 ];
|
|
|
|
|
|
|
|
nodes.machine = commonXbootldr;
|
|
|
|
|
|
|
|
testScript = { nodes, ... }: ''
|
|
|
|
${customDiskImage nodes}
|
|
|
|
|
|
|
|
machine.start()
|
|
|
|
machine.wait_for_unit("multi-user.target")
|
|
|
|
|
|
|
|
machine.succeed("test -e /efi/EFI/systemd/systemd-bootx64.efi")
|
|
|
|
machine.succeed("test -e /boot/loader/entries/nixos-generation-1.conf")
|
|
|
|
|
|
|
|
# Ensure we actually booted using systemd-boot
|
|
|
|
# Magic number is the vendor UUID used by systemd-boot.
|
|
|
|
machine.succeed(
|
|
|
|
"test -e /sys/firmware/efi/efivars/LoaderEntrySelected-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f"
|
|
|
|
)
|
|
|
|
|
|
|
|
# "bootctl install" should have created an EFI entry
|
|
|
|
machine.succeed('efibootmgr | grep "Linux Boot Manager"')
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
|
2021-01-03 18:29:34 +00:00
|
|
|
# Check that specialisations create corresponding boot entries.
|
|
|
|
specialisation = makeTest {
|
|
|
|
name = "systemd-boot-specialisation";
|
2023-11-04 01:38:11 +00:00
|
|
|
meta.maintainers = with pkgs.lib.maintainers; [ lukegb julienmalka ];
|
2021-01-03 18:29:34 +00:00
|
|
|
|
2022-03-20 23:15:30 +00:00
|
|
|
nodes.machine = { pkgs, lib, ... }: {
|
2021-01-03 18:29:34 +00:00
|
|
|
imports = [ common ];
|
systemd-boot: introduce options to set a sort-key for systemd-boot entries
Without sort-keys specified on entries, the entries are sorted only by
file name (in decreasing order, so starting at the end of the alphabet!),
without taking any other fields into account (see
[the boot loader specification reference][1]).
Moreover, entries without a sort-key are always ordered after all
entries with a sort-key, so by not adding a sort-key to the NixOS ones,
we cannot add a sort-key to any other entry while keeping it below the
NixOS entries.
So currently we have options to set the file names for additional entries like
memtest and netbootxyz.
However, as mentioned above, the sorting by file name is not very intuitive and
actually sorts in the opposite order of what is currently mentioned in the option
descriptions.
With this commit, we set a configurable sort-key on all NixOS entries,
and add options for setting the sort-keys for the memtest and netbootxyz
entries.
The sorting by sort-key is more intuitive (it starts at the start of the
alphabet) and also takes into account the machine-id and version for entries
with identical sort-keys.
We use a bootspec extension to store the sort keys, which allows us to
redefine the sort key for individual specialisations without needing any
special casing.
[1]: https://uapi-group.org/specifications/specs/boot_loader_specification/#sorting
2024-01-24 17:15:28 +00:00
|
|
|
specialisation.something.configuration = {
|
|
|
|
boot.loader.systemd-boot.sortKey = "something";
|
|
|
|
};
|
2021-01-03 18:29:34 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
testScript = ''
|
|
|
|
machine.start()
|
|
|
|
machine.wait_for_unit("multi-user.target")
|
|
|
|
|
|
|
|
machine.succeed(
|
|
|
|
"test -e /boot/loader/entries/nixos-generation-1-specialisation-something.conf"
|
|
|
|
)
|
|
|
|
machine.succeed(
|
|
|
|
"grep -q 'title NixOS (something)' /boot/loader/entries/nixos-generation-1-specialisation-something.conf"
|
|
|
|
)
|
systemd-boot: introduce options to set a sort-key for systemd-boot entries
Without sort-keys specified on entries, the entries are sorted only by
file name (in decreasing order, so starting at the end of the alphabet!),
without taking any other fields into account (see
[the boot loader specification reference][1]).
Moreover, entries without a sort-key are always ordered after all
entries with a sort-key, so by not adding a sort-key to the NixOS ones,
we cannot add a sort-key to any other entry while keeping it below the
NixOS entries.
So currently we have options to set the file names for additional entries like
memtest and netbootxyz.
However, as mentioned above, the sorting by file name is not very intuitive and
actually sorts in the opposite order of what is currently mentioned in the option
descriptions.
With this commit, we set a configurable sort-key on all NixOS entries,
and add options for setting the sort-keys for the memtest and netbootxyz
entries.
The sorting by sort-key is more intuitive (it starts at the start of the
alphabet) and also takes into account the machine-id and version for entries
with identical sort-keys.
We use a bootspec extension to store the sort keys, which allows us to
redefine the sort key for individual specialisations without needing any
special casing.
[1]: https://uapi-group.org/specifications/specs/boot_loader_specification/#sorting
2024-01-24 17:15:28 +00:00
|
|
|
machine.succeed(
|
|
|
|
"grep 'sort-key something' /boot/loader/entries/nixos-generation-1-specialisation-something.conf"
|
|
|
|
)
|
2021-01-03 18:29:34 +00:00
|
|
|
'';
|
|
|
|
};
|
|
|
|
|
2020-06-14 03:25:34 +00:00
|
|
|
# Boot without having created an EFI entry--instead using default "/EFI/BOOT/BOOTX64.EFI"
|
|
|
|
fallback = makeTest {
|
|
|
|
name = "systemd-boot-fallback";
|
2023-11-04 01:38:11 +00:00
|
|
|
meta.maintainers = with pkgs.lib.maintainers; [ danielfullmer julienmalka ];
|
2020-06-14 03:25:34 +00:00
|
|
|
|
2022-03-20 23:15:30 +00:00
|
|
|
nodes.machine = { pkgs, lib, ... }: {
|
2020-06-14 03:25:34 +00:00
|
|
|
imports = [ common ];
|
|
|
|
boot.loader.efi.canTouchEfiVariables = mkForce false;
|
|
|
|
};
|
|
|
|
|
|
|
|
testScript = ''
|
|
|
|
machine.start()
|
|
|
|
machine.wait_for_unit("multi-user.target")
|
|
|
|
|
|
|
|
machine.succeed("test -e /boot/loader/entries/nixos-generation-1.conf")
|
|
|
|
|
|
|
|
# Ensure we actually booted using systemd-boot
|
|
|
|
# Magic number is the vendor UUID used by systemd-boot.
|
|
|
|
machine.succeed(
|
|
|
|
"test -e /sys/firmware/efi/efivars/LoaderEntrySelected-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f"
|
|
|
|
)
|
|
|
|
|
|
|
|
# "bootctl install" should _not_ have created an EFI entry
|
|
|
|
machine.fail('efibootmgr | grep "Linux Boot Manager"')
|
2020-06-14 18:14:43 +00:00
|
|
|
'';
|
|
|
|
};
|
2020-04-11 20:38:55 +00:00
|
|
|
|
2020-06-14 18:14:43 +00:00
|
|
|
update = makeTest {
|
|
|
|
name = "systemd-boot-update";
|
2023-11-04 01:38:11 +00:00
|
|
|
meta.maintainers = with pkgs.lib.maintainers; [ danielfullmer julienmalka ];
|
2020-04-11 20:38:55 +00:00
|
|
|
|
2022-03-20 23:15:30 +00:00
|
|
|
nodes.machine = common;
|
2020-06-14 18:14:43 +00:00
|
|
|
|
|
|
|
testScript = ''
|
|
|
|
machine.succeed("mount -o remount,rw /boot")
|
|
|
|
|
|
|
|
# Replace version inside sd-boot with something older. See magic[] string in systemd src/boot/efi/boot.c
|
|
|
|
machine.succeed(
|
|
|
|
"""
|
2023-01-20 05:42:22 +00:00
|
|
|
find /boot -iname '*boot*.efi' -print0 | \
|
2021-09-30 14:33:34 +00:00
|
|
|
xargs -0 -I '{}' sed -i 's/#### LoaderInfo: systemd-boot .* ####/#### LoaderInfo: systemd-boot 000.0-1-notnixos ####/' '{}'
|
2020-06-14 18:14:43 +00:00
|
|
|
"""
|
|
|
|
)
|
|
|
|
|
|
|
|
output = machine.succeed("/run/current-system/bin/switch-to-configuration boot")
|
2023-10-10 08:18:53 +00:00
|
|
|
assert "updating systemd-boot from 000.0-1-notnixos to " in output, "Couldn't find systemd-boot update message"
|
2020-06-14 18:14:43 +00:00
|
|
|
'';
|
|
|
|
};
|
2021-12-19 04:53:47 +00:00
|
|
|
|
|
|
|
memtest86 = makeTest {
|
|
|
|
name = "systemd-boot-memtest86";
|
2023-11-04 01:38:11 +00:00
|
|
|
meta.maintainers = with pkgs.lib.maintainers; [ Enzime julienmalka ];
|
2021-12-19 04:53:47 +00:00
|
|
|
|
2022-03-20 23:15:30 +00:00
|
|
|
nodes.machine = { pkgs, lib, ... }: {
|
2021-12-19 04:53:47 +00:00
|
|
|
imports = [ common ];
|
|
|
|
boot.loader.systemd-boot.memtest86.enable = true;
|
|
|
|
};
|
|
|
|
|
|
|
|
testScript = ''
|
|
|
|
machine.succeed("test -e /boot/loader/entries/memtest86.conf")
|
2023-04-18 08:39:38 +00:00
|
|
|
machine.succeed("test -e /boot/efi/memtest86/memtest.efi")
|
2021-12-19 04:53:47 +00:00
|
|
|
'';
|
|
|
|
};
|
|
|
|
|
|
|
|
netbootxyz = makeTest {
|
|
|
|
name = "systemd-boot-netbootxyz";
|
2023-11-04 01:38:11 +00:00
|
|
|
meta.maintainers = with pkgs.lib.maintainers; [ Enzime julienmalka ];
|
2021-12-19 04:53:47 +00:00
|
|
|
|
2022-03-20 23:15:30 +00:00
|
|
|
nodes.machine = { pkgs, lib, ... }: {
|
2021-12-19 04:53:47 +00:00
|
|
|
imports = [ common ];
|
|
|
|
boot.loader.systemd-boot.netbootxyz.enable = true;
|
|
|
|
};
|
|
|
|
|
|
|
|
testScript = ''
|
systemd-boot: introduce options to set a sort-key for systemd-boot entries
Without sort-keys specified on entries, the entries are sorted only by
file name (in decreasing order, so starting at the end of the alphabet!),
without taking any other fields into account (see
[the boot loader specification reference][1]).
Moreover, entries without a sort-key are always ordered after all
entries with a sort-key, so by not adding a sort-key to the NixOS ones,
we cannot add a sort-key to any other entry while keeping it below the
NixOS entries.
So currently we have options to set the file names for additional entries like
memtest and netbootxyz.
However, as mentioned above, the sorting by file name is not very intuitive and
actually sorts in the opposite order of what is currently mentioned in the option
descriptions.
With this commit, we set a configurable sort-key on all NixOS entries,
and add options for setting the sort-keys for the memtest and netbootxyz
entries.
The sorting by sort-key is more intuitive (it starts at the start of the
alphabet) and also takes into account the machine-id and version for entries
with identical sort-keys.
We use a bootspec extension to store the sort keys, which allows us to
redefine the sort key for individual specialisations without needing any
special casing.
[1]: https://uapi-group.org/specifications/specs/boot_loader_specification/#sorting
2024-01-24 17:15:28 +00:00
|
|
|
machine.succeed("test -e /boot/loader/entries/netbootxyz.conf")
|
2021-12-19 04:53:47 +00:00
|
|
|
machine.succeed("test -e /boot/efi/netbootxyz/netboot.xyz.efi")
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
|
systemd-boot: introduce options to set a sort-key for systemd-boot entries
Without sort-keys specified on entries, the entries are sorted only by
file name (in decreasing order, so starting at the end of the alphabet!),
without taking any other fields into account (see
[the boot loader specification reference][1]).
Moreover, entries without a sort-key are always ordered after all
entries with a sort-key, so by not adding a sort-key to the NixOS ones,
we cannot add a sort-key to any other entry while keeping it below the
NixOS entries.
So currently we have options to set the file names for additional entries like
memtest and netbootxyz.
However, as mentioned above, the sorting by file name is not very intuitive and
actually sorts in the opposite order of what is currently mentioned in the option
descriptions.
With this commit, we set a configurable sort-key on all NixOS entries,
and add options for setting the sort-keys for the memtest and netbootxyz
entries.
The sorting by sort-key is more intuitive (it starts at the start of the
alphabet) and also takes into account the machine-id and version for entries
with identical sort-keys.
We use a bootspec extension to store the sort keys, which allows us to
redefine the sort key for individual specialisations without needing any
special casing.
[1]: https://uapi-group.org/specifications/specs/boot_loader_specification/#sorting
2024-01-24 17:15:28 +00:00
|
|
|
memtestSortKey = makeTest {
|
|
|
|
name = "systemd-boot-memtest-sortkey";
|
2023-11-04 01:38:11 +00:00
|
|
|
meta.maintainers = with pkgs.lib.maintainers; [ Enzime julienmalka ];
|
2021-12-19 04:53:47 +00:00
|
|
|
|
2022-03-20 23:15:30 +00:00
|
|
|
nodes.machine = { pkgs, lib, ... }: {
|
2021-12-19 04:53:47 +00:00
|
|
|
imports = [ common ];
|
|
|
|
boot.loader.systemd-boot.memtest86.enable = true;
|
systemd-boot: introduce options to set a sort-key for systemd-boot entries
Without sort-keys specified on entries, the entries are sorted only by
file name (in decreasing order, so starting at the end of the alphabet!),
without taking any other fields into account (see
[the boot loader specification reference][1]).
Moreover, entries without a sort-key are always ordered after all
entries with a sort-key, so by not adding a sort-key to the NixOS ones,
we cannot add a sort-key to any other entry while keeping it below the
NixOS entries.
So currently we have options to set the file names for additional entries like
memtest and netbootxyz.
However, as mentioned above, the sorting by file name is not very intuitive and
actually sorts in the opposite order of what is currently mentioned in the option
descriptions.
With this commit, we set a configurable sort-key on all NixOS entries,
and add options for setting the sort-keys for the memtest and netbootxyz
entries.
The sorting by sort-key is more intuitive (it starts at the start of the
alphabet) and also takes into account the machine-id and version for entries
with identical sort-keys.
We use a bootspec extension to store the sort keys, which allows us to
redefine the sort key for individual specialisations without needing any
special casing.
[1]: https://uapi-group.org/specifications/specs/boot_loader_specification/#sorting
2024-01-24 17:15:28 +00:00
|
|
|
boot.loader.systemd-boot.memtest86.sortKey = "apple";
|
2021-12-19 04:53:47 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
testScript = ''
|
systemd-boot: introduce options to set a sort-key for systemd-boot entries
Without sort-keys specified on entries, the entries are sorted only by
file name (in decreasing order, so starting at the end of the alphabet!),
without taking any other fields into account (see
[the boot loader specification reference][1]).
Moreover, entries without a sort-key are always ordered after all
entries with a sort-key, so by not adding a sort-key to the NixOS ones,
we cannot add a sort-key to any other entry while keeping it below the
NixOS entries.
So currently we have options to set the file names for additional entries like
memtest and netbootxyz.
However, as mentioned above, the sorting by file name is not very intuitive and
actually sorts in the opposite order of what is currently mentioned in the option
descriptions.
With this commit, we set a configurable sort-key on all NixOS entries,
and add options for setting the sort-keys for the memtest and netbootxyz
entries.
The sorting by sort-key is more intuitive (it starts at the start of the
alphabet) and also takes into account the machine-id and version for entries
with identical sort-keys.
We use a bootspec extension to store the sort keys, which allows us to
redefine the sort key for individual specialisations without needing any
special casing.
[1]: https://uapi-group.org/specifications/specs/boot_loader_specification/#sorting
2024-01-24 17:15:28 +00:00
|
|
|
machine.succeed("test -e /boot/loader/entries/memtest86.conf")
|
2023-04-18 08:39:38 +00:00
|
|
|
machine.succeed("test -e /boot/efi/memtest86/memtest.efi")
|
systemd-boot: introduce options to set a sort-key for systemd-boot entries
Without sort-keys specified on entries, the entries are sorted only by
file name (in decreasing order, so starting at the end of the alphabet!),
without taking any other fields into account (see
[the boot loader specification reference][1]).
Moreover, entries without a sort-key are always ordered after all
entries with a sort-key, so by not adding a sort-key to the NixOS ones,
we cannot add a sort-key to any other entry while keeping it below the
NixOS entries.
So currently we have options to set the file names for additional entries like
memtest and netbootxyz.
However, as mentioned above, the sorting by file name is not very intuitive and
actually sorts in the opposite order of what is currently mentioned in the option
descriptions.
With this commit, we set a configurable sort-key on all NixOS entries,
and add options for setting the sort-keys for the memtest and netbootxyz
entries.
The sorting by sort-key is more intuitive (it starts at the start of the
alphabet) and also takes into account the machine-id and version for entries
with identical sort-keys.
We use a bootspec extension to store the sort keys, which allows us to
redefine the sort key for individual specialisations without needing any
special casing.
[1]: https://uapi-group.org/specifications/specs/boot_loader_specification/#sorting
2024-01-24 17:15:28 +00:00
|
|
|
machine.succeed("grep 'sort-key apple' /boot/loader/entries/memtest86.conf")
|
2024-02-01 02:51:12 +00:00
|
|
|
'';
|
|
|
|
};
|
|
|
|
|
|
|
|
entryFilenameXbootldr = makeTest {
|
|
|
|
name = "systemd-boot-entry-filename-xbootldr";
|
|
|
|
meta.maintainers = with pkgs.lib.maintainers; [ sdht0 ];
|
|
|
|
|
|
|
|
nodes.machine = { pkgs, lib, ... }: {
|
|
|
|
imports = [ commonXbootldr ];
|
|
|
|
boot.loader.systemd-boot.memtest86.enable = true;
|
|
|
|
};
|
|
|
|
|
|
|
|
testScript = { nodes, ... }: ''
|
|
|
|
${customDiskImage nodes}
|
|
|
|
|
|
|
|
machine.start()
|
|
|
|
machine.wait_for_unit("multi-user.target")
|
|
|
|
|
|
|
|
machine.succeed("test -e /efi/EFI/systemd/systemd-bootx64.efi")
|
systemd-boot: introduce options to set a sort-key for systemd-boot entries
Without sort-keys specified on entries, the entries are sorted only by
file name (in decreasing order, so starting at the end of the alphabet!),
without taking any other fields into account (see
[the boot loader specification reference][1]).
Moreover, entries without a sort-key are always ordered after all
entries with a sort-key, so by not adding a sort-key to the NixOS ones,
we cannot add a sort-key to any other entry while keeping it below the
NixOS entries.
So currently we have options to set the file names for additional entries like
memtest and netbootxyz.
However, as mentioned above, the sorting by file name is not very intuitive and
actually sorts in the opposite order of what is currently mentioned in the option
descriptions.
With this commit, we set a configurable sort-key on all NixOS entries,
and add options for setting the sort-keys for the memtest and netbootxyz
entries.
The sorting by sort-key is more intuitive (it starts at the start of the
alphabet) and also takes into account the machine-id and version for entries
with identical sort-keys.
We use a bootspec extension to store the sort keys, which allows us to
redefine the sort key for individual specialisations without needing any
special casing.
[1]: https://uapi-group.org/specifications/specs/boot_loader_specification/#sorting
2024-01-24 17:15:28 +00:00
|
|
|
machine.succeed("test -e /boot/loader/entries/memtest86.conf")
|
2024-02-01 02:51:12 +00:00
|
|
|
machine.succeed("test -e /boot/EFI/memtest86/memtest.efi")
|
2021-12-19 04:53:47 +00:00
|
|
|
'';
|
|
|
|
};
|
|
|
|
|
|
|
|
extraEntries = makeTest {
|
|
|
|
name = "systemd-boot-extra-entries";
|
2023-11-04 01:38:11 +00:00
|
|
|
meta.maintainers = with pkgs.lib.maintainers; [ Enzime julienmalka ];
|
2021-12-19 04:53:47 +00:00
|
|
|
|
2022-03-20 23:15:30 +00:00
|
|
|
nodes.machine = { pkgs, lib, ... }: {
|
2021-12-19 04:53:47 +00:00
|
|
|
imports = [ common ];
|
|
|
|
boot.loader.systemd-boot.extraEntries = {
|
|
|
|
"banana.conf" = ''
|
|
|
|
title banana
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
testScript = ''
|
|
|
|
machine.succeed("test -e /boot/loader/entries/banana.conf")
|
|
|
|
machine.succeed("test -e /boot/efi/nixos/.extra-files/loader/entries/banana.conf")
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
|
|
|
|
extraFiles = makeTest {
|
|
|
|
name = "systemd-boot-extra-files";
|
2023-11-04 01:38:11 +00:00
|
|
|
meta.maintainers = with pkgs.lib.maintainers; [ Enzime julienmalka ];
|
2021-12-19 04:53:47 +00:00
|
|
|
|
2022-03-20 23:15:30 +00:00
|
|
|
nodes.machine = { pkgs, lib, ... }: {
|
2021-12-19 04:53:47 +00:00
|
|
|
imports = [ common ];
|
|
|
|
boot.loader.systemd-boot.extraFiles = {
|
|
|
|
"efi/fruits/tomato.efi" = pkgs.netbootxyz-efi;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
testScript = ''
|
|
|
|
machine.succeed("test -e /boot/efi/fruits/tomato.efi")
|
|
|
|
machine.succeed("test -e /boot/efi/nixos/.extra-files/efi/fruits/tomato.efi")
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
|
|
|
|
switch-test = makeTest {
|
|
|
|
name = "systemd-boot-switch-test";
|
2023-11-04 01:38:11 +00:00
|
|
|
meta.maintainers = with pkgs.lib.maintainers; [ Enzime julienmalka ];
|
2021-12-19 04:53:47 +00:00
|
|
|
|
|
|
|
nodes = {
|
|
|
|
inherit common;
|
|
|
|
|
2023-06-10 15:50:57 +00:00
|
|
|
machine = { pkgs, nodes, ... }: {
|
2021-12-19 04:53:47 +00:00
|
|
|
imports = [ common ];
|
|
|
|
boot.loader.systemd-boot.extraFiles = {
|
|
|
|
"efi/fruits/tomato.efi" = pkgs.netbootxyz-efi;
|
|
|
|
};
|
2023-06-10 15:50:57 +00:00
|
|
|
|
|
|
|
# These are configs for different nodes, but we'll use them here in `machine`
|
|
|
|
system.extraDependencies = [
|
|
|
|
nodes.common.system.build.toplevel
|
|
|
|
nodes.with_netbootxyz.system.build.toplevel
|
|
|
|
];
|
2021-12-19 04:53:47 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
with_netbootxyz = { pkgs, ... }: {
|
|
|
|
imports = [ common ];
|
|
|
|
boot.loader.systemd-boot.netbootxyz.enable = true;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
testScript = { nodes, ... }: let
|
2023-06-10 15:51:44 +00:00
|
|
|
originalSystem = nodes.machine.system.build.toplevel;
|
|
|
|
baseSystem = nodes.common.system.build.toplevel;
|
|
|
|
finalSystem = nodes.with_netbootxyz.system.build.toplevel;
|
2021-12-19 04:53:47 +00:00
|
|
|
in ''
|
|
|
|
machine.succeed("test -e /boot/efi/fruits/tomato.efi")
|
|
|
|
machine.succeed("test -e /boot/efi/nixos/.extra-files/efi/fruits/tomato.efi")
|
|
|
|
|
|
|
|
with subtest("remove files when no longer needed"):
|
|
|
|
machine.succeed("${baseSystem}/bin/switch-to-configuration boot")
|
|
|
|
machine.fail("test -e /boot/efi/fruits/tomato.efi")
|
|
|
|
machine.fail("test -d /boot/efi/fruits")
|
|
|
|
machine.succeed("test -d /boot/efi/nixos/.extra-files")
|
|
|
|
machine.fail("test -e /boot/efi/nixos/.extra-files/efi/fruits/tomato.efi")
|
|
|
|
machine.fail("test -d /boot/efi/nixos/.extra-files/efi/fruits")
|
|
|
|
|
|
|
|
with subtest("files are added back when needed again"):
|
|
|
|
machine.succeed("${originalSystem}/bin/switch-to-configuration boot")
|
|
|
|
machine.succeed("test -e /boot/efi/fruits/tomato.efi")
|
|
|
|
machine.succeed("test -e /boot/efi/nixos/.extra-files/efi/fruits/tomato.efi")
|
|
|
|
|
|
|
|
with subtest("simultaneously removing and adding files works"):
|
|
|
|
machine.succeed("${finalSystem}/bin/switch-to-configuration boot")
|
|
|
|
machine.fail("test -e /boot/efi/fruits/tomato.efi")
|
|
|
|
machine.fail("test -e /boot/efi/nixos/.extra-files/efi/fruits/tomato.efi")
|
systemd-boot: introduce options to set a sort-key for systemd-boot entries
Without sort-keys specified on entries, the entries are sorted only by
file name (in decreasing order, so starting at the end of the alphabet!),
without taking any other fields into account (see
[the boot loader specification reference][1]).
Moreover, entries without a sort-key are always ordered after all
entries with a sort-key, so by not adding a sort-key to the NixOS ones,
we cannot add a sort-key to any other entry while keeping it below the
NixOS entries.
So currently we have options to set the file names for additional entries like
memtest and netbootxyz.
However, as mentioned above, the sorting by file name is not very intuitive and
actually sorts in the opposite order of what is currently mentioned in the option
descriptions.
With this commit, we set a configurable sort-key on all NixOS entries,
and add options for setting the sort-keys for the memtest and netbootxyz
entries.
The sorting by sort-key is more intuitive (it starts at the start of the
alphabet) and also takes into account the machine-id and version for entries
with identical sort-keys.
We use a bootspec extension to store the sort keys, which allows us to
redefine the sort key for individual specialisations without needing any
special casing.
[1]: https://uapi-group.org/specifications/specs/boot_loader_specification/#sorting
2024-01-24 17:15:28 +00:00
|
|
|
machine.succeed("test -e /boot/loader/entries/netbootxyz.conf")
|
2021-12-19 04:53:47 +00:00
|
|
|
machine.succeed("test -e /boot/efi/netbootxyz/netboot.xyz.efi")
|
systemd-boot: introduce options to set a sort-key for systemd-boot entries
Without sort-keys specified on entries, the entries are sorted only by
file name (in decreasing order, so starting at the end of the alphabet!),
without taking any other fields into account (see
[the boot loader specification reference][1]).
Moreover, entries without a sort-key are always ordered after all
entries with a sort-key, so by not adding a sort-key to the NixOS ones,
we cannot add a sort-key to any other entry while keeping it below the
NixOS entries.
So currently we have options to set the file names for additional entries like
memtest and netbootxyz.
However, as mentioned above, the sorting by file name is not very intuitive and
actually sorts in the opposite order of what is currently mentioned in the option
descriptions.
With this commit, we set a configurable sort-key on all NixOS entries,
and add options for setting the sort-keys for the memtest and netbootxyz
entries.
The sorting by sort-key is more intuitive (it starts at the start of the
alphabet) and also takes into account the machine-id and version for entries
with identical sort-keys.
We use a bootspec extension to store the sort keys, which allows us to
redefine the sort key for individual specialisations without needing any
special casing.
[1]: https://uapi-group.org/specifications/specs/boot_loader_specification/#sorting
2024-01-24 17:15:28 +00:00
|
|
|
machine.succeed("test -e /boot/efi/nixos/.extra-files/loader/entries/netbootxyz.conf")
|
2021-12-19 04:53:47 +00:00
|
|
|
machine.succeed("test -e /boot/efi/nixos/.extra-files/efi/netbootxyz/netboot.xyz.efi")
|
|
|
|
'';
|
|
|
|
};
|
2023-05-30 22:42:50 +00:00
|
|
|
|
2024-01-11 00:00:43 +00:00
|
|
|
garbage-collect-entry = makeTest {
|
|
|
|
name = "systemd-boot-garbage-collect-entry";
|
2023-11-04 01:29:08 +00:00
|
|
|
meta.maintainers = with pkgs.lib.maintainers; [ julienmalka ];
|
|
|
|
|
|
|
|
nodes = {
|
|
|
|
inherit common;
|
|
|
|
machine = { pkgs, nodes, ... }: {
|
|
|
|
imports = [ common ];
|
2024-01-11 00:00:43 +00:00
|
|
|
|
2023-11-04 01:29:08 +00:00
|
|
|
# These are configs for different nodes, but we'll use them here in `machine`
|
|
|
|
system.extraDependencies = [
|
|
|
|
nodes.common.system.build.toplevel
|
|
|
|
];
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
testScript = { nodes, ... }:
|
|
|
|
let
|
|
|
|
baseSystem = nodes.common.system.build.toplevel;
|
|
|
|
in
|
|
|
|
''
|
|
|
|
machine.succeed("nix-env -p /nix/var/nix/profiles/system --set ${baseSystem}")
|
|
|
|
machine.succeed("nix-env -p /nix/var/nix/profiles/system --delete-generations 1")
|
|
|
|
machine.succeed("${baseSystem}/bin/switch-to-configuration boot")
|
2024-01-11 00:00:43 +00:00
|
|
|
machine.fail("test -e /boot/loader/entries/nixos-generation-1.conf")
|
2023-11-04 01:29:08 +00:00
|
|
|
machine.succeed("test -e /boot/loader/entries/nixos-generation-2.conf")
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
|
systemd: 253.3 -> 253.5
This allows us to drop our fsck-look-for-fsck-binary-not-just-in-
sbin.patch, as it was upstreamed.
We also manually backport https://github.com/systemd/systemd/pull/27856 as
it didn't get backported and without it we can't merge this PR as
systemd-boot-builder.py will remain broken and make it impossible to do upgrade
to NixOS 23.05 in some scenarios
Changelog:
```
991158e8b9 (hwdb: update to 2533fdd0fbe71e4a3fa7a2cca9830cd864fb9136, 2023-06-01)
d1087bc599 (test-network: add tests for vlan QoS mapping, 2023-05-24)
7ed7b07a92 (network/vlan: paranoia about type safety, 2023-05-24)
b20bc7c1ff (network/vlan: drop unnecessary restriction for QoS mapping, 2023-05-24)
dbf50f1911 (udev: do not set ID_PATH and by-path symlink for nvmf disks, 2023-05-10)
75d4967502 (journalctl: fix --no-tail handling, 2023-05-04)
f1ea9cd55e (journalctl: use correct variable to check if --since is specified, 2023-05-04)
0227947bab (test/README: fix advice for testsuite debugging, 2023-05-29)
3222272c46 (test-fstab-generator: fix test on systemd with systemd-boot, 2023-05-30)
23b7bf3d01 (home: move the assert back to the intended place, 2023-05-29)
901f0f0ac1 (resolvectl: drop extra colon, 2023-05-28)
5f3ca32d0c (basic/syscall: update syscall list, 2023-05-29)
375e6be16c (tree-wide: Downgrade a few more noisy log messages to trace, 2023-05-27)
3f5f7e5f30 (journal-remote: bump the refcount right after creating the writer object, 2023-05-25)
4810e789ad (man: fix UKI filename suffix in 'tries' description, 2023-05-26)
2e10f8874a (units: Shut down networkd and resolved on switch-root, 2023-05-25)
9dde31ac74 (resolve: avoid memory leak from a partially processed RR, 2023-05-23)
b1663b8333 (sd-journal: avoid double-free, 2023-05-23)
aa48ecb0a6 (core/timer: Always use inactive_exit_timestamp if it is set, 2023-05-23)
ac380e43a4 (core: Do not check child freezability when thawing slice, 2023-05-23)
53bc78d3e0 (tree-wide: Fix false positives on newer gcc, 2023-05-23)
58c1816aa4 (json: correctly handle magic strings when parsing variant strv, 2023-05-23)
fbb2c5ab19 (sysusers: fix argument confusion in error message, 2022-10-13)
e5520ab28f (sysusers: add usual "ret_" prefix, fix messages, 2022-10-13)
286ce2be44 (man: extend description of --boot, 2022-10-09)
7394a75688 (sd-bus: refuse to send messages with an invalid string, 2023-05-19)
ae83e97a51 (core/service: when resetting PID also reset known flag, 2023-05-22)
f0bb967388 (shared: correctly propagate possible allocation errors, 2023-05-21)
318c9d5fec (wait-online: downgrade log level of failure that interface is removed or unmanaged during processing it, 2023-05-22)
1a0f2c5c57 (boot: Read files in small chunks on broken firmware, 2023-01-05)
eeaf884f5b (cryptenroll: update log messages, 2023-05-20)
debce7c184 (test: check if we can use --merge with --follow, 2023-05-19)
3cf401e3e3 (manager: restrict Dump*() to privileged callers or ratelimit, 2023-04-27)
6ca461fe29 (ratelimit: add ratelimit_left helper, 2023-04-28)
604d132fde (journalctl: make --follow work with --merge again, 2023-05-19)
6a4c05c615 (test: make the stress test slightly less stressful on slower machines, 2023-05-19)
a08cb80451 (core/device: downgrade error when units specified in SYSTEMD_WANTS= not found, 2023-05-19)
eb5dad0a72 (unit: add conditions and deps to make oomd.socket and .service consistent, 2023-05-19)
c756ffea57 (oomd: shorten message, 2023-05-18)
a3e5eb5606 (sd-bus,sd-event: allow querying of description even after fork, 2023-05-18)
e91557a1e0 (sd-bus: do not assert if bus description is not set, 2023-05-18)
93b3bd12ac (test: don't mount /sys & /proc if already mounted, 2023-05-18)
c51273941d (nspawn: make the error message less confusing, 2023-05-18)
e85daabd3e (Revert (partially) "man: Clarify when OnFailure= activates after restarts (#7646)", 2023-05-17)
3e286a7b2e (man/tmpfiles: fix off-by-one in example, 2023-05-17)
cb6641bde3 (man: explain allowed values for /sys/power/{disk,state}, 2023-05-17)
65bf6c5a8f (man: say that ProtectClock= also affects reads, 2023-05-17)
13c8807360 (man: fixes for assorted issues reported by the manpage-l10n project, 2023-05-17)
1809fff392 (nspawn: make sure the device type survives when setting device mode, 2023-05-16)
b8ed81660f (nspawn: fix a global-buffer-overflow, 2023-05-15)
756e77b936 (nspawn: fix inverted condition, 2023-05-15)
c7861222ba (nspawn: call json_dispatch() with a correct pointer, 2023-05-15)
6f577f5d92 (nspawn: use the just returned errno in the log message, 2023-05-15)
9a7c6ed568 (nspawn: avoid NULL pointer dereference, 2023-05-16)
17c7b07c67 (nspawn: file system namespace -> mount namespace, 2023-05-15)
b13e836315 (nspawn: fix a typo in an error message, 2023-05-15)
d88225ef44 (busctl: set a description for the bus connection, 2023-05-05)
29115ef32e (man: indicate that the JOB parameter to "systemctl cancel" is optional, 2023-05-16)
051f86ae0e (meson: fix description for link-udev-shared option, 2023-05-16)
85ba46539f (man: use correct name for --bank option, 2023-05-15)
d7e75c7315 (machine,portable: fix a typo in an info message, 2023-05-12)
4d29f741c8 (machine: fix a memory leak when showing multiple machines, 2023-05-12)
e6a719598c (machine: fix a memory leak when showing multiple images, 2023-05-12)
ea221dc685 (fstab-generator: Fix log message, 2023-05-10)
4c3b06f255 (test: test O_CLOEXEC filtering of fdset fill logic, 2023-05-30)
88bf6b5815 (pid1: when taking possession of passed fds check O_CLOEXEC state first, 2023-05-30)
0d8372b450 (repart: Create temporary root directory using var_tmp_dir(), 2023-02-14)
aedfe41cda (cryptenroll: actually allow using multiple "special" strings when wiping, 2023-05-10)
f59ce1aa7b (core: fix use of uninitialized value, 2023-05-04)
3f5db0dbc1 (sd-journal: check .next_entry_array_offset earlier, 2023-05-03)
0baac8e60e (tree-wide: drop _pure_ attribute from non-pure functions, 2023-05-10)
4984f70db5 (dirent: conditionalize dirent assert based on dirent64 existence, 2023-05-10)
5fcbda8b5e (network/tc: rename settings in log messages too, 2023-05-10)
59dccdfddb (sd-bus: bus_message_type_from_string is not pure, 2023-05-10)
133d4ff6d6 (cryptenroll: fix an assertion with weak passwords, 2023-05-09)
c937b8f9de (units: Add CAP_NET_ADMIN condition to systemd-networkd-wait-online@.service as well, 2023-05-07)
60af5019fb (units: add/fix Documentation= about bus interface, 2023-05-09)
53f7e5f18f (core/service: fix error cause in the log, 2023-05-09)
951c27ce14 (shell completion: add timesync-status and show-timesync to zsh completion file (#27574), 2023-05-08)
32831842ba (doc: remove legacy DefaultControlGroup from dbus properties, 2023-05-08)
c31e2fa9c7 (zsh: add service-log-{level,target} completions for systemctl, 2023-05-07)
011a686a23 (test_ukify: fix loop iteration, 2023-04-21)
927d234406 (hwdb: do not include '#' in modalias, 2023-05-06)
b1a7a15ed2 (core: check the unit type more thoroughly when deserializing, 2023-05-04)
154b108513 (shared: refuse fd == INT_MAX, 2023-05-04)
a25605d01d (zsh: remove usage of PREFIX in _systemctl, 2023-05-05)
4be604e75a (basic/audit-util: make a test request before enabling use of audit, 2023-05-02)
4b4285e231 (main: add missing return, 2023-05-05)
ce096b0212 (shared: reject empty attachment path, 2023-05-02)
6027fbf1af (shared: ignore invalid valink socket fd when deserializing, 2023-05-02)
d649128268 (core: fix NULL pointer dereference during deserialization, 2023-05-02)
6ae77d6b99 (boot: Use correct memory type for allocations, 2023-05-02)
de0cbaceb7 (core: check for SERVICE_RELOAD_NOTIFY in manager_dbus_is_running, 2023-05-02)
5ed087fa46 (generators: skip private tmpfs if /tmp does not exist, 2023-04-30)
93143b6d6a (test: replace sleep with timeout, 2023-05-02)
881382685e (test-network: add workaround for bug in iproute2 v6.2.0, 2023-05-02)
abf9e916ad (coredumpctl: add --file/--root/--image to bash completion, 2023-04-25)
dd349a0ede (coredumpctl: fix bash completion matching, 2023-04-25)
120342b62d (test: match all messages with the FILE field, 2023-04-29)
e0da5c9bc6 (test: add tests for "systemctl stop" vs triggering by path unit, 2023-04-29)
c1542a967b (test: create temporary units under /run, 2023-04-29)
03f2a8921e (core/path: do not enqueue new job in .trigger_notify callback, 2023-04-29)
674591e6af (core/path: align table, 2023-04-29)
0413fb7de9 (test: add a couple of tests for systemd-pstore, 2023-04-27)
de41e55c7d (pstore: avoid opening the dmesg.txt file if not requested, 2023-04-28)
37c212dbd7 (pstore: explicitly set the base when converting record ID, 2023-04-28)
daee48adbb (test: dont use anchor char '$' to match a part of a string, 2023-04-27)
53ac14a054 (core/transaction: use hashmap_remove_value() to make not remove job with same ID, 2023-04-26)
0258760397 (resolved: adjust message about credentials, 2023-04-25)
8f19911bc3 (fuzz-journal-remote: fix potential fd-leak, 2023-03-18)
df1e479d4e (fuzz-journal-remote: remove temporary files on exit, 2023-03-18)
0d745e2de3 (hwdb: update to 46b8c3f5b297ac034f2d024c1f3d84ad2c17f410, 2023-04-30)
df9d1d9bb2 (sd-journal: make journal_file_copy_entry() return earlier, 2023-04-26)
3bc2553cfc (sd-journal: copy boot ID, 2023-04-26)
45b045880c (sd-journal: tighten variable scope, 2023-04-26)
3821e3ea07 (journal: Don't try to write garbage if journal entry is corrupted, 2023-04-26)
4eedc4711a (test: add test case of negative match for SYMLINK and TAG, 2023-04-25)
cd795f9abc (udev-rules: fix negative match rule for SYMLINK and TAG, 2023-04-25)
a25e2ef992 (core: fix property getter method for NFileDescriptorStore bus property, 2023-04-12)
eec30e3143 (repart: always take BSD lock when whole block device is opened, 2023-04-13)
50ab96e442 (bootctl: clean up handling of files with no version information, 2023-03-30)
9d97c8d423 (mkosi: disable centos 8 build, 2023-04-26)
c603dae241 (mkosi: disable key check for Fedora builds, 2023-04-26)
724a50fb01 (mkfs-util: do not pass -quiet to mksquashfs, 2023-04-27)
43d194392f (test: use setpriv instead of su for user switch from root, 2023-03-14)
ba683eb48c (test: wrap mkfs.*/mksquashfs/mkswap binaries when running w/ ASan, 2023-03-16)
fdcd1807ff (test: bump the D-Bus related timeouts to 120s, 2023-03-09)
4f8b2abf69 (coredump filter: add mask for 'all' using UINT32_MAX, not UINT64_MAX, 2023-04-26)
021bb972ff (coredump filter: fix stack overflow with =all, 2023-04-26)
3fd444c048 (build(deps): bump github/super-linter from 4.9.7 to 4.10.1, 2023-04-01)
a19396c73b (cryptenroll: fix a memory leak, 2023-03-27)
083ede1482 (test: tell dfuzzer to skip Reexecute(), 2023-04-26)
ae12c1380b (portablectl: add --extension to bash completion, 2023-04-25)
b1ecfe3fe7 (man: /usr/lib/systemd/random-seed -> /usr/lib/systemd/systemd-random-seed, 2023-04-25)
8895ccaaa8 (cryptsetup-fido2: Depend on libcryptsetup, 2023-04-24)
c6e957d02d (test: use idiomatic bash loop iteration, 2023-04-07)
26e181e94e (testsuite-54: drop unnecessary pipe, 2023-04-05)
d2c738341b (testsuite-70: drop unnecessary env, 2023-04-05)
f3abd451dd (test: drop uses of "&& { echo 'unexpected success'; exit 1; }", 2023-04-05)
59243061f6 (man: fix LogControl1 manpage example, 2023-04-24)
04983c2b00 (pam: cache sd-bus separately per module, 2023-04-16)
0045d952b5 (pam_systemd_home: clean up sd-bus when called about something else's user, 2023-04-20)
c50ec75e1e (testsuite-04: remove unnecessary conditional, 2023-04-04)
5a8987794e (man: clarify sd_bus_default, 2023-04-22)
b9af9a320e (man: add working example to LogControl1 manpage, 2023-04-21)
4d2b5338ac (detect-virt: add message at debug level, 2023-04-20)
749a6d9959 (dissect: let's check for crypto_LUKS before fstype allowlist check, 2023-04-20)
1aa6171081 (ratelimit: handle counter overflows somewhat sanely, 2023-04-20)
5ff63b8507 (man: try to make clearer that /var/ is generally not available in /usr/lib/systemd/system-shutdown/ callouts, 2023-04-20)
2be23f69ee (dissect-image: issue BLKFLSBUF before probing an fs at block device offset != 0, 2023-04-20)
7b437659b1 (list: fix double evaluation, 2023-04-20)
ffbb75aa46 (mountpoint-util: check /proc is mounted on failure, 2023-04-17)
14eb49b5eb (test: prefix the transient unit with test- to make coverage runs happy, 2023-04-18)
980954d2cf (kmod-setup: bypass heavy virtio-rng check if we are not running in a VM anyway, 2023-04-18)
567a1a6fd8 (kmod-setup: use STARTSWITH_SET() where appropriate, 2023-04-18)
d37f06f96f (creds: make available to all ExecStartPre= and ExecStart= processes, 2023-04-15)
d15f907b5b (user-util:remove duplicate includes, 2023-04-17)
cedea4cb7e (virt: Further improve detection of EC2 metal instances, 2023-04-13)
826662680b (string-util: add strstrafter(), 2023-04-14)
ac721c88af (test: add a couple of tests with invalid UTF-8 characters, 2023-04-15)
9c8d8719e4 (test: add a simple test for getenv_path_list(), 2023-04-15)
a9c73150ac (test: add a couple of basic sanity tests for the security verb, 2023-04-15)
06a70861bc (test: add a couple of basic sanity tests for timedatectl, 2023-04-15)
def6c37a19 (shared: add a missing include, 2023-04-15)
79e23f618f (test: add tests for uuid/uint64 specifiers, 2023-04-15)
3ee1839c19 (fsck: look for fsck binary not just in /sbin, 2023-04-13)
eab75a8591 (test: stop the test unit when it's not needed anymore, 2023-04-14)
f86ec34958 (Synposis and description of networkctl man page reflecting only part of its functionality (#27264), 2023-04-13)
fffcebc4bb (core/main: fix a typo for --log-target, 2023-04-13)
f152cdabae (test: add some tests for RuntimeMaxSec, 2023-04-13)
999f48558b (scope: do not disable timer event source when state is SCOPE_RUNNING, 2023-04-04)
430861fc96 (Fix cross-reference of manual for LogsDirectory, 2023-04-12)
91953109ec (pid1: fix coredump_filter setting, 2023-04-12)
fa8d33bb37 (Uphold/StopWhenUnneeded/BindsTo: requeue when job finishes, 2023-04-12)
6fc08d8407 (Uphold/StopWhenUnneeded/BindsTo: add retry timer on rate limit, 2023-04-12)
1fb4ae32b0 (man: add util-linux to the package list for Fedora container, 2023-04-12)
841146f243 (man: link to Fedora 37, 2023-04-12)
465edc1230 (systemctl: suppress error for try-* if unit is masked, 2023-04-04)
7102925d1a (ci: drop checkout from release workflow, 2023-04-11)
167c01688f (ci: don't run release wf on `systemd-security`, 2023-04-11)
bda5c892a8 (shell-completion: add --xml-interface option of busctl to the rules, 2023-04-11)
6265430ca9 (busctl: add --xml-interface to the help message, 2023-04-11)
d26fd71d1a (test: update description, 2023-04-11)
35a6460a2f (test: systemd-analyze blame should succeed now, 2023-04-10)
ef10974c66 (analyze: make blame command work even the default target not reached, 2023-04-10)
dc2facf61d (ci: add permissions to make a release, 2023-04-03)
4c65c644d6 (test/test-functions: fix typo in install_suse_systemd(), 2023-04-04)
fca5a45a59 (test: install symlinks with valid targets on SUSE and Debian, 2023-03-24)
d18037b8ff (localed: fix invalid free after shifting pointers using strstrip, 2023-04-07)
93ac024b7e (test: bump the timeout for non-qemu runs to 90s, 2023-04-07)
283b7b4159 (test: enable the systemd-resolved unit in TEST-75, 2023-04-07)
6179141124 (man/systemd-mount: Clearify documentation about --bind-device, 2023-04-05)
b2e1dabbeb (resolve: change DNS_PACKET_UNICAST_SIZE_LARGE_MAX to 1232 (#27171), 2023-04-07)
16dc17d68c (man: netdev: Clarify wireguard IPv6 endpoint format, 2023-04-07)
0558c490a6 (test: use kbd-mode-map we ship in TEST-73-LOCALE, 2023-04-05)
64ef6ccd4f (ci: do one build with no tpm/p11kit/fido2, 2023-04-04)
018461aaf0 (man: mention -o option for systemd-journal-remote, 2023-04-05)
31c7f6d0d1 (manager: remove transient unit directory during startup, 2023-04-04)
49c6965946 (core: a more informative error when SetProperties/StartTransientUnit fails, 2023-04-02)
649e335bc1 (journald: fix log message, 2023-04-04)
eda7bf237f (Added unit test for strv_env_name_is_valid() function listed in env-util.c (#27100), 2023-04-02)
0430078cfb (man: restore description of ConditionControlGroupController=v1|v2, 2023-03-31)
0d9c2c270b (test: set ReadWritePaths= for test-.services when built w/ coverage, 2023-03-31)
384fec2622 (core: skip deps on oomd if v2 or memory unavailable, 2023-03-31)
2950b4ebf6 (test: fixed negative checks in TEST-70-TPM2. Use in-line error handling rather than redirections. Follow up on #27020, 2023-03-30)
786649c904 (test: make make_addresses() actually return the addresses, 2023-03-30)
5e3ac73017 (coverage: add a wrapper for execveat(), 2023-03-30)
8b1cc644c5 (man: add example for sd_bus_call_method, 2023-03-30)
382e53977c (man: further shorten print-unit-path example, 2023-03-29)
960f05945c (man: link up new online coredump docs from man page, 2023-03-30)
edfca36727 (tree-wide: reset optind to 0 when GNU extensions in optstring are used, 2023-03-21)
91ff21962d (test-kernel-install: several cleanups, 2023-03-28)
9943f2af3d (units: let's establish the coredump socket before writting core_pattern sysctl, 2023-03-29)
dbb1b9c2c8 (test: do not remove state directory on failure, 2023-03-29)
29cfb05183 (test: fix shellcheck warnings in test-sysusers.sh, 2023-03-29)
18afac6e90 (man: fix shellcheck warning for html.in, 2023-03-29)
4629419038 (added more test cases, 2023-03-27)
05ae9e276c (test: fix regexp in testsuite-74.mount.sh, 2023-03-28)
295012f7fa (test: drop extraneous bracket in testsuite-74.mount.sh, 2023-03-28)
ff7040b193 (busctl: also assume --full if not writing to terminal, 2023-03-28)
00977a8e74 (busctl: use size_t for set size, 2023-03-28)
802fded9a5 (busctl: do not truncate property values when --full, 2023-03-28)
e400a62a92 (oomd: add inline comments with param names, 2023-03-21)
4067ec52f4 (test: add more testcases for rm_rf(), 2023-03-19)
201830df21 (rm-rf: also chmod() directory if it cannot be opened, 2023-03-19)
d91f7eb0fb (rm-rf: mask file mode with 07777 when passed to chmod(), 2023-03-19)
80417f90b0 (rm-rf: fix errno handling, 2023-03-18)
```
Co-authored-by: Arian van Putten <arian.vanputten@gmail.com>
2023-05-03 07:09:53 +00:00
|
|
|
# Some UEFI firmwares fail on large reads. Now that systemd-boot loads initrd
|
|
|
|
# itself, systems with such firmware won't boot without this fix
|
2023-05-30 22:42:50 +00:00
|
|
|
uefiLargeFileWorkaround = makeTest {
|
|
|
|
name = "uefi-large-file-workaround";
|
2023-11-04 01:38:11 +00:00
|
|
|
meta.maintainers = with pkgs.lib.maintainers; [ julienmalka ];
|
2023-05-30 22:42:50 +00:00
|
|
|
nodes.machine = { pkgs, ... }: {
|
|
|
|
imports = [common];
|
|
|
|
virtualisation.efi.OVMF = pkgs.OVMF.overrideAttrs (old: {
|
|
|
|
# This patch deliberately breaks the FAT driver in EDK2 to
|
|
|
|
# exhibit (part of) the firmware bug that we are testing
|
|
|
|
# for. Files greater than 10MiB will fail to be read in a
|
|
|
|
# single Read() call, so systemd-boot will fail to load the
|
|
|
|
# initrd without a workaround. The number 10MiB was chosen
|
|
|
|
# because if it were smaller than the kernel size, even the
|
|
|
|
# LoadImage call would fail, which is not the failure mode
|
|
|
|
# we're testing for. It needs to be between the kernel size
|
|
|
|
# and the initrd size.
|
|
|
|
patches = old.patches or [] ++ [ ./systemd-boot-ovmf-broken-fat-driver.patch ];
|
|
|
|
});
|
|
|
|
};
|
|
|
|
|
|
|
|
testScript = ''
|
|
|
|
machine.wait_for_unit("multi-user.target")
|
|
|
|
'';
|
|
|
|
};
|
2023-11-16 23:48:19 +00:00
|
|
|
|
|
|
|
no-bootspec = makeTest
|
|
|
|
{
|
|
|
|
name = "systemd-boot-no-bootspec";
|
|
|
|
meta.maintainers = with pkgs.lib.maintainers; [ julienmalka ];
|
|
|
|
|
|
|
|
nodes.machine = {
|
|
|
|
imports = [ common ];
|
|
|
|
boot.bootspec.enable = false;
|
|
|
|
};
|
|
|
|
|
|
|
|
testScript = ''
|
|
|
|
machine.start()
|
|
|
|
machine.wait_for_unit("multi-user.target")
|
|
|
|
'';
|
|
|
|
};
|
2020-04-11 20:38:55 +00:00
|
|
|
}
|