about summary refs log tree commit diff
path: root/src/libstore/build.cc
AgeCommit message (Collapse)AuthorFilesLines
2012-04-15 Close almost all file descriptors in the builderEelco Dolstra1-0/+3
This regression was accidentally introduced in 35355fc1fcffbe859395e360c0a6a1463f137d63.
2012-04-05 On Linux, pretend we're building on Linux 2.6Eelco Dolstra1-0/+11
Setting the UNAME26 personality causes "uname" to return "2.6.x", regardless of the kernel version. This improves determinism in a few misbehaved packages.
2012-03-05 Set the close-on-exec flag on file descriptorsEelco Dolstra1-3/+2
2012-03-05 Don't leak a file descriptor in commonChildInit()Eelco Dolstra1-0/+1
2012-03-01 Fix an uninitialised variableEelco Dolstra1-0/+1
The variable ‘useChroot’ was not initialised properly. This caused random failures if using the build hook. Seen on Mac OS X 10.7 with Clang. Thanks to KolibriFX for finding this :-)
2012-02-18 Fix chroots buildsEelco Dolstra1-0/+16
Chroots are initialised by hard-linking inputs from the Nix store to the chroot. This doesn't work if the input has its immutable bit set, because it's forbidden to create hard links to immutable files. So temporarily clear the immutable bit when creating and destroying the chroot. Note that making regular files in the Nix store immutable isn't very reliable, since the bit can easily become cleared: for instance, if we run the garbage collector after running ‘nix-store --optimise’. So maybe we should only make directories immutable.
2012-02-09 Use data() instead of c_str() where appropriateEelco Dolstra1-5/+5
2011-12-30 * Reject a build if there is a cycle among the outputs. This isEelco Dolstra1-5/+2
necessary because existing code assumes that the references graph is acyclic.
2011-12-25 * Make sure that lock files are cleaned up properly when buildingEelco Dolstra1-7/+7
through the build hook.
2011-11-29 * Get rid of some superfluous error messages if a substituter fails.Eelco Dolstra1-15/+6
* Say "fetch" instead of "substitute".
2011-11-21 nix: add /etc/hosts with localhost entry to chroot builds.Rob Vermaas1-0/+3
2011-08-31 * Eliminate all uses of the global variable ‘store’ from libstore.Eelco Dolstra1-8/+8
This should also fix: nix-instantiate: ./../boost/shared_ptr.hpp:254: T* boost::shared_ptr<T>::operator->() const [with T = nix::StoreAPI]: Assertion `px != 0' failed. which was caused by hashDerivationModulo() calling the ‘store’ object (during store upgrades) before openStore() assigned it.
2011-07-20 * Fix a huuuuge security hole in the Nix daemon. It didn't check thatEelco Dolstra1-12/+3
derivations added to the store by clients have "correct" output paths (meaning that the output paths are computed by hashing the derivation according to a certain algorithm). This means that a malicious user could craft a special .drv file to build *any* desired path in the store with any desired contents (so long as the path doesn't already exist). Then the attacker just needs to wait for a victim to come along and install the compromised path. For instance, if Alice (the attacker) knows that the latest Firefox derivation in Nixpkgs produces the path /nix/store/1a5nyfd4ajxbyy97r1fslhgrv70gj8a7-firefox-5.0.1 then (provided this path doesn't already exist) she can craft a .drv file that creates that path (i.e., has it as one of its outputs), add it to the store using "nix-store --add", and build it with "nix-store -r". So the fake .drv could write a Trojan to the Firefox path. Then, if user Bob (the victim) comes along and does $ nix-env -i firefox $ firefox he executes the Trojan injected by Alice. The fix is to have the Nix daemon verify that derivation outputs are correct (in addValidPath()). This required some refactoring to move the hash computation code to libstore.
2011-06-30 Add support for the `build-timeout' and `--timeout' options.Ludovic Courtès1-4/+30
2010-12-13 * nix-instantiate: return exit status 100 to denote a permanent buildEelco Dolstra1-3/+16
failure. The build hook can use this to distinguish between transient and permanent failures on the remote side.
2010-12-13 * Update some comments.Eelco Dolstra1-1/+1
2010-11-16 * Store the size of a store path in the database (to be precise, theEelco Dolstra1-16/+25
size of the NAR serialisation of the path, i.e., `nix-store --dump PATH'). This is useful for Hydra.
2010-08-31 * Always print hook output on stderr, even if --no-build-output isEelco Dolstra1-4/+12
set. * In the build hook, print a trace message to allow Hydra to pick up the name of the remote machine used for the build.
2010-08-30 * When using the build hook, distinguish between the stderr of theEelco Dolstra1-11/+29
hook script proper, and the stdout/stderr of the builder. Only the latter should be saved in /nix/var/log/nix/drvs. * Allow the verbosity to be set through an option. * Added a flag --quiet to lower the verbosity level.
2010-08-27 * Experimental feature: allow a derivation to tell the build hook thatEelco Dolstra1-2/+10
it requires a certain feature on the build machine, e.g. requiredSystemFeatures = [ "kvm" ]; We need this in Hydra to make sure that builds that require KVM support are forwarded to machines that have KVM support. Probably this should also be enforced for local builds.
2010-08-25 * Made the build hook mechanism more efficient. Rather than startingEelco Dolstra1-203/+187
the hook every time we want to ask whether we can run a remote build (which can be very often), we now reuse a hook process for answering those queries until it accepts a build. So if there are N derivations to be built, at most N hooks will be started.
2010-08-24 * Handle the unlikely case where a derivation has no dependencies atEelco Dolstra1-1/+4
all.
2010-08-04 * Sync with the trunk.Eelco Dolstra1-0/+5
2010-08-04 * Allow derivations to hint that they should not be built remotelyEelco Dolstra1-23/+39
using the build hook mechanism, by setting the derivation attribute "preferLocalBuild" to true. This has a few use cases: - The user environment builder. Since it just creates a bunch of symlinks without much computation, there is no reason to do it remotely. In fact, doing it remotely requires the entire closure of the user environment to be copied to the remote machine, which is extremely wasteful. - `fetchurl'. Performing the download on a remote machine and then copying it to the local machine involves twice as much network traffic as performing the download locally, and doesn't save any CPU cycles on the local machine.
2010-06-24 Include <cstring> to ensure that strcpy(), strlen(), and memset() are declared.Peter Simons1-0/+2
An "using namespace std" was added locally in those functions that refer to names from <cstring>. That is not pretty, but it's a very portable solution, because strcpy() and friends will be found in both the 'std' and in the global namespace.
2010-06-23 Added support for passing an (impure) NIX_BUILD_CORES variable to build ↵Peter Simons1-0/+3
expressions. This patch adds the configuration file variable "build-cores" and the command line argument "--cores". These settings specify the number of CPU cores to utilize for parallel building within a job, i.e. by passing an appropriate "-j" flag to GNU Make. The default value is 1, which means that parallel building is *disabled*. If the number of build cores is specified as 0 (synonymously: "guess" or "auto"), then the actual value is supposed to be auto-detected by builders at run-time, i.e by calling the nproc(1) utility from coreutils. The environment variable $NIX_BUILD_CORES is available to builders, but the contents of that variable does *not* influence the hash that goes into the $out store path, i.e. the number of build cores to be utilized can be changed at will without requiring any re-builds.
2010-06-21 * Sync with the trunk.Eelco Dolstra1-1/+1
2010-06-01 * Turn build errors during evaluation into EvalErrors.Eelco Dolstra1-1/+1
2010-06-01 * Hack to allow derivations to disable chroot builds by setting theEelco Dolstra1-0/+3
attribute "__noChroot = true" (requested by Rob).
2010-03-11 * Sync with the trunk.Eelco Dolstra1-1/+7
2010-03-11 Show the build user's group in /etc/group in chroots.Ludovic Courtès1-0/+6
* src/libstore/build.cc (nix::DerivationGoal::startBuilder): Create /etc/group showing the build user's group.
2010-03-11 * Sync with the trunk.Eelco Dolstra1-5/+6
2010-03-11 Fix thinko in r20547.Ludovic Courtès1-4/+4
* src/libstore/build.cc (nix::DerivationGoal::startBuilder): Fix the GID of the build user in /etc/passwd.
2010-03-11 Clear supplementary groups of `nixbld' in /etc/passwd in chroots.Ludovic Courtès1-4/+5
* src/libstore/build.cc (nix::DerivationGoal::startBuilder): Don't display any supplementary groups for `nixbld' in /etc/passwd.
2010-02-03 * Revert r19797, and use a simpler solution: just don't monitor buildEelco Dolstra1-10/+18
hooks for silence. It's unnecessary because the remote nix-store command is already monitoring the real build.
2010-01-29 * Added an option "fsync-metadata" to fsync() changes toEelco Dolstra1-5/+5
/nix/var/nix/db. * Removed the function writeStringToFile since it does (almost) the same thing as writeFile.
2009-12-17 * Include config.h before the C library headers, because it definesEelco Dolstra1-2/+2
_FILE_OFFSET_BITS=64. Without it, functions like stat() fail on large file sizes. This happened with a Nix store on squashfs: $ nix-store --dump /tmp/mnt/46wzqnk4cbdwh1dclhrpqnnz1icak6n7-local-net-cmds > /dev/null error: getting attributes of path `/tmp/mnt/46wzqnk4cbdwh1dclhrpqnnz1icak6n7-local-net-cmds': Value too large for defined data type $ stat /tmp/mnt/46wzqnk4cbdwh1dclhrpqnnz1icak6n7-local-net-cmds File: `/tmp/mnt/46wzqnk4cbdwh1dclhrpqnnz1icak6n7-local-net-cmds' Size: 0 Blocks: 36028797018963968 IO Block: 1024 regular empty file (This is a bug in squashfs or mksquashfs, but it shouldn't cause Nix to fail.)
2009-12-09 * Give a better error message when trying to build something andEelco Dolstra1-0/+6
readOnlyMode is set.
2009-10-22 * When building in a chroot, make a copy of a file if hard-linkingEelco Dolstra1-2/+13
fails. This is likely to happen after a `nix-store --optimise', because some files may have 32000 links (NIX-111).
2009-09-24 * Fix a build failure on Fedora 11. rename() needs <stdio.h>.Eelco Dolstra1-0/+1
2009-09-23 * Create some state directories automatically as a convenience.Eelco Dolstra1-0/+2
2009-09-23  * include wait.h for WEXITSTATUSRob Vermaas1-0/+1
2009-04-21 * Use foreach in a lot of places.Eelco Dolstra1-40/+22
2009-04-15 * Don't cache transient build hook problems.Eelco Dolstra1-6/+11
2009-03-31 * Do a substitution even if --max-jobs == 0.Eelco Dolstra1-17/+22
2009-03-31 * Doh!Eelco Dolstra1-1/+1
2009-03-30 * Make the poll interval configurable.Eelco Dolstra1-2/+2
2009-03-29 * With `--max-jobs 0', print a nicer error message than "AssertionEelco Dolstra1-1/+5
`!awake.empty()' failed."
2009-03-29 * Use polling to wait for a remote build slot when using a build hookEelco Dolstra1-31/+1
(that is, call the build hook with a certain interval until it accepts the build). * build-remote.pl was totally broken: for all system types other than the local system type, it would send all builds to the *first* machine of the appropriate type.
2009-03-28 * Scan for references and compute the SHA-256 hash of the output inEelco Dolstra1-12/+8
one pass. This halves the amount of I/O.