bootspec: generalize the bootspec tooling packaging (#401484)

This commit is contained in:
Ryan Lahfa
2025-04-25 15:17:29 +02:00
committed by GitHub
4 changed files with 125 additions and 82 deletions
@@ -111,6 +111,8 @@ in
Enable this option if you want to ascertain that your documents are correct
'';
package = lib.mkPackageOption pkgs "bootspec" { };
extensions = lib.mkOption {
# NOTE(RaitoBezarius): this is not enough to validate: extensions."osRelease" = drv; those are picked up by cue validation.
type = lib.types.attrsOf lib.types.anything; # <namespace>: { ...namespace-specific fields }
@@ -47,7 +47,7 @@ let
systemd = config.systemd.package;
bootspecTools = pkgs.bootspec;
bootspecTools = config.boot.bootspec.package;
nix = config.nix.package.out;
+83 -81
View File
@@ -680,95 +680,97 @@ let
in
{
# The configuration of the system used to run "nixos-install".
installer = {
imports = [
commonConfig
../modules/profiles/installation-device.nix
../modules/profiles/base.nix
extraInstallerConfig
./common/auto-format-root-device.nix
];
installer =
{ config, ... }:
{
imports = [
commonConfig
../modules/profiles/installation-device.nix
../modules/profiles/base.nix
extraInstallerConfig
./common/auto-format-root-device.nix
];
# In systemdStage1, also automatically format the device backing the
# root filesystem.
virtualisation.fileSystems."/".autoFormat = systemdStage1;
# In systemdStage1, also automatically format the device backing the
# root filesystem.
virtualisation.fileSystems."/".autoFormat = systemdStage1;
boot.initrd.systemd.enable = systemdStage1;
boot.initrd.systemd.enable = systemdStage1;
# Use a small /dev/vdb as the root disk for the
# installer. This ensures the target disk (/dev/vda) is
# the same during and after installation.
virtualisation.emptyDiskImages = [ 512 ];
virtualisation.rootDevice = "/dev/vdb";
# Use a small /dev/vdb as the root disk for the
# installer. This ensures the target disk (/dev/vda) is
# the same during and after installation.
virtualisation.emptyDiskImages = [ 512 ];
virtualisation.rootDevice = "/dev/vdb";
hardware.enableAllFirmware = mkForce false;
nix.package = selectNixPackage pkgs;
nix.package = selectNixPackage pkgs;
hardware.enableAllFirmware = mkForce false;
# The test cannot access the network, so any packages we
# need must be included in the VM.
system.extraDependencies =
with pkgs;
[
bintools
brotli
brotli.dev
brotli.lib
desktop-file-utils
docbook5
docbook_xsl_ns
kbd.dev
kmod.dev
libarchive.dev
libxml2.bin
libxslt.bin
nixos-artwork.wallpapers.simple-dark-gray-bottom
ntp
perlPackages.ConfigIniFiles
perlPackages.FileSlurp
perlPackages.JSON
perlPackages.ListCompare
perlPackages.XMLLibXML
# make-options-doc/default.nix
(python3.withPackages (p: [ p.mistune ]))
shared-mime-info
sudo
switch-to-configuration-ng
texinfo
unionfs-fuse
xorg.lndir
shellcheck-minimal
# add curl so that rather than seeing the test attempt to download
# curl's tarball, we see what it's trying to download
curl
]
++ optionals (bootLoader == "grub") (
let
zfsSupport = extraInstallerConfig.boot.supportedFilesystems.zfs or false;
in
# The test cannot access the network, so any packages we
# need must be included in the VM.
system.extraDependencies =
with pkgs;
[
(pkgs.grub2.override { inherit zfsSupport; })
(pkgs.grub2_efi.override { inherit zfsSupport; })
pkgs.nixos-artwork.wallpapers.simple-dark-gray-bootloader
pkgs.perlPackages.FileCopyRecursive
pkgs.perlPackages.XMLSAX
pkgs.perlPackages.XMLSAXBase
]
)
++ optionals (bootLoader == "systemd-boot") [
pkgs.zstd.bin
pkgs.mypy
pkgs.bootspec
]
++ optionals clevisTest [ pkgs.klibc ]
++ optional systemdStage1 pkgs.chroot-realpath;
bintools
brotli
brotli.dev
brotli.lib
desktop-file-utils
docbook5
docbook_xsl_ns
kbd.dev
kmod.dev
libarchive.dev
libxml2.bin
libxslt.bin
nixos-artwork.wallpapers.simple-dark-gray-bottom
ntp
perlPackages.ConfigIniFiles
perlPackages.FileSlurp
perlPackages.JSON
perlPackages.ListCompare
perlPackages.XMLLibXML
# make-options-doc/default.nix
(python3.withPackages (p: [ p.mistune ]))
shared-mime-info
sudo
switch-to-configuration-ng
texinfo
unionfs-fuse
xorg.lndir
shellcheck-minimal
nix.settings = {
substituters = mkForce [ ];
hashed-mirrors = null;
connect-timeout = 1;
# add curl so that rather than seeing the test attempt to download
# curl's tarball, we see what it's trying to download
curl
]
++ optionals (bootLoader == "grub") (
let
zfsSupport = extraInstallerConfig.boot.supportedFilesystems.zfs or false;
in
[
(pkgs.grub2.override { inherit zfsSupport; })
(pkgs.grub2_efi.override { inherit zfsSupport; })
pkgs.nixos-artwork.wallpapers.simple-dark-gray-bootloader
pkgs.perlPackages.FileCopyRecursive
pkgs.perlPackages.XMLSAX
pkgs.perlPackages.XMLSAXBase
]
)
++ optionals (bootLoader == "systemd-boot") [
pkgs.zstd.bin
pkgs.mypy
config.boot.bootspec.package
]
++ optionals clevisTest [ pkgs.klibc ]
++ optional systemdStage1 pkgs.chroot-realpath;
nix.settings = {
substituters = mkForce [ ];
hashed-mirrors = null;
connect-timeout = 1;
};
};
};
target = {
imports = [ commonConfig ];
+39
View File
@@ -0,0 +1,39 @@
{
lib,
rustPlatform,
fetchFromGitea,
fetchpatch,
}:
rustPlatform.buildRustPackage rec {
pname = "bootspec-lix";
version = "1.0.0";
src = fetchFromGitea {
domain = "git.lix.systems";
owner = "lix-community";
repo = "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=";
})
];
useFetchCargoVendor = true;
cargoHash = "sha256-65jk8UlXZgQoxuwRcGlMnI4e+LpCJuP2TaqK+Kn4GnQ=";
meta = with lib; {
description = "Vendor-neutral implementation of RFC-0125's datatype and synthesis tooling";
homepage = "https://git.lix.systems/lix-community/bootspec";
license = licenses.mit;
maintainers = [ lib.maintainers.raitobezarius ];
platforms = platforms.unix;
};
}