From 5f04e9f9620aeb45940855e4f655f22db55ba6eb Mon Sep 17 00:00:00 2001 From: "Jakob L. Kreuze" Date: Tue, 6 Aug 2019 13:37:32 -0400 Subject: reconfigure: Fix GC root installation. Fixes . Reported by ison . guix/scripts/system/reconfigure.scm (install-bootloader-program): Switch new symlink to the canonical bootloader configuration file. Signed-off-by: Danny Milosavljevic --- guix/scripts/system/reconfigure.scm | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) (limited to 'guix') diff --git a/guix/scripts/system/reconfigure.scm b/guix/scripts/system/reconfigure.scm index dee0c24bd2..579b7fffbe 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 -- cgit v1.2.3