GNU bug report logs - #41820
[PATCH] file-systems: Add record type <nfs-share> for a file system device.

Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.

Package: guix-patches; Reported by: Stefan <stefan-guix@HIDDEN>; Keywords: patch; dated Thu, 11 Jun 2020 23:38:02 UTC; Maintainer for guix-patches is guix-patches@HIDDEN.

Message received at 41820 <at> debbugs.gnu.org:


Received: (at 41820) by debbugs.gnu.org; 21 Jun 2020 09:36:21 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Jun 21 05:36:21 2020
Received: from localhost ([127.0.0.1]:59246 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1jmwOj-0008Ka-Hn
	for submit <at> debbugs.gnu.org; Sun, 21 Jun 2020 05:36:21 -0400
Received: from eggs.gnu.org ([209.51.188.92]:35222)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <othacehe@HIDDEN>) id 1jmwOf-0008KH-QQ
 for 41820 <at> debbugs.gnu.org; Sun, 21 Jun 2020 05:36:20 -0400
Received: from fencepost.gnu.org ([2001:470:142:3::e]:51396)
 by eggs.gnu.org with esmtp (Exim 4.90_1)
 (envelope-from <othacehe@HIDDEN>)
 id 1jmwOY-0001zz-MM; Sun, 21 Jun 2020 05:36:10 -0400
Received: from [2a01:e0a:fa:a50:34a1:eac3:9800:4a6e] (port=53124 helo=meru)
 by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256)
 (Exim 4.82) (envelope-from <othacehe@HIDDEN>)
 id 1jmwOO-0008Aw-It; Sun, 21 Jun 2020 05:36:10 -0400
From: Mathieu Othacehe <othacehe@HIDDEN>
To: Stefan <stefan-guix@HIDDEN>
Subject: Re: [bug#41820] [PATCH] file-systems: Add record type <nfs-share> for
 a file system device.
References: <E27E841A-D3EB-472A-911C-D92CE0224B44@HIDDEN>
Date: Sun, 21 Jun 2020 11:35:59 +0200
In-Reply-To: <E27E841A-D3EB-472A-911C-D92CE0224B44@HIDDEN> (Stefan's
 message of "Fri, 12 Jun 2020 01:37:06 +0200")
Message-ID: <87tuz44v7k.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux)
MIME-Version: 1.0
Content-Type: text/plain
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 41820
Cc: Danny Milosavljevic <dannym@HIDDEN>, 41820 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)


Hello Stefan,

Thanks a lot for this patch, overall it look nice! Without going into
details here are a few remarks:

* As you probably noticed the bootloading & system part of Guix is
moving a lot recently. This patch does not apply on master, so it would
be nice if you could rebase it and pass "--base=auto" option to "git
format-patch" so that it's easier to apply it.

* It would be nice to have tests for this functionality. There's already
a (gnu tests nfs) module, testing the NFS service. Maybe you could add a
test case of a marionette booting from a local NFS share.

* Finally, now that file-system "device" field can be a label, a UUID, a
"/dev" node and an "nfs-share", it makes me think that we could need a
new layer of abstraction here, but this can come later and I need to
think more about it.

Thanks,

Mathieu




Information forwarded to guix-patches@HIDDEN:
bug#41820; Package guix-patches. Full text available.

Message received at 41820 <at> debbugs.gnu.org:


Received: (at 41820) by debbugs.gnu.org; 20 Jun 2020 13:53:02 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sat Jun 20 09:53:02 2020
Received: from localhost ([127.0.0.1]:57534 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1jmdvZ-0001xj-TN
	for submit <at> debbugs.gnu.org; Sat, 20 Jun 2020 09:53:02 -0400
Received: from vsmx011.vodafonemail.xion.oxcs.net ([153.92.174.89]:41030)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <stefan-guix@HIDDEN>) id 1jmdvW-0001xR-Rk
 for 41820 <at> debbugs.gnu.org; Sat, 20 Jun 2020 09:53:00 -0400
Received: from vsmx003.vodafonemail.xion.oxcs.net (unknown [192.168.75.197])
 by mta-5-out.mta.xion.oxcs.net (Postfix) with ESMTP id 498E259D090;
 Sat, 20 Jun 2020 13:52:53 +0000 (UTC)
