aboutsummaryrefslogtreecommitdiff
path: root/doc/manual/nix-push.xml
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2004-02-10 16:14:47 +0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2004-02-10 16:14:47 +0000
commit92e832348db13637875c4f529ed0aa83d3d34493 (patch)
treec00a500e1be79bf061f8ebd17e694eb4f7ee8d55 /doc/manual/nix-push.xml
parent6551b36790d47477087fc3a7f7bb779f28e42d8e (diff)
* Lots of manual stuff. Reference pages for most Nix commands.
* nix-pull now requires the full url to the manifest, i.e., `/MANIFEST/' is no longer automatically appended. * nix-prefetch-url works again.
Diffstat (limited to 'doc/manual/nix-push.xml')
-rw-r--r--doc/manual/nix-push.xml138
1 files changed, 138 insertions, 0 deletions
diff --git a/doc/manual/nix-push.xml b/doc/manual/nix-push.xml
new file mode 100644
index 000000000..be704d746
--- /dev/null
+++ b/doc/manual/nix-push.xml
@@ -0,0 +1,138 @@
+<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>