guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

01/01: reconfigure: Fix GC root installation.


From: guix-commits
Subject: 01/01: reconfigure: Fix GC root installation.
Date: Tue, 6 Aug 2019 16:25:19 -0400 (EDT)

dannym pushed a commit to branch master
in repository guix.

commit 5f04e9f9620aeb45940855e4f655f22db55ba6eb
Author: Jakob L. Kreuze <address@hidden>
Date:   Tue Aug 6 13:37:32 2019 -0400

    reconfigure: Fix GC root installation.
    
    Fixes <https://bugs.gnu.org/36942>.
    Reported by ison <address@hidden>.
    
    guix/scripts/system/reconfigure.scm (install-bootloader-program): Switch
    new symlink to the canonical bootloader configuration file.
    
    Signed-off-by: Danny Milosavljevic <address@hidden>
---
 guix/scripts/system/reconfigure.scm | 20 +++++++++++++++-----
 1 file changed, 15 insertions(+), 5 deletions(-)

diff --git a/guix/scripts/system/reconfigure.scm 
b/guix/scripts/system/reconfigure.scm
index dee0c24..579b7ff 100644
--- a/guix/scripts/system/reconfigure.scm
+++ b/guix/scripts/system/reconfigure.scm
@@ -195,21 +195,31 @@ BOOTLOADER-PACKAGE."
                         (srfi srfi-34)
                         (srfi srfi-35))
            (let* ((gc-root (string-append #$target %gc-roots-directory 
"/bootcfg"))
-                  (temp-gc-root (string-append gc-root ".new")))
-             (switch-symlinks temp-gc-root gc-root)
-             (install-boot-config #$bootcfg #$bootcfg-file #$target)
+                  (new-gc-root (string-append gc-root ".new")))
+             ;; #$bootcfg has dependencies.
+             ;; The bootloader magically loads the configuration from
+             ;; (string-append #$target #$bootcfg-file) (for example
+             ;; "/boot/grub/grub.cfg").
+             ;; If we didn't do something special, the garbage collector
+             ;; would remove the dependencies of #$bootcfg.
+             ;; Register #$bootcfg as a GC root.
              ;; Preserve the previous activation's garbage collector root
              ;; until the bootloader installer has run, so that a failure in
              ;; the bootloader's installer script doesn't leave the user with
              ;; a broken installation.
+             (switch-symlinks new-gc-root #$bootcfg)
+             (install-boot-config #$bootcfg #$bootcfg-file #$target)
              (when #$installer
                (catch #t
                  (lambda ()
                    (#$installer #$bootloader-package #$device #$target))
                  (lambda args
-                   (delete-file temp-gc-root)
+                   (delete-file new-gc-root)
                    (apply throw args))))
-             (rename-file temp-gc-root gc-root)))))))
+             ;; We are sure that the installation of the bootloader
+             ;; succeeded, so we can replace the old GC root by the new
+             ;; GC root now.
+             (rename-file new-gc-root gc-root)))))))
 
 (define* (install-bootloader eval configuration bootcfg
                              #:key



reply via email to

[Prev in Thread] Current Thread [Next in Thread]