From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:470:142:3::10]:54491) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ik0bP-0007sp-Tc for guix-patches@gnu.org; Wed, 25 Dec 2019 01:57:05 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ik0bO-0005FN-7z for guix-patches@gnu.org; Wed, 25 Dec 2019 01:57:03 -0500 Received: from debbugs.gnu.org ([209.51.188.43]:47259) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1ik0bO-0005FG-4m for guix-patches@gnu.org; Wed, 25 Dec 2019 01:57:02 -0500 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1ik0bO-0004ck-35 for guix-patches@gnu.org; Wed, 25 Dec 2019 01:57:02 -0500 Subject: [bug#38669] [PATCH] gnu: Add zfs. Resent-Message-ID: From: Brett Gilio References: <20191219094956.GG917@E5400> Date: Wed, 25 Dec 2019 00:56:49 -0600 In-Reply-To: <20191219094956.GG917@E5400> (Efraim Flashner's message of "Thu, 19 Dec 2019 11:49:56 +0200") Message-ID: <87blrwzydq.fsf@gnu.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+kyle=kyleam.com@gnu.org Sender: "Guix-patches" To: Efraim Flashner Cc: 38669@debbugs.gnu.org Efraim Flashner 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=C2=B9 to be very helpful when I was working on it. > > =C2=B9 https://github.com/NixOS/nixpkgs/blob/master/pkgs/os-specific/linu= x/zfs/default.nix=C2=AC > > > --=20 > Efraim Flashner =D7=90=D7=A4=D7=A8=D7=99=D7= =9D =D7=A4=D7=9C=D7=A9=D7=A0=D7=A8 > GPG key =3D A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351 > Confidentiality cannot be guaranteed on emails sent or received unencrypt= ed > > From b7efd268c040e8a68c7a81a5edfc76f142aefd50 Mon Sep 17 00:00:00 2001 > From: Efraim Flashner > 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 =C2=A9 2017 G=C3=A1bor Boskovits > ;;; Copyright =C2=A9 2017, 2018 Ricardo Wurmus > ;;; Copyright =C2=A9 2018 Leo Famulari > +;;; Copyright =C2=A9 2019 Efraim Flashner > ;;; > ;;; 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/release= s" > + "/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 licen= se > + ;; terms don't allow for distributing it, only building it locall= y. > + ;#:substitutable? #f ; Unrecognized with the linux-module-build-s= ystem. > + ;; 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=3Dall" > + (string-append "--prefix=3D" out) > + (string-append "--with-dracutdir=3D" out "/lib/dr= acut") > + (string-append "--with-udevdir=3D" out "/lib/udev= ") > + (string-append "--with-mounthelperdir=3D" out "/s= bin") > + (string-append "--with-linux=3D" > + (assoc-ref inputs "linux-module-bu= ilder") > + "/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=3D/bin:/sbin:/usr/bin:/usr/sbin") > + (string-append "PATH=3D" > + (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-ke= ys) > + (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=3D" out "/et= c/default") > + (string-append "DEPMOD=3D" kmod "/bin/depmod") > + (string-append "INSTALL_PATH=3D" out) > + (string-append "INSTALL_MOD_PATH=3D" moddir) > + "INSTALL_MOD_STRIP=3D1") > + (install-file "contrib/bash_completion.d/zfs" > + (string-append out "/share/bash-completion/= completions")) > + (symlink "../share/pkgconfig/" (string-append out "/lib/p= kgconfig")) > + #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 w= as > +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! --=20 Brett M. Gilio GNU Guix, Contributor | GNU Project, Webmaster [DFC0 C7F7 9EE6 0CA7 AE55 5E19 6722 43C4 A03F 0EEE]