Add a section on nix-serve

This commit is contained in:
Eelco Dolstra 2014-12-14 03:37:41 +01:00
parent 2142f47c06
commit 47ed06a290
3 changed files with 72 additions and 1 deletions

View file

@ -0,0 +1,70 @@
<section xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xi="http://www.w3.org/2001/XInclude"
version="5.0"
xml:id="ssec-binary-cache-substituter">
<title>Serving a Nix store via HTTP</title>
<para>You can easily share the Nix store of a machine via HTTP. This
allows other machines to fetch store paths from that machine to speed
up installations. It uses the same <emphasis>binary cache</emphasis>
mechanism that Nix usually uses to fetch pre-built binaries from
<uri>https://cache.nixos.org</uri>.</para>
<para>The daemon that handles binary cache requests via HTTP,
<command>nix-serve</command>, is not part of the Nix distribution, but
you can install it from Nixpkgs:
<screen>
$ nix-env -i nix-serve
</screen>
You can then start the server, listening for HTTP connections on
whatever port you like:
<screen>
$ nix-serve -p 8080
</screen>
To check whether it works, try the following on the client:
<screen>
$ curl http://avalon:8080/nix-cache-info
</screen>
which should print something like:
<screen>
StoreDir: /nix/store
WantMassQuery: 1
Priority: 30
</screen>
</para>
<para>On the client side, you can tell Nix to use your binary cache
using <option>--option extra-binary-caches</option>, e.g.:
<screen>
$ nix-env -i firefox --option extra-binary-caches http://avalon:8080/
</screen>
The option <option>extra-binary-caches</option> tells Nix to use this
binary cache in addition to your default caches, such as
<uri>https://cache.nixos.org</uri>. Thus, for any path in the closure
of Firefox, Nix will first check if the path is available on the
server <literal>avalon</literal> or another binary caches. If not, it
will fall back to building from source.</para>
<para>You can also tell Nix to always use your binary cache by adding
a line to the <filename linkend="sec-conf-file">nix.conf</filename>
configuration file like this:
<programlisting>
binary-caches = http://avalon:8080/ https://cache.nixos.org/
</programlisting>
</para>
</section>

View file

@ -4,7 +4,7 @@
version="5.0" version="5.0"
xml:id="ssec-copy-closure"> xml:id="ssec-copy-closure">
<title>Copying Closures</title> <title>Copying Closures Via SSH</title>
<para>The command <command <para>The command <command
linkend="sec-nix-copy-closure">nix-copy-closure</command> copies a Nix linkend="sec-nix-copy-closure">nix-copy-closure</command> copies a Nix

View file

@ -12,6 +12,7 @@ another machine already has some or all of those packages or their
dependencies. In that case there are mechanisms to quickly copy dependencies. In that case there are mechanisms to quickly copy
packages between machines.</para> packages between machines.</para>
<xi:include href="binary-cache-substituter.xml" />
<xi:include href="copy-closure.xml" /> <xi:include href="copy-closure.xml" />
<xi:include href="ssh-substituter.xml" /> <xi:include href="ssh-substituter.xml" />