Hi Guix! I wanted to ask the Guix community for their thoughts on improving the support for adding networked file systems to an operating-system declaration.
For some context, I started tackling adding CIFS support to file-system declarations, but I've hit a snag. CIFS is a networked file system, but Guix mounts all file systems specified in (operating-system-file-systems) either when booting the system from the initrd or as shepherd services after boot that depend on 'root-file-system and 'udev. Either way, these run before any networking service has been initialized. Ergo, a samba share like //192.168.1.102/share won't be found. (At least, not on a wireless network. Perhaps the timing is different for wired ones.) Obviously, adding shepherd requirements to needed-at-boot? file systems isn't possible. However, I think it should be possible to add shepherd services to other file system entries. (And yet, NFS is allegedly supported, although I can't figure out the mechanism for that and don't have one set up on my LAN for testing.) Before hacking away at this myself, I'd like to get other people's thoughts on the best way to proceed. Do others agree that (file-system) entries should support networked devices? Should this be transparent depending on the type, or require explicit configuration? e.g. --8<---------------cut here---------------start------------->8--- (file-system (device "//192.168.1.102/share") (options "guest") (mount-point "/mnt/share") (type "cifs") ;; Should we explicitly require network, or implicitly add it from ;; the type? If the latter, what to do about Avahi? (requirement 'networking) (mount-may-fail? #t) (create-mount-point? #t)) --8<---------------cut here---------------end--------------->8--- I could see this being challenging since it's not immediately clear to me what particular file-system-* service, if any, is provisioning 'file-systems, which other shepherd requirements the user may specify can depend on. I imagine adding a requirement to the wrong file-system could easily cause a deadlock. I know a custom shepherd service could be used to run, say, mount.cifs from userspace after networking is provisioned, but in my opinion it would be cleaner to encapsulate within the existing file-system block of the operating system. -- Take it easy, Richard Sent Making my computer weirder one commit at a time.
