guix-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: mount syscall


From: Ludovic Courtès
Subject: Re: mount syscall
Date: Thu, 17 Nov 2016 10:47:31 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/25.1 (gnu/linux)

John Darrington <address@hidden> skribis:

> On Tue, Nov 15, 2016 at 11:46:01AM +0100, Ludovic Court??s wrote:
>      John Darrington <address@hidden> skribis:
>      
>      > On Mon, Nov 14, 2016 at 10:48:18AM +0100, Ludovic Court??s wrote:
>      >      
>      >      The ???mount??? system call; see (gnu build file-systems).
>      >
>      > I confess, I have not really thought about this before. But supposing 
> somebody has in their /etc/config.scm:
>      >
>      >   (file-systems 
>      >    (cons*
>      >     (file-system
>      >       (device "my-root")
>      >       (title 'label)
>      >       (mount-point "/")
>      >       (type "ext4"))
>      >     (file-system
>      >       (device "fileserver.example.com:/home")
>      >       (title 'device)
>      >       (mount-point "/home")
>      >       (type "nfs4"))
>      >     %base-file-systems))
>      >
>      > Would the /home filesystem then get mounted on boot?
>      
>      Maybe not.  :-)
>      
>      The man page for mount(2) says:
>      
>      --8<---------------cut here---------------start------------->8--- Values
>      for the filesystemtype argument supported by the kernel are listed in
>      /proc/filesystems (e.g., "btrfs", "ext4", "jfs", "xfs", "vfat", "fuse",
>      "tmpfs", "cgroup", "proc", "mqueue", "nfs", "cifs", "iso9660").  Further
>      types may become available when the appropriate modules are loaded.
>      --8<---------------cut here---------------end--------------->8---
>      
>      I don???t know what happens with NFS, you???ll have to tell us.
>
> The answer seems to be that it would fail unless we patch our mount syscall
> wrapper with something like:

[...]

> +                    (let ((xoptions
> +                           (cond
> +                            ((string-match "^nfs.*" type)
> +                             (let* ((hosts (string-split source #\:))
> +                                    (aa (car (getaddrinfo (car hosts)  #f)))
> +                                    (sa (addrinfo:addr aa))
> +                                    (inet-addr (inet-ntop (sockaddr:fam sa)
> +                                                          (sockaddr:addr 
> sa))))
> +                               (string-append "addr="
> +                                              inet-addr
> +                                              (if options
> +                                                  (string-append "," options)
> +                                                  ""))))
> +                            (else
> +                             options))))

The ‘mount’ binding shouldn’t try to be smart and do things like this
IMO.  However, we could have a separate helper procedure to do that, if
needed and ‘file-system-shepherd-service’ would pick the right one.

Now, we should add system tests for that, otherwise it sounds like we’re
adding code that will rarely be used and we’ll never know whether it
actually works or how it’s supposed to be used.  :-)

Thanks,
Ludo’.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]