From: Brett Gilio <brettg@gnu.org>
To: Efraim Flashner <efraim@flashner.co.il>
Cc: 38669@debbugs.gnu.org
Subject: [bug#38669] [PATCH] gnu: Add zfs.
Date: Wed, 25 Dec 2019 00:56:49 -0600 [thread overview]
Message-ID: <87blrwzydq.fsf@gnu.org> (raw)
In-Reply-To: <20191219094956.GG917@E5400> (Efraim Flashner's message of "Thu, 19 Dec 2019 11:49:56 +0200")
Efraim Flashner <efraim@flashner.co.il> writes:
> I don't actually have a use case for this patch myself but I know there
> are others who are interested in using ZFS. I found the Nix
> implementation¹ to be very helpful when I was working on it.
>
> ¹ https://github.com/NixOS/nixpkgs/blob/master/pkgs/os-specific/linux/zfs/default.nix¬
>
>
> --
> Efraim Flashner <efraim@flashner.co.il> אפרים פלשנר
> GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351
> Confidentiality cannot be guaranteed on emails sent or received unencrypted
>
> From b7efd268c040e8a68c7a81a5edfc76f142aefd50 Mon Sep 17 00:00:00 2001
> From: Efraim Flashner <efraim@flashner.co.il>
> Date: Thu, 19 Dec 2019 11:47:49 +0200
> Subject: [PATCH] gnu: Add zfs.
>
> * gnu/packages/file-systems.scm (zfs): New variable.
> ---
> gnu/packages/file-systems.scm | 114 ++++++++++++++++++++++++++++++++++
> 1 file changed, 114 insertions(+)
>
> diff --git a/gnu/packages/file-systems.scm b/gnu/packages/file-systems.scm
> index fd62bf29ed..a820c159da 100644
> --- a/gnu/packages/file-systems.scm
> +++ b/gnu/packages/file-systems.scm
> @@ -3,6 +3,7 @@
> ;;; Copyright © 2017 Gábor Boskovits <boskovits@gmail.com>
> ;;; Copyright © 2017, 2018 Ricardo Wurmus <rekado@elephly.net>
> ;;; Copyright © 2018 Leo Famulari <leo@famulari.name>
> +;;; Copyright © 2019 Efraim Flashner <efraim@flashner.co.il>
> ;;;
> ;;; This file is part of GNU Guix.
> ;;;
> @@ -26,6 +27,7 @@
> #:use-module (guix git-download)
> #:use-module (guix build-system cmake)
> #:use-module (guix build-system gnu)
> + #:use-module (guix build-system linux-module)
> #:use-module (guix utils)
> #:use-module (gnu packages)
> #:use-module (gnu packages acl)
> @@ -40,7 +42,9 @@
> #:use-module (gnu packages docbook)
> #:use-module (gnu packages flex)
> #:use-module (gnu packages glib)
> + #:use-module (gnu packages libffi)
> #:use-module (gnu packages linux)
> + #:use-module (gnu packages nfs)
> #:use-module (gnu packages onc-rpc)
> #:use-module (gnu packages pkg-config)
> #:use-module (gnu packages python)
> @@ -322,3 +326,113 @@ to read all files, and it does not support all the compression methods in
> APFS.")
> (home-page "https://github.com/sgan81/apfs-fuse")
> (license license:gpl2+))))
> +
> +(define-public zfs
> + (package
> + (name "zfs")
> + (version "0.8.2")
> + (outputs '("out" "module" "src"))
> + (source
> + (origin
> + (method url-fetch)
> + (uri (string-append "https://github.com/zfsonlinux/zfs/releases"
> + "/download/zfs-" version
> + "/zfs-" version ".tar.gz"))
> + (sha256
> + (base32
> + "1f7aig15q3z832pr2n48j3clafic2yk1vvqlh28vpklfghjqwq27"))))
> + (build-system linux-module-build-system)
> + (arguments
> + `(;; The ZFS kernel module should not be downloaded since the license
> + ;; terms don't allow for distributing it, only building it locally.
> + ;#:substitutable? #f ; Unrecognized with the linux-module-build-system.
> + ;; Tests cannot run in an unprivileged build environment.
> + #:tests? #f
> + #:phases
> + (modify-phases %standard-phases
> + (add-after 'configure 'really-configure
> + (lambda* (#:key outputs inputs #:allow-other-keys)
> + (let ((out (assoc-ref outputs "out")))
> + (substitute* "configure"
> + (("-/bin/sh") (string-append "-" (which "sh")))
> + ((" /bin/sh") (string-append " " (which "sh"))))
> + (invoke "./configure"
> + "--with-config=all"
> + (string-append "--prefix=" out)
> + (string-append "--with-dracutdir=" out "/lib/dracut")
> + (string-append "--with-udevdir=" out "/lib/udev")
> + (string-append "--with-mounthelperdir=" out "/sbin")
> + (string-append "--with-linux="
> + (assoc-ref inputs "linux-module-builder")
> + "/lib/modules/build")))))
> + (add-after 'unpack 'patch-source
> + (lambda* (#:key inputs outputs #:allow-other-keys)
> + (let ((out (assoc-ref outputs "out"))
> + (src (assoc-ref outputs "src"))
> + (util-linux (assoc-ref inputs "util-linux"))
> + (nfs-utils (assoc-ref inputs "nfs-utils")))
> + (substitute* "module/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"
> + (("/bin/mount") (string-append util-linux "/bin/mount"))
> + (("/bin/umount") (string-append util-linux "/bin/umount")))
> + (substitute* "lib/libshare/nfs.c"
> + (("/usr/sbin/exportfs")
> + (string-append nfs-utils "/sbin/exportfs")))
> + (substitute* "config/zfs-build.m4"
> + (("\\$sysconfdir/init.d") (string-append out "/etc/init.d")))
> + (substitute* '("etc/zfs/Makefile.am"
> + "cmd/zed/Makefile.am")
> + (("\\$\\(sysconfdir)") (string-append out "/etc")))
> + (substitute* "cmd/vdev_id/vdev_id"
> + (("PATH=/bin:/sbin:/usr/bin:/usr/sbin")
> + (string-append "PATH="
> + (dirname (which "chmod")) ":"
> + (dirname (which "grep")) ":"
> + (dirname (which "sed")) ":"
> + (dirname (which "gawk")))))
> + (substitute* "contrib/pyzfs/Makefile.in"
> + ((".*install-lib.*") ""))
> + (substitute* '("Makefile.am" "Makefile.in")
> + (("\\$\\(prefix)/src") (string-append src "/src"))))
> + #t))
> + (replace 'build
> + (lambda _ (invoke "make")))
> + (replace 'install
> + (lambda* (#:key outputs inputs native-inputs #:allow-other-keys)
> + (let* ((out (assoc-ref outputs "out"))
> + (moddir (assoc-ref outputs "module"))
> + (kmod (assoc-ref (or native-inputs inputs) "kmod")))
> + (invoke "make" "install"
> + (string-append "DEFAULT_INITCONF_DIR=" out "/etc/default")
> + (string-append "DEPMOD=" kmod "/bin/depmod")
> + (string-append "INSTALL_PATH=" out)
> + (string-append "INSTALL_MOD_PATH=" moddir)
> + "INSTALL_MOD_STRIP=1")
> + (install-file "contrib/bash_completion.d/zfs"
> + (string-append out "/share/bash-completion/completions"))
> + (symlink "../share/pkgconfig/" (string-append out "/lib/pkgconfig"))
> + #t))))))
> + (native-inputs
> + `(("attr" ,attr)
> + ("pkg-config" ,pkg-config)))
> + (inputs
> + `(("eudev" ,eudev)
> + ("libaio" ,libaio)
> + ("libtirpc" ,libtirpc)
> + ("nfs-utils" ,nfs-utils)
> + ("openssl" ,openssl)
> + ("python" ,python)
> + ("python-cffi" ,python-cffi)
> + ("util-linux" ,util-linux)
> + ("zlib" ,zlib)))
> + (home-page "https://zfsonlinux.org/")
> + (synopsis "Native ZFS on Linux")
> + (description
> + "ZFS on Linux is an advanced file system and volume manager which was
> +originally developed for Solaris and is now maintained by the OpenZFS
> +community.")
> + (license license:cddl1.0)))
Hey Efraim,
Just reviewed this and checked it. It looks and works fine for me. I
think this is ready for a commit and push. :) I'll leave that to you.
Thank you for your effort!
--
Brett M. Gilio
GNU Guix, Contributor | GNU Project, Webmaster
[DFC0 C7F7 9EE6 0CA7 AE55 5E19 6722 43C4 A03F 0EEE]
<brettg@gnu.org> <brettg@posteo.net>
next prev parent reply other threads:[~2019-12-25 6:57 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-12-19 9:49 [bug#38669] [PATCH] gnu: Add zfs Efraim Flashner
2019-12-25 6:56 ` Brett Gilio [this message]
2019-12-26 8:42 ` bug#38669: " Efraim Flashner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://guix.gnu.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87blrwzydq.fsf@gnu.org \
--to=brettg@gnu.org \
--cc=38669@debbugs.gnu.org \
--cc=efraim@flashner.co.il \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/guix.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).