diff options
Diffstat (limited to 'nixos/lib/make-squashfs.nix')
-rw-r--r-- | nixos/lib/make-squashfs.nix | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/nixos/lib/make-squashfs.nix b/nixos/lib/make-squashfs.nix new file mode 100644 index 000000000000..3b640334e17a --- /dev/null +++ b/nixos/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 + ''; +} |