lix/src/libutil
Eelco Dolstra 1511aa9f48 Allow remote builds without sending the derivation closure
Previously, to build a derivation remotely, we had to copy the entire
closure of the .drv file to the remote machine, even though we only
need the top-level derivation. This is very wasteful: the closure can
contain thousands of store paths, and in some Hydra use cases, include
source paths that are very large (e.g. Git/Mercurial checkouts).

So now there is a new operation, StoreAPI::buildDerivation(), that
performs a build from an in-memory representation of a derivation
(BasicDerivation) rather than from a on-disk .drv file. The only files
that need to be in the Nix store are the sources of the derivation
(drv.inputSrcs), and the needed output paths of the dependencies (as
described by drv.inputDrvs). "nix-store --serve" exposes this
interface.

Note that this is a privileged operation, because you can construct a
derivation that builds any store path whatsoever. Fixing this will
require changing the hashing scheme (i.e., the output paths should be
computed from the other fields in BasicDerivation, allowing them to be
verified without access to other derivations). However, this would be
quite nice because it would allow .drv-free building (e.g. "nix-env
-i" wouldn't have to write any .drv files to disk).

Fixes #173.
2015-07-17 17:57:40 +02:00
..
affinity.cc Don't apply the CPU affinity hack to nix-shell (and other Perl programs) 2013-09-06 16:36:56 +02:00
affinity.hh Run the daemon worker on the same CPU as the client 2013-08-07 14:02:04 +02:00
archive.cc Use proper quotes everywhere 2014-08-20 18:03:48 +02:00
archive.hh Handle case collisions on case-insensitive systems 2014-07-16 16:02:05 +02:00
hash.cc Simplify parseHash32 2015-02-03 18:56:47 +01:00
hash.hh If hashes do not match, print them in base-32 for SHA-1/SHA-256 2012-10-23 18:05:50 +02:00
local.mk Update Makefile variable names 2014-02-01 13:54:38 +01:00
md5.c * Optional switch "--with-openssl=<PATH>" to use OpenSSL's 2006-02-13 19:52:43 +00:00
md5.h * Some Cygwin fixes. 2006-05-24 13:23:20 +00:00
md32_common.h * Add SHA-256. 2005-01-14 12:03:04 +00:00
monitor-fd.hh Pedantry 2014-12-14 01:51:14 +01:00
regex.cc Add a primop for regular expression pattern matching 2014-11-25 11:47:06 +01:00
regex.hh Add a primop for regular expression pattern matching 2014-11-25 11:47:06 +01:00
serialise.cc Allow remote builds without sending the derivation closure 2015-07-17 17:57:40 +02:00
serialise.hh Allow remote builds without sending the derivation closure 2015-07-17 17:57:40 +02:00
sha1.c * Optional switch "--with-openssl=<PATH>" to use OpenSSL's 2006-02-13 19:52:43 +00:00
sha1.h * Optional switch "--with-openssl=<PATH>" to use OpenSSL's 2006-02-13 19:52:43 +00:00
sha256.c * Add SHA-256. 2005-01-14 12:03:04 +00:00
sha256.h * FreeBSD 4.x doesn't have stdint.h, use inttypes.h instead (which is 2005-05-04 16:32:54 +00:00
types.hh Revert "Use posix_spawn to run the pager" 2014-12-10 13:48:50 +01:00
util.cc Support URLs in $NIX_PATH 2015-06-17 16:20:11 +02:00
util.hh Support URLs in $NIX_PATH 2015-06-17 16:20:11 +02:00
xml-writer.cc And another one 2014-02-26 18:55:18 +01:00
xml-writer.hh And another one 2014-02-26 18:55:18 +01:00