* Documented some of the sharing mechanisms.
This commit is contained in:
		
							parent
							
								
									2369b122d1
								
							
						
					
					
						commit
						7509d70f9d
					
				
					 7 changed files with 144 additions and 5 deletions
				
			
		| 
						 | 
					@ -16,12 +16,14 @@ man1_MANS = nix-env.1 nix-build.1 nix-store.1 nix-instantiate.1 \
 | 
				
			||||||
 nix-prefetch-url.1 nix-channel.1 \
 | 
					 nix-prefetch-url.1 nix-channel.1 \
 | 
				
			||||||
 nix-install-package.1 nix-hash.1 nix-copy-closure.1
 | 
					 nix-install-package.1 nix-hash.1 nix-copy-closure.1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					man8_MANS = nix-worker.8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
FIGURES = figures/user-environments.png
 | 
					FIGURES = figures/user-environments.png
 | 
				
			||||||
 | 
					
 | 
				
			||||||
MANUAL_SRCS = manual.xml introduction.xml installation.xml \
 | 
					MANUAL_SRCS = manual.xml introduction.xml installation.xml \
 | 
				
			||||||
 package-management.xml writing-nix-expressions.xml builtins.xml \
 | 
					 package-management.xml writing-nix-expressions.xml builtins.xml \
 | 
				
			||||||
 build-farm.xml \
 | 
					 build-farm.xml \
 | 
				
			||||||
 $(man1_MANS:.1=.xml) \
 | 
					 $(man1_MANS:.1=.xml) $(man8_MANS:.8=.xml) \
 | 
				
			||||||
 troubleshooting.xml bugs.xml opt-common.xml opt-common-syn.xml \
 | 
					 troubleshooting.xml bugs.xml opt-common.xml opt-common-syn.xml \
 | 
				
			||||||
 env-common.xml quick-start.xml nix-lang-ref.xml glossary.xml \
 | 
					 env-common.xml quick-start.xml nix-lang-ref.xml glossary.xml \
 | 
				
			||||||
 conf-file.xml release-notes.xml \
 | 
					 conf-file.xml release-notes.xml \
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -274,6 +274,27 @@ $ mount -o bind /mnt/otherdisk/nix /nix</screen>
 | 
				
			||||||
