mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-12-25 22:08:16 -05:00
installer: Remove the cow-store overlay after system installation.
Fixes <https://issues.guix.info/issue/39217>. Fixes <https://issues.guix.info/issue/38447>. * 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.
This commit is contained in:
parent
cd820bf788
commit
1d02052067
1 changed files with 24 additions and 3 deletions
|
@ -1,5 +1,5 @@
|
|||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2018 Mathieu Othacehe <m.othacehe@gmail.com>
|
||||
;;; Copyright © 2018, 2020 Mathieu Othacehe <m.othacehe@gmail.com>
|
||||
;;; Copyright © 2019 Ludovic Courtès <ludo@gnu.org>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
|
@ -23,6 +23,7 @@ (define-module (gnu installer final)
|
|||
#: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 @@ (define-values (group password shadow)
|
|||
(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 @@ (define* (install-system locale #:key (users '()))
|
|||
;; 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))))
|
||||
|
|
Loading…
Reference in a new issue