From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp1 ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms11 with LMTPS id 1cVFGghq718+WwAA0tVLHw (envelope-from ) for ; Fri, 01 Jan 2021 18:29:28 +0000 Received: from aspmx1.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp1 with LMTPS id yKKTFQhq719aBQAAbx9fmQ (envelope-from ) for ; Fri, 01 Jan 2021 18:29:28 +0000 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id AD8209404CD for ; Fri, 1 Jan 2021 18:29:27 +0000 (UTC) Received: from localhost ([::1]:51552 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kvPB0-0005Fc-L8 for larch@yhetil.org; Fri, 01 Jan 2021 13:29:26 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:58778) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kvPAc-0005EG-Jr for guix-patches@gnu.org; Fri, 01 Jan 2021 13:29:02 -0500 Received: from debbugs.gnu.org ([209.51.188.43]:51513) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kvPAc-00038x-DA for guix-patches@gnu.org; Fri, 01 Jan 2021 13:29:02 -0500 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1kvPAc-0001S8-9k for guix-patches@gnu.org; Fri, 01 Jan 2021 13:29:02 -0500 X-Loop: help-debbugs@gnu.org Subject: [bug#45592] [PATCH] gnu, doc: Create and document procedure to compile ZFS for specific kernel. References: In-Reply-To: Resent-From: raid5atemyhomework Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Fri, 01 Jan 2021 18:29:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 45592 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: "45592@debbugs.gnu.org" <45592@debbugs.gnu.org> Received: via spool by 45592-submit@debbugs.gnu.org id=B45592.16095257285553 (code B ref 45592); Fri, 01 Jan 2021 18:29:02 +0000 Received: (at 45592) by debbugs.gnu.org; 1 Jan 2021 18:28:48 +0000 Received: from localhost ([127.0.0.1]:34825 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1kvPAO-0001RU-4p for submit@debbugs.gnu.org; Fri, 01 Jan 2021 13:28:48 -0500 Received: from mail-40135.protonmail.ch ([185.70.40.135]:55932) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1kvPAL-0001RG-G8 for 45592@debbugs.gnu.org; Fri, 01 Jan 2021 13:28:46 -0500 Date: Fri, 01 Jan 2021 18:28:30 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com; s=protonmail; t=1609525718; bh=bvSy5UnGGi4MW+pyXiKUf2o3ujO6TCbbB41X2h/h/r0=; h=Date:To:From:Reply-To:Subject:From; b=rRfBP/0QNizJxPcGqLb+URZ+1PlzVZUD6abwcBqlFMwe8XQRElY0zgTqrlgBfdeRi hVjMw3qL525/rBAc1K8UZuR2/hE/SXWGFwc2KbNhisFhxxOmSmlvYgK9GWk+/WTH0V AEW9O5MmdbGyZwwb3KnvvPedv2S0GjKGQ9GCMYR4= Message-ID: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+larch=yhetil.org@gnu.org Sender: "Guix-patches" Reply-to: raid5atemyhomework , raid5atemyhomework via Guix-patches From: raid5atemyhomework via Guix-patches via X-Migadu-Flow: FLOW_IN X-Migadu-Spam-Score: -2.83 Authentication-Results: aspmx1.migadu.com; dkim=fail (headers rsa verify failed) header.d=protonmail.com header.s=protonmail header.b=rRfBP/0Q; dmarc=pass (policy=none) header.from=gnu.org; spf=pass (aspmx1.migadu.com: domain of guix-patches-bounces@gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=guix-patches-bounces@gnu.org X-Migadu-Queue-Id: AD8209404CD X-Spam-Score: -2.83 X-Migadu-Scanner: scn1.migadu.com X-TUID: TYDAvxucwWcj The previous patch had an incorrect documentation, this patch now has more = correct documentation. I've tried this out in a QEMU image, but haven't tried formatting a ZFS dev= ice yet, however this does run `zpool list` and `zfs version` apparently co= rrectly. >From 2e1ee359395d6d6a29f872a5452e750f0b2f8312 Mon Sep 17 00:00:00 2001 From: raid5atemyhomework Date: Fri, 1 Jan 2021 20:26:42 +0800 Subject: [PATCH] gnu, doc: Create and document procedure to compile ZFS for specific kernel. --- doc/guix.texi | 81 +++++++++++++++++++++++++++++++++++ gnu/packages/file-systems.scm | 22 +++++++++- 2 files changed, 102 insertions(+), 1 deletion(-) diff --git a/doc/guix.texi b/doc/guix.texi index 1081ed26a3..aebcf8c6cb 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -13885,6 +13885,87 @@ a file system declaration such as: compress-force=3Dzstd,space_cache=3Dv2")) @end lisp +@node ZFS file system +@subsection ZFS file system + +The ZFS on Linux file system cannot legally be downloaded as part of the +Linux kernel, but you as a user can do anything on hardware you own, +including download ZFS as source code, compile ZFS as a kernel module, +and link it into Linux. + +As a large and complex kernel module, ZFS has to be compiled for a +specific version of Linux. Often the latest ZFS package available in Guix +cannot be compiled with the latest Linux kernel available in Guix, so +installing the @code{zfs} package in your system configuration file will +fail. + +Instead, you have to check the +@url{https://github.com/openzfs/zfs/releases,OpenZFS release notes} for +the specific version of ZFS that Guix has packaged to determine what +Linux kernels you can use, then check the @code{linux-libre} packages +that Guix has packaged, and select one you can use on your system. + +Then, you have to modify your system configuration file, and create a +ZFS package that compiles using the specific Linux version you chose. +Below is a sketch of how you would modify your @code{operating-system} +declaration in order to set up ZFS: + +@lisp +(use-modules (gnu)) +;; @dots{} +(use-service-modules + ; @dots{} + linux) +(use-package-modules + ; @dots{} + linux + file-systems) + +;; @dots{} + +;;; (1) Select a specific kernel. +(define system-kernel linux-libre-5.9) +;;; (2) Define a ZFS package for your kernel. +(define system-zfs (make-zfs-package system-kernel)) + +;; @dots{} + +(operating-system + ;;; (3) Specify your selected kernel. + (kernel system-kernel) + ;;; (4) Add the "module" output of the system ZFS package to + ;;; the kernel-loadable modules. + (kernel-loadable-modules (list (list system-zfs "module"))) + + ;; @dots{} + + (packages + ;;; (5) Add the system ZFS package to global packages so that + ;;; "zfs", "zpool" etc. commands are available. + (cons* system-zfs + ; @dots{} + %base-packages)) + + ;; @dots{} + + (services + ;;; (6) Add a service that loads ZFS at bootup. + (cons* (service kernel-module-loader-service-type + '("zfs")) + ; @dots{} + %base-services)) + ;; @dots{} + ) +@end lisp + +@deffn (Scheme Procedure) make-zfs-package @var{kernel} +This procedure creates a package which, when included as a package +in your system, can be loaded as a kernel module for the specified +@var{kernel}, a Linux kernel package. +It is intended to create a system-specific ZFS kernel module for +the Linux kernel you will use in your system. +@end deffn + @node Mapped Devices @section Mapped Devices diff --git a/gnu/packages/file-systems.scm b/gnu/packages/file-systems.scm index 895ad069c5..ebc4bc87c1 100644 --- a/gnu/packages/file-systems.scm +++ b/gnu/packages/file-systems.scm @@ -951,9 +951,29 @@ APFS.") (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.") +community. + +DO NOT INSTALL THIS PACKAGE. Instead, refer to the 'ZFS file system' secti= on +of the Guix info manual for how to install ZFS.") (license license:cddl1.0))) +(define-public (make-zfs-package kernel) + (package + (inherit zfs) + (name (string-append "zfs-for-" + (package-name kernel) + "-" + (package-version kernel) + "-version")) + (arguments + (cons* #:linux kernel (package-arguments zfs))) + (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. + +This package has been compiled for a specific Linux kernel."))) + (define-public mergerfs (package (name "mergerfs") -- 2.29.2