diff --git a/lib/make-iso9660-image.sh b/lib/make-iso9660-image.sh index a1d7f62f35c1..d3f220ae4f53 100644 --- a/lib/make-iso9660-image.sh +++ b/lib/make-iso9660-image.sh @@ -52,7 +52,8 @@ for i in $storePaths; do done -# Also put a nix-pull manifest of the closures on the CD. +# Also include a manifest of the closures in a format suitable for +# nix-store --load-db. printRegistration=1 perl $pathsFromGraph closure-* > nix-path-registration echo "nix-path-registration=nix-path-registration" >> pathlist diff --git a/lib/make-squashfs.nix b/lib/make-squashfs.nix new file mode 100644 index 000000000000..1bd93b8ffaf3 --- /dev/null +++ b/lib/make-squashfs.nix @@ -0,0 +1,30 @@ +{ stdenv, squashfsTools, perl, pathsFromGraph + +, # The root directory of the squashfs filesystem is filled with the + # closures of the Nix store paths listed here. + storeContents ? [] +}: + +stdenv.mkDerivation { + name = "squashfs.img"; + + buildInputs = [perl squashfsTools]; + + # For obtaining the closure of `storeContents'. + exportReferencesGraph = + map (x: [("closure-" + baseNameOf x) x]) storeContents; + + buildCommand = + '' + # Add the closures of the top-level store objects. + storePaths=$(perl ${pathsFromGraph} closure-*) + + # Also include a manifest of the closures in a format suitable + # for nix-store --load-db. + printRegistration=1 perl ${pathsFromGraph} closure-* > nix-path-registration + + # Generate the squashfs image. + mksquashfs nix-path-registration $storePaths $out \ + -keep-as-directory -all-root + ''; +}