nixpkgs/doc/builders/images/binarycache.section.md
pennae 052bb41410 doc: assign ids to many headings
without stable ids on headings we cannot generate stable links to these
headings. nrd complains about this, but the current docbook workflow
does not.

a few generated ids remain, mostly in examples and footnotes. most of
the examples are generated by nixdoc (which has since gained MD export
functions, and the MD export does generate IDs).
2023-03-27 22:39:11 +02:00

2.1 KiB

pkgs.mkBinaryCache

pkgs.mkBinaryCache is a function for creating Nix flat-file binary caches. Such a cache exists as a directory on disk, and can be used as a Nix substituter by passing --substituter file:///path/to/cache to Nix commands.

Nix packages are most commonly shared between machines using HTTP, SSH, or S3, but a flat-file binary cache can still be useful in some situations. For example, you can copy it directly to another machine, or make it available on a network file system. It can also be a convenient way to make some Nix packages available inside a container via bind-mounting.

Note that this function is meant for advanced use-cases. The more idiomatic way to work with flat-file binary caches is via the nix-copy-closure command. You may also want to consider dockerTools for your containerization needs.

Example

The following derivation will construct a flat-file binary cache containing the closure of hello.

mkBinaryCache {
  rootPaths = [hello];
}
  • rootPaths specifies a list of root derivations. The transitive closure of these derivations' outputs will be copied into the cache.

Here's an example of building and using the cache.

Build the cache on one machine, host1:

nix-build -E 'with import <nixpkgs> {}; mkBinaryCache { rootPaths = [hello]; }'
/nix/store/cc0562q828rnjqjyfj23d5q162gb424g-binary-cache

Copy the resulting directory to the other machine, host2:

scp result host2:/tmp/hello-cache

Substitute the derivation using the flat-file binary cache on the other machine, host2:

nix-build -A hello '<nixpkgs>' \
  --option require-sigs false \
  --option trusted-substituters file:///tmp/hello-cache \
  --option substituters file:///tmp/hello-cache
/nix/store/gl5a41azbpsadfkfmbilh9yk40dh5dl0-hello-2.12.1