2018-11-11 09:41:11 +01:00
|
|
|
{ system ? builtins.currentSystem,
|
|
|
|
config ? {},
|
|
|
|
pkgs ? import ../.. { inherit system config; }
|
|
|
|
}:
|
2017-11-13 19:56:03 +01:00
|
|
|
|
2020-01-28 08:54:17 +01:00
|
|
|
with import ../lib/testing-python.nix { inherit system pkgs; };
|
2017-11-13 19:56:03 +01:00
|
|
|
|
|
|
|
let
|
|
|
|
|
|
|
|
makeZfsTest = name:
|
2021-01-10 13:23:32 +01:00
|
|
|
{ kernelPackage ? if enableUnstable then pkgs.linuxPackages_latest else pkgs.linuxPackages
|
2017-11-13 19:56:03 +01:00
|
|
|
, enableUnstable ? false
|
|
|
|
, extraTest ? ""
|
|
|
|
}:
|
|
|
|
makeTest {
|
|
|
|
name = "zfs-" + name;
|
2021-01-10 20:08:30 +01:00
|
|
|
meta = with pkgs.lib.maintainers; {
|
2017-11-13 19:56:03 +01:00
|
|
|
maintainers = [ adisbladis ];
|
|
|
|
};
|
|
|
|
|
2020-08-18 15:05:22 +02:00
|
|
|
machine = { pkgs, lib, ... }: {
|
2020-01-28 08:54:17 +01:00
|
|
|
virtualisation.emptyDiskImages = [ 4096 ];
|
|
|
|
networking.hostId = "deadbeef";
|
|
|
|
boot.kernelPackages = kernelPackage;
|
|
|
|
boot.supportedFilesystems = [ "zfs" ];
|
|
|
|
boot.zfs.enableUnstable = enableUnstable;
|
2017-11-13 19:56:03 +01:00
|
|
|
|
2020-01-28 08:54:17 +01:00
|
|
|
environment.systemPackages = [ pkgs.parted ];
|
2020-08-18 15:05:22 +02:00
|
|
|
|
|
|
|
# Setup regular fileSystems machinery to ensure forceImportAll can be
|
|
|
|
# tested via the regular service units.
|
2021-02-14 12:23:50 +01:00
|
|
|
virtualisation.fileSystems = {
|
2020-08-18 15:05:22 +02:00
|
|
|
"/forcepool" = {
|
|
|
|
device = "forcepool";
|
|
|
|
fsType = "zfs";
|
|
|
|
options = [ "noauto" ];
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
# forcepool doesn't exist at first boot, and we need to manually test
|
|
|
|
# the import after tweaking the hostId.
|
|
|
|
systemd.services.zfs-import-forcepool.wantedBy = lib.mkVMOverride [];
|
|
|
|
systemd.targets.zfs.wantedBy = lib.mkVMOverride [];
|
|
|
|
boot.zfs.forceImportAll = true;
|
|
|
|
# /dev/disk/by-id doesn't get populated in the NixOS test framework
|
|
|
|
boot.zfs.devNodes = "/dev/disk/by-uuid";
|
2020-01-28 08:54:17 +01:00
|
|
|
};
|
2017-11-13 19:56:03 +01:00
|
|
|
|
|
|
|
testScript = ''
|
2019-10-27 13:53:36 +01:00
|
|
|
machine.succeed(
|
2020-01-28 08:54:17 +01:00
|
|
|
"modprobe zfs",
|
|
|
|
"zpool status",
|
|
|
|
"ls /dev",
|
|
|
|
"mkdir /tmp/mnt",
|
|
|
|
"udevadm settle",
|
|
|
|
"parted --script /dev/vdb mklabel msdos",
|
|
|
|
"parted --script /dev/vdb -- mkpart primary 1024M -1s",
|
|
|
|
"udevadm settle",
|
|
|
|
"zpool create rpool /dev/vdb1",
|
|
|
|
"zfs create -o mountpoint=legacy rpool/root",
|
|
|
|
"mount -t zfs rpool/root /tmp/mnt",
|
|
|
|
"udevadm settle",
|
|
|
|
"umount /tmp/mnt",
|
|
|
|
"zpool destroy rpool",
|
|
|
|
"udevadm settle",
|
2019-10-27 13:53:36 +01:00
|
|
|
)
|
2020-02-19 20:38:15 +01:00
|
|
|
|
|
|
|
machine.succeed(
|
|
|
|
'echo password | zpool create -o altroot="/tmp/mnt" '
|
|
|
|
+ "-O encryption=aes-256-gcm -O keyformat=passphrase rpool /dev/vdb1",
|
|
|
|
"zfs create -o mountpoint=legacy rpool/root",
|
|
|
|
"mount -t zfs rpool/root /tmp/mnt",
|
|
|
|
"udevadm settle",
|
|
|
|
"umount /tmp/mnt",
|
|
|
|
"zpool destroy rpool",
|
|
|
|
"udevadm settle",
|
|
|
|
)
|
2020-08-18 15:05:22 +02:00
|
|
|
|
|
|
|
with subtest("boot.zfs.forceImportAll works"):
|
|
|
|
machine.succeed(
|
|
|
|
"rm /etc/hostid",
|
|
|
|
"zgenhostid deadcafe",
|
|
|
|
"zpool create forcepool /dev/vdb1 -O mountpoint=legacy",
|
|
|
|
)
|
|
|
|
machine.shutdown()
|
|
|
|
machine.start()
|
|
|
|
machine.succeed("udevadm settle")
|
|
|
|
machine.fail("zpool import forcepool")
|
|
|
|
machine.succeed(
|
|
|
|
"systemctl start zfs-import-forcepool.service",
|
|
|
|
"mount -t zfs forcepool /tmp/mnt",
|
|
|
|
)
|
2017-11-13 19:56:03 +01:00
|
|
|
'' + extraTest;
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
in {
|
|
|
|
|
|
|
|
stable = makeZfsTest "stable" { };
|
|
|
|
|
|
|
|
unstable = makeZfsTest "unstable" {
|
|
|
|
enableUnstable = true;
|
|
|
|
};
|
|
|
|
|
|
|
|
installer = (import ./installer.nix { }).zfsroot;
|
|
|
|
}
|