zpool: add optionsAfterCreate...

Not sure about the best implementation here yet.

I'd like to use disk encryption with ZFS and existing disko facilities
work fine to set it up, but we obviously can't use keylocation=prompt
during disko formatting. So unlocking fails on boot if the file referred
to by keylocation isn't included in the initrd.

Ideally I could use keylocation=file://tmp/disk.key during partitioning,
but set keylocation=prompt right after that.

example usage:
```
    rpool = {
      type = "zpool";
      mode = "";
      options = {
        ashift = "12";
        autotrim = "on";
      };
      optionsAfterCreate = {
        keylocation = "prompt";
      };
      rootFsOptions = {
        encryption = "on";
        keylocation = "file:///tmp/disk.key";
        keyformat = "passphrase";
        compression = "zstd";
        acltype = "posixacl";
        mountpoint = "none";
        canmount = "off";
        xattr = "sa";
        dnodesize = "auto";
        normalization = "formD";
        relatime = "on";
      };
```
This commit is contained in:
phaer 2022-12-28 16:22:03 +01:00
parent f0a96e4de6
commit 49badf305f

View file

@ -1118,6 +1118,10 @@ rec {
default = {};
description = "Options for the ZFS pool";
};
optionsAfterCreate = mkOption {
type = types.attrsOf types.str;
default = {};
};
rootFsOptions = mkOption {
type = types.attrsOf types.str;
default = {};
@ -1155,6 +1159,7 @@ rec {
${concatStringsSep " " (mapAttrsToList (n: v: "-o ${n}=${v}") config.options)} \
${concatStringsSep " " (mapAttrsToList (n: v: "-O ${n}=${v}") config.rootFsOptions)} \
''${ZFSDEVICES_${config.name}}
zfs set ${concatStringsSep " " (mapAttrsToList (n: v: "${n}=${v}") config.optionsAfterCreate)} ${config.name}
${concatMapStrings (dataset: dataset._create config.name) (attrValues config.datasets)}
'';
description = "Creation script";