at master 3.1 kB view raw
1{ lib, ... }: 2{ 3 4 name = "activation-etc-overlay-mutable"; 5 6 meta.maintainers = with lib.maintainers; [ nikstur ]; 7 8 nodes.machine = 9 { pkgs, ... }: 10 { 11 system.etc.overlay.enable = true; 12 system.etc.overlay.mutable = true; 13 14 # Prerequisites 15 boot.initrd.systemd.enable = true; 16 boot.kernelPackages = pkgs.linuxPackages_latest; 17 18 specialisation.new-generation.configuration = { 19 environment.etc."newgen".text = "newgen"; 20 }; 21 specialisation.newer-generation.configuration = { 22 environment.etc."newergen".text = "newergen"; 23 }; 24 }; 25 26 testScript = # python 27 '' 28 newergen = machine.succeed("realpath /run/current-system/specialisation/newer-generation/bin/switch-to-configuration").rstrip() 29 30 with subtest("/run/nixos-etc-metadata/ is mounted"): 31 print(machine.succeed("mountpoint /run/nixos-etc-metadata")) 32 33 with subtest("No temporary files leaked into stage 2"): 34 machine.succeed("[ ! -e /etc-metadata-image ]") 35 machine.succeed("[ ! -e /etc-basedir ]") 36 37 with subtest("/etc is mounted as an overlay"): 38 machine.succeed("findmnt --kernel --type overlay /etc") 39 40 with subtest("switching to the same generation"): 41 machine.succeed("/run/current-system/bin/switch-to-configuration test") 42 43 with subtest("the initrd didn't get rebuilt"): 44 machine.succeed("test /run/current-system/initrd -ef /run/current-system/specialisation/new-generation/initrd") 45 46 with subtest("switching to a new generation"): 47 machine.fail("stat /etc/newgen") 48 machine.succeed("echo -n 'mutable' > /etc/mutable") 49 50 # Directory 51 machine.succeed("mkdir /etc/mountpoint") 52 machine.succeed("mount -t tmpfs tmpfs /etc/mountpoint") 53 machine.succeed("touch /etc/mountpoint/extra-file") 54 55 # File 56 machine.succeed("touch /etc/filemount") 57 machine.succeed("mount --bind /dev/null /etc/filemount") 58 59 machine.succeed("/run/current-system/specialisation/new-generation/bin/switch-to-configuration switch") 60 61 assert machine.succeed("cat /etc/newgen") == "newgen" 62 assert machine.succeed("cat /etc/mutable") == "mutable" 63 64 print(machine.succeed("findmnt /etc/mountpoint")) 65 print(machine.succeed("stat /etc/mountpoint/extra-file")) 66 print(machine.succeed("findmnt /etc/filemount")) 67 68 machine.succeed(f"{newergen} switch") 69 assert machine.succeed("cat /etc/newergen") == "newergen" 70 71 tmpMounts = machine.succeed("find /run -maxdepth 1 -type d -regex '/run/nixos-etc\\..*'").rstrip() 72 print(tmpMounts) 73 metaMounts = machine.succeed("find /run -maxdepth 1 -type d -regex '/run/nixos-etc-metadata.*'").rstrip() 74 print(metaMounts) 75 76 numOfTmpMounts = len(tmpMounts.splitlines()) 77 numOfMetaMounts = len(metaMounts.splitlines()) 78 assert numOfTmpMounts == 0, f"Found {numOfTmpMounts} remaining tmpmounts" 79 assert numOfMetaMounts == 1, f"Found {numOfMetaMounts} remaining metamounts" 80 ''; 81}