Last active
August 6, 2018 21:51
-
-
Save phryneas/7ef5eb97e35d973eb1e7c2a8c9590153 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ 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"; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ 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; | |
}; | |
}); | |
} | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ 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; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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