Skip to content

Commit d9088ad

Browse files
authored
Merge pull request #17 from petm5/dev
Nixlet v0.3.1
2 parents 61c4941 + 8a69e8d commit d9088ad

File tree

9 files changed

+120
-184
lines changed

9 files changed

+120
-184
lines changed

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
0.2.1
1+
0.3.1

flake.lock

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

flake.nix

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,43 +11,50 @@
1111
updateUrl = "https://github.com/petm5/nixlet/releases/latest/download";
1212
releaseVersion = nixpkgs.lib.strings.trim (builtins.readFile ./VERSION);
1313
baseConfig = [
14+
(nixpkgs + "/nixos/modules/image/repart.nix")
15+
./modules/image/repart-image-verity-store-defaults.nix
16+
./modules/image/repart-image-compress.nix
17+
./modules/image/update-package.nix
18+
./modules/image/initrd-repart-expand.nix
19+
./modules/image/sysupdate-verity-store.nix
1420
./modules/profiles/minimal.nix
1521
./modules/profiles/image-based.nix
1622
./modules/profiles/server.nix
1723
./modules/hardware/generic-pc.nix
1824
(nixpkgs + "/nixos/modules/profiles/qemu-guest.nix")
19-
./modules/image/repart-verity-store.nix
20-
./modules/image/initrd-repart-expand.nix
21-
./modules/image/sysupdate-verity-store.nix
2225
{
2326
nixpkgs.hostPlatform = "x86_64-linux";
2427
system.stateVersion = "24.05";
2528
system.image.updates.url = "${updateUrl}";
2629
system.image.id = "nixlet";
2730
system.image.version = releaseVersion;
31+
boot.kernelPackages = pkgs.linuxPackages_latest;
2832
}
2933
];
3034
in {
31-
packages.x86_64-linux.nixlet = (nixpkgs.lib.nixosSystem {
35+
nixosSystems.x86_64-linux.nixlet = nixpkgs.lib.nixosSystem {
3236
modules = baseConfig;
33-
}).config.system.build.updatePackage;
34-
packages.x86_64-linux.nixlet-insecure = (nixpkgs.lib.nixosSystem {
37+
};
38+
nixosSystems.x86_64-linux.nixlet-insecure = nixpkgs.lib.nixosSystem {
3539
modules = baseConfig ++ [ {
3640
system.image.filesystems.encrypt = false;
3741
system.image.id = nixpkgs.lib.mkOverride 0 "nixlet-insecure";
3842
} ];
39-
}).config.system.build.updatePackage;
43+
};
44+
packages.x86_64-linux.nixlet = self.nixosSystems.x86_64-linux.nixlet.config.system.build.updatePackage;
45+
packages.x86_64-linux.nixlet-insecure = self.nixosSystems.x86_64-linux.nixlet-insecure.config.system.build.updatePackage;
4046
checks.x86_64-linux = nixpkgs.lib.listToAttrs (map (test: nixpkgs.lib.nameValuePair "${test}" (import ./tests/${test}.nix {
4147
pkgs = nixpkgs.legacyPackages."x86_64-linux";
4248
inherit self;
4349
})) [ "integration" "system-update" ]);
4450
apps.x86_64-linux.nixlet-live-test = let
51+
testSystem = self.nixosSystems.x86_64-linux.nixlet-insecure;
4552
script = (import ./tests/common.nix rec {
4653
inherit self;
4754
pkgs = nixpkgs.legacyPackages."x86_64-linux";
4855
lib = pkgs.lib;
4956
}).makeInteractiveTest {
50-
image = "${self.packages.x86_64-linux.nixlet-insecure}/${self.packages.x86_64-linux.nixlet-insecure.combinedImage}";
57+
image = "${testSystem.config.system.build.finalImage}/${testSystem.config.image.fileName}";
5158
};
5259
in {
5360
type = "app";

modules/image/initrd-repart-expand.nix

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@ in {
6262
};
6363
};
6464

65+
boot.initrd.systemd.additionalUpstreamUnits = [ "initrd-usr-fs.target" ];
66+
6567
boot.initrd.systemd.services.systemd-repart.after = lib.mkForce [ ];
6668

6769
boot.initrd.supportedFilesystems.btrfs = true;
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
image.repart.mkfsOptions.erofs = [ "-zlz4hc,12" "-C1048576" "-Efragments,dedupe,ztailpacking" ];
3+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
{ config, lib, pkgs, ... }:
2+
let
3+
inherit (pkgs.stdenv.hostPlatform) efiArch;
4+
inherit (config.image.repart.verityStore) partitionIds;
5+
in {
6+
assertions = [
7+
{ assertion = config.boot.initrd.systemd.enable; }
8+
];
9+
10+
fileSystems."/nix/store" = {
11+
device = "/usr/nix/store";
12+
options = [ "bind" ];
13+
};
14+
15+
boot.kernelParams = [ "mount.usrfstype=erofs" "mount.usrflags=ro" ];
16+
17+
image.repart = {
18+
verityStore.enable = true;
19+
20+
partitions = {
21+
${partitionIds.esp} = {
22+
contents = {
23+
# Include systemd-boot
24+
"/EFI/BOOT/BOOT${lib.toUpper efiArch}.EFI".source =
25+
"${pkgs.systemdUkify}/lib/systemd/boot/efi/systemd-boot${efiArch}.efi";
26+
};
27+
repartConfig = {
28+
Type = "esp";
29+
Format = "vfat";
30+
SizeMinBytes = "96M";
31+
SplitName = "-";
32+
};
33+
};
34+
${partitionIds.store-verity}.repartConfig = {
35+
SizeMinBytes = "64M";
36+
SizeMaxBytes = "64M";
37+
Label = "verity-${config.system.image.version}";
38+
SplitName = "verity";
39+
ReadOnly = 1;
40+
};
41+
${partitionIds.store}.repartConfig = {
42+
Minimize = "best";
43+
Label = "usr-${config.system.image.version}";
44+
SplitName = "usr";
45+
ReadOnly = 1;
46+
};
47+
};
48+
};
49+
}

modules/image/repart-verity-store.nix

Lines changed: 0 additions & 166 deletions
This file was deleted.

modules/image/update-package.nix

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
{ config, lib, pkgs, ... }: let
2+
finalImage = config.system.build.finalImage.override {
3+
split = true;
4+
};
5+
6+
verityImgAttrs = builtins.fromJSON (builtins.readFile "${finalImage}/repart-output.json");
7+
# HACK: Magic indices are used to select partitions, which is error-prone
8+
usrAttrs = builtins.elemAt verityImgAttrs 2;
9+
verityAttrs = builtins.elemAt verityImgAttrs 1;
10+
11+
usrUuid = usrAttrs.uuid;
12+
verityUuid = verityAttrs.uuid;
13+
in {
14+
system.build.updatePackage = let
15+
updateFiles = [
16+
{
17+
name = "${config.system.image.id}_${config.system.image.version}.efi";
18+
path = "${config.system.build.uki}/${config.system.boot.loader.ukiFile}";
19+
}
20+
{
21+
name = "${config.system.image.id}_${config.system.image.version}_${verityUuid}.verity";
22+
path = "${finalImage}/${config.image.baseName}.verity.raw";
23+
}
24+
{
25+
name = "${config.system.image.id}_${config.system.image.version}_${usrUuid}.usr";
26+
path = "${finalImage}/${config.image.baseName}.usr.raw";
27+
}
28+
];
29+
createHash = { name, path }: lib.concatStringsSep " " [ (builtins.hashFile "sha256" path) name ];
30+
in (pkgs.linkFarm "${config.system.build.image.pname}-update-package" (updateFiles ++ [
31+
{
32+
name = "${config.system.image.id}_${config.system.image.version}.img";
33+
path = "${finalImage}/${config.image.baseName}.raw";
34+
}
35+
{
36+
name = "SHA256SUMS";
37+
path = pkgs.writeText "sha256sums.txt" (lib.concatLines (map createHash updateFiles));
38+
}
39+
]));
40+
}

tests/common.nix

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,26 +14,28 @@ in rec {
1414
inherit pkgs lib;
1515
system = null;
1616
modules = [
17-
../modules/image/repart-verity-store.nix
17+
(pkgs.path + "/nixos/modules/image/repart.nix")
18+
../modules/image/repart-image-verity-store-defaults.nix
19+
../modules/image/update-package.nix
1820
../modules/image/initrd-repart-expand.nix
1921
../modules/image/sysupdate-verity-store.nix
2022
../modules/profiles/minimal.nix
2123
../modules/profiles/image-based.nix
2224
../modules/profiles/server.nix
2325
(pkgs.path + "/nixos/modules/profiles/qemu-guest.nix")
2426
{
27+
boot.kernelPackages = pkgs.linuxPackages_latest;
2528
users.allowNoPasswordLogin = true;
2629
system.stateVersion = lib.versions.majorMinor lib.version;
27-
system.image.id = lib.mkDefault "test";
30+
system.image.id = lib.mkDefault "nixos-appliance";
2831
system.image.version = lib.mkDefault "1";
2932
networking.hosts."10.0.2.1" = [ "server.test" ];
3033
boot.kernelParams = [
3134
"x-systemd.device-timeout=10s"
3235
"console=ttyS0,115200n8"
33-
"panic=0" "boot.panic_on_fail"
3436
];
3537
# Use weak compression
36-
system.image.compress = false;
38+
image.repart.compression.enable = false;
3739
boot.initrd.compressor = "zstd";
3840
boot.initrd.compressorArgs = [ "-2" ];
3941
}
@@ -44,7 +46,7 @@ in rec {
4446

4547
makeImage = extraConfig: let
4648
system = makeSystem extraConfig;
47-
in "${system.config.system.build.updatePackage}/${system.config.system.build.updatePackage.combinedImage}";
49+
in "${system.config.system.build.finalImage}/${system.config.image.fileName}";
4850

4951
makeUpdatePackage = extraConfig: let
5052
system = makeSystem extraConfig;
@@ -130,7 +132,6 @@ in rec {
130132
flagsStr = lib.concatStringsSep " " flags;
131133
startCommand = "${qemuCommand} ${flagsStr}";
132134
mutableImage = "nixlet-disk.qcow2";
133-
tpmFolder = "emulated_tpm";
134135
qemuImgCommand = "${qemu}/bin/qemu-img";
135136
imgFlags = [
136137
"create"

0 commit comments

Comments
 (0)