nixos/nix-store-veritysetup: init
This commit is contained in:
parent
be55c6c4e5
commit
50d0a81800
@ -1786,6 +1786,7 @@
|
|||||||
./system/boot/luksroot.nix
|
./system/boot/luksroot.nix
|
||||||
./system/boot/modprobe.nix
|
./system/boot/modprobe.nix
|
||||||
./system/boot/networkd.nix
|
./system/boot/networkd.nix
|
||||||
|
./system/boot/nix-store-veritysetup.nix
|
||||||
./system/boot/plymouth.nix
|
./system/boot/plymouth.nix
|
||||||
./system/boot/resolved.nix
|
./system/boot/resolved.nix
|
||||||
./system/boot/shutdown.nix
|
./system/boot/shutdown.nix
|
||||||
|
|||||||
38
nixos/modules/system/boot/nix-store-veritysetup.nix
Normal file
38
nixos/modules/system/boot/nix-store-veritysetup.nix
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
let
|
||||||
|
cfg = config.boot.initrd.nix-store-veritysetup;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
meta.maintainers = with lib.maintainers; [ nikstur ];
|
||||||
|
|
||||||
|
options.boot.initrd.nix-store-veritysetup = {
|
||||||
|
enable = lib.mkEnableOption "nix-store-veritysetup";
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.mkIf cfg.enable {
|
||||||
|
assertions = [
|
||||||
|
{
|
||||||
|
assertion = config.boot.initrd.systemd.dmVerity.enable;
|
||||||
|
message = "nix-store-veritysetup requires dm-verity in the systemd initrd.";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
boot.initrd.systemd = {
|
||||||
|
contents = {
|
||||||
|
"/etc/systemd/system-generators/nix-store-veritysetup-generator".source =
|
||||||
|
"${lib.getExe pkgs.nix-store-veritysetup-generator}";
|
||||||
|
};
|
||||||
|
|
||||||
|
storePaths = [
|
||||||
|
"${config.boot.initrd.systemd.package}/bin/systemd-escape"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
||||||
@ -938,6 +938,7 @@ in
|
|||||||
nix-required-mounts = runTest ./nix-required-mounts;
|
nix-required-mounts = runTest ./nix-required-mounts;
|
||||||
nix-serve = runTest ./nix-serve.nix;
|
nix-serve = runTest ./nix-serve.nix;
|
||||||
nix-serve-ssh = runTest ./nix-serve-ssh.nix;
|
nix-serve-ssh = runTest ./nix-serve-ssh.nix;
|
||||||
|
nix-store-veritysetup = runTest ./nix-store-veritysetup.nix;
|
||||||
nixops = handleTest ./nixops/default.nix { };
|
nixops = handleTest ./nixops/default.nix { };
|
||||||
nixos-generate-config = runTest ./nixos-generate-config.nix;
|
nixos-generate-config = runTest ./nixos-generate-config.nix;
|
||||||
nixos-rebuild-install-bootloader = handleTestOn [
|
nixos-rebuild-install-bootloader = handleTestOn [
|
||||||
|
|||||||
108
nixos/tests/nix-store-veritysetup.nix
Normal file
108
nixos/tests/nix-store-veritysetup.nix
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
{ lib, ... }:
|
||||||
|
{
|
||||||
|
|
||||||
|
name = "nix-store-veritysetup";
|
||||||
|
|
||||||
|
meta.maintainers = with lib.maintainers; [ nikstur ];
|
||||||
|
|
||||||
|
nodes.machine =
|
||||||
|
{ config, modulesPath, ... }:
|
||||||
|
{
|
||||||
|
|
||||||
|
imports = [
|
||||||
|
"${modulesPath}/image/repart.nix"
|
||||||
|
];
|
||||||
|
|
||||||
|
image.repart = {
|
||||||
|
name = "nix-store";
|
||||||
|
partitions = {
|
||||||
|
"nix-store" = {
|
||||||
|
storePaths = [ config.system.build.toplevel ];
|
||||||
|
stripNixStorePrefix = true;
|
||||||
|
repartConfig = {
|
||||||
|
Type = "linux-generic";
|
||||||
|
Label = "nix-store";
|
||||||
|
Format = "erofs";
|
||||||
|
Minimize = "best";
|
||||||
|
Verity = "data";
|
||||||
|
VerityMatchKey = "nix-store";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
"nix-store-verity" = {
|
||||||
|
repartConfig = {
|
||||||
|
Type = "linux-generic";
|
||||||
|
Label = "nix-store-verity";
|
||||||
|
Verity = "hash";
|
||||||
|
VerityMatchKey = "nix-store";
|
||||||
|
Minimize = "best";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
boot.initrd = {
|
||||||
|
systemd = {
|
||||||
|
enable = true;
|
||||||
|
dmVerity.enable = true;
|
||||||
|
};
|
||||||
|
nix-store-veritysetup.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
virtualisation = {
|
||||||
|
mountHostNixStore = false;
|
||||||
|
qemu.drives = [
|
||||||
|
{
|
||||||
|
name = "nix-store";
|
||||||
|
file = ''"$NIX_STORE"'';
|
||||||
|
}
|
||||||
|
];
|
||||||
|
fileSystems = {
|
||||||
|
"/nix/store" = {
|
||||||
|
fsType = "erofs";
|
||||||
|
device = "/dev/mapper/nix-store";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
testScript =
|
||||||
|
{ nodes, ... }:
|
||||||
|
''
|
||||||
|
import os
|
||||||
|
import json
|
||||||
|
import subprocess
|
||||||
|
import tempfile
|
||||||
|
|
||||||
|
with open("${nodes.machine.system.build.image}/repart-output.json") as f:
|
||||||
|
data = json.load(f)
|
||||||
|
|
||||||
|
storehash = data[0]["roothash"]
|
||||||
|
|
||||||
|
os.environ["QEMU_KERNEL_PARAMS"] = f"storehash={storehash}"
|
||||||
|
|
||||||
|
tmp_disk_image = tempfile.NamedTemporaryFile()
|
||||||
|
|
||||||
|
subprocess.run([
|
||||||
|
"${nodes.machine.virtualisation.qemu.package}/bin/qemu-img",
|
||||||
|
"create",
|
||||||
|
"-f",
|
||||||
|
"qcow2",
|
||||||
|
"-b",
|
||||||
|
"${nodes.machine.system.build.image}/${nodes.machine.image.repart.imageFile}",
|
||||||
|
"-F",
|
||||||
|
"raw",
|
||||||
|
tmp_disk_image.name,
|
||||||
|
])
|
||||||
|
|
||||||
|
os.environ["NIX_STORE"] = tmp_disk_image.name
|
||||||
|
|
||||||
|
machine.start()
|
||||||
|
|
||||||
|
print(machine.succeed("findmnt"))
|
||||||
|
print(machine.succeed("dmsetup info nix-store"))
|
||||||
|
|
||||||
|
machine.wait_for_unit("multi-user.target")
|
||||||
|
'';
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user