Skip to content

Commit

Permalink
zfsUnstable: init at 2017-09-12
Browse files Browse the repository at this point in the history
  • Loading branch information
Mic92 authored and fpletz committed Sep 15, 2017
1 parent f4dfa30 commit 1ecf3e8
Show file tree
Hide file tree
Showing 5 changed files with 239 additions and 153 deletions.
1 change: 0 additions & 1 deletion nixos/modules/rename.nix
Expand Up @@ -192,7 +192,6 @@ with lib;
"Set the option `services.xserver.displayManager.sddm.package' instead.")
(mkRemovedOptionModule [ "fonts" "fontconfig" "forceAutohint" ] "")
(mkRemovedOptionModule [ "fonts" "fontconfig" "renderMonoTTFAsBitmap" ] "")
(mkRemovedOptionModule [ "boot" "zfs" "enableUnstable" ] "0.7.0 is now the default")

# ZSH
(mkRenamedOptionModule [ "programs" "zsh" "enableSyntaxHighlighting" ] [ "programs" "zsh" "syntaxHighlighting" "enable" ])
Expand Down
19 changes: 18 additions & 1 deletion nixos/modules/tasks/filesystems/zfs.nix
Expand Up @@ -24,7 +24,11 @@ let

kernel = config.boot.kernelPackages;

packages = {
packages = if config.boot.zfs.enableUnstable then {
spl = kernel.splUnstable;
zfs = kernel.zfsUnstable;
zfsUser = pkgs.zfsUnstable;
} else {
spl = kernel.spl;
zfs = kernel.zfs;
zfsUser = pkgs.zfs;
Expand Down Expand Up @@ -58,6 +62,19 @@ in

options = {
boot.zfs = {
enableUnstable = mkOption {
type = types.bool;
default = false;
description = ''
Use the unstable zfs package. This might be an option, if the latest
kernel is not yet supported by a published release of ZFS. Enabling
this option will install a development version of ZFS on Linux. The
version will have already passed an extensive test suite, but it is
more likely to hit an undiscovered bug compared to running a released
version of ZFS on Linux.
'';
};

extraPools = mkOption {
type = types.listOf types.str;
default = [];
Expand Down
91 changes: 52 additions & 39 deletions pkgs/os-specific/linux/spl/default.nix
Expand Up @@ -10,53 +10,66 @@ with stdenv.lib;
let
buildKernel = any (n: n == configFile) [ "kernel" "all" ];
buildUser = any (n: n == configFile) [ "user" "all" ];
in
assert any (n: n == configFile) [ "kernel" "user" "all" ];
assert buildKernel -> kernel != null;
stdenv.mkDerivation rec {
name = "spl-${configFile}-${version}${optionalString buildKernel "-${kernel.version}"}";
version = "0.7.1";

src = fetchFromGitHub {
owner = "zfsonlinux";
repo = "spl";
rev = "spl-${version}";
sha256 = "0m8qhbdd8n40lbd91s30q4lrw8g169sha0410c8rwk2d5qfaxv9n";
};
common = { version
, sha256
, rev ? "spl-${version}"
} @ args : stdenv.mkDerivation rec {
name = "spl-${configFile}-${version}${optionalString buildKernel "-${kernel.version}"}";

src = fetchFromGitHub {
owner = "zfsonlinux";
repo = "spl";
inherit rev sha256;
};

patches = [ ./const.patch ./install_prefix.patch ];
patches = [ ./const.patch ./install_prefix.patch ];

nativeBuildInputs = [ autoreconfHook ];
nativeBuildInputs = [ autoreconfHook ];

hardeningDisable = [ "pic" ];
hardeningDisable = [ "pic" ];

preConfigure = ''
substituteInPlace ./module/spl/spl-generic.c --replace /usr/bin/hostid hostid
substituteInPlace ./module/spl/spl-generic.c --replace "PATH=/sbin:/usr/sbin:/bin:/usr/bin" "PATH=${coreutils}:${gawk}:/bin"
substituteInPlace ./module/splat/splat-vnode.c --replace "PATH=/sbin:/usr/sbin:/bin:/usr/bin" "PATH=${coreutils}:/bin"
substituteInPlace ./module/splat/splat-linux.c --replace "PATH=/sbin:/usr/sbin:/bin:/usr/bin" "PATH=${coreutils}:/bin"
'';
preConfigure = ''
substituteInPlace ./module/spl/spl-generic.c --replace /usr/bin/hostid hostid
substituteInPlace ./module/spl/spl-generic.c --replace "PATH=/sbin:/usr/sbin:/bin:/usr/bin" "PATH=${coreutils}:${gawk}:/bin"
substituteInPlace ./module/splat/splat-vnode.c --replace "PATH=/sbin:/usr/sbin:/bin:/usr/bin" "PATH=${coreutils}:/bin"
substituteInPlace ./module/splat/splat-linux.c --replace "PATH=/sbin:/usr/sbin:/bin:/usr/bin" "PATH=${coreutils}:/bin"
'';

configureFlags = [
"--with-config=${configFile}"
] ++ optionals buildKernel [
"--with-linux=${kernel.dev}/lib/modules/${kernel.modDirVersion}/source"
"--with-linux-obj=${kernel.dev}/lib/modules/${kernel.modDirVersion}/build"
];
configureFlags = [
"--with-config=${configFile}"
] ++ optionals buildKernel [
"--with-linux=${kernel.dev}/lib/modules/${kernel.modDirVersion}/source"
"--with-linux-obj=${kernel.dev}/lib/modules/${kernel.modDirVersion}/build"
];

enableParallelBuilding = true;
enableParallelBuilding = true;

meta = {
description = "Kernel module driver for solaris porting layer (needed by in-kernel zfs)";
meta = {
description = "Kernel module driver for solaris porting layer (needed by in-kernel zfs)";

longDescription = ''
This kernel module is a porting layer for ZFS to work inside the linux
kernel.
'';
longDescription = ''
This kernel module is a porting layer for ZFS to work inside the linux
kernel.
'';

homepage = http://zfsonlinux.org/;
platforms = platforms.linux;
license = licenses.gpl2Plus;
maintainers = with maintainers; [ jcumming wizeman wkennington fpletz globin ];
homepage = http://zfsonlinux.org/;
platforms = platforms.linux;
license = licenses.gpl2Plus;
maintainers = with maintainers; [ jcumming wizeman wkennington fpletz globin ];
};
};
in
assert any (n: n == configFile) [ "kernel" "user" "all" ];
assert buildKernel -> kernel != null;
{
splStable = common {
version = "0.7.1";
sha256 = "0m8qhbdd8n40lbd91s30q4lrw8g169sha0410c8rwk2d5qfaxv9n";
};

splUnstable = common {
version = "2017-08-11";
rev = "9df9692637aeee416f509c7f39655beb2d35b549";
sha256 = "1dggf6xqgk2f7vccv6cgvr8krj7h9f921szp1j2qbxnnq41m37mi";
};
}

0 comments on commit 1ecf3e8

Please sign in to comment.