~ruther/guix-local

eae5b3fff54e6f0a38d03d01187142accbed1eb8 — Ludovic Courtès 10 years ago 583323c
linux-initrd: Produce cpio archives with zeroed timestamps, etc.

* guix/cpio.scm (file->cpio-header*): New procedure.
* gnu/build/linux-initrd.scm (write-cpio-archive): Add #:file->header argument
  to 'cpio:write-cpio-archive'.
2 files changed, 15 insertions(+), 1 deletions(-)

M gnu/build/linux-initrd.scm
M guix/cpio.scm
M gnu/build/linux-initrd.scm => gnu/build/linux-initrd.scm +2 -1
@@ 68,7 68,8 @@ COMPRESS? is true, compress it using GZIP.  On success, return OUTPUT."

  (call-with-output-file output
    (lambda (port)
      (cpio:write-cpio-archive files port)))
      (cpio:write-cpio-archive files port
                               #:file->header cpio:file->cpio-header*)))

  (or (not compress?)
      (and (zero? (system* gzip "--best" output))

M guix/cpio.scm => guix/cpio.scm +13 -0
@@ 26,6 26,7 @@
  #:export (cpio-header?
            make-cpio-header
            file->cpio-header
            file->cpio-header*
            write-cpio-header
            read-cpio-header



@@ 174,6 175,18 @@ using FILE-NAME as its file name."
                      #:rdev (stat:rdev st)
                      #:name-size (string-length file-name))))

(define* (file->cpio-header* file
                             #:optional (file-name file)
                             #:key (stat lstat))
  "Similar to 'file->cpio-header', but return a header with a zeroed
modification time, inode number, UID/GID, etc.  This allows archives to be
produced in a deterministic fashion."
  (let ((st (stat file)))
    (make-cpio-header #:mode (stat:mode st)
                      #:nlink (stat:nlink st)
                      #:size (stat:size st)
                      #:name-size (string-length file-name))))

(define %trailer
  "TRAILER!!!")