make-initrd: create reproducible initrds
To achieve reproducible results, `cpio` archive members are added in sorted order and inodes renumbered. The `cpio-clean.pl` script is made obsolete by setting mtimes via `touch` & using `cpio --reproducible`. Suggested by @dezgeg in https://github.com/NixOS/nixpkgs/pull/21273#issuecomment-268116605. Note that using `--reproducible` means that initial ramdisk creation now requires at least `cpio` version 2.12 (released in 2015).
This commit is contained in:
committed by
Joachim F
parent
49e3190efa
commit
5a8147479e
@@ -12,10 +12,10 @@
|
||||
# `contents = {object = ...; symlink = /init;}' is a typical
|
||||
# argument.
|
||||
|
||||
{ stdenv, perl, perlArchiveCpio, cpio, contents, ubootChooser, compressor, prepend }:
|
||||
{ stdenv, perl, cpio, contents, ubootChooser, compressor, prepend }:
|
||||
|
||||
let
|
||||
inputsFun = ubootName : [perl cpio perlArchiveCpio ]
|
||||
inputsFun = ubootName : [ perl cpio ]
|
||||
++ stdenv.lib.optional (ubootName != null) [ (ubootChooser ubootName) ];
|
||||
makeUInitrdFun = ubootName : (ubootName != null);
|
||||
in
|
||||
@@ -30,12 +30,11 @@ stdenv.mkDerivation {
|
||||
objects = map (x: x.object) contents;
|
||||
symlinks = map (x: x.symlink) contents;
|
||||
suffices = map (x: if x ? suffix then x.suffix else "none") contents;
|
||||
|
||||
|
||||
# For obtaining the closure of `contents'.
|
||||
exportReferencesGraph =
|
||||
map (x: [("closure-" + baseNameOf x.symlink) x.object]) contents;
|
||||
pathsFromGraph = ./paths-from-graph.pl;
|
||||
cpioClean = ./cpio-clean.pl;
|
||||
|
||||
crossAttrs = {
|
||||
nativeBuildInputs = inputsFun stdenv.cross.platform.uboot;
|
||||
|
||||
Reference in New Issue
Block a user