unofficial mirror of guix-patches@gnu.org 
 help / color / mirror / code / Atom feed
* [bug#40207] [PATCH 0/2] Add a desktop graphical installer test.
@ 2020-03-24  8:34 Mathieu Othacehe
  2020-03-24  8:36 ` [bug#40207] [PATCH 1/2] installer: tests: Use a filter to select desktop-environments Mathieu Othacehe
  0 siblings, 1 reply; 9+ messages in thread
From: Mathieu Othacehe @ 2020-03-24  8:34 UTC (permalink / raw)
  To: 40207; +Cc: Mathieu Othacehe

Hello,

Here are two patches that allow testing the graphical installation of a Guix
System with all desktop-environments included.

Thanks,

Mathieu

Mathieu Othacehe (2):
  installer: tests: Use a filter to select desktop-environments.
  tests: install: Add %test-gui-installed-desktop-os-encrypted.

 gnu/installer/tests.scm | 11 +++--
 gnu/tests/install.scm   | 90 +++++++++++++++++++++++++++++++++--------
 2 files changed, 81 insertions(+), 20 deletions(-)

-- 
2.25.1

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

* [bug#40207] [PATCH 1/2] installer: tests: Use a filter to select desktop-environments.
  2020-03-24  8:34 [bug#40207] [PATCH 0/2] Add a desktop graphical installer test Mathieu Othacehe
@ 2020-03-24  8:36 ` Mathieu Othacehe
  2020-03-24  8:36   ` [bug#40207] [PATCH 2/2] tests: install: Add %test-gui-installed-desktop-os-encrypted Mathieu Othacehe
  2020-03-24 10:31   ` [bug#40207] [PATCH 1/2] installer: tests: Use a filter to select desktop-environments Ludovic Courtès
  0 siblings, 2 replies; 9+ messages in thread
From: Mathieu Othacehe @ 2020-03-24  8:36 UTC (permalink / raw)
  To: 40207; +Cc: Mathieu Othacehe

* gnu/installer/tests.scm (choose-services): Turn desktop-environments list
into a choose-desktop-environment procedure. This way, it is easier to select
all desktop-environments or none, in the same way as choose-network-service?
and choose-network-management-tool? arguments.
---
 gnu/installer/tests.scm | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/gnu/installer/tests.scm b/gnu/installer/tests.scm
index 6f5393e3ab..07f3121083 100644
--- a/gnu/installer/tests.scm
+++ b/gnu/installer/tests.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2020 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -211,7 +212,7 @@ ROOT-PASSWORD, and USERS."
 
 (define* (choose-services port
                           #:key
-                          (desktop-environments '("GNOME"))
+                          (choose-desktop-environment? (const #f))
                           (choose-network-service?
                            (lambda (service)
                              (or (string-contains service "SSH")
@@ -220,10 +221,14 @@ ROOT-PASSWORD, and USERS."
                            (lambda (service)
                              (string-contains service "DHCP"))))
   "Converse over PORT to choose networking services."
+  (define desktop-environments '())
+
   (converse port
     ((checkbox-list (title "Desktop environment") (text _)
-                    (items _))
-     desktop-environments)
+                    (items ,services))
+     (let ((services* (filter choose-desktop-environment? services)))
+       (set! desktop-environments services*)
+       services*))
     ((checkbox-list (title "Network service") (text _)
                     (items ,services))
      (filter choose-network-service? services))
-- 
2.25.1

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

* [bug#40207] [PATCH 2/2] tests: install: Add %test-gui-installed-desktop-os-encrypted.
  2020-03-24  8:36 ` [bug#40207] [PATCH 1/2] installer: tests: Use a filter to select desktop-environments Mathieu Othacehe
@ 2020-03-24  8:36   ` Mathieu Othacehe
  2020-03-24 10:38     ` Ludovic Courtès
  2020-03-24 10:31   ` [bug#40207] [PATCH 1/2] installer: tests: Use a filter to select desktop-environments Ludovic Courtès
  1 sibling, 1 reply; 9+ messages in thread
From: Mathieu Othacehe @ 2020-03-24  8:36 UTC (permalink / raw)
  To: 40207; +Cc: Mathieu Othacehe

* gnu/tests/install.scm (run-install): Make sure that the default target-size
is used if #f is passed,
(gui-test-program): add a desktop? argument, and pass it to choose-services,
(guided-installation-test): add desktop? and target-size arguments. If
desktop? is #t, make sure that all desktop-environments are available. Pass
target-size to run-install call and desktop? to gui-test-program call.
(%test-gui-installed-desktop-os-encrypted): New variable.
---
 gnu/tests/install.scm | 90 +++++++++++++++++++++++++++++++++++--------
 1 file changed, 73 insertions(+), 17 deletions(-)

diff --git a/gnu/tests/install.scm b/gnu/tests/install.scm
index 83988873c2..9a4b36d5e7 100644
--- a/gnu/tests/install.scm
+++ b/gnu/tests/install.scm
@@ -32,15 +32,23 @@
   #:use-module (gnu packages cryptsetup)
   #:use-module (gnu packages linux)
   #:use-module (gnu packages ocr)
+  #:use-module (gnu packages openbox)
   #:use-module (gnu packages package-management)
+  #:use-module (gnu packages ratpoison)
+  #:use-module (gnu packages suckless)
   #:use-module (gnu packages virtualization)
+  #:use-module (gnu packages wm)
+  #:use-module (gnu packages xorg)
+  #:use-module (gnu services desktop)
   #:use-module (gnu services networking)
+  #:use-module (gnu services xorg)
   #:use-module (guix store)
   #:use-module (guix monads)
   #:use-module (guix packages)
   #:use-module (guix grafts)
   #:use-module (guix gexp)
   #:use-module (guix utils)
+  #:use-module (srfi srfi-1)
   #:export (%test-installed-os
             %test-installed-extlinux-os
             %test-iso-image-installer
@@ -52,7 +60,8 @@
             %test-jfs-root-os
 
             %test-gui-installed-os
-            %test-gui-installed-os-encrypted))
+            %test-gui-installed-os-encrypted
+            %test-gui-installed-desktop-os-encrypted))
 
 ;;; Commentary:
 ;;;
@@ -203,13 +212,14 @@ reboot\n")
                                                 (gnu installer tests)
                                                 (guix combinators))))
                       (installation-disk-image-file-system-type "ext4")
-                      (target-size (* 2200 MiB)))
+                      (target-size #f))
   "Run SCRIPT (a shell script following the system installation procedure) in
 OS to install TARGET-OS.  Return a VM image of TARGET-SIZE bytes containing
 the installed system.  The packages specified in PACKAGES will be appended to
 packages defined in installation-os."
 
-  (mlet* %store-monad ((_      (set-grafting #f))
+  (mlet* %store-monad ((target-size -> (or target-size (* 2200 MiB)))
+                       (_      (set-grafting #f))
                        (system (current-system))
                        (target (operating-system-derivation target-os))
 
@@ -941,7 +951,10 @@ build (current-guix) and then store a couple of full system images.")
 
 (define %root-password "foo")
 
-(define* (gui-test-program marionette #:key (encrypted? #f))
+(define* (gui-test-program marionette
+                           #:key
+                           (desktop? #f)
+                           (encrypted? #f))
   #~(let ()
       (define (screenshot file)
         (marionette-control (string-append "screendump " file)
@@ -998,7 +1011,8 @@ build (current-guix) and then store a couple of full system images.")
       (screenshot "installer-services.ppm")
 
       (marionette-eval* '(choose-services installer-socket
-                                          #:desktop-environments '()
+                                          #:choose-desktop-environment?
+                                          (const #$desktop?)
                                           #:choose-network-service?
                                           (const #f))
                         #$marionette)
@@ -1038,7 +1052,11 @@ build (current-guix) and then store a couple of full system images.")
                         (gnu installer tests)
                         (guix combinators))))
 
-(define* (guided-installation-test name #:key encrypted?)
+(define* (guided-installation-test name
+                                   #:key
+                                   (desktop? #f)
+                                   encrypted?
+                                   (target-size #f))
   (define os
     (operating-system
       (inherit %minimal-os)
@@ -1055,26 +1073,56 @@ build (current-guix) and then store a couple of full system images.")
                             (supplementary-groups
                              '("wheel" "audio" "video"))))
                      %base-user-accounts))
+      (keyboard-layout (and desktop?
+                            (keyboard-layout "us" "altgr-intl")))
       ;; The installer does not create a swap device in guided mode with
       ;; encryption support.
       (swap-devices (if encrypted? '() '("/dev/vdb2")))
-      (services (cons (service dhcp-client-service-type)
-                      (operating-system-user-services %minimal-os)))))
+
+      ;; Make sure that all the packages and services that may be used by the
+      ;; graphical installer are available.
+      (packages (append
+                 (if desktop?
+                     (list openbox awesome i3-wm i3status
+                           dmenu st ratpoison xterm)
+                     '())
+                 %base-packages))
+      (services
+       (if desktop?
+           (append
+            (list (service gnome-desktop-service-type)
+                  (service xfce-desktop-service-type)
+                  (service mate-desktop-service-type)
+                  (service enlightenment-desktop-service-type)
+                  (set-xorg-configuration
+                   (xorg-configuration
+                    (keyboard-layout keyboard-layout)))
+                  (service marionette-service-type
+                           (marionette-configuration
+                            (imported-modules '((gnu services herd)
+                                                (guix build utils)
+                                                (guix combinators))))))
+            %desktop-services)
+           (cons (service dhcp-client-service-type)
+                 (operating-system-user-services %minimal-os))))))
 
   (system-test
    (name name)
    (description
     "Install an OS using the graphical installer and test it.")
    (value
-    (mlet* %store-monad ((image   (run-install os '(this is unused)
-                                               #:script #f
-                                               #:os installation-os-for-gui-tests
-                                               #:gui-test
-                                               (lambda (marionette)
-                                                 (gui-test-program
-                                                  marionette
-                                                  #:encrypted? encrypted?))))
-                         (command (qemu-command/writable-image image)))
+    (mlet* %store-monad
+        ((image   (run-install os '(this is unused)
+                               #:script #f
+                               #:os installation-os-for-gui-tests
+                               #:target-size target-size
+                               #:gui-test
+                               (lambda (marionette)
+                                 (gui-test-program
+                                  marionette
+                                  #:desktop? desktop?
+                                  #:encrypted? encrypted?))))
+         (command (qemu-command/writable-image image)))
       (run-basic-test os command name
                       #:initialization (and encrypted? enter-luks-passphrase)
                       #:root-password %root-password)))))
@@ -1087,4 +1135,12 @@ build (current-guix) and then store a couple of full system images.")
   (guided-installation-test "gui-installed-os-encrypted"
                             #:encrypted? #t))
 
+;; Building a desktop image is very time and space consuming. Install all
+;; desktop environments in a single test to reduce the overhead.
+(define %test-gui-installed-desktop-os-encrypted
+  (guided-installation-test "gui-installed-desktop-os-encrypted"
+                            #:desktop? #t
+                            #:encrypted? #t
+                            #:target-size (* 9000 MiB)))
+
 ;;; install.scm ends here
-- 
2.25.1

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

* [bug#40207] [PATCH 1/2] installer: tests: Use a filter to select desktop-environments.
  2020-03-24  8:36 ` [bug#40207] [PATCH 1/2] installer: tests: Use a filter to select desktop-environments Mathieu Othacehe
  2020-03-24  8:36   ` [bug#40207] [PATCH 2/2] tests: install: Add %test-gui-installed-desktop-os-encrypted Mathieu Othacehe
@ 2020-03-24 10:31   ` Ludovic Courtès
  2020-03-24 10:35     ` Mathieu Othacehe
  1 sibling, 1 reply; 9+ messages in thread
From: Ludovic Courtès @ 2020-03-24 10:31 UTC (permalink / raw)
  To: Mathieu Othacehe; +Cc: 40207

Hi Mathieu,

Mathieu Othacehe <m.othacehe@gmail.com> skribis:

> * gnu/installer/tests.scm (choose-services): Turn desktop-environments list
> into a choose-desktop-environment procedure. This way, it is easier to select
> all desktop-environments or none, in the same way as choose-network-service?
> and choose-network-management-tool? arguments.

[...]

> +     (let ((services* (filter choose-desktop-environment? services)))
> +       (set! desktop-environments services*)
> +       services*))

Maybe rename ‘services*’ to ‘desktops’?

‘set!’ hurts my eyes :-) but let’s get over it.  Eventually we can
change convert to run expressions in ‘%state-monad’ or something.

Ludo’.

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

* [bug#40207] [PATCH 1/2] installer: tests: Use a filter to select desktop-environments.
  2020-03-24 10:31   ` [bug#40207] [PATCH 1/2] installer: tests: Use a filter to select desktop-environments Ludovic Courtès
@ 2020-03-24 10:35     ` Mathieu Othacehe
  0 siblings, 0 replies; 9+ messages in thread
From: Mathieu Othacehe @ 2020-03-24 10:35 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: 40207


Hey!

> Maybe rename ‘services*’ to ‘desktops’?
>
> ‘set!’ hurts my eyes :-) but let’s get over it.  Eventually we can
> change convert to run expressions in ‘%state-monad’ or something.

Heh, also feel terribly guilty when using it :)

Thanks for reviewing,

Mathieu

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

* [bug#40207] [PATCH 2/2] tests: install: Add %test-gui-installed-desktop-os-encrypted.
  2020-03-24  8:36   ` [bug#40207] [PATCH 2/2] tests: install: Add %test-gui-installed-desktop-os-encrypted Mathieu Othacehe
@ 2020-03-24 10:38     ` Ludovic Courtès
  2020-03-25 17:57       ` Mathieu Othacehe
  0 siblings, 1 reply; 9+ messages in thread
From: Ludovic Courtès @ 2020-03-24 10:38 UTC (permalink / raw)
  To: Mathieu Othacehe; +Cc: 40207

Mathieu Othacehe <m.othacehe@gmail.com> skribis:

> * gnu/tests/install.scm (run-install): Make sure that the default target-size
> is used if #f is passed,
> (gui-test-program): add a desktop? argument, and pass it to choose-services,
> (guided-installation-test): add desktop? and target-size arguments. If
> desktop? is #t, make sure that all desktop-environments are available. Pass
> target-size to run-install call and desktop? to gui-test-program call.
> (%test-gui-installed-desktop-os-encrypted): New variable.

[...]

> -                      (target-size (* 2200 MiB)))
> +                      (target-size #f))
>    "Run SCRIPT (a shell script following the system installation procedure) in
>  OS to install TARGET-OS.  Return a VM image of TARGET-SIZE bytes containing
>  the installed system.  The packages specified in PACKAGES will be appended to
>  packages defined in installation-os."
>  
> -  (mlet* %store-monad ((_      (set-grafting #f))
> +  (mlet* %store-monad ((target-size -> (or target-size (* 2200 MiB)))

[...]

> +(define* (guided-installation-test name
> +                                   #:key
> +                                   (desktop? #f)
> +                                   encrypted?
> +                                   (target-size #f))

What about giving #:target-size a default value here so that the hunk
above in unnecessary?

>    (define os
>      (operating-system
>        (inherit %minimal-os)
> @@ -1055,26 +1073,56 @@ build (current-guix) and then store a couple of full system images.")
>                              (supplementary-groups
>                               '("wheel" "audio" "video"))))
>                       %base-user-accounts))
> +      (keyboard-layout (and desktop?
> +                            (keyboard-layout "us" "altgr-intl")))
>        ;; The installer does not create a swap device in guided mode with
>        ;; encryption support.
>        (swap-devices (if encrypted? '() '("/dev/vdb2")))
> -      (services (cons (service dhcp-client-service-type)
> -                      (operating-system-user-services %minimal-os)))))
> +
> +      ;; Make sure that all the packages and services that may be used by the
> +      ;; graphical installer are available.
> +      (packages (append
> +                 (if desktop?
> +                     (list openbox awesome i3-wm i3status
> +                           dmenu st ratpoison xterm)
> +                     '())
> +                 %base-packages))
> +      (services
> +       (if desktop?
> +           (append
> +            (list (service gnome-desktop-service-type)
> +                  (service xfce-desktop-service-type)
> +                  (service mate-desktop-service-type)
> +                  (service enlightenment-desktop-service-type)
> +                  (set-xorg-configuration
> +                   (xorg-configuration
> +                    (keyboard-layout keyboard-layout)))
> +                  (service marionette-service-type
> +                           (marionette-configuration
> +                            (imported-modules '((gnu services herd)
> +                                                (guix build utils)
> +                                                (guix combinators))))))
> +            %desktop-services)
> +           (cons (service dhcp-client-service-type)
> +                 (operating-system-user-services %minimal-os))))))

What about making a separate OS definition for the desktop installation
case?  We’d move the ‘os’ variable to the top-level and add an ‘os’
parameter to ‘guided-installation-test’.

Having two separate OS definitions (one for desktop install, one for
“bare-bones” install) should be clearer than having a single definition
with conditionals.

> +;; Building a desktop image is very time and space consuming. Install all
> +;; desktop environments in a single test to reduce the overhead.
> +(define %test-gui-installed-desktop-os-encrypted
> +  (guided-installation-test "gui-installed-desktop-os-encrypted"
> +                            #:desktop? #t
> +                            #:encrypted? #t
> +                            #:target-size (* 9000 MiB)))

Wo0t!

Thanks a lot for working on it!  You can stop by on #guix if you feel
like it so we’re all less lonely during confinement.  :-)

Ludo’.

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

* [bug#40207] [PATCH 2/2] tests: install: Add %test-gui-installed-desktop-os-encrypted.
  2020-03-24 10:38     ` Ludovic Courtès
@ 2020-03-25 17:57       ` Mathieu Othacehe
  2020-03-25 21:41         ` Ludovic Courtès
  0 siblings, 1 reply; 9+ messages in thread
From: Mathieu Othacehe @ 2020-03-25 17:57 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: 40207


Hey,

> What about making a separate OS definition for the desktop installation
> case?  We’d move the ‘os’ variable to the top-level and add an ‘os’
> parameter to ‘guided-installation-test’.
>
> Having two separate OS definitions (one for desktop install, one for
> “bare-bones” install) should be clearer than having a single definition
> with conditionals.

I fixed all your remarks. But there's still an issue, the size of the
installation image is guessed badly in "run-install" for
"%test-gui-installed-desktop-os-encrypted"

--8<---------------cut here---------------start------------->8---
(image  (system-disk-image
         (operating-system-with-gc-roots
          os (list target))
         #:disk-image-size 'guess ;guess is too low.
         #:file-system-type
         installation-disk-image-file-system-type)))
--8<---------------cut here---------------end--------------->8---

applying the dirty snippet below fixes it, but you may have a better idea?

--8<---------------cut here---------------start------------->8---
--- a/gnu/build/vm.scm
+++ b/gnu/build/vm.scm
@@ -233,7 +233,7 @@ deduplicates files common to CLOSURE and the rest of PREFIX."
   "Return the estimated size of a partition that can store the store items
 given by GRAPHS, a list of file names produced by #:references-graphs."
   ;; Simply add a 25% overhead.
-  (round (* 1.25 (closure-size graphs))))
+  (round (* 1.30 (closure-size graphs))))

 (define* (initialize-partition-table device partitions
--8<---------------cut here---------------end--------------->8---

Thanks,

Mathieu

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

* [bug#40207] [PATCH 2/2] tests: install: Add %test-gui-installed-desktop-os-encrypted.
  2020-03-25 17:57       ` Mathieu Othacehe
@ 2020-03-25 21:41         ` Ludovic Courtès
  2020-03-26 10:54           ` Mathieu Othacehe
  0 siblings, 1 reply; 9+ messages in thread
From: Ludovic Courtès @ 2020-03-25 21:41 UTC (permalink / raw)
  To: Mathieu Othacehe; +Cc: 40207

Hi!

Mathieu Othacehe <m.othacehe@gmail.com> skribis:

>> What about making a separate OS definition for the desktop installation
>> case?  We’d move the ‘os’ variable to the top-level and add an ‘os’
>> parameter to ‘guided-installation-test’.
>>
>> Having two separate OS definitions (one for desktop install, one for
>> “bare-bones” install) should be clearer than having a single definition
>> with conditionals.
>
> I fixed all your remarks. But there's still an issue, the size of the
> installation image is guessed badly in "run-install" for
> "%test-gui-installed-desktop-os-encrypted"
>
> (image  (system-disk-image
>          (operating-system-with-gc-roots
>           os (list target))
>          #:disk-image-size 'guess ;guess is too low.
>          #:file-system-type
>          installation-disk-image-file-system-type)))
>
>
> applying the dirty snippet below fixes it, but you may have a better idea?
>
> --- a/gnu/build/vm.scm
> +++ b/gnu/build/vm.scm
> @@ -233,7 +233,7 @@ deduplicates files common to CLOSURE and the rest of PREFIX."
>    "Return the estimated size of a partition that can store the store items
>  given by GRAPHS, a list of file names produced by #:references-graphs."
>    ;; Simply add a 25% overhead.
> -  (round (* 1.25 (closure-size graphs))))
> +  (round (* 1.30 (closure-size graphs))))

Weird, the 25% hack had always worked fine.

I don’t have a better idea though.  Perhaps it’s better to pass an
explicit size in ‘run-install’ than to modify the 25% hack above?

Thanks,
Ludo’.

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

* [bug#40207] [PATCH 2/2] tests: install: Add %test-gui-installed-desktop-os-encrypted.
  2020-03-25 21:41         ` Ludovic Courtès
@ 2020-03-26 10:54           ` Mathieu Othacehe
  0 siblings, 0 replies; 9+ messages in thread
From: Mathieu Othacehe @ 2020-03-26 10:54 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: 40207


Hey,

> I don’t have a better idea though.  Perhaps it’s better to pass an
> explicit size in ‘run-install’ than to modify the 25% hack above?

Seems fair, fixed and pushed!

Thanks,

Mathieu

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

end of thread, other threads:[~2020-03-26 10:55 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-03-24  8:34 [bug#40207] [PATCH 0/2] Add a desktop graphical installer test Mathieu Othacehe
2020-03-24  8:36 ` [bug#40207] [PATCH 1/2] installer: tests: Use a filter to select desktop-environments Mathieu Othacehe
2020-03-24  8:36   ` [bug#40207] [PATCH 2/2] tests: install: Add %test-gui-installed-desktop-os-encrypted Mathieu Othacehe
2020-03-24 10:38     ` Ludovic Courtès
2020-03-25 17:57       ` Mathieu Othacehe
2020-03-25 21:41         ` Ludovic Courtès
2020-03-26 10:54           ` Mathieu Othacehe
2020-03-24 10:31   ` [bug#40207] [PATCH 1/2] installer: tests: Use a filter to select desktop-environments Ludovic Courtès
2020-03-24 10:35     ` Mathieu Othacehe

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).