installer: Use UUIDs in the 'swap-devices' field.

Note: This change requires an updated 'guix' package that contains
Linux-swap support in (gnu build file-systems).

* gnu/installer/parted.scm (user-partitions->configuration): Use UUIDs
in the 'swap-devices' field.
* gnu/installer/newt/final.scm (run-final-page)[wait-for-clients]: New
procedure.   Use it.
* gnu/installer/tests.scm (choose-partitioning): Wait for
'starting-final-step' message and move configuration file dialog
handling to...
(conclude-installation): ... here.  Send over PORT the reply
corresponding to 'starting-final-step'.
* gnu/tests/install.scm (gui-test-program): When ENCRYPTED? is false,
invoke 'swaplabel' in the marionette.
(installation-target-os-for-gui-tests): When ENCRYPTED? is false, except
a fixed UUID.
This commit is contained in:
Ludovic Courtès 2020-10-23 11:31:56 +02:00
parent 81c3dd9cad
commit 1c6d985331
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5
4 changed files with 59 additions and 11 deletions

View file

@ -29,6 +29,7 @@ (define-module (gnu installer newt final)
#:use-module (srfi srfi-34)
#:use-module (srfi srfi-35)
#:use-module (ice-9 match)
#:use-module ((ice-9 rdelim) #:select (read-line))
#:use-module (newt)
#:export (run-final-page))
@ -107,6 +108,19 @@ (define* (run-install-shell locale
install-ok?))
(define (run-final-page result prev-steps)
(define (wait-for-clients)
(unless (null? (current-clients))
(syslog "waiting with clients before starting final step~%")
(send-to-clients '(starting-final-step))
(match (select (current-clients) '() '())
(((port _ ...) _ _)
(read-line port)))))
;; Before generating the configuration file, give clients a chance to do
;; things such as changing the swap partition label.
(wait-for-clients)
(syslog "proceeding with final step~%")
(let* ((configuration (format-configuration prev-steps result))
(user-partitions (result-step result 'partition))
(locale (result-step result 'locale))

View file

@ -1327,7 +1327,12 @@ (define (user-partitions->configuration user-partitions)
,@(initrd-configuration user-partitions)
,@(if (null? swap-devices)
'()
`((swap-devices (list ,@swap-devices))))
(let* ((uuids (map (lambda (file)
(uuid->string (read-partition-uuid file)))
swap-devices)))
`((swap-devices (list ,@(map (lambda (uuid)
`(uuid ,uuid))
uuids))))))
,@(if (null? encrypted-partitions)
'()
`((mapped-devices

View file

@ -286,8 +286,9 @@ (define* (choose-partitioning port
edit-configuration-file))
"Converse over PORT to choose the partitioning method. When ENCRYPTED? is
true, choose full-disk encryption with PASSPHRASE as the LUKS passphrase.
This conversation goes past the final dialog box that shows the configuration
file, actually starting the installation process."
This conversation stops when the user partitions have been formatted, right
before the installer generates the configuration file and shows it in a dialog
box."
(converse port
((list-selection (title "Partitioning method")
(multiple-choices? #f)
@ -330,15 +331,29 @@ (define* (choose-partitioning port
#t)
((info (title "Preparing partitions") _ ...)
(values)) ;nothing to return
((starting-final-step)
;; Do not return anything. The reply will be sent by
;; 'conclude-installation' and in the meantime the installer just waits
;; for us, giving us a chance to do things such as changing partition
;; UUIDs before it generates the configuration file.
(values))))
(define (conclude-installation port)
"Conclude the installation by checking over PORT that we get the generated
configuration file, accepting it and starting the installation, and then
receiving the final messages once the 'guix system init' process has
completed."
;; Assume the previous message received was 'starting-final-step'; here we
;; send the reply to that message, which lets the installer continue.
(write #t port)
(newline port)
(force-output port)
(converse port
((file-dialog (title "Configuration file")
(text _)
(file ,configuration-file))
(edit-configuration-file configuration-file))))
(define (conclude-installation port)
"Conclude the installation by checking over PORT that we get the final
messages once the 'guix system init' process has completed."
(converse port
(edit-configuration-file configuration-file))
((pause) ;"Press Enter to continue."
#t)
((installation-complete) ;congratulations!

View file

@ -1211,6 +1211,16 @@ (define-syntax-rule (marionette-eval* exp marionette)
#$marionette)
(screenshot "installer-run.ppm")
(unless #$encrypted?
;; At this point, user partitions are formatted and the installer is
;; waiting for us to start the final step: generating the
;; configuration file, etc. Set a fixed UUID on the swap partition
;; that matches what 'installation-target-os-for-gui-tests' expects.
(marionette-eval* '(invoke #$(file-append util-linux "/sbin/swaplabel")
"-U" "11111111-2222-3333-4444-123456789abc"
"/dev/vda2")
#$marionette))
(marionette-eval* '(conclude-installation installer-socket)
#$marionette)
@ -1257,8 +1267,12 @@ (define* (installation-target-os-for-gui-tests
'("wheel" "audio" "video"))))
%base-user-accounts))
;; The installer does not create a swap device in guided mode with
;; encryption support.
(swap-devices (if encrypted? '() '("/dev/vda2")))
;; encryption support. The installer produces a UUID for the partition;
;; this "UUID" is explicitly set in 'gui-test-program' to the value shown
;; below.
(swap-devices (if encrypted?
'()
(list (uuid "11111111-2222-3333-4444-123456789abc"))))
(services (cons (service dhcp-client-service-type)
(operating-system-user-services %minimal-os-on-vda)))))