reconfigure: Fix GC root installation.
Fixes <https://bugs.gnu.org/36942>. Reported by ison <ison@airmail.cc>. guix/scripts/system/reconfigure.scm (install-bootloader-program): Switch new symlink to the canonical bootloader configuration file. Signed-off-by: Danny Milosavljevic <dannym@scratchpost.org>
This commit is contained in:
parent
d97ce20400
commit
5f04e9f962
|
@ -195,21 +195,31 @@ BOOTLOADER-PACKAGE."
|
||||||
(srfi srfi-34)
|
(srfi srfi-34)
|
||||||
(srfi srfi-35))
|
(srfi srfi-35))
|
||||||
(let* ((gc-root (string-append #$target %gc-roots-directory "/bootcfg"))
|
(let* ((gc-root (string-append #$target %gc-roots-directory "/bootcfg"))
|
||||||
(temp-gc-root (string-append gc-root ".new")))
|
(new-gc-root (string-append gc-root ".new")))
|
||||||
(switch-symlinks temp-gc-root gc-root)
|
;; #$bootcfg has dependencies.
|
||||||
(install-boot-config #$bootcfg #$bootcfg-file #$target)
|
;; 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
|
;; Preserve the previous activation's garbage collector root
|
||||||
;; until the bootloader installer has run, so that a failure in
|
;; until the bootloader installer has run, so that a failure in
|
||||||
;; the bootloader's installer script doesn't leave the user with
|
;; the bootloader's installer script doesn't leave the user with
|
||||||
;; a broken installation.
|
;; a broken installation.
|
||||||
|
(switch-symlinks new-gc-root #$bootcfg)
|
||||||
|
(install-boot-config #$bootcfg #$bootcfg-file #$target)
|
||||||
(when #$installer
|
(when #$installer
|
||||||
(catch #t
|
(catch #t
|
||||||
(lambda ()
|
(lambda ()
|
||||||
(#$installer #$bootloader-package #$device #$target))
|
(#$installer #$bootloader-package #$device #$target))
|
||||||
(lambda args
|
(lambda args
|
||||||
(delete-file temp-gc-root)
|
(delete-file new-gc-root)
|
||||||
(apply throw args))))
|
(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
|
(define* (install-bootloader eval configuration bootcfg
|
||||||
#:key
|
#:key
|
||||||
|
|
Loading…
Reference in New Issue