guix-devel
[Top][All Lists]
Advanced

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

mount syscall


From: John Darrington
Subject: mount syscall
Date: Wed, 16 Nov 2016 22:06:01 +0100
User-agent: Mutt/1.5.23 (2014-03-12)

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:

diff --git a/guix/build/syscalls.scm b/guix/build/syscalls.scm
index 2cee654..3435617 100644
--- a/guix/build/syscalls.scm
+++ b/guix/build/syscalls.scm
@@ -415,17 +415,33 @@ string.  When FLAGS contains MS_REMOUNT, SOURCE and TYPE 
are ignored.  When
 UPDATE-MTAB? is true, update /etc/mtab.  Raise a 'system-error' exception on
 error."
       (let-values (((ret err)
-                    (proc (if source
-                              (string->pointer source)
-                              %null-pointer)
-                          (string->pointer target)
-                          (if type
-                              (string->pointer type)
-                              %null-pointer)
-                          flags
-                          (if options
-                              (string->pointer options)
-                              %null-pointer))))
+                    (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))))
+                      (proc
+                       (if source
+                           (string->pointer source)
+                           %null-pointer)
+                       (string->pointer target)
+                       (if type
+                           (string->pointer type)
+                           %null-pointer)
+                       flags
+                       (if xoptions
+                           (string->pointer xoptions)
+                           %null-pointer)))))
         (unless (zero? ret)
           (throw 'system-error "mount" "mount ~S on ~S: ~A"
                  (list source target (strerror err))


WDYT?


     

-- 
Avoid eavesdropping.  Send strong encrypted email.
PGP Public key ID: 1024D/2DE827B3 
fingerprint = 8797 A26D 0854 2EAB 0285  A290 8A67 719C 2DE8 27B3
See http://sks-keyservers.net or any PGP keyserver for public key.

Attachment: signature.asc
Description: Digital signature


reply via email to

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