Received: from macbook-pro.kuh-wiese.my-router.de (unknown [178.8.228.237])
 by mta-7-out.mta.xion.oxcs.net (Postfix) with ESMTPA id 7841B539A4B;
 Sat, 20 Jun 2020 13:52:44 +0000 (UTC)
Content-Type: text/plain; charset=us-ascii
Mime-Version: 1.0 (Mac OS X Mail 9.3 \(3124\))
Subject: Re: [bug#41820] [PATCH] file-systems: Add record type <nfs-share> for
 a file system device.
From: Stefan <stefan-guix@HIDDEN>
In-Reply-To: <BF3FCAF4-4B69-41AF-8B41-C82EBDC1CACE@HIDDEN>
Date: Sat, 20 Jun 2020 15:52:43 +0200
Content-Transfer-Encoding: quoted-printable
Message-Id: <3E9A3851-44B1-4062-A4ED-983BB0114D5D@HIDDEN>
References: <9AAFEFF4-8ACE-4C95-975F-67C3F4FDAF81@HIDDEN>
 <87a72gi4kz.fsf@HIDDEN>
 <1179D890-7D6C-43D8-A286-DA7A0F61D585@HIDDEN>
 <87h7w7cc55.fsf@HIDDEN>
 <92DB8E2B-1CA2-41AE-9265-53C4F5337686@HIDDEN>
 <CE315407-AD1A-45A8-A232-FC1512C4569E@HIDDEN>
 <CA441935-DB65-4DF8-BB7F-844B541BB554@HIDDEN>
 <20200606193721.1e126131@HIDDEN>
 <46CD97B3-9994-4AB7-AA7D-4DE39AB7A238@HIDDEN>
 <20200609154400.4c7d2f90@HIDDEN> <87bllqi66g.fsf@HIDDEN>
 <BF3FCAF4-4B69-41AF-8B41-C82EBDC1CACE@HIDDEN>
To: Danny Milosavljevic <dannym@HIDDEN>,
 Maxim Cournoyer <maxim.cournoyer@HIDDEN>,
 Mathieu Othacehe <othacehe@HIDDEN>
X-Mailer: Apple Mail (2.3124)
X-VADE-STATUS: LEGIT
X-Spam-Score: -0.7 (/)
X-Debbugs-Envelope-To: 41820
Cc: 41820 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.7 (-)

Hi!

A friendly ping.

What about this patch? This is what has been requested. Can it be pushed =
or does someone have further requests?


Bye

Stefan=




Information forwarded to guix-patches@HIDDEN:
bug#41820; Package guix-patches. Full text available.

Message received at 41820 <at> debbugs.gnu.org:


Received: (at 41820) by debbugs.gnu.org; 11 Jun 2020 23:44:12 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Jun 11 19:44:12 2020
Received: from localhost ([127.0.0.1]:38392 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1jjWrj-0005xf-Pw
	for submit <at> debbugs.gnu.org; Thu, 11 Jun 2020 19:44:11 -0400
Received: from mx009.vodafonemail.xion.oxcs.net ([153.92.174.39]:28617)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <stefan-guix@HIDDEN>) id 1jjWri-0005xS-IS
 for 41820 <at> debbugs.gnu.org; Thu, 11 Jun 2020 19:44:11 -0400
Received: from vsmx002.vodafonemail.xion.oxcs.net (unknown [192.168.75.192])
 by mta-6-out.mta.xion.oxcs.net (Postfix) with ESMTP id 692726050DB;
 Thu, 11 Jun 2020 23:44:04 +0000 (UTC)
Received: from macbook-pro.kuh-wiese.my-router.de (unknown [145.254.41.74])
 by mta-6-out.mta.xion.oxcs.net (Postfix) with ESMTPA id D29356050CF;
 Thu, 11 Jun 2020 23:43:57 +0000 (UTC)
Content-Type: text/plain; charset=utf-8
Mime-Version: 1.0 (Mac OS X Mail 9.3 \(3124\))
Subject: [bug#41820] [PATCH] file-systems: Add record type <nfs-share> for a
 file system device.
From: Stefan <stefan-guix@HIDDEN>
In-Reply-To: <87bllqi66g.fsf@HIDDEN>
Date: Fri, 12 Jun 2020 01:43:57 +0200
Content-Transfer-Encoding: quoted-printable
Message-Id: <BF3FCAF4-4B69-41AF-8B41-C82EBDC1CACE@HIDDEN>
References: <9AAFEFF4-8ACE-4C95-975F-67C3F4FDAF81@HIDDEN>
 <87a72gi4kz.fsf@HIDDEN>
 <1179D890-7D6C-43D8-A286-DA7A0F61D585@HIDDEN>
 <87h7w7cc55.fsf@HIDDEN>
 <92DB8E2B-1CA2-41AE-9265-53C4F5337686@HIDDEN>
 <CE315407-AD1A-45A8-A232-FC1512C4569E@HIDDEN>
 <CA441935-DB65-4DF8-BB7F-844B541BB554@HIDDEN>
 <20200606193721.1e126131@HIDDEN>
 <46CD97B3-9994-4AB7-AA7D-4DE39AB7A238@HIDDEN>
 <20200609154400.4c7d2f90@HIDDEN> <87bllqi66g.fsf@HIDDEN>
To: Danny Milosavljevic <dannym@HIDDEN>,
 Maxim Cournoyer <maxim.cournoyer@HIDDEN>
X-Mailer: Apple Mail (2.3124)
X-VADE-STATUS: LEGIT
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 41820
Cc: 41820 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

Hi!

Now that the new record <nfs-share> is working and seeing the amount of =
changes to make this working, I get the impression that this is =
unnecessarily complicated.

In the end there will be the "--root=3D" option for the kernel, which is =
only a plain string. And most of the device record related functions in =
the end target to produce a string.

And then there is (device-string->file-system-device) in =
gnu/build/linux-boot.scm to convert this string back into a device =
record.

As long as this conversion to and from string is necessary, there is no =
real benefit in having different record types for (file-system (device =
=E2=80=A6)), it could just be a string. Then there would only be the =
need for a simple parser function like (device-string->device-type) to =
determine the type of device to be used in places where the type =
matters.


Bye

Stefan





Information forwarded to guix-patches@HIDDEN:
bug#41820; Package guix-patches. Full text available.

Message received at submit <at> debbugs.gnu.org:


Received: (at submit) by debbugs.gnu.org; 11 Jun 2020 23:37:24 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Jun 11 19:37:24 2020
Received: from localhost ([127.0.0.1]:38366 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1jjWl9-0005kl-KK
	for submit <at> debbugs.gnu.org; Thu, 11 Jun 2020 19:37:24 -0400
Received: from lists.gnu.org ([209.51.188.17]:48468)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <stefan-guix@HIDDEN>) id 1jjWl7-0005kd-9U
 for submit <at> debbugs.gnu.org; Thu, 11 Jun 2020 19:37:22 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:43316)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <stefan-guix@HIDDEN>)
 id 1jjWl7-0002PO-2E
 for guix-patches@HIDDEN; Thu, 11 Jun 2020 19:37:21 -0400
Received: from vsmx012.vodafonemail.xion.oxcs.net ([153.92.174.90]:9405)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <stefan-guix@HIDDEN>)
 id 1jjWl4-0000lI-A7
 for guix-patches@HIDDEN; Thu, 11 Jun 2020 19:37:20 -0400
Received: from vsmx004.vodafonemail.xion.oxcs.net (unknown [192.168.75.198])
 by mta-8-out.mta.xion.oxcs.net (Postfix) with ESMTP id 7EE00F35139;
 Thu, 11 Jun 2020 23:37:11 +0000 (UTC)
Received: from macbook-pro.kuh-wiese.my-router.de (unknown [145.254.41.74])
 by mta-8-out.mta.xion.oxcs.net (Postfix) with ESMTPA id 2081819B4CA;
 Thu, 11 Jun 2020 23:37:06 +0000 (UTC)
From: Stefan <stefan-guix@HIDDEN>
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: quoted-printable
Subject: [PATCH] file-systems: Add record type <nfs-share> for a file system
 device.
Date: Fri, 12 Jun 2020 01:37:06 +0200
Message-Id: <E27E841A-D3EB-472A-911C-D92CE0224B44@HIDDEN>
To: guix-patches@HIDDEN
Mime-Version: 1.0 (Mac OS X Mail 9.3 \(3124\))
X-Mailer: Apple Mail (2.3124)
X-VADE-STATUS: LEGIT
Received-SPF: pass client-ip=153.92.174.90;
 envelope-from=stefan-guix@HIDDEN;
 helo=vsmx012.vodafonemail.xion.oxcs.net
