unofficial mirror of guix-patches@gnu.org 
 help / color / mirror / code / Atom feed
* [bug#40480] [PATCH] services: Add file-system utils to profile.
@ 2020-04-07  8:30 Brice Waegeneire
  2020-04-12 19:10 ` [bug#40480] [PATCH v2] " Brice Waegeneire
                   ` (4 more replies)
  0 siblings, 5 replies; 9+ messages in thread
From: Brice Waegeneire @ 2020-04-07  8:30 UTC (permalink / raw)
  To: 40480

* gnu/services/base.scm (file-system-type->utils, file-system-utils):
New procedure.
(file-system-service-type): Extend 'profile-service-type' with
'file-system-utils'.
* gnu/system.scm (boot-file-system-service): New procedure...
(operating-system-default-essential-services): ... use it.
(%base-packages): Remove 'e2fsprogs'.
* gnu/system/file-systems.scm (file-system): Add 'utils?' field.
---
 gnu/services/base.scm       | 39 +++++++++++++++++++++++++++++++++++--
 gnu/system.scm              | 28 +++++++++++++++++---------
 gnu/system/file-systems.scm |  6 +++++-
 3 files changed, 61 insertions(+), 12 deletions(-)

diff --git a/gnu/services/base.scm b/gnu/services/base.scm
index 070765ab83..1fef44cf01 100644
--- a/gnu/services/base.scm
+++ b/gnu/services/base.scm
@@ -44,13 +44,20 @@
                 #:select (file-system-packages))
   #:use-module (gnu packages admin)
   #:use-module ((gnu packages linux)
-                #:select (alsa-utils crda eudev e2fsprogs fuse gpm kbd lvm2 rng-tools))
+                #:select (alsa-utils btrfs-progs crda eudev eudev/btrfs-fix
+                          e2fsprogs f2fs-tools fuse gpm kbd lvm2 rng-tools
+                          util-linux xfsprogs))
   #:use-module (gnu packages bash)
   #:use-module ((gnu packages base)
                 #:select (canonical-package coreutils glibc glibc-utf8-locales))
   #:use-module (gnu packages package-management)
   #:use-module ((gnu packages gnupg) #:select (guile-gcrypt))
-  #:use-module (gnu packages linux)
+  #:use-module ((gnu packages disk)
+                #:select (dosfstools))
+  #:use-module ((gnu packages file-systems)
+                #:select (bcachefs-tools jfsutils zfs))
+  #:use-module ((gnu packages mtools)
+                #:select (exfat-utils))
   #:use-module (gnu packages terminals)
   #:use-module ((gnu build file-systems)
                 #:select (mount-flags->bit-mask))
@@ -59,12 +66,15 @@
   #:use-module (guix modules)
   #:use-module ((guix self) #:select (make-config.scm))
   #:use-module (srfi srfi-1)
+  #:use-module (srfi srfi-2)
   #:use-module (srfi srfi-26)
   #:use-module (ice-9 match)
+  #:use-module (ice-9 regex)
   #:use-module (ice-9 format)
   #:export (fstab-service-type
             root-file-system-service
             file-system-service-type
+            file-system-utils
             swap-service
             user-processes-service-type
             host-name-service
@@ -535,6 +545,29 @@ FILE-SYSTEM."
                 (memq 'bind-mount (file-system-flags file-system))))
           file-systems))
 
