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
next 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.