X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/11 19:37:11
X-ACL-Warn: Detected OS   = Linux 2.2.x-3.x (no timestamps) [generic]
X-Spam_score_int: -25
X-Spam_score: -2.6
X-Spam_bar: --
X-Spam_report: (-2.6 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_LOW=-0.7,
 SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN
X-Spam_action: no action
X-Spam-Score: -1.3 (-)
X-Debbugs-Envelope-To: submit
Cc: Danny Milosavljevic <dannym@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -2.3 (--)

* doc/guix.texi: Add description for 'nfs-share'.
* gnu/bootloader/grub.scm (grub-root-search): Support 'nfs-share'.
* gnu/build/file-systems.scm (canonicalize-device-spec): Support =
'nfs-share'.
* gnu/build/linux-boot.scm (device-string->file-system-device): Support
'nfs-share'.
* gnu/machine/ssh.scm (machine-check-file-system-availability): Support
'nfs-share'.
* gnu/services/base.scm (file-system->fstab-entry): Support 'nfs-share'.
* gnu/system.scm (read-boot-parameters, device-sexp->device, =
device->sexp):
Support 'nfs-share'.
* gnu/system/file-systems.scm (<nfs-share>): New record type with =
printer.
(nfs-share): New function to conditionally construct an 'nfs-share' =
record.
(nfs-share->string): New function.
(nfs-share?): New predicate.
(file-system-device->string, file-system->spec, spec->file-system): =
Support
'nfs-share'.
* guix/scripts/system.scm (display-system-generation, =
check-initrd-modules):
Support 'nfs-share'.
---
 doc/guix.texi               | 38 ++++++++++++++++++++++++++++++-------
 gnu/bootloader.scm          |  4 ++--
 gnu/bootloader/grub.scm     |  2 ++
 gnu/build/file-systems.scm  | 12 ++++++------
 gnu/build/linux-boot.scm    |  7 ++++---
 gnu/machine/ssh.scm         | 23 ++++++++++++++++++++++
 gnu/services/base.scm       |  2 ++
 gnu/system.scm              |  4 ++++
 gnu/system/file-systems.scm | 36 +++++++++++++++++++++++++++++++++--
 guix/scripts/system.scm     |  9 +++++++--
 10 files changed, 115 insertions(+), 22 deletions(-)

diff --git a/doc/guix.texi b/doc/guix.texi
index 15e077a41c..4fd3793a4f 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -11723,10 +11723,10 @@ This is a string specifying the type of the =
file system---e.g.,
 This designates the place where the file system is to be mounted.
=20
 @item @code{device}
-This names the ``source'' of the file system.  It can be one of three
-things: a file system label, a file system UUID, or the name of a
-@file{/dev} node.  Labels and UUIDs offer a way to refer to file
-systems without having to hard-code their actual device
+This names the ``source'' of the file system.  It can be one of four
+things: a file system label, a file system UUID, the name of a
+@file{/dev} node, or an NFS share.  Labels and UUIDs offer a way to
+refer to file systems without having to hard-code their actual device
 name@footnote{Note that, while it is tempting to use
 @file{/dev/disk/by-uuid} and similar device names to achieve the same
 result, this is not recommended: These special device nodes are created
@@ -11735,9 +11735,10 @@ mounted.}.
=20
 @findex file-system-label
 File system labels are created using the @code{file-system-label}
-procedure, UUIDs are created using @code{uuid}, and @file{/dev} node =
are
-plain strings.  Here's an example of a file system referred to by its
-label, as shown by the @command{e2label} command:
+procedure, UUIDs are created using @code{uuid}, NFS shares are created
+using @code{nfs-share}, and @file{/dev} nodes are plain strings.  =
Here's
+an example of a file system referred to by its label, as shown by the
+@command{e2label} command:
=20
 @lisp
 (file-system
@@ -11762,6 +11763,29 @@ like this:
   (device (uuid "4dab5feb-d176-45de-b287-9b0a6e4c01cb")))
 @end lisp
=20
+@findex nfs-share
+An NFS share is defined in one of the following ways. Please note that
+the NFS server for a root file system needs to be passed as IP address
+via the @code{options} field as @code{"addr=3D"} option.
+
+@lisp
+(file-system
+  (mount-point "/")
+  (type "nfs")
+  (device (nfs-share ":/srv/nfs/guix-root"))
+  (options "addr=3D10.10.10.10,vers=3D4.1")
+  (needed-for-boot? #t))
+@end lisp
+
+@lisp
+(file-system
+  (mount-point "/music")
+  (type "nfs")
+  (device (nfs-share "music-server.local:/srv/nfs/music"))
+  (options "vers=3D4.1")
+  (needed-for-boot? #f))
+@end lisp
+
 When the source of a file system is a mapped device (@pxref{Mapped
 Devices}), its @code{device} field @emph{must} refer to the mapped
 device name---e.g., @file{"/dev/mapper/root-partition"}.
diff --git a/gnu/bootloader.scm b/gnu/bootloader.scm
index 2eebb8e9d9..62c585670b 100644
--- a/gnu/bootloader.scm
+++ b/gnu/bootloader.scm
@@ -77,8 +77,8 @@
   menu-entry make-menu-entry
   menu-entry?
   (label           menu-entry-label)
-  (device          menu-entry-device       ; file system uuid, label, =
or #f
-                   (default #f))
+  (device          menu-entry-device       ; uuid, file-system-label,
+                   (default #f))           ; nfs-share, or #f
   (device-mount-point menu-entry-device-mount-point
                    (default #f))
   (linux           menu-entry-linux
diff --git a/gnu/bootloader/grub.scm b/gnu/bootloader/grub.scm
index b905ae360c..d82c09a79d 100644
--- a/gnu/bootloader/grub.scm
+++ b/gnu/bootloader/grub.scm
@@ -295,6 +295,8 @@ code."
         ((? file-system-label? label)
          (format #f "search --label --set ~a"
                  (file-system-label->string label)))
+        ((? nfs-share?)
+         "set root=3D(tftp)")
         ((or #f (? string?))
          #~(format #f "search --file --set ~a" #$file)))))
=20
diff --git a/gnu/build/file-systems.scm b/gnu/build/file-systems.scm
index ad92d8a496..306cff75fb 100644
--- a/gnu/build/file-systems.scm
+++ b/gnu/build/file-systems.scm
@@ -636,8 +636,8 @@ were found."
=20
 ^L
 (define (canonicalize-device-spec spec)
-  "Return the device name corresponding to SPEC, which can be a <uuid>, =
a
-<file-system-label>, or a string (typically a /dev file name)."
+  "Return the device name corresponding to SPEC, which can be a <uuid>, =
an
+<nfs-share>, a <file-system-label>, or a string (typically a /dev file =
name)."
   (define max-trials
     ;; Number of times we retry partition label resolution, 1 second =
per
     ;; trial.  Note: somebody reported a delay of 16 seconds (!) before =
their
@@ -661,10 +661,10 @@ were found."
=20
   (match spec
     ((? string?)
-     (if (string-contains spec ":/")
-         spec                  ; do not resolve NFS devices
-         ;; Nothing to do, but wait until SPEC shows up.
-         (resolve identity spec identity)))
+     ;; Nothing to do, but wait until SPEC shows up.
+     (resolve identity spec identity))
+    ((? nfs-share?)
+     (nfs-share->string spec))
     ((? file-system-label?)
      ;; Resolve the label.
      (resolve find-partition-by-label
diff --git a/gnu/build/linux-boot.scm b/gnu/build/linux-boot.scm
index 80fe0cfb9d..8a609f6eff 100644
--- a/gnu/build/linux-boot.scm
+++ b/gnu/build/linux-boot.scm
@@ -469,10 +469,11 @@ upon error."
=20
   (define (device-string->file-system-device device-string)
     ;; The "--root=3DSPEC" kernel command-line option always provides a
-    ;; string, but the string can represent a device, a UUID, or a
-    ;; label.  So check for all three.
-    (cond ((string-prefix? "/" device-string) device-string)
+    ;; string, but the string can represent a device, a UUID, an =
nfs-share,
+    ;; or a label.  So check for all of theme.
+    (cond ((nfs-share device-string #:on-error (const #f)) =3D> =
identity)
           ((uuid device-string) =3D> identity)
+          ((string-prefix? "/" device-string) device-string)
           (else (file-system-label device-string))))
=20
   (display "Welcome, this is GNU's early boot Guile.\n")
diff --git a/gnu/machine/ssh.scm b/gnu/machine/ssh.scm
index 116da86327..aa42a082c2 100644
--- a/gnu/machine/ssh.scm
+++ b/gnu/machine/ssh.scm
@@ -222,6 +222,24 @@ exist on the machine."
                  (message (format #f (G_ "no file system with UUID =
'~a'")
                                   (uuid->string (file-system-device =
fs))))))))))
=20
+  (define (check-nfs-share fs)
+    (define remote-exp
+      (with-imported-modules (source-module-closure
+                              '((gnu build file-systems)))
+        #~(begin
+            (use-modules (gnu build file-systems))
+
+            ;; TODO: Try to mount the share or to ping the server.
+            (nfs-share->string (nfs-share
+                                 #$(nfs-share->string =
(file-system-device fs)))))))
+
+    (remote-let ((result remote-exp))
+      (unless result
+        (raise (condition
+                (&message
+                 (message (format #f (G_ "no nfs-share '~a'")
+                                  (nfs-share->string =
(file-system-device fs))))))))))
+
   (append (map check-literal-file-system
                (filter (lambda (fs)
                          (string? (file-system-device fs)))
@@ -233,6 +251,10 @@ exist on the machine."
           (map check-uuid-file-system
                (filter (lambda (fs)
                          (uuid? (file-system-device fs)))
+                       file-systems))
+          (map check-nfs-share
+               (filter (lambda (fs)
+                         (nfs-share? (file-system-device fs)))
                        file-systems))))
=20
 (define (machine-check-initrd-modules machine)
@@ -257,6 +279,7 @@ not available in the initrd."
=20
               (define dev
                 #$(cond ((string? device) device)
+                        ((nfs-share? device) (nfs-share->string =
device))
                         ((uuid? device) #~(find-partition-by-uuid
                                            (string->uuid
                                             #$(uuid->string device))))
diff --git a/gnu/services/base.scm b/gnu/services/base.scm
index 6ea7ef8e7e..beef30fdf4 100644
--- a/gnu/services/base.scm
+++ b/gnu/services/base.scm
@@ -200,6 +200,8 @@
                                    (file-system-label->string label)))
                    ((? uuid? uuid)
                     (string-append "UUID=3D" (uuid->string uuid)))
+                   ((? nfs-share? share)
+                    (nfs-share->string share))
                    ((? string? device)
                     device))
                  "\t"
diff --git a/gnu/system.scm b/gnu/system.scm
index d51691fe76..660255b9e9 100644
--- a/gnu/system.scm
+++ b/gnu/system.scm
@@ -306,6 +306,8 @@ file system labels."
        (bytevector->uuid bv type))
       (('file-system-label (? string? label))
        (file-system-label label))
+      (('nfs-share (? string? share))
+       (nfs-share share))
       ((? bytevector? bv)                         ;old format
        (bytevector->uuid bv 'dce))
       ((? string? device)
@@ -1240,6 +1242,8 @@ such as '--root' and '--load' to =
<boot-parameters>."
      `(uuid ,(uuid-type uuid) ,(uuid-bytevector uuid)))
     ((? file-system-label? label)
      `(file-system-label ,(file-system-label->string label)))
+    ((? nfs-share? share)
+     `(nfs-share ,(nfs-share->string share)))
     (_
      device)))
=20
diff --git a/gnu/system/file-systems.scm b/gnu/system/file-systems.scm
index 0f94577760..13ef38e490 100644
--- a/gnu/system/file-systems.scm
+++ b/gnu/system/file-systems.scm
@@ -59,6 +59,10 @@
             file-system-label?
             file-system-label->string
=20
+            nfs-share
+            nfs-share?
+            nfs-share->string
+
             file-system->spec
             spec->file-system
             specification->file-system-mapping
@@ -102,7 +106,8 @@
 (define-record-type* <file-system> %file-system
   make-file-system
   file-system?
-  (device           file-system-device) ; string | <uuid> | =
<file-system-label>
+  (device           file-system-device) ; <uuid> | <file-system-label>
+                                        ; <nfs-share> | string
   (mount-point      file-system-mount-point)      ; string
   (type             file-system-type)             ; string
   (flags            file-system-flags             ; list of symbols
@@ -134,6 +139,27 @@
                             (format port "#<file-system-label ~s>"
                                     (file-system-label->string obj))))
=20
+;; An nfs-share for use in the 'device' field.
+(define-record-type <nfs-share>
+  (make-nfs-share share)
+  nfs-share?
+  (share nfs-share->string))
+
+(define* (nfs-share share #:key (on-error
+                                  (lambda (share)
+                                    (error "The nfs-share is missing =
\":/\" in"
+                                           share))))
+  "Try to construct an nfs-share, return (on-errer share) if share is =
invalid.
+Use #:on-error (const #f)' to check validity and avoid an error to be =
thrown."
+  (if (string-contains share ":/")
+      (make-nfs-share share)
+      (on-error share)))
+
+(set-record-type-printer! <nfs-share>
+                          (lambda (obj port)
+                            (format port "#<nfs-share ~s>"
+                                    (nfs-share->string obj))))
+
 (define-syntax report-deprecation
   (lambda (s)
     "Report the use of the now-deprecated 'title' field."
@@ -149,7 +175,7 @@
                  file line column)
          #t)))))
=20
-;; Helper for 'process-file-system-declaration'.
+;; Helper for the deprecated 'process-file-system-declaration'.
 (define-syntax device-expression
   (syntax-rules (quote label uuid device)
     ((_ (quote label) dev)
@@ -257,6 +283,8 @@ UUID-TYPE, a symbol such as 'dce or 'iso9660."
      (if uuid-type
          (uuid->string (uuid-bytevector device) uuid-type)
          (uuid->string device)))
+    ((? nfs-share?)
+     (nfs-share->string device))
     ((? string?)
      device)))
=20
@@ -303,6 +331,8 @@ initrd code."
                   `(uuid ,(uuid-type device) ,(uuid-bytevector =
device)))
                  ((file-system-label? device)
                   `(file-system-label ,(file-system-label->string =
device)))
+                 ((nfs-share? device)
+                  `(nfs-share ,(nfs-share->string device)))
                  (else device))
            mount-point type flags options check?))))
=20
@@ -316,6 +346,8 @@ initrd code."
                   (bytevector->uuid bv type))
                  (('file-system-label (? string? label))
                   (file-system-label label))
+                 (('nfs-share (? string? share))
+                  (nfs-share share))
                  (_
                   device)))
        (mount-point mount-point) (type type)
diff --git a/guix/scripts/system.scm b/guix/scripts/system.scm
index 3d7aa77cb7..27b324deac 100644
--- a/guix/scripts/system.scm
+++ b/guix/scripts/system.scm
@@ -497,12 +497,15 @@ list of services."
       ;;   root device: UUID: 12345-678
       ;; or:
       ;;   root device: label: "my-root"
+      ;; or:
+      ;;  root device: nfs-share: 0.0.0.0:/my-root
       ;; or just:
       ;;   root device: /dev/sda3
-      (format #t (G_ "  root device: ~[UUID: ~a~;label: ~s~;~a~]~%")
+      (format #t (G_ "  root device: ~[UUID: ~a~;label: ~s~;nfs-share: =
~a~;~a~]~%")
               (cond ((uuid? root-device) 0)
                     ((file-system-label? root-device) 1)
-                    (else 2))
+                    ((nfs-share? root-device) 2)
+                    (else 3))
               (file-system-device->string root-device))
=20
       (format #t (G_ "  kernel: ~a~%") kernel)
@@ -649,6 +652,8 @@ checking this by themselves in their 'check' =
procedure."
       (match device
         ((? string?)
          device)
+        ((? nfs-share?)
+         (nfs-share->string device))
         ((? uuid?)
          (find-partition-by-uuid device))
         ((? file-system-label?)
--=20
2.26.0





Acknowledgement sent to Stefan <stefan-guix@HIDDEN>:
New bug report received and forwarded. Copy sent to guix-patches@HIDDEN. Full text available.
Report forwarded to guix-patches@HIDDEN:
bug#41820; Package guix-patches. Full text available.
Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.
Last modified: Sun, 21 Jun 2020 09:45:02 UTC

GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997 nCipher Corporation Ltd, 1994-97 Ian Jackson.