guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

02/05: install: Turn off deduplication for the binary tarball.


From: Ludovic Courtès
Subject: 02/05: install: Turn off deduplication for the binary tarball.
Date: Wed, 17 Jun 2015 22:36:24 +0000

civodul pushed a commit to branch master
in repository guix.

commit 08fa76131e71dc12f5d669480d74e9183008d71a
Author: Ludovic Courtès <address@hidden>
Date:   Wed Jun 17 09:49:22 2015 +0200

    install: Turn off deduplication for the binary tarball.
    
    * gnu/build/install.scm (register-closure): Add #:deduplicate? parameter and
      honor it.
      (populate-single-profile-directory): Likewise.
    * gnu/system/install.scm (self-contained-tarball): Pass #:deduplicate? #f.
      Invoke tar with --check-links.
---
 gnu/build/install.scm  |   20 ++++++++++++++------
 gnu/system/install.scm |    6 +++++-
 2 files changed, 19 insertions(+), 7 deletions(-)

diff --git a/gnu/build/install.scm b/gnu/build/install.scm
index 32fbe8e..9085e22 100644
--- a/gnu/build/install.scm
+++ b/gnu/build/install.scm
@@ -161,20 +161,27 @@ as created and modified at the Epoch."
                   (utime file 0 0 0 0))))
             (find-files directory "")))
 
-(define (register-closure store closure)
+(define* (register-closure store closure
+                           #:key (deduplicate? #t))
   "Register CLOSURE in STORE, where STORE is the directory name of the target
 store and CLOSURE is the name of a file containing a reference graph as used
-by 'guix-register'.  As a side effect, this resets timestamps on store files."
-  (let ((status (system* "guix-register" "--prefix" store
-                         closure)))
+by 'guix-register'.  As a side effect, this resets timestamps on store files
+and, if DEDUPLICATE? is true, deduplicates files common to CLOSURE and the
+rest of STORE."
+  (let ((status (apply system* "guix-register" "--prefix" store
+                       (append (if deduplicate? '() '("--no-deduplication"))
+                               (list closure)))))
     (unless (zero? status)
       (error "failed to register store items" closure))))
 
 (define* (populate-single-profile-directory directory
-                                            #:key profile closure)
+                                            #:key profile closure
+                                            deduplicate?)
   "Populate DIRECTORY with a store containing PROFILE, whose closure is given
 in the file called CLOSURE (as generated by #:references-graphs.)  DIRECTORY
 is initialized to contain a single profile under /root pointing to PROFILE.
+DEDUPLICATE? determines whether to deduplicate files in the store.
+
 This is used to create the self-contained Guix tarball."
   (define (scope file)
     (string-append directory "/" file))
@@ -190,7 +197,8 @@ This is used to create the self-contained Guix tarball."
 
   ;; Populate the store.
   (populate-store (list closure) directory)
-  (register-closure (canonicalize-path directory) closure)
+  (register-closure (canonicalize-path directory) closure
+                    #:deduplicate? deduplicate?)
 
   ;; XXX: 'guix-register' registers profiles as GC roots but the symlink
   ;; target uses $TMPDIR.  Fix that.
diff --git a/gnu/system/install.scm b/gnu/system/install.scm
index e8a36b3..6f4116e 100644
--- a/gnu/system/install.scm
+++ b/gnu/system/install.scm
@@ -63,15 +63,19 @@ under /root/.guix-profile where GUIX is installed."
           (setenv "PATH"
                   (string-append #$guix "/sbin:" #$tar "/bin:" #$xz "/bin"))
 
+          ;; Note: there is not much to gain here with deduplication and there
+          ;; is the overhead of the '.links' directory, so turn it off.
           (populate-single-profile-directory %root
                                              #:profile #$profile
-                                             #:closure "profile")
+                                             #:closure "profile"
+                                             #:deduplicate? #f)
 
           ;; Create the tarball.  Use GNU format so there's no file name
           ;; length limitation.
           (with-directory-excursion %root
             (zero? (system* "tar" "--xz" "--format=gnu"
                             "--owner=root:0" "--group=root:0"
+                            "--check-links"
                             "-cvf" #$output
                             ;; Avoid adding / and /var to the tarball,
                             ;; so that the ownership and permissions of those



reply via email to

[Prev in Thread] Current Thread [Next in Thread]