Error installing on a Framework Laptop

OpenSubmitted by Dan Finlay.
Details
4 participants
  • Dan Finlay
  • Josselin Poiret
  • Mathieu Othacehe
  • Mathieu Othacehe
Owner
unassigned
Severity
important
Blocked by
D
D
Dan Finlay wrote on 21 Sep 17:36 +0200
(address . bug-guix@gnu.org)
9f833b4b-d65e-44e8-80b0-ca16610bd4fe@www.fastmail.com
Hi, I had a problem installing guix on a Framework laptop.

The dump was uploaded as installer-dump-11a1087c.

Are you able to help me?

- Dan
M
M
Mathieu Othacehe wrote on 22 Sep 08:50 +0200
(name . Dan Finlay)(address . dan@danfinlay.com)(address . 57983@debbugs.gnu.org)
87k05v3ntn.fsf@gnu.org
Hello Dan,

Thanks a lot for the bug report.

Toggle quote (2 lines)
> The dump was uploaded as installer-dump-11a1087c.

As you are the first one reporting an installer bug using the new dump
mechanism, a small precision:

the dump can be downloaded this way:

Toggle snippet (7 lines)
mathieu@meije ~$ wget -qO- dump.guix.gnu.org/download/installer-dump-11a1087c | tar xvz
dump.2022-09-21.05.57.10/syslog
dump.2022-09-21.05.57.10/installer-result
dump.2022-09-21.05.57.10/installer-backtrace
dump.2022-09-21.05.57.10/dmesg

It looks like the issue is:

