Merge pull request #267985 from JulienMalka/absent-bootspec

Changed files
+44 -3
nixos
modules
system
boot
tests
pkgs
tools
misc
bootspec
+14 -3
nixos/modules/system/boot/loader/systemd-boot/systemd-boot-builder.py
···
def get_bootspec(profile: str | None, generation: int) -> BootSpec:
-
boot_json_path = os.path.realpath("%s/%s" % (system_dir(profile, generation, None), "boot.json"))
-
boot_json_f = open(boot_json_path, 'r')
-
bootspec_json = json.load(boot_json_f)
+
system_directory = system_dir(profile, generation, None)
+
boot_json_path = os.path.realpath("%s/%s" % (system_directory, "boot.json"))
+
if os.path.isfile(boot_json_path):
+
boot_json_f = open(boot_json_path, 'r')
+
bootspec_json = json.load(boot_json_f)
+
else:
+
boot_json_str = subprocess.check_output([
+
"@bootspecTools@/bin/synthesize",
+
"--version",
+
"1",
+
system_directory,
+
"/dev/stdout"],
+
universal_newlines=True)
+
bootspec_json = json.loads(boot_json_str)
return bootspec_from_json(bootspec_json)
def bootspec_from_json(bootspec_json: Dict) -> BootSpec:
+2
nixos/modules/system/boot/loader/systemd-boot/systemd-boot.nix
···
systemd = config.systemd.package;
+
bootspecTools = pkgs.bootspec;
+
nix = config.nix.package.out;
timeout = optionalString (config.boot.loader.timeout != null) config.boot.loader.timeout;
+16
nixos/tests/systemd-boot.nix
···
machine.wait_for_unit("multi-user.target")
'';
};
+
+
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")
+
'';
+
};
}
+12
pkgs/tools/misc/bootspec/default.nix
···
{ lib
, rustPlatform
, fetchFromGitHub
+
, fetchpatch
}:
rustPlatform.buildRustPackage rec {
pname = "bootspec";
···
rev = "v${version}";
hash = "sha256-5IGSMHeL0eKfl7teDejAckYQjc8aeLwfwIQSzQ8YaAg=";
};
+
+
patches = [
+
# https://github.com/DeterminateSystems/bootspec/pull/127
+
# Fixes the synthesize tool for aarch64-linux
+
(fetchpatch {
+
name = "aarch64-support.patch";
+
url = "https://github.com/DeterminateSystems/bootspec/commit/1d0e925f360f0199f13422fb7541225fd162fd4f.patch";
+
sha256 = "sha256-wU/jWnOqVBrU2swANdXbQfzRpNd/JIS4cxSyCvixZM0=";
+
})
+
+
];
cargoHash = "sha256-eGSKVHjPnHK7WyGkO5LIjocNGHawahYQR3H5Lgk1C9s=";