</varlistentry>
 | 
					</varlistentry>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					<varlistentry xml:id="envar-other-stores"><term><envar>NIX_OTHER_STORES</envar></term>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <listitem><para>This variable contains the paths of remote Nix
 | 
				
			||||||
 | 
					  installations from whichs paths can be copied, separated by colons.
 | 
				
			||||||
 | 
					  See <xref linkend="sec-sharing-packages" /> for details.  Each path
 | 
				
			||||||
 | 
					  should be the <filename>/nix</filename> directory of a remote Nix
 | 
				
			||||||
 | 
					  installation (i.e., not the <filename>/nix/store</filename>
 | 
				
			||||||
 | 
					  directory).  The paths are subject to globbing, so you can set it so
 | 
				
			||||||
 | 
					  something like <literal>/var/run/nix/remote-stores/*/nix</literal>
 | 
				
			||||||
 | 
					  and mount multiple remote filesystems in
 | 
				
			||||||
 | 
					  <literal>/var/run/nix/remote-stores</literal>.</para>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <para>Note that if you’re building through the <link
 | 
				
			||||||
 | 
					  linkend="sec-nix-worker">Nix daemon</link>, the only setting for
 | 
				
			||||||
 | 
					  this variable that matters is the one that the
 | 
				
			||||||
 | 
					  <command>nix-worker</command> process uses.  So if you want to
 | 
				
			||||||
 | 
					  change it, you have to restart the daemon.</para></listitem>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</varlistentry>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
</variablelist>
 | 
					</variablelist>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -336,8 +336,8 @@ $ chown -R root /nix/store /nix/var/nix</screen>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
</para>
 | 
					</para>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<para>The Nix daemon should be started as follows (as
 | 
					<para>The <link linkend="sec-nix-worker">Nix daemon</link> should be
 | 
				
			||||||
<literal>root</literal>):
 | 
					started as follows (as <literal>root</literal>):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<screen>
 | 
					<screen>
 | 
				
			||||||
$ nix-worker --daemon</screen>
 | 
					$ nix-worker --daemon</screen>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -28,7 +28,7 @@
 | 
				
			||||||
      <holder>Eelco Dolstra</holder>
 | 
					      <holder>Eelco Dolstra</holder>
 | 
				
			||||||
    </copyright>
 | 
					    </copyright>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <date>June 2008</date>
 | 
					    <date>November 2008</date>
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
  </info>
 | 
					  </info>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -101,6 +101,10 @@
 | 
				
			||||||
        <title>nix-push</title>
 | 
					        <title>nix-push</title>
 | 
				
			||||||
        <xi:include href="nix-push.xml" />
 | 
					        <xi:include href="nix-push.xml" />
 | 
				
			||||||
      </section>
 | 
					      </section>
 | 
				
			||||||
 | 
					      <section xml:id="sec-nix-worker">
 | 
				
			||||||
 | 
					        <title>nix-worker</title>
 | 
				
			||||||
 | 
					        <xi:include href="nix-worker.xml" />
 | 
				
			||||||
 | 
					      </section>
 | 
				
			||||||
    </section>
 | 
					    </section>
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
  </appendix>
 | 
					  </appendix>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -128,7 +128,7 @@ those paths.  If this bothers you, use
 | 
				
			||||||
<para>Copy Firefox with all its dependencies to a remote machine:
 | 
					<para>Copy Firefox with all its dependencies to a remote machine:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<screen>
 | 
					<screen>
 | 
				
			||||||
$ nix-copy-closure alice@itchy.labs $(type -tP firefox)</screen>
 | 
					$ nix-copy-closure --to alice@itchy.labs $(type -tP firefox)</screen>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
</para>
 | 
					</para>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										34
									
								
								doc/manual/nix-worker.xml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								doc/manual/nix-worker.xml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,34 @@
 | 
				
			||||||
 | 
					<refentry xmlns="http://docbook.org/ns/docbook"
 | 
				
			||||||
 | 
					          xmlns:xlink="http://www.w3.org/1999/xlink"
 | 
				
			||||||
 | 
					          xmlns:xi="http://www.w3.org/2001/XInclude">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<refmeta>
 | 
				
			||||||
 | 
					  <refentrytitle>nix-worker</refentrytitle>
 | 
				
			||||||
 | 
					  <manvolnum>8</manvolnum>
 | 
				
			||||||
 | 
					  <refmiscinfo class="source">Nix</refmiscinfo>
 | 
				
			||||||
 | 
					  <refmiscinfo class="version"><xi:include href="version.txt" parse="text"/></refmiscinfo>
 | 
				
			||||||
 | 
					</refmeta>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<refnamediv>
 | 
				
			||||||
 | 
					  <refname>nix-worker</refname>
 | 
				
			||||||
 | 
					  <refpurpose>Nix multi-user support daemon</refpurpose>
 | 
				
			||||||
 | 
					</refnamediv>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<refsynopsisdiv>
 | 
				
			||||||
 | 
					  <cmdsynopsis>
 | 
				
			||||||
 | 
					    <command>nix-worker</command>
 | 
				
			||||||
 | 
					    <arg choice="plain"><option>--daemon</option></arg>
 | 
				
			||||||
 | 
					  </cmdsynopsis>
 | 
				
			||||||
 | 
					</refsynopsisdiv>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<refsection><title>Description</title>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<para>The Nix daemon is necessary in multi-user Nix installations.  It
 | 
				
			||||||
 | 
					performs build actions and other operations on the Nix store on behalf
 | 
				
			||||||
 | 
					of unprivileged users.</para>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</refsection>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</refentry>
 | 
				
			||||||
| 
						 | 
					@ -528,4 +528,82 @@ linkend='sec-nix-install-package' /> for details.</para>
 | 
				
			||||||
</section>
 | 
					</section>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<section xml:id="sec-sharing-packages"><title>Sharing packages between machines</title>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<para>Sometimes you want to copy a package from one machine to
 | 
				
			||||||
 | 
					another.  Or, you want to install some packages and you know that
 | 
				
			||||||
 | 
					another machine already has some or all of those packages or their
 | 
				
			||||||
 | 
					dependencies.  In that case there are mechanisms to quickly copy
 | 
				
			||||||
 | 
					packages between machines.</para>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<para>The command <command
 | 
				
			||||||
 | 
					linkend="sec-nix-copy-closure">nix-copy-closure</command> copies a Nix
 | 
				
			||||||
 | 
					store path along with all its dependencies to or from another machine
 | 
				
			||||||
 | 
					via the SSH protocol.  It doesn’t copy store paths that are already
 | 
				
			||||||
 | 
					present on the target machine.  For example, the following command
 | 
				
			||||||
 | 
					copies Firefox with all its dependencies:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<screen>
 | 
				
			||||||
 | 
					$ nix-copy-closure --to alice@itchy.example.org $(type -p firefox)</screen>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					See <xref linkend='sec-nix-copy-closure' /> for details.</para>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<para>With <command linkend='refsec-nix-store-export'>nix-store
 | 
				
			||||||
 | 
					--export</command> and <command
 | 
				
			||||||
 | 
					linkend='refsec-nix-store-import'>nix-store --import</command> you can
 | 
				
			||||||
 | 
					write the closure of a store path (that is, the path and all its
 | 
				
			||||||
 | 
					dependencies) to a file, and then unpack that file into another Nix
 | 
				
			||||||
 | 
					store.  For example,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<screen>
 | 
				
			||||||
 | 
					$ nix-store --export $(type -p firefox) > firefox.closure</screen>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					writes the closure of Firefox to a file.  You can then copy this file
 | 
				
			||||||
 | 
					to another machine and install the closure:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<screen>
 | 
				
			||||||
 | 
					$ nix-store --import < firefox.closure</screen>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Any store paths in the closure that are already present in the target
 | 
				
			||||||
 | 
					store are ignored.  It is also possible to pipe the export into
 | 
				
			||||||
 | 
					another command, e.g. to copy and install a closure directly to/on
 | 
				
			||||||
 | 
					another machine:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<screen>
 | 
				
			||||||
 | 
					$ nix-store --export $(type -p firefox) | bzip2 | \
 | 
				
			||||||
 | 
					    ssh alice@itchy.example.org "bunzip2 | nix-store --import"</screen>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					But note that <command>nix-copy-closure</command> is generally more
 | 
				
			||||||
 | 
					efficient in this example because it only copies paths that are not
 | 
				
			||||||
 | 
					already present in the target Nix store.</para>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<para>Finally, if you can mount the Nix store of a remote machine in
 | 
				
			||||||
 | 
					your local filesystem, Nix can copy paths from the remote Nix store to
 | 
				
			||||||
 | 
					the local Nix store <emphasis>on demand</emphasis>.  For instance,
 | 
				
			||||||
 | 
					suppose that you mount a remote machine containing a Nix store via
 | 
				
			||||||
 | 
					<command
 | 
				
			||||||
 | 
					xlink:href="http://fuse.sourceforge.net/sshfs.html">sshfs</command>:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<screen>
 | 
				
			||||||
 | 
					$ sshfs alice@itchy.example.org:/ /mnt</screen>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					You should then set the <envar>NIX_OTHER_STORES</envar> environment
 | 
				
			||||||
 | 
					variable to tell Nix about this remote Nix store:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<screen>
 | 
				
			||||||
 | 
					$ export NIX_OTHER_STORES=/mnt/nix</screen>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Then if you do any Nix operation, e.g.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<screen>
 | 
				
			||||||
 | 
					$ nix-env -i firefox</screen>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					and Nix has to build a path that it sees is already present in
 | 
				
			||||||
 | 
					<filename>/mnt/nix</filename>, then it will just copy from there
 | 
				
			||||||
 | 
					instead of building it from source.</para>
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</section>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
</chapter>
 | 
					</chapter>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue