all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Kaelyn Takata via Guix-patches via <guix-patches@gnu.org>
To: 71482@debbugs.gnu.org
Cc: Kaelyn Takata <kaelyn.alexi@protonmail.com>
Subject: [bug#71482] [PATCH] gnu: zfs: Split the kernel module out of the base package.
Date: Mon, 10 Jun 2024 16:45:26 +0000	[thread overview]
Message-ID: <8681cce4ff0cb548ff8bd527a77a5206c6d63e24.1718037851.git.kaelyn.alexi@protonmail.com> (raw)

Split the ZFS user-space tools and kernel modules into separate packages, with
a new make-zfs-for-kernel procedure for easily creating ZFS kernel module
packages for a specific kernel package. The generated kernel module package
includes the kernel version for which it was built in the name of the package,
such as "zfs-for-linux-libre-6.6.32-version".

& gnu/packages/file-systems.scm (zfs): Change to be the user-space tools.
(make-zfs-for-kernel): New procedure which accepts a single 'kernel-package'
argument.

Change-Id: Ib2d0e2b0f031d2ab3105d6b46ecd73bde1aa8564
---
 gnu/packages/file-systems.scm | 124 ++++++++++++++++++++--------------
 1 file changed, 72 insertions(+), 52 deletions(-)

diff --git a/gnu/packages/file-systems.scm b/gnu/packages/file-systems.scm
index fa7da35898..78121c1ec2 100644
--- a/gnu/packages/file-systems.scm
+++ b/gnu/packages/file-systems.scm
@@ -1444,7 +1444,6 @@ (define-public zfs
   (package
     (name "zfs")
     (version "2.2.4")
-    (outputs '("out" "module" "src"))
     (source
       (origin
         (method url-fetch)
@@ -1453,33 +1452,19 @@ (define-public zfs
                               "/zfs-" version ".tar.gz"))
           (sha256
            (base32 "1h0yqchirzsn2gll1w2gclb13hr8511z67lf85cigm43frgr144p"))))
-    (build-system linux-module-build-system)
+    (build-system gnu-build-system)
     (arguments
      (list
-      ;; The ZFS kernel module should not be downloaded since the license
-      ;; terms don't allow for distributing it, only building it locally.
-      #:substitutable? #f
-      ;; Tests cannot run in an unprivileged build environment.
-      #:tests? #f
+      #:configure-flags #~(list "--with-config=user"
+                                (string-append "--prefix=" #$output)
+                                (string-append "--with-dracutdir=" #$output
+                                               "/lib/dracut")
+                                (string-append "--with-udevdir=" #$output
+                                               "/lib/udev")
+                                (string-append "--with-mounthelperdir=" #$output
+                                               "/sbin"))
       #:phases
       #~(modify-phases %standard-phases
-          (add-after 'configure 'really-configure
-            (lambda* (#:key inputs #:allow-other-keys)
-              (substitute* "configure"
-                (("-/bin/sh") (string-append "-" (which "sh"))))
-              (invoke "./configure"
-                      "--with-config=all"
-                      (string-append "--prefix=" #$output)
-                      (string-append "--with-dracutdir=" #$output
-                                     "/lib/dracut")
-                      (string-append "--with-udevdir=" #$output
-                                     "/lib/udev")
-                      (string-append "--with-mounthelperdir=" #$output
-                                     "/sbin")
-                      (string-append "--with-linux="
-                                     (search-input-directory
-                                      inputs
-                                      "lib/modules/build")))))
           (add-after 'unpack 'patch-source
             (lambda* (#:key inputs #:allow-other-keys)
               ;; New feature "compatibility=" in 2.1.0.
@@ -1511,14 +1496,6 @@ (define-public zfs
                 ;; Just use 'modprobe' in message to user, since Guix
                 ;; does not have a traditional /sbin/
                 (("'/sbin/modprobe ") "'modprobe "))
-              (substitute* "configure"
-                (("/etc/default")
-                 (string-append #$output "/etc/default"))
-                (("/etc/bash_completion.d")
-                 (string-append #$output "/etc/bash_completion.d")))
-              (substitute* "Makefile.in"
-                (("/usr/share/initramfs-tools")
-                 (string-append #$output "/usr/share/initramfs-tools")))
               (substitute* "contrib/initramfs/Makefile.am"
                 (("/usr/share/initramfs-tools")
                  (string-append #$output "/usr/share/initramfs-tools")))
@@ -1548,31 +1525,22 @@ (define-public zfs
                                 (dirname (which "sed")) ":"
                                 (dirname (which "gawk")))))
               (substitute* '("Makefile.am" "Makefile.in")
-                (("\\$\\(prefix)/src") (string-append #$output:src "/src")))
+                (("@initconfdir@") (string-append #$output "/etc/default"))
+                (("/usr/share/initramfs-tools" dir) (string-append #$output dir)))
               (substitute* (find-files "udev/rules.d/" ".rules.in$")
                 (("/sbin/modprobe")
                  (search-input-file inputs "/bin/modprobe")))))
-          (replace 'build
-            (lambda _ (invoke "make")))
           (replace 'install
-            (lambda* (#:key inputs native-inputs #:allow-other-keys)
-              (let* ((kmod (assoc-ref (or native-inputs inputs) "kmod")))
-                (invoke "make" "install"
-                        (string-append "DEFAULT_INITCONF_DIR="
-                                       #$output "/etc/default")
-                        (string-append "DEPMOD="
-                                       (search-input-file
-                                        (or native-inputs inputs)
-                                        "/bin/depmod"))
-                        (string-append "INSTALL_PATH=" #$output)
-                        (string-append "INSTALL_MOD_PATH=" #$output:module)
-                        "INSTALL_MOD_STRIP=1")
-                (install-file
-                 "contrib/bash_completion.d/zfs"
-                 (string-append #$output
-                                "/share/bash-completion/completions"))))))))
+            (lambda _
+              (invoke "make" "install"
+                      (string-append "DEFAULT_INITCONF_DIR="
+                                     #$output "/etc/default")
+                      (string-append "INSTALL_PATH=" #$output)
+                      (string-append "bashcompletiondir="
+                                     #$output
+                                     "/share/bash-completion/completions")))))))
     (native-inputs
-     (list attr kmod pkg-config))
+     (list attr kmod pkg-config python))
     (inputs (list eudev
                   kmod
                   libaio
@@ -1592,6 +1560,58 @@ (define-public zfs
 community.")
     (license license:cddl1.0)))
 
+(define-public (make-zfs-for-kernel kernel-package)
+  (package
+    (inherit zfs)
+    (name (string-join (list (package-name zfs)
+                             "for"
+                             (package-name kernel-package)
+                             (package-version kernel-package)
+                             "version")
+                       "-"))
+    (build-system linux-module-build-system)
+    (arguments
+     (substitute-keyword-arguments
+         (strip-keyword-arguments '(#:configure-flags)
+                                  (package-arguments zfs))
+       ((#:linux _ #f) kernel-package)
+       ((#:substitutable? _ #t) #f)
+       ((#:phases phases)
+        #~(modify-phases %standard-phases
+            (add-after 'unpack 'patch-source
+              (assoc-ref #$phases 'patch-source))
+            (add-after 'configure 'really-configure
+              (lambda* (#:key inputs #:allow-other-keys)
+                (substitute* "configure"
+                  (("-/bin/sh") (string-append "-" (which "sh"))))
+                (invoke "./configure"
+                        "--with-config=kernel"
+                        (string-append "--prefix=" #$output)
+                        (string-append "--with-udevdir=" #$output
+                                       "/lib/udev")
+                        (string-append "--with-linux="
+                                       (search-input-directory
+                                        inputs
+                                        "lib/modules/build")))))
+            (replace 'build
+              (lambda* (#:key (make-flags '()) (parallel-build? #t)
+                        #:allow-other-keys)
+                (apply invoke "make"
+                       `(,@(if parallel-build?
+                               `("-j" ,(number->string (parallel-job-count)))
+                               '())
+                         ,@make-flags))))
+            (replace 'install
+              (lambda* (#:key inputs native-inputs #:allow-other-keys)
+                (let* ((kmod (assoc-ref (or native-inputs inputs) "kmod")))
+                  (invoke "make" "-C" "module" "install"
+                          (string-append "DEPMOD="
+                                         (search-input-file
+                                          (or native-inputs inputs)
+                                          "/bin/depmod"))
+                          (string-append "INSTALL_MOD_PATH=" #$output)
+                          "INSTALL_MOD_STRIP=1"))))))))))
+
 (define-public zfs-auto-snapshot
   (package
     (name "zfs-auto-snapshot")

base-commit: df5648daa1a5d097a430131bbff353b865b476b6
-- 
2.45.1






             reply	other threads:[~2024-06-10 17:11 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-06-10 16:45 Kaelyn Takata via Guix-patches via [this message]
2024-09-22 19:52 ` [bug#71482] [PATCH v2] gnu: zfs: Split the kernel module out of the base package Kaelyn Takata via Guix-patches via
2024-10-05 16:17   ` Zheng Junjie
2024-10-05 18:06     ` Kaelyn via Guix-patches via

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

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=8681cce4ff0cb548ff8bd527a77a5206c6d63e24.1718037851.git.kaelyn.alexi@protonmail.com \
    --to=guix-patches@gnu.org \
    --cc=71482@debbugs.gnu.org \
    --cc=kaelyn.alexi@protonmail.com \
    /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 external index

	https://git.savannah.gnu.org/cgit/guix.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.