This patch instead updates to 2.0.1.
The upstream changes that most affect the transition from 0.8.x to 2.0.x are:
* FreeBSD and Linux have merged codebases, hence the reason why some files now have an extra `/os/linux` directory.
* Files installed in `/etc/default/` now use simpler installation that supposedly works on both Linux and FreeBSD, but seems not to work in Guix specifically, for reasons I haven't explored. I just disabled its installation instead.
* The Linux build of the userland tools will now attempt to load the ZFS module, but this uses `/sbin/modprobe` which does not exist in Guix; I substitute this as well.
I've checked that this works in a VM. I added patches from
https://issues.guix.gnu.org/45692https://issues.guix.gnu.org/45722 https://issues.guix.gnu.org/45723 in order to get a VM image with a ZFS 2.0.1.
The OpenZFS project will end-of-life the ZFS 0.8.x series soon. The ZFS 0.8.x series was inherited from the ZFS on Linux project and that particular sequence of releases is Linux-specific. Since OpenZFS has merged the Linux and FreeBSD forks, they decided to use the later version numbering 2.0.x and will now maintain only a single Linux-or-FreeBSD codebase, so Guix also needs to follow suit if Guix intends to have ZFS support in the foreseeable future.
From bad3a65ae19a5a3c74c700163138f6f17f3017de Mon Sep 17 00:00:00 2001
* gnu/packages/file-systems.scm (zfs): Update version to 2.0.1.
---
gnu/packages/file-systems.scm | 23 ++++++++++++++++++-----
1 file changed, 18 insertions(+), 5 deletions(-)
Toggle diff (57 lines)
diff --git a/gnu/packages/file-systems.scm b/gnu/packages/file-systems.scm
index f74d519b33..49afe61e95 100644
--- a/gnu/packages/file-systems.scm
+++ b/gnu/packages/file-systems.scm
@@ -847,7 +847,7 @@ APFS.")
(define-public zfs
(package
(name "zfs")
- (version "0.8.5")
+ (version "2.0.1")
(outputs '("out" "module" "src"))
(source
(origin
@@ -856,7 +856,7 @@ APFS.")
"/download/zfs-" version
"/zfs-" version ".tar.gz"))
(sha256
- (base32 "0gfdnynmsxbhi97q73smrgmcw1k8zmlr1hgljfn38sk0kimivd6v"))))
+ (base32 "0y3992l4nzr67q18lz1kizw0za1shvqbpmsjz9shv4frh5ihllbi"))))
(build-system linux-module-build-system)
(arguments
`(;; The ZFS kernel module should not be downloaded since the license
@@ -887,18 +887,31 @@ APFS.")
(util-linux (assoc-ref inputs "util-linux"))
(nfs-utils (assoc-ref inputs "nfs-utils"))
(kmod (assoc-ref inputs "kmod-runtime")))
+ (substitute* "etc/Makefile.in"
+ ;; This just contains an example configuration file for
+ ;; configuring ZFS on traditional init systems, skip it
+ ;; since we cannot use it anyway; the install target becomes
+ ;; misdirected.
+ (("= default ") "= "))
+ (substitute* "lib/libzfs/os/linux/libzfs_util_os.c"
+ ;; Use path to /gnu/store/*-kmod in actual path that is exec'ed.
+ (("\"/sbin/modprobe\"")
+ (string-append "\"" kmod "/bin/modprobe" "\""))
+ ;; Just use 'modprobe' in message to user, since Guix
+ ;; does not have a traditional /sbin/
+ (("'/sbin/modprobe ") "'modprobe "))
(substitute* "contrib/Makefile.in"
;; This is not configurable nor is its hard-coded /usr prefix.
((" initramfs") ""))
- (substitute* "module/zfs/zfs_ctldir.c"
+ (substitute* "module/os/linux/zfs/zfs_ctldir.c"
(("/usr/bin/env\", \"umount")
(string-append util-linux "/bin/umount\", \"-n"))
(("/usr/bin/env\", \"mount")
(string-append util-linux "/bin/mount\", \"-n")))
- (substitute* "lib/libzfs/libzfs_mount.c"
+ (substitute* "lib/libzfs/os/linux/libzfs_mount_os.c"
(("/bin/mount") (string-append util-linux "/bin/mount"))
(("/bin/umount") (string-append util-linux "/bin/umount")))
- (substitute* "lib/libshare/nfs.c"
+ (substitute* "lib/libshare/os/linux/nfs.c"
(("/usr/sbin/exportfs")
(string-append nfs-utils "/sbin/exportfs")))
(substitute* "config/zfs-build.m4"