at 22.05-pre 4.2 kB view raw
1{ system ? builtins.currentSystem, 2 config ? {}, 3 pkgs ? import ../.. { inherit system config; } 4}: 5 6with import ../lib/testing-python.nix { inherit system pkgs; }; 7 8let 9 10 makeZfsTest = name: 11 { kernelPackage ? if enableUnstable then pkgs.linuxPackages_latest else pkgs.linuxPackages 12 , enableUnstable ? false 13 , extraTest ? "" 14 }: 15 makeTest { 16 name = "zfs-" + name; 17 meta = with pkgs.lib.maintainers; { 18 maintainers = [ adisbladis ]; 19 }; 20 21 machine = { pkgs, lib, ... }: 22 let 23 usersharePath = "/var/lib/samba/usershares"; 24 in { 25 virtualisation.emptyDiskImages = [ 4096 ]; 26 networking.hostId = "deadbeef"; 27 boot.kernelPackages = kernelPackage; 28 boot.supportedFilesystems = [ "zfs" ]; 29 boot.zfs.enableUnstable = enableUnstable; 30 31 services.samba = { 32 enable = true; 33 extraConfig = '' 34 registry shares = yes 35 usershare path = ${usersharePath} 36 usershare allow guests = yes 37 usershare max shares = 100 38 usershare owner only = no 39 ''; 40 }; 41 systemd.services.samba-smbd.serviceConfig.ExecStartPre = 42 "${pkgs.coreutils}/bin/mkdir -m +t -p ${usersharePath}"; 43 44 environment.systemPackages = [ pkgs.parted ]; 45 46 # Setup regular fileSystems machinery to ensure forceImportAll can be 47 # tested via the regular service units. 48 virtualisation.fileSystems = { 49 "/forcepool" = { 50 device = "forcepool"; 51 fsType = "zfs"; 52 options = [ "noauto" ]; 53 }; 54 }; 55 56 # forcepool doesn't exist at first boot, and we need to manually test 57 # the import after tweaking the hostId. 58 systemd.services.zfs-import-forcepool.wantedBy = lib.mkVMOverride []; 59 systemd.targets.zfs.wantedBy = lib.mkVMOverride []; 60 boot.zfs.forceImportAll = true; 61 # /dev/disk/by-id doesn't get populated in the NixOS test framework 62 boot.zfs.devNodes = "/dev/disk/by-uuid"; 63 }; 64 65 testScript = '' 66 machine.succeed( 67 "modprobe zfs", 68 "zpool status", 69 "ls /dev", 70 "mkdir /tmp/mnt", 71 "udevadm settle", 72 "parted --script /dev/vdb mklabel msdos", 73 "parted --script /dev/vdb -- mkpart primary 1024M -1s", 74 "udevadm settle", 75 "zpool create rpool /dev/vdb1", 76 "zfs create -o mountpoint=legacy rpool/root", 77 # shared datasets cannot have legacy mountpoint 78 "zfs create rpool/shared_smb", 79 "mount -t zfs rpool/root /tmp/mnt", 80 "udevadm settle", 81 # wait for samba services 82 "systemctl is-system-running --wait", 83 "zfs set sharesmb=on rpool/shared_smb", 84 "zfs share rpool/shared_smb", 85 "smbclient -gNL localhost | grep rpool_shared_smb", 86 "umount /tmp/mnt", 87 "zpool destroy rpool", 88 "udevadm settle", 89 ) 90 91 machine.succeed( 92 'echo password | zpool create -o altroot="/tmp/mnt" ' 93 + "-O encryption=aes-256-gcm -O keyformat=passphrase rpool /dev/vdb1", 94 "zfs create -o mountpoint=legacy rpool/root", 95 "mount -t zfs rpool/root /tmp/mnt", 96 "udevadm settle", 97 "umount /tmp/mnt", 98 "zpool destroy rpool", 99 "udevadm settle", 100 ) 101 102 with subtest("boot.zfs.forceImportAll works"): 103 machine.succeed( 104 "rm /etc/hostid", 105 "zgenhostid deadcafe", 106 "zpool create forcepool /dev/vdb1 -O mountpoint=legacy", 107 ) 108 machine.shutdown() 109 machine.start() 110 machine.succeed("udevadm settle") 111 machine.fail("zpool import forcepool") 112 machine.succeed( 113 "systemctl start zfs-import-forcepool.service", 114 "mount -t zfs forcepool /tmp/mnt", 115 ) 116 '' + extraTest; 117 118 }; 119 120 121in { 122 123 stable = makeZfsTest "stable" { }; 124 125 unstable = makeZfsTest "unstable" { 126 enableUnstable = true; 127 }; 128 129 installer = (import ./installer.nix { }).zfsroot; 130}