diff options
author | Mathieu Othacehe <m.othacehe@gmail.com> | 2020-02-10 14:43:05 +0100 |
---|---|---|
committer | Mathieu Othacehe <m.othacehe@gmail.com> | 2020-02-12 10:49:48 +0100 |
commit | 1d02052067e04d7dd8fd1ec17557ca02a30b9bcf (patch) | |
tree | f6b5ce62ca86769160084532832d2dd0e962ba04 | |
parent | cd820bf78843aeaebf5e3cf6a4d3a43f5531d267 (diff) | |
download | patches-1d02052067e04d7dd8fd1ec17557ca02a30b9bcf.tar patches-1d02052067e04d7dd8fd1ec17557ca02a30b9bcf.tar.gz |
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.
-rw-r--r-- | gnu/installer/final.scm | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/gnu/installer/final.scm b/gnu/installer/final.scm index 1b85900912..8c2185e36f 100644 --- a/gnu/installer/final.scm +++ b/gnu/installer/final.scm @@ -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 @@ #: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 @@ USERS." (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 @@ or #f. Return #t on success and #f on failure." ;; 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)))) |