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:
parent
583323ca1d
commit
eae5b3fff5
|
@ -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))
|
||||||
|
|
|
@ -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!!!")
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue