Subject: Re: bug#62986: Guix System cannot shutdown when there are NFS mounts

From: Bruno Victal <[email-masked]>
Date: Thu, 18 May 2023 19:13:36 +0100

Hi Maxim,

On 2023-04-21 04:53, Maxim Cournoyer wrote:
> Hello,
> 
> This has been reported by others in #guix as well, although we're
> currently short on details.
> 
> When an NFS mount is active at the time a shutdown is requested, the
> system hangs, and doesn't shut down.  The power button must be
> long-pressed to power off the machine.

I suspect this is because 'networking is disengaged before the NFS mount is unmounted.
Supposing that a NFS volume is mounted at /x/y/z (either manually or via a shepherd service),
probably what's happening is that the parent shepherd service of that path (be it /x/y, /x or /)
never unmounts due to the NFS child path.
It can't unmount the NFS path because:

a. manual NFS mount, 'networking has no knowledge of this and is already gone;
b. if provisioned through operating-system, since it doesn't support adding arbitrary shepherd dependencies
and it does not add 'networking to its 'requires' field, 'networking is already gone by the time it reaches here. [1]

If the NFS volume is manually unmounted (or there's some mechanism in place to unmount it before 'networking)
then no hang should occur.

[1]: Though it's tempting to simply add a 'networking dependency to any file-system-type = “nfs”, this
is not the best idea since:

a. not every service has a way to indicate that 'networking is ready (NFS mounts will fail to be automatically
mounted but in theory they should be able to unmount without interaction)
b. Interfaces that are configured outside of the 'networking service (be it manually, via custom shepherd service, etc.)
or that do not “depend” on the general idea of 'networking, such as NFS mounts using interface scoped Link-Local addresses.

Cheers,
Bruno