diff options
| author | Ludovic Courtès <ludo@gnu.org> | 2020-12-10 15:12:34 +0100 |
|---|---|---|
| committer | Ludovic Courtès <ludo@gnu.org> | 2020-12-15 17:32:10 +0100 |
| commit | 6a060ff27ff68384d7c90076baa36c349fff689d (patch) | |
| tree | f7b1f9c7a52e84848fbcaa90d4dc38c25d7d65eb /gnu/system | |
| parent | dea1ee1fd740248307f74ca4cb70b94742264098 (diff) | |
store-copy: 'populate-store' can optionally deduplicate files.
Until now deduplication was performed as an additional pass after
copying files, which involve re-traversing all the files that had just
been copied.
* guix/store/deduplication.scm (copy-file/deduplicate): New procedure.
* tests/store-deduplication.scm ("copy-file/deduplicate"): New test.
* guix/build/store-copy.scm (populate-store): Add #:deduplicate?
parameter and honor it.
* tests/gexp.scm ("gexp->derivation, store copy"): Pass #:deduplicate? #f
to 'populate-store'.
* gnu/build/image.scm (initialize-root-partition): Pass #:deduplicate?
to 'populate-store'. Pass #:deduplicate? #f to 'register-closure'.
* gnu/build/vm.scm (root-partition-initializer): Likewise.
* gnu/build/install.scm (populate-single-profile-directory): Pass
#:deduplicate? #f to 'populate-store'.
* gnu/build/linux-initrd.scm (build-initrd): Likewise.
* guix/scripts/pack.scm (self-contained-tarball)[import-module?]: New
procedure.
[build]: Pass it as an argument to 'source-module-closure'.
* guix/scripts/pack.scm (squashfs-image)[build]: Wrap in
'with-extensions'.
* gnu/system/linux-initrd.scm (expression->initrd)[import-module?]: New
procedure.
[builder]: Pass it to 'source-module-closure'.
* gnu/system/install.scm (cow-store-service-type)[import-module?]: New
procedure. Pass it to 'source-module-closure'.
Diffstat (limited to 'gnu/system')
| -rw-r--r-- | gnu/system/install.scm | 12 | ||||
| -rw-r--r-- | gnu/system/linux-initrd.scm | 10 |
2 files changed, 19 insertions, 3 deletions
diff --git a/gnu/system/install.scm b/gnu/system/install.scm index a6b9e3d9523..e7534634739 100644 --- a/gnu/system/install.scm +++ b/gnu/system/install.scm | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | ;;; GNU Guix --- Functional package management for GNU | 1 | ;;; GNU Guix --- Functional package management for GNU |
| 2 | ;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org> | 2 | ;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org> |
| 3 | ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org> | 3 | ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org> |
| 4 | ;;; Copyright © 2016 Andreas Enge <andreas@enge.fr> | 4 | ;;; Copyright © 2016 Andreas Enge <andreas@enge.fr> |
| 5 | ;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com> | 5 | ;;; Copyright © 2017 Marius Bakke <mbakke@fastmail.com> |
| @@ -176,6 +176,13 @@ manual." | |||
| 176 | (shepherd-service-type | 176 | (shepherd-service-type |
| 177 | 'cow-store | 177 | 'cow-store |
| 178 | (lambda _ | 178 | (lambda _ |
| 179 | (define (import-module? module) | ||
| 180 | ;; Since we don't use deduplication support in 'populate-store', don't | ||
| 181 | ;; import (guix store deduplication) and its dependencies, which | ||
| 182 | ;; includes Guile-Gcrypt. | ||
| 183 | (and (guix-module-name? module) | ||
| 184 | (not (equal? module '(guix store deduplication))))) | ||
| 185 | |||
| 179 | (shepherd-service | 186 | (shepherd-service |
| 180 | (requirement '(root-file-system user-processes)) | 187 | (requirement '(root-file-system user-processes)) |
| 181 | (provision '(cow-store)) | 188 | (provision '(cow-store)) |
| @@ -190,7 +197,8 @@ the given target.") | |||
| 190 | ,@%default-modules)) | 197 | ,@%default-modules)) |
| 191 | (start | 198 | (start |
| 192 | (with-imported-modules (source-module-closure | 199 | (with-imported-modules (source-module-closure |
| 193 | '((gnu build install))) | 200 | '((gnu build install)) |
| 201 | #:select? import-module?) | ||
| 194 | #~(case-lambda | 202 | #~(case-lambda |
| 195 | ((target) | 203 | ((target) |
| 196 | (mount-cow-store target #$%backing-directory) | 204 | (mount-cow-store target #$%backing-directory) |
diff --git a/gnu/system/linux-initrd.scm b/gnu/system/linux-initrd.scm index 4fb1d863c9d..c6ba9bb5605 100644 --- a/gnu/system/linux-initrd.scm +++ b/gnu/system/linux-initrd.scm | |||
| @@ -76,12 +76,20 @@ the derivations referenced by EXP are automatically copied to the initrd." | |||
| 76 | (define init | 76 | (define init |
| 77 | (program-file "init" exp #:guile guile)) | 77 | (program-file "init" exp #:guile guile)) |
| 78 | 78 | ||
| 79 | (define (import-module? module) | ||
| 80 | ;; Since we don't use deduplication support in 'populate-store', don't | ||
| 81 | ;; import (guix store deduplication) and its dependencies, which includes | ||
| 82 | ;; Guile-Gcrypt. That way we can run tests with '--bootstrap'. | ||
| 83 | (and (guix-module-name? module) | ||
| 84 | (not (equal? module '(guix store deduplication))))) | ||
| 85 | |||
| 79 | (define builder | 86 | (define builder |
| 80 | ;; Do not use "guile-zlib" extension here, otherwise it would drag the | 87 | ;; Do not use "guile-zlib" extension here, otherwise it would drag the |
| 81 | ;; non-static "zlib" package to the initrd closure. It is not needed | 88 | ;; non-static "zlib" package to the initrd closure. It is not needed |
| 82 | ;; anyway because the modules are stored uncompressed within the initrd. | 89 | ;; anyway because the modules are stored uncompressed within the initrd. |
| 83 | (with-imported-modules (source-module-closure | 90 | (with-imported-modules (source-module-closure |
| 84 | '((gnu build linux-initrd))) | 91 | '((gnu build linux-initrd)) |
| 92 | #:select? import-module?) | ||
| 85 | #~(begin | 93 | #~(begin |
| 86 | (use-modules (gnu build linux-initrd)) | 94 | (use-modules (gnu build linux-initrd)) |
| 87 | 95 | ||
