From 74685a4369033e79a776c5dec1c8480e8b446f6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Fri, 26 Apr 2019 23:46:20 +0200 Subject: services: file-system: Filter what goes to /etc/fstab. Fixes a longstanding issue whereby, due to our long fstab that included pseudo file systems like cgroup mounts, graphical file managers would display all of these. Initially reported at . * gnu/services/base.scm (file-system-fstab-entries): New procedure. (file-system-service-type): Use it to extend FSTAB-SERVICE-TYPE. --- gnu/services/base.scm | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/gnu/services/base.scm b/gnu/services/base.scm index 65f7ff29c8..952f6f9ab2 100644 --- a/gnu/services/base.scm +++ b/gnu/services/base.scm @@ -510,13 +510,30 @@ FILE-SYSTEM." (cons* sink user-unmount (map file-system-shepherd-service file-systems)))) +(define (file-system-fstab-entries file-systems) + "Return the subset of @var{file-systems} that should have an entry in +@file{/etc/fstab}." + ;; /etc/fstab is about telling fsck(8), mount(8), and umount(8) about + ;; relevant file systems they'll have to deal with. That excludes "pseudo" + ;; file systems. + ;; + ;; In particular, things like GIO (part of GLib) use it to determine the set + ;; of mounts, which is then used by graphical file managers and desktop + ;; environments to display "volume" icons. Thus, we really need to exclude + ;; those pseudo file systems from the list. + (remove (lambda (file-system) + (or (member (file-system-type file-system) + %pseudo-file-system-types) + (memq 'bind-mount (file-system-flags file-system)))) + file-systems)) + (define file-system-service-type (service-type (name 'file-systems) (extensions (list (service-extension shepherd-root-service-type file-system-shepherd-services) (service-extension fstab-service-type - identity) + file-system-fstab-entries) ;; Have 'user-processes' depend on 'file-systems'. (service-extension user-processes-service-type -- cgit v1.2.3