diff --git a/pkgs/build-support/kernel/make-initrd.nix b/pkgs/build-support/kernel/make-initrd.nix index a4d162dc8b51..5353ae828410 100644 --- a/pkgs/build-support/kernel/make-initrd.nix +++ b/pkgs/build-support/kernel/make-initrd.nix @@ -12,7 +12,7 @@ # `contents = {object = ...; symlink = /init;}' is a typical # argument. -{ stdenv, closureInfo, cpio, contents, compressor, prepend, ubootTools +{ stdenv, perl, cpio, contents, compressor, prepend, ubootTools , hostPlatform }: @@ -22,7 +22,7 @@ stdenv.mkDerivation rec { makeUInitrd = hostPlatform.platform.kernelTarget == "uImage"; - nativeBuildInputs = [ cpio ] + nativeBuildInputs = [ perl cpio ] ++ stdenv.lib.optional makeUInitrd ubootTools; # !!! should use XML. @@ -30,7 +30,10 @@ stdenv.mkDerivation rec { symlinks = map (x: x.symlink) contents; suffices = map (x: if x ? suffix then x.suffix else "none") contents; - closure = closureInfo { rootPaths = (map (x: x.object) contents); }; + # For obtaining the closure of `contents'. + exportReferencesGraph = + map (x: [("closure-" + baseNameOf x.symlink) x.object]) contents; + pathsFromGraph = ./paths-from-graph.pl; inherit compressor prepend; } diff --git a/pkgs/build-support/kernel/make-initrd.sh b/pkgs/build-support/kernel/make-initrd.sh index 2e64eeb81c1b..0aeaedeb3724 100644 --- a/pkgs/build-support/kernel/make-initrd.sh +++ b/pkgs/build-support/kernel/make-initrd.sh @@ -25,9 +25,13 @@ for ((n = 0; n < ${#objects[*]}; n++)); do done +# Get the paths in the closure of `object'. +storePaths=$(perl $pathsFromGraph closure-*) + + # Paths in cpio archives *must* be relative, otherwise the kernel # won't unpack 'em. -(cd root && cp -prd --parents $(cat $closure/store-paths) .) +(cd root && cp -prd --parents $storePaths .) # Put the closure in a gzipped cpio archive.