about summary refs log tree commit diff
path: root/src/nix-worker
AgeCommit message (Collapse)AuthorFilesLines
2006-12-12 * New primop builtins.filterSource, which can be used to filter filesEelco Dolstra1-2/+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-07 * Doh!Eelco Dolstra1-1/+1
2006-12-07 * Rename all those main.cc files.Eelco Dolstra2-1/+1
2006-12-06 * Fix the safety check.Eelco Dolstra1-2/+2
2006-12-05 * Tricky: child processes should not send data to the client sinceEelco Dolstra1-2/+10
that might mess up the protocol. And besides, the socket file descriptor is probably closed.
2006-12-05 * Oops! In daemon mode, we can't run as root either if build-users is empty.Eelco Dolstra1-2/+2
2006-12-05 * Use an explicit handler for SIGCHLD, since SIG_IGN doesn't do the Eelco Dolstra1-3/+15
right thing on FreeBSD 4 (it leaves zombies).
2006-12-05 * Ugly hack to handle spurious SIGPOLLs.Eelco Dolstra1-20/+50
2006-12-05 * Some renaming.Eelco Dolstra1-6/+6
2006-12-05 * Allow unprivileged users to run the garbage collector and to doEelco Dolstra1-0/+22
`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-05 * The determination of the root set should be made by the privilegedEelco Dolstra1-17/+12
process, so forward the operation. * Spam the user about GC misconfigurations (NIX-71). * findRoots: skip all roots that are unreadable - the warnings with which we spam the user should be enough.
2006-12-04 * Add indirect root registration to the protocol so that unprivilegedEelco Dolstra1-0/+10
processes can register indirect roots. Of course, there is still the problem that the garbage collector can only read the targets of the indirect roots when it's running as root...
2006-12-04 * Not every OS knows about SIGPOLL.Eelco Dolstra1-0/+5
2006-12-04 * Handle exceptions and stderr for all protocol functions.Eelco Dolstra1-19/+54
* SIGIO -> SIGPOLL (POSIX calls it that). * Use sigaction instead of signal to register the SIGPOLL handler. Sigaction is better defined, and a handler registered with signal appears not to interrupt fcntl(..., F_SETLKW, ...), which is bad.
2006-12-04 * Daemon mode (`nix-worker --daemon'). Clients connect to the serverEelco Dolstra1-33/+150
via the Unix domain socket in /nix/var/nix/daemon.socket. The server forks a worker process per connection. * readString(): use the heap, not the stack. * Some protocol fixes.
2006-12-04 * Install the worker in bindir, not libexecdir.Eelco Dolstra1-1/+1
* Allow the worker path to be overriden through the NIX_WORKER environment variable.
2006-12-03 * Don't run setuid root when build-users is empty.Eelco Dolstra1-25/+49
* Send startup errors to the client.
2006-12-03 * Handle a subtle race condition: the client closing the socketEelco Dolstra1-2/+30
between the last worker read/write and the enabling of the signal handler.
2006-12-03 * Some hardcore magic to handle asynchronous client disconnects.Eelco Dolstra1-1/+37
The problem is that when we kill the client while the worker is building, and the builder is not writing anything to stderr, then the worker never notice that the socket is closed on the other side, so it just continues indefinitely. The solution is to catch SIGIO, which is sent when the far side of the socket closes, and simulate an normal interruption. Of course, SIGIO is also sent every time the client sends data over the socket, so we only enable the signal handler when we're not expecting any data...
2006-12-03 * Some hackery to propagate the worker's stderr and exceptions to theEelco Dolstra1-95/+150
client.
2006-12-03 * Run the worker in a separate session to prevent terminal signalsEelco Dolstra1-0/+6
from interfering.
2006-12-02 * Move addTempRoot() to the store API, and add another functionEelco Dolstra1-0/+13
syncWithGC() to allow clients to register GC roots without needing write access to the global roots directory or the GC lock.
2006-12-02 * Doh.Eelco Dolstra1-1/+1
2006-12-02 * Remove queryPathHash().Eelco Dolstra3-1/+28
* Help for nix-worker.
2006-12-01 * Merge addToStore and addToStoreFixed.Eelco Dolstra1-12/+5
* addToStore now adds unconditionally, it doesn't use readOnlyMode. Read-only operation is up to the caller (who can call computeStorePathForPath).
2006-12-01 * Right name.Eelco Dolstra1-2/+2
2006-12-01 * More operations.Eelco Dolstra1-2/+21
* addToStore() and friends: don't do a round-trip to the worker if we're only interested in the path (i.e., in read-only mode).
2006-11-30 * More remote operations.Eelco Dolstra1-9/+51
* Added new operation hasSubstitutes(), which is more efficient than querySubstitutes().size() > 0.
2006-11-30 * More operations.Eelco Dolstra1-1/+27
2006-11-30 * First remote operation: isValidPath().Eelco Dolstra1-2/+31
2006-11-30 * When NIX_REMOTE is set to "slave", fork off nix-worker in slaveEelco Dolstra1-23/+12
mode. Presumably nix-worker would be setuid to the Nix store user. The worker performs all operations on the Nix store and database, so the caller can be completely unprivileged. This is already much more secure than the old setuid scheme, since the worker doesn't need to do Nix expression evaluation and so on. Most importantly, this means that it doesn't need to access any user files, with all resulting security risks; it only performs pure store operations. Once this works, it is easy to move to a daemon model that forks off a worker for connections established through a Unix domain socket. That would be even more secure.
2006-11-30 * Skeleton of the privileged worker program.Eelco Dolstra2-0/+72
* Some refactoring: put the NAR archive integer/string serialisation code in a separate file so it can be reused by the worker protocol implementation.