Re: mount syscall
John Darrington skribis: > On Tue, Nov 15, 2016 at 11:46:01AM +0100, Ludovic Court??s wrote: > John Darrington 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’.
mount syscall
On Tue, Nov 15, 2016 at 11:46:01AM +0100, Ludovic Court??s wrote: John Darrington 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. signature.asc Description: Digital signature