about summary refs log tree commit diff
path: root/src/libstore/build.cc
AgeCommit message (Collapse)AuthorFilesLines
2007-08-28 * Fix a race condition with parallel builds where multipleEelco Dolstra1-10/+86
fixed-output derivations or substitutions try to build the same store path at the same time. Locking generally catches this, but not between multiple goals in the same process. This happened especially often (actually, only) in the build farm with fetchurl downloads of the same file being executed on multiple machines and then copied back to the main machine where they would clobber each other (NIXBF-13). Solution: if a goal notices that the output path is already locked, then go to sleep until another goal finishes (hopefully the one locking the path) and try again.
2007-08-12 * Get rid of the substitutes database table (NIX-47). Instead, if weEelco Dolstra1-48/+152
need any info on substitutable paths, we just call the substituters (such as download-using-manifests.pl) directly. This means that it's no longer necessary for nix-pull to register substitutes or for nix-channel to clear them, which makes those operations much faster (NIX-95). Also, we don't have to worry about keeping nix-pull manifests (in /nix/var/nix/manifests) and the database in sync with each other. The downside is that there is some overhead in calling an external program to get the substitutes info. For instance, "nix-env -qas" takes a bit longer. Abolishing the substitutes table also makes the logic in local-store.cc simpler, as we don't need to store info for invalid paths. On the downside, you cannot do things like "nix-store -qR" on a substitutable but invalid path (but nobody did that anyway). * Never catch interrupts (the Interrupted exception).
2007-06-12 * Support queryDeriver() in multi-user installations.Eelco Dolstra1-1/+1
2007-05-01 * Set a terminate() handler to ensure that we leave the BDBEelco Dolstra1-2/+2
environment cleanly even when an exception is thrown from a destructor. We still crash, but we don't take all other Nix processes with us.
2007-03-20 * Override the setuid helper using NIX_SETUID_HELPER.Eelco Dolstra1-1/+2
2007-03-19 * Terminate build hooks and substitutes with a TERM signal, not a KILLEelco Dolstra1-6/+13
signal. This is necessary because those processes may have joined the BDB environment, so they have to be given a chance to clean up. (NIX-85)
2007-03-07 * Delete the output paths before invoking the build hook.Eelco Dolstra1-14/+14
2007-02-21 * `nix-store --export --sign': sign the Nix archive using the RSA keyEelco Dolstra1-2/+1
in /nix/etc/nix/signing-key.sec
2007-01-23 * exportReferencesGraph: work on paths within store paths as well.Eelco Dolstra1-2/+10
2006-12-12 * New primop builtins.filterSource, which can be used to filter filesEelco Dolstra1-1/+1
from a source directory. All files for which a predicate function returns true are copied to the store. Typical example is to leave out the .svn directory: stdenv.mkDerivation { ... src = builtins.filterSource (path: baseNameOf (toString path) != ".svn") ./source-dir; # as opposed to # src = ./source-dir; } This is important because the .svn directory influences the hash in a rather unpredictable and variable way.
2006-12-09 * Use deletePathWrapped() in more places.Eelco Dolstra1-8/+22
2006-12-08 * Goal cancellation inside the waitForInput() loop needs to be handledEelco Dolstra1-38/+85
very carefully, since it can invalidate iterators into the `children' map.
2006-12-08 * Some refactoring.Eelco Dolstra1-95/+118
* Throw more exceptions as BuildErrors instead of Errors. This matters when --keep-going is turned on. (A BuildError is caught and terminates the goal in question, an Error terminates the program.)
2006-12-08 * Kill a build if it has gone for more than a certain number ofEelco Dolstra1-6/+44
seconds without producing output on stdout or stderr (NIX-65). This timeout can be specified using the `--max-silent-time' option or the `build-max-silent-time' configuration setting. The default is infinity (0). * Fix a tricky race condition: if we kill the build user before the child has done its setuid() to the build user uid, then it won't be killed, and we'll potentially lock up in pid.wait(). So also send a conventional kill to the child.
2006-12-08 * Also for convenience, change the ownership of the build output evenEelco Dolstra1-22/+36
in case of failure.
2006-12-07 * Remove ancient terminology.Eelco Dolstra1-3/+3
2006-12-07 * When keeping the temporary build directory (-K), change the ownerEelco Dolstra1-1/+4
back to the Nix account.
2006-12-07 * Be less verbose.Eelco Dolstra1-1/+1
2006-12-07 * Don't count on the Pid deconstructor to kill the child process,Eelco Dolstra1-2/+14
since if we're running a build user in non-root mode, we can't. Let the setuid helper do it.
2006-12-07 * If not running as root, let the setuid helper kill the build user'sEelco Dolstra1-27/+36
processes before and after the build.
2006-12-07 * In the garbage collector, if deleting a path fails, try to fix itsEelco Dolstra1-5/+10
ownership, then try again.
2006-12-07 * When not running as root, call the setuid helper to change theEelco Dolstra1-1/+7
ownership of the build result after the build.
2006-12-07 * Change the ownership of store paths to the Nix account beforeEelco Dolstra1-4/+56
deleting them using the setuid helper.
2006-12-07 * Pass the actual build user to the setuid helper.Eelco Dolstra1-22/+10
2006-12-07 * If Nix is not running as root, call the setuid helper to start theEelco Dolstra1-21/+37
builder under the desired build user.
2006-12-07 * Sanity check.Eelco Dolstra1-1/+7
2006-12-07 * Move killUser() to libutil so that the setuid helper can use it.Eelco Dolstra1-48/+27
2006-12-06 * Get rid of `build-users'. We'll just take all the members ofEelco Dolstra1-35/+53
`build-users-group'. This makes configuration easier: you can just add users in /etc/group.
2006-12-06 * Start of the setuid helper (the program that performs the operationsEelco Dolstra1-3/+4
that have to be done as root: running builders under different uids, changing ownership of build results, and deleting paths in the store with the wrong ownership).
2006-12-05 * Be less chatty.Eelco Dolstra1-2/+2
2006-12-05 * Urgh. Do setgid() before setuid(), because the semantics of setgid() Eelco Dolstra1-4/+4
changes completely depending on whether you're root...
2006-12-05 * FreeBSD returns ESRCH when there are no processes to kill.Eelco Dolstra1-4/+8
2006-12-05 * Allow unprivileged users to run the garbage collector and to doEelco Dolstra1-1/+0
`nix-store --delete'. But unprivileged users are not allowed to ignore liveness. * `nix-store --delete --ignore-liveness': ignore the runtime roots as well.
2006-12-03 * Removed `build-allow-root'.Eelco Dolstra1-18/+26
* Added `build-users-group', the group under which builds are to be performed. * Check that /nix/store has 1775 permission and is owner by the build-users-group.
2006-12-03 * Some hackery to propagate the worker's stderr and exceptions to theEelco Dolstra1-3/+3
client.
2006-12-02 * Move addTempRoot() to the store API, and add another functionEelco Dolstra1-2/+2
syncWithGC() to allow clients to register GC roots without needing write access to the global roots directory or the GC lock.
2006-11-30 * More remote operations.Eelco Dolstra1-1/+1
* Added new operation hasSubstitutes(), which is more efficient than querySubstitutes().size() > 0.
2006-11-30 * Put building in the store API.Eelco Dolstra1-3/+2
2006-11-30 * Refactoring. There is now an abstract interface class StoreAPIEelco Dolstra1-14/+18
containing functions that operate on the Nix store. One implementation is LocalStore, which operates on the Nix store directly. The next step, to enable secure multi-user Nix, is to create a different implementation RemoteStore that talks to a privileged daemon process that uses LocalStore to perform the actual operations.
2006-11-13 * Remove the undocumented `noscan' feature. It's no longer necessaryEelco Dolstra1-15/+12
now that reference scanning is sufficiently streamy.
2006-11-13 * Magic attribute `exportReferencesGraph' that allows the referencesEelco Dolstra1-20/+56
graph to be passed to a builder. This attribute should be a list of pairs [name1 path1 name2 path2 ...]. The references graph of each `pathN' will be stored in a text file `nameN' in the temporary build directory. The text files have the format used by `nix-store --register-validity'. However, the deriver fields are left empty. `exportReferencesGraph' is useful for builders that want to do something with the closure of a store path. Examples: the builders that make initrds and ISO images for NixOS. `exportReferencesGraph' is entirely pure. It's necessary because otherwise the only way for a builder to get this information would be to call `nix-store' directly, which is not allowed (though unfortunately possible).
2006-10-28 * `nix-store --read-log / -l PATH' shows the build log of PATH, ifEelco Dolstra1-1/+1
available. For instance, $ nix-store -l $(which svn) | less lets you read the build log of the Subversion instance in your profile. * `nix-store -qb': if applied to a non-derivation, take the deriver.
2006-10-19 * Special derivation attribute `allowedReferences' that causes Nix toEelco Dolstra1-0/+31
check that the references of the output of a derivation are in the specified set. For instance, allowedReferences = []; specifies that the output cannot have any references. (This is useful, for instance, for the generation of bootstrap binaries for stdenv-linux, which must not have any references for purity). It could also be used to guard against undesired runtime dependencies, e.g., {gcc, dynlib}: derivation { ... allowedReferences = [dynlib]; } says that the output can refer to the path of `dynlib' but not `gcc'. A `forbiddedReferences' attribute would be more useful for this, though.
2006-09-04 * Use a proper namespace.Eelco Dolstra1-21/+32
* Optimise header file usage a bit. * Compile the parser as C++.
2006-08-15 On cygwin, disable the check that the output is not group or worldMartin Bravenboer1-0/+2
writable. File permissions on Cygwin are rather complex, and in this case this check introduced a problem with build jobs invoke from outside of Cygwin (MSYS). It seemed almost impossible to fix the permissions of the directory, so for now this safety check is disabled on Cygwin.
2006-07-20 * Call find-runtime-roots.pl from the garbage collector to preventEelco Dolstra1-16/+5
running applications etc. from being garbage collected.
2006-06-19 * Oops.Eelco Dolstra1-1/+2
2006-06-19 * _exit() doesn't seem to work right on Cygwin.Eelco Dolstra1-0/+11
2006-06-16 * Show when we're blocked waiting for a lock.Eelco Dolstra1-4/+4
2006-05-31 * For fixed-output derivations, pass the environment variables listedEelco Dolstra1-3/+20
in the attribute variable `impureEnvVars' from the caller to the builder.