Toggle snippet (28 lines)
Sep 21 05:45:33 localhost installer[548]: substitute: ^Msubstitute: ^[[Kupdating substitutes from 'https://ci.guix.gnu.org'... 0.0%Backtrace:
Sep 21 05:45:33 localhost installer[548]: substitute: 14 (primitive-load "/gnu/store/hsvz87ld2q231g3pqg62a0bwr4j…")
Sep 21 05:45:33 localhost installer[548]: substitute: In guix/ui.scm:
Sep 21 05:45:33 localhost installer[548]: substitute: 2263:7 13 (run-guix . _)
Sep 21 05:45:33 localhost installer[548]: substitute: 2226:10 12 (run-guix-command _ . _)
Sep 21 05:45:33 localhost installer[548]: substitute: In ice-9/boot-9.scm:
Sep 21 05:45:33 localhost installer[548]: substitute: 1752:10 11 (with-exception-handler _ _ #:unwind? _ # _)
Sep 21 05:45:33 localhost installer[548]: substitute: 1752:10 10 (with-exception-handler _ _ #:unwind? _ # _)
Sep 21 05:45:33 localhost installer[548]: substitute: In guix/scripts/substitute.scm:
Sep 21 05:45:33 localhost installer[548]: substitute: 763:18 9 (_)
Sep 21 05:45:33 localhost installer[548]: substitute: 348:26 8 (process-query #<output: file 4> _ #:cache-urls _ #:acl _)
Sep 21 05:45:33 localhost installer[548]: substitute: In guix/substitutes.scm:
Sep 21 05:45:33 localhost installer[548]: substitute: 365:27 7 (lookup-narinfos/diverse _ _ #<procedure 7f4686537580 …> …)
Sep 21 05:45:33 localhost installer[548]: substitute: 322:31 6 (lookup-narinfos "https://ci.guix.gnu.org" _ # _ # _)
Sep 21 05:45:33 localhost installer[548]: substitute: 245:26 5 (fetch-narinfos _ _ #:open-connection _ # _)
Sep 21 05:45:33 localhost installer[548]: substitute: In ice-9/boot-9.scm:
Sep 21 05:45:33 localhost installer[548]: substitute: 1685:16 4 (raise-exception _ #:continuable? _)
Sep 21 05:45:33 localhost installer[548]: substitute: 1685:16 3 (raise-exception _ #:continuable? _)
Sep 21 05:45:33 localhost installer[548]: substitute: 1780:13 2 (_ #<&compound-exception components: (#<&error> #<&orig…>)
Sep 21 05:45:33 localhost installer[548]: substitute: 1685:16 1 (raise-exception _ #:continuable? _)
Sep 21 05:45:33 localhost installer[548]: substitute: 1685:16 0 (raise-exception _ #:continuable? _)
Sep 21 05:45:33 localhost installer[548]: substitute:
Sep 21 05:45:33 localhost installer[548]: substitute: ice-9/boot-9.scm:1685:16: In procedure raise-exception:
Sep 21 05:45:33 localhost installer[548]: substitute: In procedure write_wait_fd: unimplemented
Sep 21 05:45:33 localhost installer[548]: guix system: error: `/gnu/store/hsvz87ld2q231g3pqg62a0bwr4jq5rb6-guix-command substitute' died unexpectedly
Sep 21 05:45:33 localhost installer[548]: command ("guix" "system" "init" "--fallback" "/mnt/etc/config.scm" "/mnt") exited with value 1

This is an unfixed bug reported here: https://issues.guix.gnu.org/56005

Then the final phase is retried and fails this way:

Toggle snippet (5 lines)
Sep 21 05:57:10 localhost vmunix: [ 1295.546730] /dev/mapper/cryptroot: Can't open blockdev
Sep 21 05:57:10 localhost installer[426]: mounting "/dev/mapper/cryptroot" on "/mnt/"
Sep 21 05:57:10 localhost installer[426]: crashing due to uncaught exception: system-error ("mount" "mount ~S on ~S: ~A" ("/dev/mapper/cryptroot" "/mnt/" "No such file or directory") (2))

The first issue is most likely transient and you might have better luck
just by retrying. In the meantime I'll try to understand why the final
phase retry fails.

Thanks,

Mathieu
M
M
Mathieu Othacehe wrote on 22 Sep 08:51 +0200
control message for bug #57983
(address . control@debbugs.gnu.org)
87illf3ns8.fsf@meije.mail-host-address-is-not-set
severity 57983 important
quit
J
J
Josselin Poiret wrote on 22 Sep 15:12 +0200
[PATCH 1/4] installer: Move <secret> to utils and use it for crypt passwords.
136dd86c030223934f2cadfc47c57bb2949ccfbd.1663852053.git.dev@jpoiret.xyz
* gnu/installer/user.scm (<secret>, secret?, make-secret, secret-content): Move
to utils.scm.
* gnu/installer/utils.scm (<secret>, secret?, make-secret, secret-content):
Moved from user.scm.
* gnu/installer/newt/partition.scm (prompt-luks-passwords): Make password a
<secret>.
* gnu/installer/parted.scm (luks-format-and-open): Unwrap secret.
---
gnu/installer/newt/partition.scm | 2 +-
gnu/installer/parted.scm | 4 ++--
gnu/installer/user.scm | 18 ++----------------
gnu/installer/utils.scm | 19 ++++++++++++++++++-
4 files changed, 23 insertions(+), 20 deletions(-)

Toggle diff (122 lines)
diff --git a/gnu/installer/newt/partition.scm b/gnu/installer/newt/partition.scm
index e7a97810ac..eda34e0461 100644
--- a/gnu/installer/newt/partition.scm
+++ b/gnu/installer/newt/partition.scm
@@ -188,7 +188,7 @@ (define (prompt-luks-passwords user-partitions)
                    (if (string=? password confirmation)
                        (user-partition
                         (inherit user-part)
-                        (crypt-password password))
+                        (crypt-password (make-secret password)))
                        (begin
                          (run-error-page
                           (G_ "Password mismatch, please try again.")
diff --git a/gnu/installer/parted.scm b/gnu/installer/parted.scm
index 84fdbe24fb..51ba2bebd6 100644
--- a/gnu/installer/parted.scm
+++ b/gnu/installer/parted.scm
@@ -148,7 +148,7 @@ (define-record-type* <user-partition>
                         (default #f))
   (crypt-label          user-partition-crypt-label
                         (default #f))
-  (crypt-password       user-partition-crypt-password
+  (crypt-password       user-partition-crypt-password ; <secret>
                         (default #f))
   (fs-type              user-partition-fs-type
                         (default 'ext4))
@@ -1183,7 +1183,7 @@ (define (luks-format-and-open user-partition)
   "Format and open the encrypted partition pointed by USER-PARTITION."
   (let* ((file-name (user-partition-file-name user-partition))
          (label (user-partition-crypt-label user-partition))
-         (password (user-partition-crypt-password user-partition)))
+         (password (secret-content (user-partition-crypt-password user-partition))))
     (call-with-luks-key-file
      password
      (lambda (key-file)
diff --git a/gnu/installer/user.scm b/gnu/installer/user.scm
index 224040530c..2866e4520f 100644
--- a/gnu/installer/user.scm
+++ b/gnu/installer/user.scm
@@ -17,17 +17,13 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu installer user)
+  #:use-module (gnu installer utils)
   #:use-module (guix records)
   #:use-module (guix read-print)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-9)
   #:use-module (srfi srfi-9 gnu)
-  #:export (<secret>
-            secret?
-            make-secret
-            secret-content
-
-            <user>
+  #:export (<user>
             user
             make-user
             user-name
@@ -38,16 +34,6 @@ (define-module (gnu installer user)
 
             users->configuration))
 
-(define-record-type <secret>
-  (make-secret content)
-  secret?
-  (content secret-content))
-
-(set-record-type-printer!
- <secret>
- (lambda (secret port)
-   (format port "<secret>")))
-
 (define-record-type* <user>
   user make-user
   user?
diff --git a/gnu/installer/utils.scm b/gnu/installer/utils.scm
index fb62fb8896..5fd2e2d425 100644
--- a/gnu/installer/utils.scm
+++ b/gnu/installer/utils.scm
@@ -23,6 +23,8 @@ (define-module (gnu installer utils)
   #:use-module (guix build utils)
   #:use-module (guix i18n)
   #:use-module (srfi srfi-1)
+  #:use-module (srfi srfi-9)
+  #:use-module (srfi srfi-9 gnu)
   #:use-module (srfi srfi-19)
   #:use-module (srfi srfi-34)
   #:use-module (srfi srfi-35)
@@ -33,7 +35,12 @@ (define-module (gnu installer utils)
   #:use-module (ice-9 regex)
   #:use-module (ice-9 format)
   #:use-module (ice-9 textual-ports)
-  #:export (read-lines
+  #:export (<secret>
+            secret?
+            make-secret
+            secret-content
+
+            read-lines
             read-all
             nearest-exact-integer
             read-percentage
@@ -58,6 +65,16 @@ (define-module (gnu installer utils)
 
             with-silent-shepherd))
 
+(define-record-type <secret>
+  (make-secret content)
+  secret?
+  (content secret-content))
+
+(set-record-type-printer!
+ <secret>
+ (lambda (secret port)
+   (format port "<secret>")))
+
 (define* (read-lines #:optional (port (current-input-port)))
   "Read lines from PORT and return them as a list."
   (let loop ((line (read-line port))
-- 
2.37.2
J
J
Josselin Poiret wrote on 22 Sep 15:12 +0200
[PATCH 2/4] installer: Return partitions with crypt password as step result.
04942e8af510ce57d06ca27590d3a1bf8bbfd0d2.1663852053.git.dev@jpoiret.xyz
* gnu/installer/newt/partition.scm (run-partitioning-page): Do it.
---
gnu/installer/newt/partition.scm | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)

Toggle diff (23 lines)
diff --git a/gnu/installer/newt/partition.scm b/gnu/installer/newt/partition.scm
index eda34e0461..2adb4922b4 100644
--- a/gnu/installer/newt/partition.scm
+++ b/gnu/installer/newt/partition.scm
@@ -795,13 +795,13 @@ (define (run-page devices)
          (user-partitions (run-page eligible-devices))
          (user-partitions-with-pass (prompt-luks-passwords
                                      user-partitions))
-         (form (draw-formatting-page user-partitions)))
+         (form (draw-formatting-page user-partitions-with-pass)))
     ;; Make sure the disks are not in use before proceeding to formatting.
     (free-parted eligible-devices)
     (format-user-partitions user-partitions-with-pass)
     (installer-log-line "formatted ~a user partitions"
             (length user-partitions-with-pass))
-    (installer-log-line "user-partitions: ~a" user-partitions)
+    (installer-log-line "user-partitions: ~a" user-partitions-with-pass)
 
     (destroy-form-and-pop form)
-    user-partitions))
+    user-partitions-with-pass))
-- 
2.37.2
J
J
Josselin Poiret wrote on 22 Sep 15:12 +0200
[PATCH 3/4] installer: Ensure luks devices are open when mounting partitions.
c501c5e4e558e8a1838e2591e7758319eaa1236f.1663852053.git.dev@jpoiret.xyz
* gnu/installer/parted.scm (luks-ensure-open): New procedure.
(unmount-user-partitions): Ensure luks devices are open.
---
gnu/installer/parted.scm | 16 ++++++++++++++++
1 file changed, 16 insertions(+)

Toggle diff (36 lines)
diff --git a/gnu/installer/parted.scm b/gnu/installer/parted.scm
index 51ba2bebd6..fcc936a391 100644
--- a/gnu/installer/parted.scm
+++ b/gnu/installer/parted.scm
@@ -1194,6 +1194,20 @@ (define (luks-format-and-open user-partition)
        ((run-command-in-installer) "cryptsetup" "open" "--type" "luks"
         "--key-file" key-file file-name label)))))
 
+(define (luks-ensure-open user-partition)
+  "Ensure partition pointed by USER-PARTITION is opened."
+  (unless (file-exists? (user-partition-upper-file-name user-partition))
+    (let* ((file-name (user-partition-file-name user-partition))
+           (label (user-partition-crypt-label user-partition))
+           (password (secret-content (user-partition-crypt-password user-partition))))
+      (call-with-luks-key-file
+       password
+       (lambda (key-file)
+         (installer-log-line "opening LUKS entry ~s at ~s"
+                             label file-name)
+         ((run-command-in-installer) "cryptsetup" "open" "--type" "luks"
+          "--key-file" key-file file-name label))))))
+
 (define (luks-close user-partition)
   "Close the encrypted partition pointed by USER-PARTITION."
   (let ((label (user-partition-crypt-label user-partition)))
@@ -1278,6 +1292,8 @@ (define (mount-user-partitions user-partitions)
                         (user-fs-type->mount-type fs-type))
                        (file-name
                         (user-partition-upper-file-name user-partition)))
+                  (when crypt-label
+                    (luks-ensure-open user-partition))
                   (mkdir-p target)
                   (installer-log-line "mounting ~s on ~s" file-name target)
                   (mount file-name target mount-type)))
-- 
2.37.2
J
J
Josselin Poiret wrote on 22 Sep 15:12 +0200
[PATCH 4/4] installer: Exit console-services page with abort-to-prompt.
c3a9d3f172a4ff9ef70911e36a67618722ebbcc5.1663852053.git.dev@jpoiret.xyz
* gnu/installer/newt/services.scm (run-console-services-cbt-page): Do it.
---
gnu/installer/newt/services.scm | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)

Toggle diff (19 lines)
diff --git a/gnu/installer/newt/services.scm b/gnu/installer/newt/services.scm
index 9951ad2212..b22024602c 100644
--- a/gnu/installer/newt/services.scm
+++ b/gnu/installer/newt/services.scm
@@ -99,10 +99,8 @@ (define (run-console-services-cbt-page)
       #:item->text (compose G_ system-service-name)
       #:checkbox-tree-height 5
       #:exit-button-callback-procedure
-      (lambda ()
-        (raise
-          (condition
-            (&installer-step-abort)))))))
+      (lambda _
+        (abort-to-prompt 'installer-step 'abort)))))
 
 (define (run-network-management-page)
   "Run a page to select among several network management methods."
-- 
2.37.2
J
J
Josselin Poiret wrote on 22 Sep 15:12 +0200
[PATCH 0/4] Fix luks devices not being re-opened when restarting the final step
cover.1663852053.git.dev@jpoiret.xyz
Hi both of you,

Here is a fix for the second issue, as well as a little bonus commit for a
mistake that made it past my refactoring.

Best,

Josselin Poiret (4):
installer: Move <secret> to utils and use it for crypt passwords.
installer: Return partitions with crypt password as step result.
installer: Ensure luks devices are open when mounting partitions.
installer: Exit console-services page with abort-to-prompt.

gnu/installer/newt/partition.scm | 8 ++++----
gnu/installer/newt/services.scm | 6 ++----
gnu/installer/parted.scm | 20 ++++++++++++++++++--
gnu/installer/user.scm | 18 ++----------------
gnu/installer/utils.scm | 19 ++++++++++++++++++-
5 files changed, 44 insertions(+), 27 deletions(-)


base-commit: 344405475aebd6bcad60f29fc4ac0b7122a78fd0
--
2.37.2
M
M
Mathieu Othacehe wrote on 22 Sep 16:34 +0200
Re: bug#57983: Error installing on a Framework Laptop
(name . Josselin Poiret)(address . dev@jpoiret.xyz)
87k05v1nqt.fsf_-_@gnu.org
Hey,

Toggle quote (3 lines)
> Here is a fix for the second issue, as well as a little bonus commit for a
> mistake that made it past my refactoring.

That's awesome. I tested by running an install with "automatic encrypted
partitioning" then killing the "guix init" process. The installer is
able to resume the final step without any issue.

I added a "Partially-Fixes" tag as this patchset fixes one of the two
issues Dan reported, and pushed. This issue is now blocked by

Thanks,

Mathieu
M
M
Mathieu Othacehe wrote on 22 Sep 16:35 +0200
control message for bug #57983
(address . control@debbugs.gnu.org)
87illf1np4.fsf@meije.mail-host-address-is-not-set
block 57983 by 56005
quit
D
D
Dan Finlay wrote on 22 Sep 19:17 +0200
Re: bug#57983: Error installing on a Framework Laptop
(name . Mathieu Othacehe)(address . othacehe@gnu.org)(address . 57983@debbugs.gnu.org)
08093e61-88cd-45bb-8eb1-0de8c40a5b80@www.fastmail.com
Cool, I'll retry for now!

- Dan

On Wed, Sep 21, 2022, at 11:50 PM, Mathieu Othacehe wrote:
Toggle quote (97 lines)
> Hello Dan,
>
> Thanks a lot for the bug report.
>
>> The dump was uploaded as installer-dump-11a1087c.
>
> As you are the first one reporting an installer bug using the new dump
> mechanism, a small precision:
>
> the dump can be downloaded this way:
>
> --8<---------------cut here---------------start------------->8---
> mathieu@meije ~$ wget -qO-
> dump.guix.gnu.org/download/installer-dump-11a1087c | tar xvz
> dump.2022-09-21.05.57.10/syslog
> dump.2022-09-21.05.57.10/installer-result
> dump.2022-09-21.05.57.10/installer-backtrace
> dump.2022-09-21.05.57.10/dmesg
> --8<---------------cut here---------------end--------------->8---
>
> It looks like the issue is:
>
> --8<---------------cut here---------------start------------->8---
> Sep 21 05:45:33 localhost installer[548]: substitute: ^Msubstitute:
> ^[[Kupdating substitutes from 'https://ci.guix.gnu.org'...
> 0.0%Backtrace:
> Sep 21 05:45:33 localhost installer[548]: substitute: 14
> (primitive-load "/gnu/store/hsvz87ld2q231g3pqg62a0bwr4j…")
> Sep 21 05:45:33 localhost installer[548]: substitute: In guix/ui.scm:
> Sep 21 05:45:33 localhost installer[548]: substitute: 2263:7 13
> (run-guix . _)
> Sep 21 05:45:33 localhost installer[548]: substitute: 2226:10 12
> (run-guix-command _ . _)
> Sep 21 05:45:33 localhost installer[548]: substitute: In
> ice-9/boot-9.scm:
> Sep 21 05:45:33 localhost installer[548]: substitute: 1752:10 11
> (with-exception-handler _ _ #:unwind? _ # _)
> Sep 21 05:45:33 localhost installer[548]: substitute: 1752:10 10
> (with-exception-handler _ _ #:unwind? _ # _)
> Sep 21 05:45:33 localhost installer[548]: substitute: In
> guix/scripts/substitute.scm:
> Sep 21 05:45:33 localhost installer[548]: substitute: 763:18 9 (_)
> Sep 21 05:45:33 localhost installer[548]: substitute: 348:26 8
> (process-query #<output: file 4> _ #:cache-urls _ #:acl _)
> Sep 21 05:45:33 localhost installer[548]: substitute: In
> guix/substitutes.scm:
> Sep 21 05:45:33 localhost installer[548]: substitute: 365:27 7
> (lookup-narinfos/diverse _ _ #<procedure 7f4686537580 …> …)
> Sep 21 05:45:33 localhost installer[548]: substitute: 322:31 6
> (lookup-narinfos "https://ci.guix.gnu.org" _ # _ # _)
> Sep 21 05:45:33 localhost installer[548]: substitute: 245:26 5
> (fetch-narinfos _ _ #:open-connection _ # _)
> Sep 21 05:45:33 localhost installer[548]: substitute: In
> ice-9/boot-9.scm:
> Sep 21 05:45:33 localhost installer[548]: substitute: 1685:16 4
> (raise-exception _ #:continuable? _)
> Sep 21 05:45:33 localhost installer[548]: substitute: 1685:16 3
> (raise-exception _ #:continuable? _)
> Sep 21 05:45:33 localhost installer[548]: substitute: 1780:13 2 (_
> #<&compound-exception components: (#<&error> #<&orig…>)
> Sep 21 05:45:33 localhost installer[548]: substitute: 1685:16 1
> (raise-exception _ #:continuable? _)
> Sep 21 05:45:33 localhost installer[548]: substitute: 1685:16 0
> (raise-exception _ #:continuable? _)
> Sep 21 05:45:33 localhost installer[548]: substitute:
> Sep 21 05:45:33 localhost installer[548]: substitute:
> ice-9/boot-9.scm:1685:16: In procedure raise-exception:
> Sep 21 05:45:33 localhost installer[548]: substitute: In procedure
> write_wait_fd: unimplemented
> Sep 21 05:45:33 localhost installer[548]: guix system: error:
> `/gnu/store/hsvz87ld2q231g3pqg62a0bwr4jq5rb6-guix-command substitute'
> died unexpectedly
> Sep 21 05:45:33 localhost installer[548]: command ("guix" "system"
> "init" "--fallback" "/mnt/etc/config.scm" "/mnt") exited with value 1
> --8<---------------cut here---------------end--------------->8---
>
> This is an unfixed bug reported here: https://issues.guix.gnu.org/56005
>
> Then the final phase is retried and fails this way:
>
> --8<---------------cut here---------------start------------->8---
> Sep 21 05:57:10 localhost vmunix: [ 1295.546730] /dev/mapper/cryptroot:
> Can't open blockdev
> Sep 21 05:57:10 localhost installer[426]: mounting
> "/dev/mapper/cryptroot" on "/mnt/"
> Sep 21 05:57:10 localhost installer[426]: crashing due to uncaught
> exception: system-error ("mount" "mount ~S on ~S: ~A"
> ("/dev/mapper/cryptroot" "/mnt/" "No such file or directory") (2))
> --8<---------------cut here---------------end--------------->8---
>
> The first issue is most likely transient and you might have better luck
> just by retrying. In the meantime I'll try to understand why the final
> phase retry fails.
>
> Thanks,
>
> Mathieu
?