git-subtree-dir: third_party/nix
git-subtree-mainline: cf8cd640c1
git-subtree-split: be66c7a6b24e3c3c6157fd37b86c7203d14acf10
		
	
			
		
			
				
	
	
		
			70 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			XML
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			XML
		
	
	
	
	
	
| <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>
 |