Xfce updates 2024-12-27 (#368555)
[NixPkgs.git] / nixos / tests / lvm2 / systemd-stage-1.nix
blob9eb7a6797e3824df499e632cf326652a6db99592
2   kernelPackages ? null,
3   flavour,
4   mkXfsFlags ? "",
5 }:
6 let
7   preparationCode =
8     {
9       raid = ''
10         machine.succeed("vgcreate test_vg /dev/vdb /dev/vdc")
11         machine.succeed("lvcreate -L 512M --type raid0 test_vg -n test_lv")
12       '';
14       thinpool = ''
15         machine.succeed("vgcreate test_vg /dev/vdb")
16         machine.succeed("lvcreate -L 512M -T test_vg/test_thin_pool")
17         machine.succeed("lvcreate -n test_lv -V 16G --thinpool test_thin_pool test_vg")
18       '';
20       vdo = ''
21         machine.succeed("vgcreate test_vg /dev/vdb")
22         machine.succeed("lvcreate --type vdo -n test_lv -L 6G -V 12G test_vg/vdo_pool_lv")
23       '';
24     }
25     .${flavour};
27   extraConfig =
28     {
29       raid = {
30         boot.initrd.kernelModules = [
31           "dm-raid"
32           "raid0"
33         ];
34       };
36       thinpool = {
37         services.lvm = {
38           boot.thin.enable = true;
39           dmeventd.enable = true;
40         };
41       };
43       vdo = {
44         services.lvm = {
45           boot.vdo.enable = true;
46           dmeventd.enable = true;
47         };
48       };
49     }
50     .${flavour};
52   extraCheck =
53     {
54       raid = ''
55         "test_lv" in machine.succeed("lvs --select segtype=raid0")
56       '';
58       thinpool = ''
59         "test_lv" in machine.succeed("lvs --select segtype=thin-pool")
60       '';
62       vdo = ''
63         "test_lv" in machine.succeed("lvs --select segtype=vdo")
64       '';
65     }
66     .${flavour};
69 import ../make-test-python.nix (
70   { pkgs, lib, ... }:
71   {
72     name = "lvm2-${flavour}-systemd-stage-1";
73     meta.maintainers = lib.teams.helsinki-systems.members;
75     nodes.machine =
76       { pkgs, lib, ... }:
77       {
78         imports = [ extraConfig ];
79         # Use systemd-boot
80         virtualisation = {
81           emptyDiskImages = [
82             8192
83             8192
84           ];
85           useBootLoader = true;
86           useEFIBoot = true;
87           # To boot off the LVM disk, we need to have a init script which comes from the Nix store.
88           mountHostNixStore = true;
89         };
90         boot.loader.systemd-boot.enable = true;
91         boot.loader.efi.canTouchEfiVariables = true;
93         environment.systemPackages = with pkgs; [ xfsprogs ];
94         boot = {
95           initrd.systemd = {
96             enable = true;
97             emergencyAccess = true;
98           };
99           initrd.services.lvm.enable = true;
100           kernelPackages = lib.mkIf (kernelPackages != null) kernelPackages;
101         };
103         specialisation.boot-lvm.configuration.virtualisation = {
104           useDefaultFilesystems = false;
105           fileSystems = {
106             "/" = {
107               device = "/dev/test_vg/test_lv";
108               fsType = "xfs";
109             };
110           };
112           rootDevice = "/dev/test_vg/test_lv";
113         };
114       };
116     testScript = ''
117       machine.wait_for_unit("multi-user.target")
118       # Create a VG for the root
119       ${preparationCode}
120       machine.succeed("mkfs.xfs ${mkXfsFlags} /dev/test_vg/test_lv")
121       machine.succeed("mkdir -p /mnt && mount /dev/test_vg/test_lv /mnt && echo hello > /mnt/test && umount /mnt")
123       # Boot from LVM
124       machine.succeed("bootctl set-default nixos-generation-1-specialisation-boot-lvm.conf")
125       machine.succeed("sync")
126       machine.crash()
127       machine.wait_for_unit("multi-user.target")
129       # Ensure we have successfully booted from LVM
130       assert "(initrd)" in machine.succeed("systemd-analyze")  # booted with systemd in stage 1
131       assert "/dev/mapper/test_vg-test_lv on / type xfs" in machine.succeed("mount")
132       assert "hello" in machine.succeed("cat /test")
133       ${extraCheck}
134     '';
135   }