Make initrd and the kernel builds repeatable.
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
use strict;
|
||||
|
||||
# Make inode number, link info and mtime consistent in order to get a consistent hash.
|
||||
#
|
||||
# Author: Alexander Kjeldaas <ak@formalprivacy.com>
|
||||
|
||||
use Archive::Cpio;
|
||||
|
||||
my $cpio = Archive::Cpio->new;
|
||||
my $IN = \*STDIN;
|
||||
my $ino = 1;
|
||||
$cpio->read_with_handler($IN, sub {
|
||||
my ($e) = @_;
|
||||
$e->{inode} = $ino;
|
||||
$ino++;
|
||||
$e->{nlink} = 1;
|
||||
$e->{mtime} = 1;
|
||||
$cpio->write_one(\*STDOUT, $e);
|
||||
});
|
||||
$cpio->write_trailer(\*STDOUT);
|
||||
@@ -12,10 +12,10 @@
|
||||
# `contents = {object = ...; symlink = /init;}' is a typical
|
||||
# argument.
|
||||
|
||||
{stdenv, perl, cpio, contents, ubootChooser, compressor}:
|
||||
{stdenv, perl, perlArchiveCpio, cpio, contents, ubootChooser, compressor}:
|
||||
|
||||
let
|
||||
inputsFun = ubootName : [perl cpio]
|
||||
inputsFun = ubootName : [perl cpio perlArchiveCpio ]
|
||||
++ stdenv.lib.optional (ubootName != null) [ (ubootChooser ubootName) ];
|
||||
makeUInitrdFun = ubootName : (ubootName != null);
|
||||
in
|
||||
@@ -35,6 +35,7 @@ stdenv.mkDerivation {
|
||||
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;
|
||||
|
||||
@@ -36,7 +36,7 @@ storePaths=$(perl $pathsFromGraph closure-*)
|
||||
|
||||
# Put the closure in a gzipped cpio archive.
|
||||
mkdir -p $out
|
||||
(cd root && find * -print0 | cpio -o -H newc --null | $compressor > $out/initrd)
|
||||
(cd root && find * -print0 | cpio -o -H newc --null | perl $cpioClean | $compressor > $out/initrd)
|
||||
|
||||
if [ -n "$makeUInitrd" ]; then
|
||||
mv $out/initrd $out/initrd.gz
|
||||
|
||||
Reference in New Issue
Block a user