{ config, pkgs, ... }: | |
{ | |
imports = | |
[ | |
./hardware-configuration.nix | |
# use zfs from current master instead of nixos bundled versoin | |
./zfs-master.nix | |
]; | |
boot.loader.grub.enable = true; | |
boot.loader.grub.version = 2; | |
services.openssh = { | |
enable = true; | |
passwordAuthentication = false; | |
}; | |
users.users.root.openssh.authorizedKeys.keys = [ | |
# "ssh-rsa your-key-here" | |
]; | |
system.stateVersion = "18.03"; | |
} |
# Do not modify this file! It was generated by ‘nixos-generate-config’ | |
# and may be overwritten by future invocations. Please make changes | |
# to /etc/nixos/configuration.nix instead. | |
{ config, lib, pkgs, ... }: | |
{ | |
imports = | |
[ <nixpkgs/nixos/modules/profiles/qemu-guest.nix> | |
]; | |
boot.initrd.availableKernelModules = [ "ata_piix" "uhci_hcd" "virtio_pci" "sd_mod" "sr_mod" ]; | |
boot.kernelModules = [ ]; | |
boot.extraModulePackages = [ ]; | |
boot.supportedFilesystems = [ "zfs" ]; | |
boot.zfs.enableUnstable = true; | |
boot.loader.grub.devices = [ "/dev/sda" ]; | |
networking.hostId = "5afef035"; | |
fileSystems."/" = | |
{ device = "rpool/crypt/root"; | |
fsType = "zfs"; | |
}; | |
fileSystems."/boot" = | |
{ device = "/dev/disk/by-uuid/ed0a67c6-ec57-45bf-a6c1-a4aaac872ac3"; | |
fsType = "ext4"; | |
}; | |
fileSystems."/home" = | |
{ device = "rpool/crypt/home"; | |
fsType = "zfs"; | |
}; | |
fileSystems."/tmp" = | |
{ device = "rpool/crypt/tmp"; | |
fsType = "zfs"; | |
}; | |
fileSystems."/var/lib" = | |
{ device = "rpool/crypt/var-lib"; | |
fsType = "zfs"; | |
}; | |
swapDevices = [ ]; | |
nix.maxJobs = lib.mkDefault 1; | |
} |
{ pkgs, options, lib, config, ... }: | |
with pkgs; | |
{ | |
boot.kernelPackages = pkgs.linuxPackages.extend (self: super: rec { | |
splUnstable = stdenv.mkDerivation { | |
name = "spl-dummy"; | |
unpackPhase = ":"; | |
installPhase = "mkdir $out; touch $out/dummy"; | |
}; | |
zfsUnstable = (self.callPackage ./zfs.nix {}).common rec { | |
# comment/uncomment if breaking kernel versions are known | |
incompatibleKernelVersion = null; | |
# this package should point to a version / git revision compatible with the latest kernel release | |
version = "2018-05-22"; | |
rev = "3d503a76e890d7711d5e906e025e092d0e244211"; | |
sha256 = "0a7i8klky1965rsxv4lyzblxlilgbcaamyavxwxmxj2ryaayj740"; | |
isUnstable = true; | |
extraPatches = [ | |
./zfs.patch | |
]; | |
spl = splUnstable; | |
}; | |
}); | |
} | |
{ stdenv, fetchFromGitHub, autoreconfHook, utillinux, nukeReferences, coreutils | |
, perl, fetchpatch | |
, configFile ? "all" | |
# Userspace dependencies | |
, zlib, libuuid, python, attr, openssl | |
, nfs-utils | |
# Kernel dependencies | |
, kernel ? null, spl ? null, splUnstable ? null, splLegacyCrypto ? null | |
}: | |
with stdenv.lib; | |
let | |
buildKernel = any (n: n == configFile) [ "kernel" "all" ]; | |
buildUser = any (n: n == configFile) [ "user" "all" ]; | |
common = { version | |
, sha256 | |
, extraPatches | |
, spl | |
, rev ? "zfs-${version}" | |
, isUnstable ? false | |
, isLegacyCrypto ? false | |
, incompatibleKernelVersion ? null } @ args: | |
if buildKernel && | |
(incompatibleKernelVersion != null) && | |
versionAtLeast kernel.version incompatibleKernelVersion then | |
throw '' | |
Linux v${kernel.version} is not yet supported by zfsonlinux v${version}. | |
${stdenv.lib.optionalString (!isUnstable) "Try zfsUnstable or set the NixOS option boot.zfs.enableUnstable."} | |
'' | |
else stdenv.mkDerivation rec { | |
name = "zfs-${configFile}-${version}${optionalString buildKernel "-${kernel.version}"}"; | |
src = fetchFromGitHub { | |
owner = "zfsonlinux"; | |
repo = "zfs"; | |
inherit rev sha256; | |
}; | |
patches = extraPatches; | |
postPatch = optionalString buildKernel '' | |
patchShebangs scripts | |
''; | |
nativeBuildInputs = [ autoreconfHook nukeReferences ] | |
++ optional buildKernel (kernel.moduleBuildDependencies ++ [ perl ]); | |
buildInputs = | |
optionals buildKernel [ spl ] | |
++ optionals buildUser [ zlib libuuid python attr ] | |
++ optionals (buildUser && (isUnstable || isLegacyCrypto)) [ openssl ]; | |
# for zdb to get the rpath to libgcc_s, needed for pthread_cancel to work | |
NIX_CFLAGS_LINK = "-lgcc_s"; | |
hardeningDisable = [ "fortify" "stackprotector" "pic" ]; | |
preConfigure = '' | |
substituteInPlace ./module/zfs/zfs_ctldir.c --replace "umount -t zfs" "${utillinux}/bin/umount -t zfs" | |
substituteInPlace ./module/zfs/zfs_ctldir.c --replace "mount -t zfs" "${utillinux}/bin/mount -t zfs" | |
substituteInPlace ./lib/libzfs/libzfs_mount.c --replace "/bin/umount" "${utillinux}/bin/umount" | |
substituteInPlace ./lib/libzfs/libzfs_mount.c --replace "/bin/mount" "${utillinux}/bin/mount" | |
substituteInPlace ./lib/libshare/nfs.c --replace "/usr/sbin/exportfs" "${nfs-utils}/bin/exportfs" | |
substituteInPlace ./cmd/ztest/ztest.c --replace "/usr/sbin/ztest" "$out/sbin/ztest" | |
substituteInPlace ./cmd/ztest/ztest.c --replace "/usr/sbin/zdb" "$out/sbin/zdb" | |
substituteInPlace ./config/user-systemd.m4 --replace "/usr/lib/modules-load.d" "$out/etc/modules-load.d" | |
substituteInPlace ./config/zfs-build.m4 --replace "\$sysconfdir/init.d" "$out/etc/init.d" | |
substituteInPlace ./etc/zfs/Makefile.am --replace "\$(sysconfdir)" "$out/etc" | |
substituteInPlace ./cmd/zed/Makefile.am --replace "\$(sysconfdir)" "$out/etc" | |
substituteInPlace ./module/Makefile.in --replace "/bin/cp" "cp" | |
substituteInPlace ./etc/systemd/system/zfs-share.service.in \ | |
--replace "/bin/rm " "${coreutils}/bin/rm " | |
for f in ./udev/rules.d/* | |
do | |
substituteInPlace "$f" --replace "/lib/udev/vdev_id" "$out/lib/udev/vdev_id" | |
done | |
./autogen.sh | |
configureFlagsArray+=("--libexecdir=$out/libexec") | |
''; | |
configureFlags = [ | |
"--with-config=${configFile}" | |
] ++ optionals buildUser [ | |
"--with-dracutdir=$(out)/lib/dracut" | |
"--with-udevdir=$(out)/lib/udev" | |
"--with-systemdunitdir=$(out)/etc/systemd/system" | |
"--with-systemdpresetdir=$(out)/etc/systemd/system-preset" | |
"--with-systemdgeneratordir=$(out)/lib/systemd/system-generator" | |
"--with-mounthelperdir=$(out)/bin" | |
"--sysconfdir=/etc" | |
"--localstatedir=/var" | |
"--enable-systemd" | |
] ++ optionals buildKernel [ | |
"--with-spl=${spl}/libexec/spl" | |
"--with-linux=${kernel.dev}/lib/modules/${kernel.modDirVersion}/source" | |
"--with-linux-obj=${kernel.dev}/lib/modules/${kernel.modDirVersion}/build" | |
]; | |
enableParallelBuilding = true; | |
installFlags = [ | |
"sysconfdir=\${out}/etc" | |
"DEFAULT_INITCONF_DIR=\${out}/default" | |
]; | |
postInstall = '' | |
# Prevent kernel modules from depending on the Linux -dev output. | |
nuke-refs $(find $out -name "*.ko") | |
'' + optionalString buildUser '' | |
# Remove provided services as they are buggy | |
rm $out/etc/systemd/system/zfs-import-*.service | |
sed -i '/zfs-import-scan.service/d' $out/etc/systemd/system/* | |
for i in $out/etc/systemd/system/*; do | |
substituteInPlace $i --replace "zfs-import-cache.service" "zfs-import.target" | |
done | |
# Fix pkgconfig. | |
ln -s ../share/pkgconfig $out/lib/pkgconfig | |
# Remove tests because they add a runtime dependency on gcc | |
rm -rf $out/share/zfs/zfs-tests | |
''; | |
outputs = [ "out" ] ++ optionals buildUser [ "lib" "dev" ]; | |
meta = { | |
description = "ZFS Filesystem Linux Kernel module"; | |
longDescription = '' | |
ZFS is a filesystem that combines a logical volume manager with a | |
Copy-On-Write filesystem with data integrity detection and repair, | |
snapshotting, cloning, block devices, deduplication, and more. | |
''; | |
homepage = http://zfsonlinux.org/; | |
license = licenses.cddl; | |
platforms = platforms.linux; | |
maintainers = with maintainers; [ jcumming wizeman wkennington fpletz globin ]; | |
}; | |
}; | |
in { | |
# also check if kernel version constraints in | |
# ./nixos/modules/tasks/filesystems/zfs.nix needs | |
# to be adapted | |
zfsStable = common { | |
# comment/uncomment if breaking kernel versions are known | |
incompatibleKernelVersion = null; | |
# this package should point to the latest release. | |
version = "0.7.9"; | |
sha256 = "0krpxrvnda2jx6l71xhw9fsksyp2a6h9l9asppac3szsd1n7fp9n"; | |
extraPatches = [ | |
(fetchpatch { | |
url = "https://github.com/Mic92/zfs/compare/zfs-0.7.0-rc3...nixos-zfs-0.7.0-rc3.patch"; | |
sha256 = "1vlw98v8xvi8qapzl1jwm69qmfslwnbg3ry1lmacndaxnyckkvhh"; | |
}) | |
]; | |
inherit spl; | |
}; | |
zfsUnstable = common rec { | |
# comment/uncomment if breaking kernel versions are known | |
incompatibleKernelVersion = null; | |
# this package should point to a version / git revision compatible with the latest kernel release | |
version = "2018-05-22"; | |
rev = "ba863d0be4cbfbea938b10e49fb6ff459ac9ec20"; | |
sha256 = "11dhigw1gybalwg2m6si148b6w195dj2lw38snqf6576wb5zndd0"; | |
isUnstable = true; | |
extraPatches = [ | |
(fetchpatch { | |
url = "https://github.com/Mic92/zfs/compare/${rev}...nixos-zfs-2018-02-02.patch"; | |
sha256 = "1gqmgqi39qhk5kbbvidh8f2xqq25vj58i9x0wjqvcx6a71qj49ch"; | |
}) | |
]; | |
spl = splUnstable; | |
}; | |
# TODO: Remove this module before 18.09 | |
# also remove boot.zfs.enableLegacyCrypto | |
zfsLegacyCrypto = common { | |
# comment/uncomment if breaking kernel versions are known | |
incompatibleKernelVersion = null; | |
# this package should point to a version / git revision compatible with the latest kernel release | |
version = "2018-02-01"; | |
rev = "4c46b99d24a6e71b3c72462c11cb051d0930ad60"; | |
sha256 = "011lcp2x44jgfzqqk2gjmyii1v7rxcprggv20prxa3c552drsx3c"; | |
isUnstable = true; | |
extraPatches = [ | |
(fetchpatch { | |
url = "https://github.com/Mic92/zfs/compare/4c46b99d24a6e71b3c72462c11cb051d0930ad60...nixos-zfs-2018-02-01.patch"; | |
sha256 = "1gqmgqi39qhk5kbbvidh8f2xqq25vj58i9x0wjqvcx6a71qj49ch"; | |
}) | |
]; | |
spl = splLegacyCrypto; | |
}; | |
inherit common; | |
} |
diff --git a/Makefile.am b/Makefile.am | |
index 55cae89fa..91cb7a1ab 100644 | |
--- a/Makefile.am | |
+++ b/Makefile.am | |
@@ -11,10 +11,10 @@ endif | |
if CONFIG_KERNEL | |
SUBDIRS += module | |
-extradir = $(prefix)/src/zfs-$(VERSION) | |
+extradir = $(prefix)/libexec/zfs-$(VERSION) | |
extra_HEADERS = zfs.release.in zfs_config.h.in | |
-kerneldir = $(prefix)/src/zfs-$(VERSION)/$(LINUX_VERSION) | |
+kerneldir = $(prefix)/zfs-$(VERSION)/$(LINUX_VERSION) | |
nodist_kernel_HEADERS = zfs.release zfs_config.h module/$(LINUX_SYMBOLS) | |
endif | |
@@ -56,7 +56,7 @@ install-data-hook: | |
ln -s ../zfs-$(VERSION)/$(LINUX_VERSION) $(LINUX_VERSION) && \ | |
ln -s ../zfs-$(VERSION)/zfs_config.h.in spl_config.h.in && \ | |
ln -s ../zfs-$(VERSION)/zfs.release.in spl.release.in && \ | |
- cd $(DESTDIR)$(prefix)/src/zfs-$(VERSION)/$(LINUX_VERSION) && \ | |
+ cd $(DESTDIR)$(prefix)/zfs-$(VERSION)/$(LINUX_VERSION) && \ | |
ln -fs zfs_config.h spl_config.h && \ | |
ln -fs zfs.release spl.release | |
endif | |
diff --git a/include/Makefile.am b/include/Makefile.am | |
index 5f13505f2..14a6ee21f 100644 | |
--- a/include/Makefile.am | |
+++ b/include/Makefile.am | |
@@ -26,6 +26,6 @@ libzfs_HEADERS = $(COMMON_H) $(USER_H) | |
endif | |
if CONFIG_KERNEL | |
-kerneldir = @prefix@/src/zfs-$(VERSION)/include | |
+kerneldir = @prefix@/include | |
kernel_HEADERS = $(COMMON_H) | |
endif | |
diff --git a/include/linux/Makefile.am b/include/linux/Makefile.am | |
index efb49520e..b201a8fea 100644 | |
--- a/include/linux/Makefile.am | |
+++ b/include/linux/Makefile.am | |
@@ -23,6 +23,6 @@ libzfs_HEADERS = $(COMMON_H) $(USER_H) | |
endif | |
if CONFIG_KERNEL | |
-kerneldir = @prefix@/src/zfs-$(VERSION)/include/linux | |
+kerneldir = @prefix@/include/linux | |
kernel_HEADERS = $(COMMON_H) $(KERNEL_H) | |
endif | |
diff --git a/include/sys/Makefile.am b/include/sys/Makefile.am | |
index d64133ceb..44ef4360e 100644 | |
--- a/include/sys/Makefile.am | |
+++ b/include/sys/Makefile.am | |
@@ -148,6 +148,6 @@ libzfs_HEADERS = $(COMMON_H) $(USER_H) | |
endif | |
if CONFIG_KERNEL | |
-kerneldir = @prefix@/src/zfs-$(VERSION)/include/sys | |
+kerneldir = @prefix@/include/sys | |
kernel_HEADERS = $(COMMON_H) $(KERNEL_H) | |
endif | |
diff --git a/include/sys/fm/Makefile.am b/include/sys/fm/Makefile.am | |
index 8bca5d846..a5eafcd5e 100644 | |
--- a/include/sys/fm/Makefile.am | |
+++ b/include/sys/fm/Makefile.am | |
@@ -16,6 +16,6 @@ libzfs_HEADERS = $(COMMON_H) $(USER_H) | |
endif | |
if CONFIG_KERNEL | |
-kerneldir = @prefix@/src/zfs-$(VERSION)/include/sys/fm | |
+kerneldir = @prefix@/include/sys/fm | |
kernel_HEADERS = $(COMMON_H) $(KERNEL_H) | |
endif | |
diff --git a/include/sys/fm/fs/Makefile.am b/include/sys/fm/fs/Makefile.am | |
index fdc9eb545..807c47cd2 100644 | |
--- a/include/sys/fm/fs/Makefile.am | |
+++ b/include/sys/fm/fs/Makefile.am | |
@@ -13,6 +13,6 @@ libzfs_HEADERS = $(COMMON_H) $(USER_H) | |
endif | |
if CONFIG_KERNEL | |
-kerneldir = @prefix@/src/zfs-$(VERSION)/include/sys/fm/fs | |
+kerneldir = @prefix@/include/sys/fm/fs | |
kernel_HEADERS = $(COMMON_H) $(KERNEL_H) | |
endif | |
diff --git a/include/sys/fs/Makefile.am b/include/sys/fs/Makefile.am | |
index 0859b9f67..b0c6eec8b 100644 | |
--- a/include/sys/fs/Makefile.am | |
+++ b/include/sys/fs/Makefile.am | |
@@ -13,6 +13,6 @@ libzfs_HEADERS = $(COMMON_H) $(USER_H) | |
endif | |
if CONFIG_KERNEL | |
-kerneldir = @prefix@/src/zfs-$(VERSION)/include/sys/fs | |
+kerneldir = @prefix@/include/sys/fs | |
kernel_HEADERS = $(COMMON_H) $(KERNEL_H) | |
endif | |
diff --git a/module/Makefile.in b/module/Makefile.in | |
index 82d155dd3..3dcc17472 100644 | |
--- a/module/Makefile.in | |
+++ b/module/Makefile.in | |
@@ -44,15 +44,15 @@ clean: | |
modules_install: | |
@# Install the kernel modules | |
$(MAKE) -C @LINUX_OBJ@ SUBDIRS=`pwd` $@ \ | |
- INSTALL_MOD_PATH=$(DESTDIR)$(INSTALL_MOD_PATH) \ | |
+ INSTALL_MOD_PATH=@prefix@/$(INSTALL_MOD_PATH) \ | |
INSTALL_MOD_DIR=$(INSTALL_MOD_DIR) \ | |
KERNELRELEASE=@LINUX_VERSION@ | |
@# Remove extraneous build products when packaging | |
- kmoddir=$(DESTDIR)$(INSTALL_MOD_PATH)/lib/modules/@LINUX_VERSION@; \ | |
- if [ -n "$(DESTDIR)" ]; then \ | |
+ kmoddir=@prefix@$(INSTALL_MOD_PATH)/lib/modules/@LINUX_VERSION@; \ | |
+ if [ -n "@prefix@" ]; then \ | |
find $$kmoddir -name 'modules.*' | xargs $(RM); \ | |
fi | |
- sysmap=$(DESTDIR)$(INSTALL_MOD_PATH)/boot/System.map-@LINUX_VERSION@; \ | |
+ sysmap=@prefix@$(INSTALL_MOD_PATH)/boot/System.map-@LINUX_VERSION@; \ | |
if [ -f $$sysmap ]; then \ | |
depmod -ae -F $$sysmap @LINUX_VERSION@; \ | |
fi |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment