mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-12-24 21:38:07 -05:00
installer: final: Stop guix-daemon before accessing store database.
As part of fixing <https://issues.guix.gnu.org/59784>, make sure /var/guix/db.sqlite is only copied while guix-daemon is stopped. * gnu/installer/final.scm (call-with-mnt-container): Add FIXME comment. (install-system): Copy DATABASE-FILE and SAVED-DATABASE only when 'guix-daemon' is stopped. Add logging lines.
This commit is contained in:
parent
a8f9579348
commit
9b6703eabe
1 changed files with 16 additions and 6 deletions
|
@ -1,6 +1,6 @@
|
|||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2018, 2020 Mathieu Othacehe <m.othacehe@gmail.com>
|
||||
;;; Copyright © 2019, 2020 Ludovic Courtès <ludo@gnu.org>
|
||||
;;; Copyright © 2019, 2020, 2022 Ludovic Courtès <ludo@gnu.org>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
|
@ -114,6 +114,8 @@ (define (call-with-mnt-container thunk)
|
|||
;; Catch SIGINT and kill the container process.
|
||||
(sigaction SIGINT
|
||||
(lambda (signum)
|
||||
;: FIXME: Use of SIGKILL prevents the dynamic-wind exit handler of
|
||||
;; THUNK to run.
|
||||
(false-if-exception
|
||||
(kill pid SIGKILL))))
|
||||
|
||||
|
@ -196,14 +198,16 @@ (define (assert-exit x)
|
|||
;; the loaded cow-store locale files will prevent umounting.
|
||||
(install-locale locale)
|
||||
|
||||
;; Save the database, so that it can be restored once the
|
||||
;; cow-store is umounted.
|
||||
;; Stop the daemon and save the database, so that it can be
|
||||
;; restored once the cow-store is umounted.
|
||||
(stop-service 'guix-daemon)
|
||||
(copy-file database-file saved-database)
|
||||
|
||||
(installer-log-line "mounting copy-on-write store")
|
||||
(mount-cow-store (%installer-target-dir) backing-directory))
|
||||
(lambda ()
|
||||
;; We need to drag the guix-daemon to the container MNT
|
||||
;; namespace, so that it can operate on the cow-store.
|
||||
(stop-service 'guix-daemon)
|
||||
(start-service 'guix-daemon (list (number->string (getpid))))
|
||||
|
||||
(setvbuf (current-output-port) 'none)
|
||||
|
@ -213,11 +217,17 @@ (define (assert-exit x)
|
|||
|
||||
(set! ret (run-command install-command #:tty? #t)))
|
||||
(lambda ()
|
||||
;; Restart guix-daemon so that it does no keep the MNT namespace
|
||||
;; Stop guix-daemon so that it does no keep the MNT namespace
|
||||
;; alive.
|
||||
(restart-service 'guix-daemon)
|
||||
(stop-service 'guix-daemon)
|
||||
|
||||
;; Restore the database and restart it.
|
||||
(installer-log-line "restoring store database from '~a'"
|
||||
saved-database)
|
||||
(copy-file saved-database database-file)
|
||||
(start-service 'guix-daemon)
|
||||
|
||||
;; Finally umount the cow-store and exit the container.
|
||||
(installer-log-line "unmounting copy-on-write store")
|
||||
(unmount-cow-store (%installer-target-dir) backing-directory)
|
||||
(assert-exit ret))))))))
|
||||
|
|
Loading…
Reference in a new issue