at 24.11-pre 2.8 kB view raw
1{ lib, pkgs, ... }: 2 3let 4 initrdLowerdir = pkgs.runCommand "initrd-lowerdir" { } '' 5 mkdir -p $out 6 echo "initrd" > $out/initrd.txt 7 ''; 8 initrdLowerdir2 = pkgs.runCommand "initrd-lowerdir-2" { } '' 9 mkdir -p $out 10 echo "initrd2" > $out/initrd2.txt 11 ''; 12 userspaceLowerdir = pkgs.runCommand "userspace-lowerdir" { } '' 13 mkdir -p $out 14 echo "userspace" > $out/userspace.txt 15 ''; 16 userspaceLowerdir2 = pkgs.runCommand "userspace-lowerdir-2" { } '' 17 mkdir -p $out 18 echo "userspace2" > $out/userspace2.txt 19 ''; 20in 21{ 22 23 name = "writable-overlays"; 24 25 meta.maintainers = with lib.maintainers; [ nikstur ]; 26 27 nodes.machine = { config, pkgs, ... }: { 28 boot.initrd.systemd.enable = true; 29 boot.initrd.availableKernelModules = [ "overlay" ]; 30 31 virtualisation.fileSystems = { 32 "/initrd-overlay" = { 33 overlay = { 34 lowerdir = [ initrdLowerdir ]; 35 upperdir = "/.rw-initrd-overlay/upper"; 36 workdir = "/.rw-initrd-overlay/work"; 37 }; 38 neededForBoot = true; 39 }; 40 "/userspace-overlay" = { 41 overlay = { 42 lowerdir = [ userspaceLowerdir ]; 43 upperdir = "/.rw-userspace-overlay/upper"; 44 workdir = "/.rw-userspace-overlay/work"; 45 }; 46 }; 47 "/ro-initrd-overlay" = { 48 overlay.lowerdir = [ 49 initrdLowerdir 50 initrdLowerdir2 51 ]; 52 neededForBoot = true; 53 }; 54 "/ro-userspace-overlay" = { 55 overlay.lowerdir = [ 56 userspaceLowerdir 57 userspaceLowerdir2 58 ]; 59 }; 60 }; 61 }; 62 63 testScript = '' 64 machine.wait_for_unit("default.target") 65 66 with subtest("Initrd overlay"): 67 machine.wait_for_file("/initrd-overlay/initrd.txt", 5) 68 machine.succeed("touch /initrd-overlay/writable.txt") 69 machine.succeed("findmnt --kernel --types overlay /initrd-overlay") 70 71 with subtest("Userspace overlay"): 72 machine.wait_for_file("/userspace-overlay/userspace.txt", 5) 73 machine.succeed("touch /userspace-overlay/writable.txt") 74 machine.succeed("findmnt --kernel --types overlay /userspace-overlay") 75 76 with subtest("Read only initrd overlay"): 77 machine.wait_for_file("/ro-initrd-overlay/initrd.txt", 5) 78 machine.wait_for_file("/ro-initrd-overlay/initrd2.txt", 5) 79 machine.fail("touch /ro-initrd-overlay/not-writable.txt") 80 machine.succeed("findmnt --kernel --types overlay /ro-initrd-overlay") 81 82 with subtest("Read only userspace overlay"): 83 machine.wait_for_file("/ro-userspace-overlay/userspace.txt", 5) 84 machine.wait_for_file("/ro-userspace-overlay/userspace2.txt", 5) 85 machine.fail("touch /ro-userspace-overlay/not-writable.txt") 86 machine.succeed("findmnt --kernel --types overlay /ro-userspace-overlay") 87 ''; 88 89}