pack: Use a fixed timestamp in Docker images.

* guix/docker.scm (build-docker-image): Add #:creation-time parameter.
Use SRFI-19 'date->string' instead of 'strftime' et al.
* guix/scripts/pack.scm (docker-image)[build]: Pass #:creation-time to
'build-docker-image'.
This commit is contained in:
Ludovic Courtès 2017-03-16 21:41:38 +01:00
parent b1edfbc37f
commit 84dda5a9c0
No known key found for this signature in database
GPG Key ID: 090B11993D9AEBB5
2 changed files with 10 additions and 5 deletions

View File

@ -24,6 +24,7 @@
#:select (delete-file-recursively #:select (delete-file-recursively
with-directory-excursion)) with-directory-excursion))
#:use-module (guix build store-copy) #:use-module (guix build store-copy)
#:use-module (srfi srfi-19)
#:use-module (rnrs bytevectors) #:use-module (rnrs bytevectors)
#:use-module (ice-9 match) #:use-module (ice-9 match)
#:export (build-docker-image)) #:export (build-docker-image))
@ -83,15 +84,18 @@
(rootfs . ((type . "layers") (rootfs . ((type . "layers")
(diff_ids . (,(layer-diff-id layer))))))) (diff_ids . (,(layer-diff-id layer)))))))
(define* (build-docker-image image path #:key closure compressor) (define* (build-docker-image image path
#:key closure compressor
(creation-time (current-time time-utc)))
"Write to IMAGE a Docker image archive from the given store PATH. The image "Write to IMAGE a Docker image archive from the given store PATH. The image
contains the closure of PATH, as specified in CLOSURE (a file produced by contains the closure of PATH, as specified in CLOSURE (a file produced by
#:references-graphs). Use COMPRESSOR, a command such as '(\"gzip\" \"-9n\"), #:references-graphs). Use COMPRESSOR, a command such as '(\"gzip\" \"-9n\"),
to compress IMAGE." to compress IMAGE. Use CREATION-TIME, a SRFI-19 time-utc object, as the
creation time in metadata."
(let ((directory "/tmp/docker-image") ;temporary working directory (let ((directory "/tmp/docker-image") ;temporary working directory
(closure (canonicalize-path closure)) (closure (canonicalize-path closure))
(id (docker-id path)) (id (docker-id path))
(time (strftime "%FT%TZ" (localtime (current-time)))) (time (date->string (time-utc->date creation-time) "~4"))
(arch (match (utsname:machine (uname)) (arch (match (utsname:machine (uname))
("x86_64" "amd64") ("x86_64" "amd64")
("i686" "386") ("i686" "386")

View File

@ -219,7 +219,7 @@ with COMPRESSOR. It can be passed to 'docker load'."
(string-append #$guile-json "/share/guile/site/" (string-append #$guile-json "/share/guile/site/"
(effective-version))) (effective-version)))
(use-modules (guix docker)) (use-modules (guix docker) (srfi srfi-19))
(setenv "PATH" (setenv "PATH"
(string-append #$tar "/bin:" (string-append #$tar "/bin:"
@ -227,7 +227,8 @@ with COMPRESSOR. It can be passed to 'docker load'."
(build-docker-image #$output #$profile (build-docker-image #$output #$profile
#:closure "profile" #:closure "profile"
#:compressor '#$(compressor-command compressor))))) #:compressor '#$(compressor-command compressor)
#:creation-time (make-time time-utc 0 1)))))
(gexp->derivation (string-append name ".tar." (gexp->derivation (string-append name ".tar."
(compressor-extension compressor)) (compressor-extension compressor))