* nix-pull now requires the full url to the manifest, i.e., `/MANIFEST/' is no longer automatically appended. * nix-prefetch-url works again.
		
			
				
	
	
		
			138 lines
		
	
	
	
		
			4.9 KiB
		
	
	
	
		
			XML
		
	
	
	
	
	
			
		
		
	
	
			138 lines
		
	
	
	
		
			4.9 KiB
		
	
	
	
		
			XML
		
	
	
	
	
	
| <refentry>
 | |
|   <refnamediv>
 | |
|     <refname>nix-push</refname>
 | |
|     <refpurpose>push store paths onto a network cache</refpurpose>
 | |
|   </refnamediv>
 | |
| 
 | |
|   <refsynopsisdiv>
 | |
|     <cmdsynopsis>
 | |
|       <command>nix-push</command>
 | |
|       <arg choice='plain'><replaceable>archives-put-url</replaceable></arg>
 | |
|       <arg choice='plain'><replaceable>archives-get-url</replaceable></arg>
 | |
|       <arg choice='plain'><replaceable>manifest-put-url</replaceable></arg>
 | |
|       <arg choice='plain' rep='repeat'><replaceable>paths</replaceable></arg>
 | |
|     </cmdsynopsis>
 | |
|   </refsynopsisdiv>
 | |
| 
 | |
|   <refsection>
 | |
|     <title>Description</title>
 | |
| 
 | |
|     <para>
 | |
|       The command <command>nix-push</command> builds a set of store
 | |
|       expressions (if necessary), and then packages and uploads all
 | |
|       store paths in the resulting closures to a server.  A network
 | |
|       cache thus populated can subsequently be used to speed up
 | |
|       software deployment on other machines using the
 | |
|       <command>nix-pull</command> command.
 | |
|     </para>
 | |
| 
 | |
|     <para>
 | |
|       <command>nix-push</command> performs the following actions.
 | |
|       
 | |
|       <orderedlist>
 | |
| 
 | |
|         <listitem>
 | |
|           <para>
 | |
|             The store expressions stored in
 | |
|             <replaceable>paths</replaceable> are realised (using
 | |
|             <literal>nix-store --realise</literal>).
 | |
|           </para>
 | |
|         </listitem>
 | |
| 
 | |
|         <listitem>
 | |
|           <para>
 | |
|             All paths in the closure of the store expressions stored
 | |
|             in <replaceable>paths</replaceable> are determined (using
 | |
|             <literal>nix-store --query --requisites
 | |
|             --include-successors</literal>).  It should be noted that
 | |
|             since the <option>--include-successors</option> flag is
 | |
|             used, if you specify a derivation store expression, you
 | |
|             get a combined source/binary distribution.  If you only
 | |
|             want a binary distribution, you should specify the closure
 | |
|             store expression that result from realising these (see
 | |
|             below).
 | |
|           </para>
 | |
|         </listitem>
 | |
| 
 | |
|         <listitem>
 | |
|           <para>
 | |
|             All store paths determined in the previous step are
 | |
|             packaged and compressed into a <command>bzip</command>ped
 | |
|             NAR archive (extension <filename>.nar.bz2</filename>).
 | |
|           </para>
 | |
|         </listitem>
 | |
| 
 | |
|         <listitem>
 | |
|           <para>
 | |
|             A <emphasis>manifest</emphasis> is created that contains
 | |
|             information on the store paths, their eventual URLs in the
 | |
|             cache, and cryptographic hashes of the contents of the NAR
 | |
|             archives.
 | |
|           </para>
 | |
|         </listitem>
 | |
| 
 | |
|         <listitem>
 | |
|           <para>
 | |
|             Each store path is uploaded to the remote directory
 | |
|             specified by <replaceable>archives-put-url</replaceable>.
 | |
|             HTTP PUT requests are used to do this.  However, before a
 | |
|             file <varname>x</varname> is uploaded to
 | |
|             <literal><replaceable>archives-put-url</replaceable>/<varname>x</varname></literal>,
 | |
|             <command>nix-push</command> first determines whether this
 | |
|             upload is unnecessary by issuing a HTTP HEAD request on
 | |
|             <literal><replaceable>archives-get-url</replaceable>/<varname>x</varname></literal>.
 | |
|             This allows a cache to be shared between many partially
 | |
|             overlapping <command>nix-push</command> invocations.
 | |
|             (We use two URLs because the upload URL typically
 | |
|             refers to a CGI script, while the download URL just refers
 | |
|             to a file system directory on the server.)
 | |
|           </para>
 | |
|         </listitem>
 | |
| 
 | |
|         <listitem>
 | |
|           <para>
 | |
|             The manifest is uploaded using an HTTP PUT request to
 | |
|             <replaceable>manifest-put-url</replaceable>.  The
 | |
|             corresponding URL to download the manifest can then be
 | |
|             used by <command>nix-pull</command>.
 | |
|           </para>
 | |
|         </listitem>
 | |
|         
 | |
|       </orderedlist>
 | |
|     </para>
 | |
|             
 | |
|   </refsection>
 | |
| 
 | |
|   <refsection>
 | |
|     <title>Examples</title>
 | |
| 
 | |
|     <para>
 | |
|       To upload files there typically is some CGI script on the server
 | |
|       side.  This script should be be protected with a password.  The
 | |
|       following example uploads the store paths resulting from
 | |
|       building the Nix expressions in <filename>foo.nix</filename>,
 | |
|       passing appropriate authentication information:
 | |
|     
 | |
|       <screen>
 | |
| $ nix-push \
 | |
|     http://foo@bar:server.domain/cgi-bin/upload.pl/cache \
 | |
|     http://server.domain/cache \
 | |
|     http://foo@bar:server.domain/cgi-bin/upload.pl/MANIFEST \
 | |
|     $(nix-instantiate foo.nix)</screen>
 | |
| 
 | |
|     This will push both sources and binaries (and any build-time
 | |
|     dependencies used in the build, such as compilers).
 | |
|     </para>
 | |
| 
 | |
|     <para>
 | |
|       If we just want to push binaries, not sources and build-time
 | |
|       dependencies, we can do:
 | |
|       
 | |
|       <screen>
 | |
| $ nix-push <replaceable>urls</replaceable> $(nix-instantiate $(nix-store -r foo.nix))</screen>
 | |
|     
 | |
|     </para>
 | |
| 
 | |
|   </refsection>
 | |
|     
 | |
| </refentry>
 |