From: Mathieu Othacehe <m.othacehe@gmail.com>
To: Guix Devel <guix-devel@gnu.org>
Subject: Fix installer restart.
Date: Mon, 10 Feb 2020 14:58:09 +0100 [thread overview]
Message-ID: <87sgjimtn2.fsf@gmail.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 575 bytes --]
Hello,
Here are two patches that should fix the "Installer fails when
restarted" issue.
For memory, the issue is caused by the store overlay created at
cow-store service start that I was unable to remove. Failing to remove
this overlay, caused the target device to be seen as busy by the kernel
and made further umount calls to fail[1].
I also fixed the "installation failed dialog". There are now two
options:
* "Resume": let the user resume the installation from any step (from the
installation menu)
* "Retry": restart the installer process.
WDYT?
Thanks,
Mathieu
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-installer-Remove-the-cow-store-overlay-after-system-.patch --]
[-- Type: text/x-diff, Size: 2507 bytes --]
From f02ef650526973af55cf1629de1cc48e888c714f Mon Sep 17 00:00:00 2001
From: Mathieu Othacehe <m.othacehe@gmail.com>
Date: Mon, 10 Feb 2020 14:43:05 +0100
Subject: [PATCH 1/2] installer: Remove the cow-store overlay after system
installation.
* gnu/installer/final.scm (umount-cow-store): New procedure ...,
(install-system): ... used here, to remove the store overlay so that the
target device is not seen as busy during further umount calls.
---
gnu/installer/final.scm | 25 +++++++++++++++++++++++--
1 file changed, 23 insertions(+), 2 deletions(-)
diff --git a/gnu/installer/final.scm b/gnu/installer/final.scm
index 1b85900912..b969ec3676 100644
--- a/gnu/installer/final.scm
+++ b/gnu/installer/final.scm
@@ -23,6 +23,7 @@
#:use-module (gnu installer utils)
#:use-module (gnu installer user)
#:use-module (gnu services herd)
+ #:use-module (guix build syscalls)
#:use-module (guix build utils)
#:use-module (gnu build accounts)
#:use-module ((gnu system shadow) #:prefix sys:)
@@ -96,6 +97,15 @@ USERS."
(write-passwd password (string-append etc "/passwd"))
(write-shadow shadow (string-append etc "/shadow")))
+(define (umount-cow-store)
+ "Remove the store overlay and the bind-mount on /tmp created by the
+cow-store service."
+ (let ((tmp-dir "/remove"))
+ (mkdir-p tmp-dir)
+ (mount (%store-directory) tmp-dir "" MS_MOVE)
+ (umount tmp-dir)
+ (umount "/tmp")))
+
(define* (install-system locale #:key (users '()))
"Create /etc/shadow and /etc/passwd on the installation target for USERS.
Start COW-STORE service on target directory and launch guix install command in
@@ -114,5 +124,16 @@ or #f. Return #t on success and #f on failure."
;; passwords that we've put in there.
(create-user-database users (%installer-target-dir))
- (start-service 'cow-store (list (%installer-target-dir)))
- (run-shell-command install-command #:locale locale)))
+ (dynamic-wind
+ (lambda ()
+ (start-service 'cow-store (list (%installer-target-dir))))
+ (lambda ()
+ (run-shell-command install-command #:locale locale))
+ (lambda ()
+ (stop-service 'cow-store)
+ ;; Remove the store overlay created at cow-store service start.
+ ;; Failing to do that will result in further umount calls to fail
+ ;; because the target device is seen as busy. See:
+ ;; https://lists.gnu.org/archive/html/guix-devel/2018-12/msg00161.html.
+ (umount-cow-store)
+ #f))))
--
2.25.0
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #3: 0002-installer-Fix-installer-restart-dialog.patch --]
[-- Type: text/x-diff, Size: 2340 bytes --]
From 50884fca871cfceb020d63e556c957163fdd6064 Mon Sep 17 00:00:00 2001
From: Mathieu Othacehe <m.othacehe@gmail.com>
Date: Mon, 10 Feb 2020 14:47:56 +0100
Subject: [PATCH 2/2] installer: Fix installer restart dialog.
* gnu/installer/newt/final.scm (run-install-failed-page): Propose between
installer resume or restart. Do actually resume the installation by raising an
&installer-step-abort condition if "Resume" button is pressed. Otherwise, keep
going as the installer will be restarted by login.
* gnu/installer.scm (installer-program): Remove the associated TODO comment.
---
gnu/installer.scm | 5 +++--
gnu/installer/newt/final.scm | 15 +++++++++------
2 files changed, 12 insertions(+), 8 deletions(-)
diff --git a/gnu/installer.scm b/gnu/installer.scm
index 1676a91801..806f80ec9c 100644
--- a/gnu/installer.scm
+++ b/gnu/installer.scm
@@ -389,8 +389,9 @@ selected keymap."
;; We did it! Let's reboot!
(sync)
(stop-service 'root))
- (_ ;installation failed
- ;; TODO: Honor the result of 'run-install-failed-page'.
+ (_
+ ;; The installation failed, exit so that it is restarted
+ ;; by login.
#f)))
(const #f)
(lambda (key . args)
diff --git a/gnu/installer/newt/final.scm b/gnu/installer/newt/final.scm
index 061bcd3f78..fb1b2281da 100644
--- a/gnu/installer/newt/final.scm
+++ b/gnu/installer/newt/final.scm
@@ -73,12 +73,15 @@ press the button to reboot."))
'success)
(define (run-install-failed-page)
- (choice-window
- (G_ "Installation failed")
- (G_ "Restart installer")
- (G_ "Retry system install")
- (G_ "The final system installation step failed. You can retry the \
-last step, or restart the installer.")))
+ (case (choice-window
+ (G_ "Installation failed")
+ (G_ "Resume")
+ (G_ "Restart the installer")
+ (G_ "The final system installation step failed. You can resume from \
+a specific step, or restart the installer."))
+ ((1) (raise
+ (condition
+ (&installer-step-abort))))))
(define* (run-install-shell locale
#:key (users '()))
--
2.25.0
[-- Attachment #4: Type: text/plain, Size: 74 bytes --]
[1]: https://lists.gnu.org/archive/html/guix-devel/2018-12/msg00161.html
next reply other threads:[~2020-02-10 13:58 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-02-10 13:58 Mathieu Othacehe [this message]
2020-02-10 14:38 ` bug#39217: Fix installer restart Mathieu Othacehe
2020-02-10 14:38 ` Mathieu Othacehe
2020-02-12 10:04 ` bug#39217: " Mathieu Othacehe
2020-02-10 14:38 ` bug#38447: " Mathieu Othacehe
2020-02-11 15:32 ` Ludovic Courtès
2020-02-12 10:02 ` Mathieu Othacehe
2020-02-24 16:46 ` Ludovic Courtès
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87sgjimtn2.fsf@gmail.com \
--to=m.othacehe@gmail.com \
--cc=guix-devel@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/guix.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.