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'.
This commit is contained in:
Ludovic Courtès 2015-06-24 18:02:15 +02:00
parent 583323ca1d
commit eae5b3fff5
2 changed files with 15 additions and 1 deletions

View File

@ -68,7 +68,8 @@ COMPRESS? is true, compress it using GZIP. On success, return OUTPUT."
(call-with-output-file output (call-with-output-file output
(lambda (port) (lambda (port)
(cpio:write-cpio-archive files port))) (cpio:write-cpio-archive files port
#:file->header cpio:file->cpio-header*)))
(or (not compress?) (or (not compress?)
(and (zero? (system* gzip "--best" output)) (and (zero? (system* gzip "--best" output))

View File

@ -26,6 +26,7 @@
#:export (cpio-header? #:export (cpio-header?
make-cpio-header make-cpio-header
file->cpio-header file->cpio-header
file->cpio-header*
write-cpio-header write-cpio-header
read-cpio-header read-cpio-header
@ -174,6 +175,18 @@ using FILE-NAME as its file name."
#:rdev (stat:rdev st) #:rdev (stat:rdev st)
#:name-size (string-length file-name)))) #: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 (define %trailer
"TRAILER!!!") "TRAILER!!!")