From a832ce7be1ef16e0847bc2b4689c21101482713a Mon Sep 17 00:00:00 2001 From: Jack Cummings Date: Tue, 4 Dec 2012 10:17:54 -0800 Subject: [PATCH] Add zfs module. --- modules/module-list.nix | 1 + modules/tasks/filesystems/zfs.nix | 40 +++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 modules/tasks/filesystems/zfs.nix diff --git a/modules/module-list.nix b/modules/module-list.nix index f2811fd2f5f..929941fd8ed 100644 --- a/modules/module-list.nix +++ b/modules/module-list.nix @@ -220,6 +220,7 @@ ./tasks/filesystems/reiserfs.nix ./tasks/filesystems/vfat.nix ./tasks/filesystems/xfs.nix + ./tasks/filesystems/zfs.nix ./tasks/kbd.nix ./tasks/lvm.nix ./tasks/network-interfaces.nix diff --git a/modules/tasks/filesystems/zfs.nix b/modules/tasks/filesystems/zfs.nix new file mode 100644 index 00000000000..b5742d92248 --- /dev/null +++ b/modules/tasks/filesystems/zfs.nix @@ -0,0 +1,40 @@ +{ config, pkgs, ... }: + +with pkgs.lib; + +let + + inInitrd = any (fs: fs == "zfs") config.boot.initrd.supportedFilesystems; + kernel = config.boot.kernelPackages; + +in + +{ + ###### implementation + + config = mkIf (any (fs: fs == "zfs") config.boot.supportedFilesystems) { + + boot.kernelModules = [ "spl" "zavl" "zcommon" "zfs" "zlib_deflate" "znvpair" "zunicode" ] ; + + boot.initrd.kernelModules = mkIf inInitrd [ "spl" "zavl" "zcommon" "zfs" "zlib_deflate" "znvpair" "zunicode" ] ; + + boot.initrd.extraUtilsCommands = mkIf inInitrd + '' + cp -v ${kernel.zfs}/sbin/zfs $out/sbin + cp -v ${kernel.zfs}/sbin/zdb $out/sbin + cp -v ${kernel.zfs}/sbin/zpool $out/sbin + ''; + + boot.initrd.postDeviceCommands = mkIf inInitrd + '' + zpool import -f -a -d /dev + zfs mount -a + ''; + + system.fsPackages = [ kernel.zfs ]; + + environment.systemPackages = [ kernel.zfs ]; + + services.udev.packages = [ kernel.zfs ]; + }; +}