+(define (file-system-type->utils type)
+  "Return a utils package for file system TYPE."
+  (define pattern->utils
+    `(("ext[234]" . ,e2fsprogs)
+      ("btrfs" . ,btrfs-progs)
+      ("jfs" . ,jfsutils)
+      ("exfat" . ,exfat-utils)
+      ("bachefs" . ,bcachefs-tools)
+      ("xfs" . ,xfsprogs)
+      ("fat" . ,dosfstools)
+      ("f2fs" . ,f2fs-tools)
+      ("zfs" . ,zfs)))
+  (and-let* ((utils
+              (find (lambda (a) (string-match (car a) type)) pattern->utils)))
+    (cdr utils)))
+
+(define (file-system-utils file-systems)
+  "Return the list of file-system utils packages for FILE-SYSTEMS"
+  (filter-map (lambda (file-system)
+                (when (file-system-utils? file-system)
+                  (file-system-type->utils (file-system-type file-system))))
+              file-systems))
+
 (define file-system-service-type
   (service-type (name 'file-systems)
                 (extensions
@@ -542,6 +575,8 @@ FILE-SYSTEM."
                                           file-system-shepherd-services)
                        (service-extension fstab-service-type
                                           file-system-fstab-entries)
+                       (service-extension profile-service-type
+                                          file-system-utils)
 
                        ;; Have 'user-processes' depend on 'file-systems'.
                        (service-extension user-processes-service-type
diff --git a/gnu/system.scm b/gnu/system.scm
index fd456c6206..d86098fbe0 100644
--- a/gnu/system.scm
+++ b/gnu/system.scm
@@ -6,6 +6,7 @@
 ;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2019 Meiyo Peng <meiyo.peng@gmail.com>
 ;;; Copyright © 2020 Danny Milosavljevic <dannym@scratchpost.org>
+;;; Copyright © 2020 Brice Waegeneire <brice@waegenei.re>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -418,6 +419,14 @@ marked as 'needed-for-boot'."
   (service file-system-service-type
            (map add-dependencies file-systems)))
 
+(define (boot-file-system-service os)
+  "Return a service adding to the system profile the file system utils
+packages for the file systems of OS that are marked as 'needed-for-boot'."
+  (let ((file-systems (filter file-system-needed-for-boot?
+                              (operating-system-file-systems os))))
+    (simple-service 'boot-file-system-utils profile-service-type
+                    (file-system-utils file-systems))))
+
 (define (mapped-device-users device file-systems)
   "Return the subset of FILE-SYSTEMS that use DEVICE."
   (let ((target (string-append "/dev/mapper/" (mapped-device-target device))))
@@ -504,13 +513,14 @@ bookkeeping."
   (define known-fs
     (map file-system-mount-point (operating-system-file-systems os)))
 
-  (let* ((mappings  (device-mapping-services os))
-         (root-fs   (root-file-system-service))
-         (other-fs  (non-boot-file-system-service os))
-         (swaps     (swap-services os))
-         (procs     (service user-processes-service-type))
-         (host-name (host-name-service (operating-system-host-name os)))
-         (entries   (operating-system-directory-base-entries os)))
+  (let* ((mappings     (device-mapping-services os))
+         (root-fs      (root-file-system-service))
+         (boot-fs      (boot-file-system-service os))
+         (non-boot-fs  (non-boot-file-system-service os))
+         (swaps        (swap-services os))
+         (procs        (service user-processes-service-type))
+         (host-name    (host-name-service (operating-system-host-name os)))
+         (entries      (operating-system-directory-base-entries os)))
     (cons* (service system-service-type entries)
            %boot-service
 
@@ -537,7 +547,7 @@ bookkeeping."
                     (operating-system-setuid-programs os))
            (service profile-service-type
                     (operating-system-packages os))
-           other-fs
+           boot-fs non-boot-fs
            (append mappings swaps
 
                    ;; Add the firmware service.
@@ -607,7 +617,7 @@ of PROVENANCE-SERVICE-TYPE to its services."
          ;; already depends on it anyway.
          kmod eudev
 
-         e2fsprogs kbd
+         kbd
 
          bash-completion
 
diff --git a/gnu/system/file-systems.scm b/gnu/system/file-systems.scm
index 3b599efa8e..9bc1687696 100644
--- a/gnu/system/file-systems.scm
+++ b/gnu/system/file-systems.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2020 Brice Waegeneire <brice@waegenei.re>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -42,6 +43,7 @@
             file-system-create-mount-point?
             file-system-dependencies
             file-system-location
+            file-system-utils?
 
             file-system-type-predicate
 
@@ -111,7 +113,9 @@
                     (default '()))                ; or <mapped-device>
   (location         file-system-location
                     (default (current-source-location))
-                    (innate)))
+                    (innate))
+  (utils?           file-system-utils?            ; Boolean
+                    (default #t)))
 
 ;; A file system label for use in the 'device' field.
 (define-record-type <file-system-label>
-- 
2.26.0

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [bug#40480] [PATCH v2] services: Add file-system utils to profile.
  2020-04-07  8:30 [bug#40480] [PATCH] services: Add file-system utils to profile Brice Waegeneire
@ 2020-04-12 19:10 ` Brice Waegeneire
  2020-04-12 19:26 ` Brice Waegeneire
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 9+ messages in thread
From: Brice Waegeneire @ 2020-04-12 19:10 UTC (permalink / raw)
  To: 40480

* gnu/services/base.scm (file-system-type->utils, file-system-utils):
New procedures.
(file-system-service-type): Extend 'profile-service-type' with
'file-system-utils'.
* gnu/system.scm (boot-file-system-service): New procedure...
(operating-system-default-essential-services): ...use it.
(%base-packages): Remove 'e2fsprogs'.
* gnu/system/file-systems.scm (file-system): Add 'utils?' field.

---

This version simplify 'file-system-type->utils' and makes it compliant with
the coding style.

 gnu/services/base.scm       | 40 +++++++++++++++++++++++++++++++++++--
 gnu/system.scm              | 28 +++++++++++++++++---------
 gnu/system/file-systems.scm |  6 +++++-
 3 files changed, 62 insertions(+), 12 deletions(-)

diff --git a/gnu/services/base.scm b/gnu/services/base.scm
index 070765ab83..9744a6517a 100644
--- a/gnu/services/base.scm
+++ b/gnu/services/base.scm
@@ -44,13 +44,20 @@
                 #:select (file-system-packages))
   #:use-module (gnu packages admin)
   #:use-module ((gnu packages linux)
-                #:select (alsa-utils crda eudev e2fsprogs fuse gpm kbd lvm2 rng-tools))
+                #:select (alsa-utils btrfs-progs crda eudev eudev/btrfs-fix
+                          e2fsprogs f2fs-tools fuse gpm kbd lvm2 rng-tools
+                          util-linux xfsprogs))
   #:use-module (gnu packages bash)
   #:use-module ((gnu packages base)
                 #:select (canonical-package coreutils glibc glibc-utf8-locales))
   #:use-module (gnu packages package-management)
   #:use-module ((gnu packages gnupg) #:select (guile-gcrypt))
-  #:use-module (gnu packages linux)
+  #:use-module ((gnu packages disk)
+                #:select (dosfstools))
+  #:use-module ((gnu packages file-systems)
+                #:select (bcachefs-tools jfsutils zfs))
+  #:use-module ((gnu packages mtools)
+                #:select (exfat-utils))
   #:use-module (gnu packages terminals)
   #:use-module ((gnu build file-systems)
                 #:select (mount-flags->bit-mask))
@@ -59,12 +66,15 @@
   #:use-module (guix modules)
   #:use-module ((guix self) #:select (make-config.scm))
   #:use-module (srfi srfi-1)
+  #:use-module (srfi srfi-2)
   #:use-module (srfi srfi-26)
   #:use-module (ice-9 match)
+  #:use-module (ice-9 regex)
   #:use-module (ice-9 format)
   #:export (fstab-service-type
             root-file-system-service
             file-system-service-type
+            file-system-utils
             swap-service
             user-processes-service-type
             host-name-service
@@ -535,6 +545,30 @@ FILE-SYSTEM."
                 (memq 'bind-mount (file-system-flags file-system))))
           file-systems))
 
+(define (file-system-type->utils type)
+  "Return a utils package for file system TYPE, #f otherwise."
+  (assoc-ref
+   `(("bachefs" . ,bcachefs-tools)
+     ("btrfs" . ,btrfs-progs)
+     ("exfat" . ,exfat-utils)
+     ("ext2" . ,e2fsprogs)
+     ("ext3" . ,e2fsprogs)
+     ("ext4" . ,e2fsprogs)
+     ("fat" . ,dosfstools)
+     ("f2fs" . ,f2fs-tools)
+     ("jfs" . ,jfsutils)
+     ("vfat" . ,dosfstools)
+     ("xfs" . ,xfsprogs)
+     ("zfs" . ,zfs))
+   type))
+
+(define (file-system-utils file-systems)
+  "Return the list of file-system utils packages for FILE-SYSTEMS"
+  (filter-map (lambda (file-system)
+                (when (file-system-utils? file-system)
+                  (file-system-type->utils (file-system-type file-system))))
+              file-systems))
+
 (define file-system-service-type
   (service-type (name 'file-systems)
                 (extensions
@@ -542,6 +576,8 @@ FILE-SYSTEM."
                                           file-system-shepherd-services)
                        (service-extension fstab-service-type
                                           file-system-fstab-entries)
+                       (service-extension profile-service-type
+                                          file-system-utils)
 
                        ;; Have 'user-processes' depend on 'file-systems'.
                        (service-extension user-processes-service-type
diff --git a/gnu/system.scm b/gnu/system.scm
index fd456c6206..d86098fbe0 100644
--- a/gnu/system.scm
+++ b/gnu/system.scm
@@ -6,6 +6,7 @@
 ;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2019 Meiyo Peng <meiyo.peng@gmail.com>
 ;;; Copyright © 2020 Danny Milosavljevic <dannym@scratchpost.org>
+;;; Copyright © 2020 Brice Waegeneire <brice@waegenei.re>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -418,6 +419,14 @@ marked as 'needed-for-boot'."
   (service file-system-service-type
            (map add-dependencies file-systems)))
 
+(define (boot-file-system-service os)
+  "Return a service adding to the system profile the file system utils
+packages for the file systems of OS that are marked as 'needed-for-boot'."
+  (let ((file-systems (filter file-system-needed-for-boot?
+                              (operating-system-file-systems os))))
+    (simple-service 'boot-file-system-utils profile-service-type
+                    (file-system-utils file-systems))))
+
 (define (mapped-device-users device file-systems)
   "Return the subset of FILE-SYSTEMS that use DEVICE."
   (let ((target (string-append "/dev/mapper/" (mapped-device-target device))))
@@ -504,13 +513,14 @@ bookkeeping."
   (define known-fs
     (map file-system-mount-point (operating-system-file-systems os)))
 
-  (let* ((mappings  (device-mapping-services os))
-         (root-fs   (root-file-system-service))
-         (other-fs  (non-boot-file-system-service os))
-         (swaps     (swap-services os))
-         (procs     (service user-processes-service-type))
-         (host-name (host-name-service (operating-system-host-name os)))
-         (entries   (operating-system-directory-base-entries os)))
+  (let* ((mappings     (device-mapping-services os))
+         (root-fs      (root-file-system-service))
+         (boot-fs      (boot-file-system-service os))
+         (non-boot-fs  (non-boot-file-system-service os))
+         (swaps        (swap-services os))
+         (procs        (service user-processes-service-type))
+         (host-name    (host-name-service (operating-system-host-name os)))
+         (entries      (operating-system-directory-base-entries os)))
     (cons* (service system-service-type entries)
            %boot-service
 
@@ -537,7 +547,7 @@ bookkeeping."
                     (operating-system-setuid-programs os))
            (service profile-service-type
                     (operating-system-packages os))
-           other-fs
+           boot-fs non-boot-fs
            (append mappings swaps
 
                    ;; Add the firmware service.
@@ -607,7 +617,7 @@ of PROVENANCE-SERVICE-TYPE to its services."
          ;; already depends on it anyway.
          kmod eudev
 
-         e2fsprogs kbd
+         kbd
 
          bash-completion
 
diff --git a/gnu/system/file-systems.scm b/gnu/system/file-systems.scm
index 3b599efa8e..9bc1687696 100644
--- a/gnu/system/file-systems.scm
+++ b/gnu/system/file-systems.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2020 Brice Waegeneire <brice@waegenei.re>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -42,6 +43,7 @@
             file-system-create-mount-point?
             file-system-dependencies
             file-system-location
+            file-system-utils?
 
             file-system-type-predicate
 
@@ -111,7 +113,9 @@
                     (default '()))                ; or <mapped-device>
   (location         file-system-location
                     (default (current-source-location))
-                    (innate)))
+                    (innate))
+  (utils?           file-system-utils?            ; Boolean
+                    (default #t)))
 
 ;; A file system label for use in the 'device' field.
 (define-record-type <file-system-label>
-- 
2.26.0

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [bug#40480] [PATCH v2] services: Add file-system utils to profile.
  2020-04-07  8:30 [bug#40480] [PATCH] services: Add file-system utils to profile Brice Waegeneire
  2020-04-12 19:10 ` [bug#40480] [PATCH v2] " Brice Waegeneire
@ 2020-04-12 19:26 ` Brice Waegeneire
  2020-04-22 18:50 ` [bug#40480] [PATCH v3] " Brice Waegeneire
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 9+ messages in thread
From: Brice Waegeneire @ 2020-04-12 19:26 UTC (permalink / raw)
  To: 40480

Hello Guix,

Looks like I forgot to describe this patch... It adds the utils package 
of
each used file-system type to the system profile. This behavior can be
disabled by setting the “file-system-utils?” field to #f.

When you have an issue with your file system it's not the time to 
discover
the absence of the utility package nor trying to install it. This patch 
fix
that.

We talked about such feature at[0].

[0]: https://issues.guix.info/issue/39332

- Brice

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [bug#40480] [PATCH v3] services: Add file-system utils to profile.
  2020-04-07  8:30 [bug#40480] [PATCH] services: Add file-system utils to profile Brice Waegeneire
  2020-04-12 19:10 ` [bug#40480] [PATCH v2] " Brice Waegeneire
  2020-04-12 19:26 ` Brice Waegeneire
@ 2020-04-22 18:50 ` Brice Waegeneire
  2020-04-22 21:26   ` Tobias Geerinckx-Rice via Guix-patches via
  2020-04-22 21:45   ` Danny Milosavljevic
  2020-04-23 12:00 ` [bug#40480] [PATCH v4] services: Add file system utilities " Brice Waegeneire
  2020-04-23 12:18 ` [bug#40480] Re: [bug#40480] [PATCH v3] services: Add file-system utils " Brice Waegeneire
  4 siblings, 2 replies; 9+ messages in thread
From: Brice Waegeneire @ 2020-04-22 18:50 UTC (permalink / raw)
  To: 40480

* gnu/services/base.scm (file-system-type->utils, file-system-utils):
New procedures.
(file-system-service-type): Extend 'profile-service-type' with
'file-system-utils'.
* gnu/system.scm (boot-file-system-service): New procedure...
(operating-system-default-essential-services): ...use it.
(%base-packages): Remove 'e2fsprogs'.
* gnu/system/file-systems.scm (file-system): Add 'utils?' field.
---

Rebased ontop of master.

 gnu/services/base.scm       | 40 +++++++++++++++++++++++++++++++++++--
 gnu/system.scm              | 28 ++++++++++++++++----------
 gnu/system/file-systems.scm |  6 +++++-
 3 files changed, 61 insertions(+), 13 deletions(-)

diff --git a/gnu/services/base.scm b/gnu/services/base.scm
index 2913478e4a..9a1d2f9efa 100644
--- a/gnu/services/base.scm
+++ b/gnu/services/base.scm
@@ -44,13 +44,20 @@
                 #:select (file-system-packages))
   #:use-module (gnu packages admin)
   #:use-module ((gnu packages linux)
-                #:select (alsa-utils crda eudev e2fsprogs fuse gpm kbd lvm2 rng-tools))
+                #:select (alsa-utils btrfs-progs crda eudev eudev/btrfs-fix
+                          e2fsprogs f2fs-tools fuse gpm kbd lvm2 rng-tools
+                          util-linux xfsprogs))
   #:use-module (gnu packages bash)
   #:use-module ((gnu packages base)
                 #:select (canonical-package coreutils glibc glibc-utf8-locales))
   #:use-module (gnu packages package-management)
   #:use-module ((gnu packages gnupg) #:select (guile-gcrypt))
-  #:use-module (gnu packages linux)
+  #:use-module ((gnu packages disk)
+                #:select (dosfstools))
+  #:use-module ((gnu packages file-systems)
+                #:select (bcachefs-tools jfsutils zfs))
+  #:use-module ((gnu packages mtools)
+                #:select (exfat-utils))
   #:use-module (gnu packages terminals)
   #:use-module ((gnu build file-systems)
                 #:select (mount-flags->bit-mask))
@@ -59,13 +66,16 @@
   #:use-module (guix modules)
   #:use-module ((guix self) #:select (make-config.scm))
   #:use-module (srfi srfi-1)
+  #:use-module (srfi srfi-2)
   #:use-module (srfi srfi-26)
   #:use-module (ice-9 match)
+  #:use-module (ice-9 regex)
   #:use-module (ice-9 format)
   #:re-export (user-processes-service-type)       ;backwards compatibility
   #:export (fstab-service-type
             root-file-system-service
             file-system-service-type
+            file-system-utils
             swap-service
             host-name-service
             console-keymap-service
@@ -413,6 +423,30 @@ FILE-SYSTEM."
                 (memq 'bind-mount (file-system-flags file-system))))
           file-systems))
 
+(define (file-system-type->utils type)
+  "Return a utils package for file system TYPE, #f otherwise."
+  (assoc-ref
+   `(("bachefs" . ,bcachefs-tools)
+     ("btrfs" . ,btrfs-progs)
+     ("exfat" . ,exfat-utils)
+     ("ext2" . ,e2fsprogs)
+     ("ext3" . ,e2fsprogs)
+     ("ext4" . ,e2fsprogs)
+     ("fat" . ,dosfstools)
+     ("f2fs" . ,f2fs-tools)
+     ("jfs" . ,jfsutils)
+     ("vfat" . ,dosfstools)
+     ("xfs" . ,xfsprogs)
+     ("zfs" . ,zfs))
+   type))
+
+(define (file-system-utils file-systems)
+  "Return the list of file-system utils packages for FILE-SYSTEMS"
+  (filter-map (lambda (file-system)
+                (when (file-system-utils? file-system)
+                  (file-system-type->utils (file-system-type file-system))))
+              file-systems))
+
 (define file-system-service-type
   (service-type (name 'file-systems)
                 (extensions
@@ -420,6 +454,8 @@ FILE-SYSTEM."
                                           file-system-shepherd-services)
                        (service-extension fstab-service-type
                                           file-system-fstab-entries)
+                       (service-extension profile-service-type
+                                          file-system-utils)
 
                        ;; Have 'user-processes' depend on 'file-systems'.
                        (service-extension user-processes-service-type
diff --git a/gnu/system.scm b/gnu/system.scm
index 3ee2c84235..efd88fa373 100644
--- a/gnu/system.scm
+++ b/gnu/system.scm
@@ -423,6 +423,14 @@ marked as 'needed-for-boot'."
   (service file-system-service-type
            (map add-dependencies file-systems)))
 
+(define (boot-file-system-service os)
+  "Return a service adding to the system profile the file system utils
+packages for the file systems of OS that are marked as 'needed-for-boot'."
+  (let ((file-systems (filter file-system-needed-for-boot?
+                              (operating-system-file-systems os))))
+    (simple-service 'boot-file-system-utils profile-service-type
+                    (file-system-utils file-systems))))
+
 (define (mapped-device-users device file-systems)
   "Return the subset of FILE-SYSTEMS that use DEVICE."
   (let ((target (string-append "/dev/mapper/" (mapped-device-target device))))
@@ -503,13 +511,14 @@ bookkeeping."
   (define known-fs
     (map file-system-mount-point (operating-system-file-systems os)))
 
-  (let* ((mappings  (device-mapping-services os))
-         (root-fs   (root-file-system-service))
-         (other-fs  (non-boot-file-system-service os))
-         (swaps     (swap-services os))
-         (procs     (service user-processes-service-type))
-         (host-name (host-name-service (operating-system-host-name os)))
-         (entries   (operating-system-directory-base-entries os)))
+  (let* ((mappings     (device-mapping-services os))
+         (root-fs      (root-file-system-service))
+         (boot-fs      (boot-file-system-service os))
+         (non-boot-fs  (non-boot-file-system-service os))
+         (swaps        (swap-services os))
+         (procs        (service user-processes-service-type))
+         (host-name    (host-name-service (operating-system-host-name os)))
+         (entries      (operating-system-directory-base-entries os)))
     (cons* (service system-service-type entries)
            %boot-service
 
@@ -536,7 +545,7 @@ bookkeeping."
                     (operating-system-setuid-programs os))
            (service profile-service-type
                     (operating-system-packages os))
-           other-fs
+           boot-fs non-boot-fs
            (append mappings swaps
 
                    ;; Add the firmware service.
@@ -629,8 +638,7 @@ of PROVENANCE-SERVICE-TYPE to its services."
 (define %base-packages
   ;; Default set of packages globally visible.  It should include anything
   ;; required for basic administrator tasks.
-  (append (list e2fsprogs)
-          %base-packages-interactive
+  (append %base-packages-interactive
           %base-packages-linux
           %base-packages-networking
           %base-packages-utils))
diff --git a/gnu/system/file-systems.scm b/gnu/system/file-systems.scm
index 3b599efa8e..9bc1687696 100644
--- a/gnu/system/file-systems.scm
+++ b/gnu/system/file-systems.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2020 Brice Waegeneire <brice@waegenei.re>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -42,6 +43,7 @@
             file-system-create-mount-point?
             file-system-dependencies
             file-system-location
+            file-system-utils?
 
             file-system-type-predicate
 
@@ -111,7 +113,9 @@
                     (default '()))                ; or <mapped-device>
   (location         file-system-location
                     (default (current-source-location))
-                    (innate)))
+                    (innate))
+  (utils?           file-system-utils?            ; Boolean
+                    (default #t)))
 
 ;; A file system label for use in the 'device' field.
 (define-record-type <file-system-label>
-- 
2.26.0

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [bug#40480] [PATCH v3] services: Add file-system utils to profile.
  2020-04-22 18:50 ` [bug#40480] [PATCH v3] " Brice Waegeneire
@ 2020-04-22 21:26   ` Tobias Geerinckx-Rice via Guix-patches via
  2020-04-22 21:45   ` Danny Milosavljevic
  1 sibling, 0 replies; 9+ messages in thread
From: Tobias Geerinckx-Rice via Guix-patches via @ 2020-04-22 21:26 UTC (permalink / raw)
  To: 40480

[-- Attachment #1: Type: text/plain, Size: 564 bytes --]

Brice,

Thanks for this and your very polite pings :-)

I'm amused that bcachefs is amongst this list so I'll test it on a 
bcachefs system and get back to you.

Both (srfi srfi-2) and/or (ice-9 regex) seem to be unused.  Did I 
miss something?

In the next revision and future patches, please write ‘utilities’ 
instead of ‘utils’, ‘operating-system’ instead of ‘os’, &c. (in 
prose and code).  In general, in Scheme, avoid all the tedious and 
unnecessary abbreviation fashionable in some other languages.

Kind regards,

T G-R

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 227 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [bug#40480] [PATCH v3] services: Add file-system utils to profile.
  2020-04-22 18:50 ` [bug#40480] [PATCH v3] " Brice Waegeneire
  2020-04-22 21:26   ` Tobias Geerinckx-Rice via Guix-patches via
@ 2020-04-22 21:45   ` Danny Milosavljevic
  1 sibling, 0 replies; 9+ messages in thread
From: Danny Milosavljevic @ 2020-04-22 21:45 UTC (permalink / raw)
  To: Brice Waegeneire; +Cc: 40480

[-- Attachment #1: Type: text/plain, Size: 271 bytes --]

On Wed, 22 Apr 2020 20:50:04 +0200
Brice Waegeneire <brice@waegenei.re> wrote:

> +(define (file-system-type->utils type)
> +  "Return a utils package for file system TYPE, #f otherwise."
> +  (assoc-ref
> +   `(("bachefs" . ,bcachefs-tools)

          ^^ Typo?

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [bug#40480] [PATCH v4] services: Add file system utilities to profile.
  2020-04-07  8:30 [bug#40480] [PATCH] services: Add file-system utils to profile Brice Waegeneire
                   ` (2 preceding siblings ...)
  2020-04-22 18:50 ` [bug#40480] [PATCH v3] " Brice Waegeneire
@ 2020-04-23 12:00 ` Brice Waegeneire
  2020-12-18 15:28   ` Christopher Baines
  2020-04-23 12:18 ` [bug#40480] Re: [bug#40480] [PATCH v3] services: Add file-system utils " Brice Waegeneire
  4 siblings, 1 reply; 9+ messages in thread
From: Brice Waegeneire @ 2020-04-23 12:00 UTC (permalink / raw)
  To: 40480

* gnu/services/base.scm (file-system-type->utilities,
file-system-utilities): New procedures.
(file-system-service-type): Extend 'profile-service-type' with
'file-system-utilities'.
* gnu/system.scm (boot-file-system-service): New procedure...
(operating-system-default-essential-services): ...use it.
(%base-packages): Remove 'e2fsprogs'.
* gnu/system/file-systems.scm (file-system): Add 'utilities?' field.
---

Fix bcachefs typo and replace 'utils' by 'utilities'. Reword the
documentation procedures to be clearer. Remove (srfi srfi-2) and (ice-9
regex) which weren't used since v1.

 gnu/services/base.scm       | 40 +++++++++++++++++++++++++++++++++++--
 gnu/system.scm              | 28 ++++++++++++++++----------
 gnu/system/file-systems.scm |  6 +++++-
 3 files changed, 61 insertions(+), 13 deletions(-)

diff --git a/gnu/services/base.scm b/gnu/services/base.scm
index 2913478e4a..9b2c8c22b9 100644
--- a/gnu/services/base.scm
+++ b/gnu/services/base.scm
@@ -44,13 +44,20 @@
                 #:select (file-system-packages))
   #:use-module (gnu packages admin)
   #:use-module ((gnu packages linux)
-                #:select (alsa-utils crda eudev e2fsprogs fuse gpm kbd lvm2 rng-tools))
+                #:select (alsa-utils btrfs-progs crda eudev eudev/btrfs-fix
+                          e2fsprogs f2fs-tools fuse gpm kbd lvm2 rng-tools
+                          util-linux xfsprogs))
   #:use-module (gnu packages bash)
   #:use-module ((gnu packages base)
                 #:select (canonical-package coreutils glibc glibc-utf8-locales))
   #:use-module (gnu packages package-management)
   #:use-module ((gnu packages gnupg) #:select (guile-gcrypt))
-  #:use-module (gnu packages linux)
+  #:use-module ((gnu packages disk)
+                #:select (dosfstools))
+  #:use-module ((gnu packages file-systems)
+                #:select (bcachefs-tools jfsutils zfs))
+  #:use-module ((gnu packages mtools)
+                #:select (exfat-utils))
   #:use-module (gnu packages terminals)
   #:use-module ((gnu build file-systems)
                 #:select (mount-flags->bit-mask))
@@ -66,6 +73,7 @@
   #:export (fstab-service-type
             root-file-system-service
             file-system-service-type
+            file-system-utilities
             swap-service
             host-name-service
             console-keymap-service
@@ -413,6 +421,32 @@ FILE-SYSTEM."
                 (memq 'bind-mount (file-system-flags file-system))))
           file-systems))
 
+(define (file-system-type->utilities type)
+  "Return a package providing the utilities for file system TYPE, #f
+otherwise."
+  (assoc-ref
+   `(("bcachefs" . ,bcachefs-tools)
+     ("btrfs" . ,btrfs-progs)
+     ("exfat" . ,exfat-utils)
+     ("ext2" . ,e2fsprogs)
+     ("ext3" . ,e2fsprogs)
+     ("ext4" . ,e2fsprogs)
+     ("fat" . ,dosfstools)
+     ("f2fs" . ,f2fs-tools)
+     ("jfs" . ,jfsutils)
+     ("vfat" . ,dosfstools)
+     ("xfs" . ,xfsprogs)
+     ("zfs" . ,zfs))
+   type))
+
+(define (file-system-utilities file-systems)
+  "Return a list of packages containing file system utilities for
+FILE-SYSTEMS."
+  (filter-map (lambda (file-system)
+                (when (file-system-utilities? file-system)
+                  (file-system-type->utilities (file-system-type file-system))))
+              file-systems))
+
 (define file-system-service-type
   (service-type (name 'file-systems)
                 (extensions
@@ -420,6 +454,8 @@ FILE-SYSTEM."
                                           file-system-shepherd-services)
                        (service-extension fstab-service-type
                                           file-system-fstab-entries)
+                       (service-extension profile-service-type
+                                          file-system-utilities)
 
                        ;; Have 'user-processes' depend on 'file-systems'.
                        (service-extension user-processes-service-type
diff --git a/gnu/system.scm b/gnu/system.scm
index 29e622872d..3b8a1c4822 100644
--- a/gnu/system.scm
+++ b/gnu/system.scm
@@ -424,6 +424,14 @@ marked as 'needed-for-boot'."
   (service file-system-service-type
            (map add-dependencies file-systems)))
 
+(define (boot-file-system-service os)
+  "Return a service which adds, to the system profile, packages providing the
+utilites for the file systems marked as 'needed-for-boot' in OS."
+  (let ((file-systems (filter file-system-needed-for-boot?
+                              (operating-system-file-systems os))))
+    (simple-service 'boot-file-system-utilities profile-service-type
+                    (file-system-utilities file-systems))))
+
 (define (mapped-device-users device file-systems)
   "Return the subset of FILE-SYSTEMS that use DEVICE."
   (let ((target (string-append "/dev/mapper/" (mapped-device-target device))))
@@ -519,13 +527,14 @@ bookkeeping."
   (define known-fs
     (map file-system-mount-point (operating-system-file-systems os)))
 
-  (let* ((mappings  (device-mapping-services os))
-         (root-fs   (root-file-system-service))
-         (other-fs  (non-boot-file-system-service os))
-         (swaps     (swap-services os))
-         (procs     (service user-processes-service-type))
-         (host-name (host-name-service (operating-system-host-name os)))
-         (entries   (operating-system-directory-base-entries os)))
+  (let* ((mappings     (device-mapping-services os))
+         (root-fs      (root-file-system-service))
+         (boot-fs      (boot-file-system-service os))
+         (non-boot-fs  (non-boot-file-system-service os))
+         (swaps        (swap-services os))
+         (procs        (service user-processes-service-type))
+         (host-name    (host-name-service (operating-system-host-name os)))
+         (entries      (operating-system-directory-base-entries os)))
     (cons* (service system-service-type entries)
            %boot-service
 
@@ -552,7 +561,7 @@ bookkeeping."
                     (operating-system-setuid-programs os))
            (service profile-service-type
                     (operating-system-packages os))
-           other-fs
+           boot-fs non-boot-fs
            (append mappings swaps
 
                    ;; Add the firmware service.
@@ -645,8 +654,7 @@ of PROVENANCE-SERVICE-TYPE to its services."
 (define %base-packages
   ;; Default set of packages globally visible.  It should include anything
   ;; required for basic administrator tasks.
-  (append (list e2fsprogs)
-          %base-packages-interactive
+  (append %base-packages-interactive
           %base-packages-linux
           %base-packages-networking
           %base-packages-utils))
diff --git a/gnu/system/file-systems.scm b/gnu/system/file-systems.scm
index 3b599efa8e..f78c3b1b8e 100644
--- a/gnu/system/file-systems.scm
+++ b/gnu/system/file-systems.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2020 Brice Waegeneire <brice@waegenei.re>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -42,6 +43,7 @@
             file-system-create-mount-point?
             file-system-dependencies
             file-system-location
+            file-system-utilities?
 
             file-system-type-predicate
 
@@ -111,7 +113,9 @@
                     (default '()))                ; or <mapped-device>
   (location         file-system-location
                     (default (current-source-location))
-                    (innate)))
+                    (innate))
+  (utilities?       file-system-utilities?        ; Boolean
+                    (default #t)))
 
 ;; A file system label for use in the 'device' field.
 (define-record-type <file-system-label>
-- 
2.26.0

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [bug#40480] Re: [bug#40480] [PATCH v3] services: Add file-system utils to profile.
  2020-04-07  8:30 [bug#40480] [PATCH] services: Add file-system utils to profile Brice Waegeneire
                   ` (3 preceding siblings ...)
  2020-04-23 12:00 ` [bug#40480] [PATCH v4] services: Add file system utilities " Brice Waegeneire
@ 2020-04-23 12:18 ` Brice Waegeneire
  4 siblings, 0 replies; 9+ messages in thread
From: Brice Waegeneire @ 2020-04-23 12:18 UTC (permalink / raw)
  To: 40480, Tobias Geerinckx-Rice

Tobias,

Thank you for taking the time to review this patch.

> I'm amused that bcachefs is amongst this list so I'll test it on a
> bcachefs system and get back to you.

I'm not sure  if it'll works, I've  just searched the packages  for all 
the
file system utilities that were available  in Guix to make the mapping. 
You
will at least need to patch your kernel to get bcachefs working 
properly.

> In the next revision and future patches, please write ‘utilities’
> instead of ‘utils’, ‘operating-system’ instead of ‘os’, &c. (in
> prose and code).  In general, in Scheme, avoid all the tedious and
> unnecessary abbreviation fashionable in some other languages.

This is still difficult for me especially for such widely used
abbreviations. I have kept OS in gnu/system.scm because it's used
extensively there and that 'boot-file-system-service' is modeled onto
'non-boot-file-system-service'. About the usage of 'utils' you may want 
to
rename %base-package-utils introduced in 93664feee1.

Cheers,
- Brice

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [bug#40480] [PATCH v4] services: Add file system utilities to profile.
  2020-04-23 12:00 ` [bug#40480] [PATCH v4] services: Add file system utilities " Brice Waegeneire
@ 2020-12-18 15:28   ` Christopher Baines
  0 siblings, 0 replies; 9+ messages in thread
From: Christopher Baines @ 2020-12-18 15:28 UTC (permalink / raw)
  To: Brice Waegeneire; +Cc: 40480

[-- Attachment #1: Type: text/plain, Size: 2889 bytes --]


Brice Waegeneire <brice@waegenei.re> writes:

> * gnu/services/base.scm (file-system-type->utilities,
> file-system-utilities): New procedures.
> (file-system-service-type): Extend 'profile-service-type' with
> 'file-system-utilities'.
> * gnu/system.scm (boot-file-system-service): New procedure...
> (operating-system-default-essential-services): ...use it.
> (%base-packages): Remove 'e2fsprogs'.
> * gnu/system/file-systems.scm (file-system): Add 'utilities?' field.
> ---
>
> Fix bcachefs typo and replace 'utils' by 'utilities'. Reword the
> documentation procedures to be clearer. Remove (srfi srfi-2) and (ice-9
> regex) which weren't used since v1.
>
>  gnu/services/base.scm       | 40 +++++++++++++++++++++++++++++++++++--
>  gnu/system.scm              | 28 ++++++++++++++++----------
>  gnu/system/file-systems.scm |  6 +++++-
>  3 files changed, 61 insertions(+), 13 deletions(-)

Thanks for the updated patch Brian, and apologies it's taken so long to
review.

I've had a quick look through, and generally it looks fine to me.

> diff --git a/gnu/system/file-systems.scm b/gnu/system/file-systems.scm
> index 3b599efa8e..f78c3b1b8e 100644
> --- a/gnu/system/file-systems.scm
> +++ b/gnu/system/file-systems.scm
> @@ -1,5 +1,6 @@
>  ;;; GNU Guix --- Functional package management for GNU
>  ;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
> +;;; Copyright © 2020 Brice Waegeneire <brice@waegenei.re>
>  ;;;
>  ;;; This file is part of GNU Guix.
>  ;;;
> @@ -42,6 +43,7 @@
>              file-system-create-mount-point?
>              file-system-dependencies
>              file-system-location
> +            file-system-utilities?
>  
>              file-system-type-predicate
>  
> @@ -111,7 +113,9 @@
>                      (default '()))                ; or <mapped-device>
>    (location         file-system-location
>                      (default (current-source-location))
> -                    (innate)))
> +                    (innate))
> +  (utilities?       file-system-utilities?        ; Boolean
> +                    (default #t)))
>  
>  ;; A file system label for use in the 'device' field.
>  (define-record-type <file-system-label>

On utilties? here, I wonder if the name for this option could be
clearer? Most of the other options can be interpreted in the context of
the filesystem itself, but this is about whether the system profile
should include utilities for that filesystem. I haven't got any
particularly good ideas though, maybe system-include-utilities?

I think utilities? is OK though, if someone wants to turn it off, then
they'll probably be able to work out how. On that, maybe the only must
before merging this is adding to the list of options in the
documentation. Is this something you're able to do?

Thanks,

Chris

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 987 bytes --]

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2020-12-18 15:46 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-07  8:30 [bug#40480] [PATCH] services: Add file-system utils to profile Brice Waegeneire
2020-04-12 19:10 ` [bug#40480] [PATCH v2] " Brice Waegeneire
2020-04-12 19:26 ` Brice Waegeneire
2020-04-22 18:50 ` [bug#40480] [PATCH v3] " Brice Waegeneire
2020-04-22 21:26   ` Tobias Geerinckx-Rice via Guix-patches via
2020-04-22 21:45   ` Danny Milosavljevic
2020-04-23 12:00 ` [bug#40480] [PATCH v4] services: Add file system utilities " Brice Waegeneire
2020-12-18 15:28   ` Christopher Baines
2020-04-23 12:18 ` [bug#40480] Re: [bug#40480] [PATCH v3] services: Add file-system utils " Brice Waegeneire

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).