add NixOS module zfsServer
parent
d0d4fab733
commit
8ccea4adde
@ -0,0 +1,74 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
options,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
# library
|
||||||
|
inherit (lib.lists) singleton;
|
||||||
|
inherit (lib.modules) mkIf;
|
||||||
|
inherit (lib.options) mkEnableOption;
|
||||||
|
# config
|
||||||
|
cfg = config.x-banananetwork.zfsServer;
|
||||||
|
servOpts = options.services.zfs;
|
||||||
|
zfsPkg = config.boot.zfs.package;
|
||||||
|
|
||||||
|
# custom ZFS pool management scripts
|
||||||
|
mgmtScripts = [
|
||||||
|
(pkgs.writeShellApplication {
|
||||||
|
name = "zpool-create-enc";
|
||||||
|
runtimeInputs = singleton zfsPkg;
|
||||||
|
text = ''
|
||||||
|
keydir="/root/zfs-keys";
|
||||||
|
if [[ $# -lt 2 ]]; then
|
||||||
|
echo "Usage: $0 <pool-name> <opts|layout>" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
pool="$1"
|
||||||
|
shift 1
|
||||||
|
keyfile="$keydir/$pool"
|
||||||
|
if [[ ! -r "$keyfile" ]]; then
|
||||||
|
echo "Expected keyfile $keyfile to be prepared (readable file)" >&2
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
set -x
|
||||||
|
zpool create -O encryption=on -O keylocation="file://$keyfile" -O keyformat=hex "$pool" "$@"
|
||||||
|
'';
|
||||||
|
})
|
||||||
|
];
|
||||||
|
|
||||||
|
in
|
||||||
|
{
|
||||||
|
|
||||||
|
options.x-banananetwork.zfsServer = {
|
||||||
|
enable = mkEnableOption "banananet.work ZFS server config (including scrub & trim requiring timing)";
|
||||||
|
warnOnDefaultTimings = mkEnableOption "warnings for default timings for ZFS scrub & trim" // {
|
||||||
|
default = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
boot.supportedFilesystems.zfs = true;
|
||||||
|
environment.systemPackages =
|
||||||
|
mgmtScripts
|
||||||
|
++ (with pkgs; [
|
||||||
|
jdupes
|
||||||
|
]);
|
||||||
|
services.zfs = {
|
||||||
|
autoScrub.enable = true;
|
||||||
|
trim.enable = true;
|
||||||
|
# TODO zed.settings to send via ntfy script
|
||||||
|
};
|
||||||
|
warnings = mkIf cfg.warnOnDefaultTimings [
|
||||||
|
(mkIf (
|
||||||
|
servOpts.autoScrub.interval.highestPrio >= 1500
|
||||||
|
) "[zfsServer] services.zfs.autoScrub.interval still uses default value")
|
||||||
|
(mkIf (
|
||||||
|
servOpts.trim.interval.highestPrio >= 1500
|
||||||
|
) "[zfsServer] services.zfs.trim.interval still uses default value")
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue