Eelco Dolstra
096194ab29
* Remove ancient terminology.
2006-12-07 23:58:36 +00:00
Eelco Dolstra
6833e8bbe8
* When keeping the temporary build directory (-K), change the owner
...
back to the Nix account.
2006-12-07 23:27:40 +00:00
Eelco Dolstra
e24d0201c2
* Doh!
2006-12-07 22:07:05 +00:00
Eelco Dolstra
2819eb36a4
* Be less verbose.
2006-12-07 21:43:35 +00:00
Eelco Dolstra
4ca01065c3
* Rename all those main.cc files.
2006-12-07 20:47:30 +00:00
Eelco Dolstra
d03f0d4117
* Check for lchown.
2006-12-07 18:51:11 +00:00
Eelco Dolstra
c3286ec020
* Don't count on the Pid deconstructor to kill the child process,
...
since if we're running a build user in non-root mode, we can't. Let
the setuid helper do it.
2006-12-07 17:52:58 +00:00
Eelco Dolstra
a82d80ddeb
* Move setuidCleanup() to libutil.
2006-12-07 16:40:41 +00:00
Eelco Dolstra
f76fdb6d42
* If not running as root, let the setuid helper kill the build user's
...
processes before and after the build.
2006-12-07 16:33:31 +00:00
Eelco Dolstra
ec23ecc64d
* In the garbage collector, if deleting a path fails, try to fix its
...
ownership, then try again.
2006-12-07 15:54:52 +00:00
Eelco Dolstra
a0a43c3206
* When not running as root, call the setuid helper to change the
...
ownership of the build result after the build.
2006-12-07 15:18:14 +00:00
Eelco Dolstra
6a07ff1ec0
* Change the ownership of store paths to the Nix account before
...
deleting them using the setuid helper.
2006-12-07 14:14:35 +00:00
Eelco Dolstra
7d8cf316ee
* Pass the actual build user to the setuid helper.
2006-12-07 11:27:32 +00:00
Eelco Dolstra
a45c498e4e
* If Nix is not running as root, call the setuid helper to start the
...
builder under the desired build user.
2006-12-07 00:42:30 +00:00
Eelco Dolstra
813a7c65c9
* Sanity check.
2006-12-07 00:19:27 +00:00
Eelco Dolstra
6a8e60913a
* Move killUser() to libutil so that the setuid helper can use it.
2006-12-07 00:16:07 +00:00
Eelco Dolstra
79875c5e42
* Change the ownership of the current directory to the build user.
2006-12-06 23:52:25 +00:00
Eelco Dolstra
62ab131412
* Verify that the desired target user is in the build users group (as
...
specified in the setuid config file).
2006-12-06 23:15:26 +00:00
Eelco Dolstra
f07ac41656
* Check that the caller is allowed to call the setuid helper. The
...
allowed uid is specified in a configuration file in
/etc/nix-setuid.conf.
2006-12-06 22:45:41 +00:00
Eelco Dolstra
ef281b93c2
* Fix the safety check.
2006-12-06 20:18:29 +00:00
Eelco Dolstra
6e5ec1029a
* Get rid of `build-users'. We'll just take all the members of
...
`build-users-group'. This makes configuration easier: you can just
add users in /etc/group.
2006-12-06 20:00:15 +00:00
Eelco Dolstra
751f6d2157
* nix-setuid-helper: allow running programs under a different uid.
2006-12-06 17:29:10 +00:00
Eelco Dolstra
9f0efa6611
* Start of the setuid helper (the program that performs the operations
...
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-06 01:24:02 +00:00
Eelco Dolstra
2b558843a2
* Be less chatty.
2006-12-05 19:01:19 +00:00
Eelco Dolstra
44cad9630f
* Urgh. Do setgid() before setuid(), because the semantics of setgid()
...
changes completely depending on whether you're root...
2006-12-05 18:28:15 +00:00
Eelco Dolstra
6f0d050324
* Tricky: child processes should not send data to the client since
...
that might mess up the protocol. And besides, the socket file
descriptor is probably closed.
2006-12-05 18:21:16 +00:00
Eelco Dolstra
4c1c37d0b6
* FreeBSD returns ESRCH when there are no processes to kill.
2006-12-05 18:07:46 +00:00
Eelco Dolstra
8d1854c3f1
* Oops! In daemon mode, we can't run as root either if build-users is empty.
2006-12-05 17:44:19 +00:00
Eelco Dolstra
99655245ae
* Use an explicit handler for SIGCHLD, since SIG_IGN doesn't do the
...
right thing on FreeBSD 4 (it leaves zombies).
2006-12-05 17:21:42 +00:00
Eelco Dolstra
62b0497c0f
* Better message.
2006-12-05 16:17:01 +00:00
Eelco Dolstra
c808e6252f
* Ugly hack to handle spurious SIGPOLLs.
2006-12-05 15:36:31 +00:00
Eelco Dolstra
fd4a9db91f
* Some renaming.
2006-12-05 14:15:51 +00:00
Eelco Dolstra
a9c4f66cfb
* Allow unprivileged users to run the garbage collector and to do
...
`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 02:18:46 +00:00
Eelco Dolstra
29cf434a35
* The determination of the root set should be made by the privileged
...
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-05 01:31:45 +00:00
Eelco Dolstra
8623256f48
* findRoots: return a map from the symlink (outside of the store) to
...
the store path (inside the store).
2006-12-05 00:48:36 +00:00
Eelco Dolstra
d27a73b1a9
* In addPermRoot, check that the root that we just registered can be
...
found by the garbage collector. This addresses NIX-71 and is a
particular concern in multi-user stores.
2006-12-05 00:34:42 +00:00
Eelco Dolstra
74033a844f
* Add indirect root registration to the protocol so that unprivileged
...
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 23:29:16 +00:00
Eelco Dolstra
0d40f6d7bb
* Not every OS knows about SIGPOLL.
2006-12-04 22:58:44 +00:00
Eelco Dolstra
7751160e9f
* Don't redirect stderr.
2006-12-04 19:10:23 +00:00
Eelco Dolstra
40c3529909
* Handle exceptions and stderr for all protocol functions.
...
* 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 17:55:14 +00:00
Eelco Dolstra
0130ef88ea
* Daemon mode (`nix-worker --daemon'). Clients connect to the server
...
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 17:17:13 +00:00
Eelco Dolstra
4740baf3a6
* When NIX_REMOTE=daemon, connect to /nix/var/nix/daemon.socket
...
instead of forking a worker.
2006-12-04 14:21:39 +00:00
Eelco Dolstra
f5f0cf423f
* Refactoring.
2006-12-04 13:28:14 +00:00
Eelco Dolstra
052b6fb149
* Pass the verbosity level to the worker.
2006-12-04 13:15:29 +00:00
Eelco Dolstra
1e16d20655
* Install the worker in bindir, not libexecdir.
...
* Allow the worker path to be overriden through the NIX_WORKER
environment variable.
2006-12-04 13:09:16 +00:00
Eelco Dolstra
9322b399f3
* Doh.
2006-12-03 20:41:22 +00:00
Eelco Dolstra
f4279bcde0
* Don't run setuid root when build-users is empty.
...
* Send startup errors to the client.
2006-12-03 16:25:19 +00:00
Eelco Dolstra
35247c4c9f
* Removed `build-allow-root'.
...
* 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 15:32:38 +00:00
Eelco Dolstra
84d6459bd5
* Use setreuid if setresuid is not available.
2006-12-03 14:32:22 +00:00
Eelco Dolstra
a9f9241054
* Handle a subtle race condition: the client closing the socket
...
between the last worker read/write and the enabling of the signal
handler.
2006-12-03 03:16:27 +00:00
Eelco Dolstra
3ed9e4ad9b
* Some hardcore magic to handle asynchronous client disconnects.
...
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 03:03:36 +00:00
Eelco Dolstra
4251f94b32
* Use a Unix domain socket instead of pipes.
2006-12-03 02:36:44 +00:00
Eelco Dolstra
8c76df93e6
* Better error message if the worker doesn't start.
2006-12-03 02:22:04 +00:00
Eelco Dolstra
363f40022f
* Pid::kill() should be interruptable.
2006-12-03 02:12:26 +00:00
Eelco Dolstra
7951c3c546
* Some hackery to propagate the worker's stderr and exceptions to the
...
client.
2006-12-03 02:08:13 +00:00
Eelco Dolstra
714fa24cfb
* Run the worker in a separate session to prevent terminal signals
...
from interfering.
2006-12-03 00:52:27 +00:00
Eelco Dolstra
e25fad691a
* Move addTempRoot() to the store API, and add another function
...
syncWithGC() to allow clients to register GC roots without needing
write access to the global roots directory or the GC lock.
2006-12-02 16:41:36 +00:00
Eelco Dolstra
30bf547f4f
* Doh.
2006-12-02 15:46:17 +00:00
Eelco Dolstra
536595b072
* Remove most of the old setuid code.
...
* Much simpler setuid code for the worker in slave mode.
2006-12-02 15:45:51 +00:00
Eelco Dolstra
9c9cdb06d0
* Remove SwitchToOriginalUser, we're not going to need it anymore.
2006-12-02 14:34:14 +00:00
Eelco Dolstra
8ba5d32769
* Remove queryPathHash().
...
* Help for nix-worker.
2006-12-02 14:27:24 +00:00
Eelco Dolstra
fcd9900d74
* Replace read-only calls to addTextToStore.
2006-12-01 21:00:39 +00:00
Eelco Dolstra
a824d58b56
* Merge addToStore and addToStoreFixed.
...
* addToStore now adds unconditionally, it doesn't use readOnlyMode.
Read-only operation is up to the caller (who can call
computeStorePathForPath).
2006-12-01 20:51:18 +00:00
Eelco Dolstra
ceb982a1be
* Right name.
2006-12-01 18:02:05 +00:00
Eelco Dolstra
b0d8e05be1
* More operations.
...
* 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-12-01 18:00:01 +00:00
Eelco Dolstra
0565b5f2b3
* More remote operations.
...
* Added new operation hasSubstitutes(), which is more efficient than
querySubstitutes().size() > 0.
2006-11-30 22:43:55 +00:00
Eelco Dolstra
aac547a8b3
* Doh.
2006-11-30 21:32:46 +00:00
Eelco Dolstra
0263279071
* More operations.
2006-11-30 20:45:20 +00:00
Eelco Dolstra
a711689368
* First remote operation: isValidPath().
2006-11-30 20:13:59 +00:00
Eelco Dolstra
765bdfe542
* When NIX_REMOTE is set to "slave", fork off nix-worker in slave
...
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 19:54:43 +00:00
Eelco Dolstra
40b3f64b55
* Skeleton of the privileged worker program.
...
* Some refactoring: put the NAR archive integer/string serialisation
code in a separate file so it can be reused by the worker protocol
implementation.
2006-11-30 19:19:59 +00:00
Eelco Dolstra
9adc074dc3
* Oops.
2006-11-30 18:35:50 +00:00
Eelco Dolstra
9cf1948993
* Skeleton of remote store implementation.
2006-11-30 18:35:36 +00:00
Eelco Dolstra
6ecb840fd1
* Put building in the store API.
2006-11-30 18:02:04 +00:00
Eelco Dolstra
e2ef5e07fd
* Refactoring. There is now an abstract interface class StoreAPI
...
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-30 17:43:04 +00:00
Eelco Dolstra
80b742dd52
* Don't spam.
2006-11-29 22:07:49 +00:00
Roy van den Broek
92417600a1
* Example script to set permissions for setuid operation.
2006-11-29 21:58:09 +00:00
Eelco Dolstra
71e867c5f5
* Remove --enable-setuid, --with-nix-user and --with-nix-group.
...
Rather, setuid support is now always compiled in (at least on
platforms that have the setresuid system call, e.g., Linux and
FreeBSD), but it must enabled by chowning/chmodding the Nix
binaries.
2006-11-29 21:06:58 +00:00
Eelco Dolstra
c6a97e3b74
* Doh! Path sizes need to be computed recursively of course.
...
(NIX-70)
2006-11-24 20:24:14 +00:00
Eelco Dolstra
a76efaeb3f
* Dead files.
2006-11-24 20:07:30 +00:00
Eelco Dolstra
0541ddc7e3
* Turn off synchronisation between C and C++ I/O functions. This
...
gives a huge speedup in operations that read or write from standard
input/output. (So libstdc++'s I/O isn't that bad, you just have to
call std::ios::sync_with_stdio(false).) For instance, `nix-store
--register-substitutes' went from 1.4 seconds to 0.1 seconds on a
certain input. Another victory for Valgrind.
2006-11-18 18:56:30 +00:00
Eelco Dolstra
f459a5bb3a
* Remove the undocumented `noscan' feature. It's no longer necessary
...
now that reference scanning is sufficiently streamy.
2006-11-13 18:19:05 +00:00
Eelco Dolstra
e2a70b7ec0
* Magic attribute `exportReferencesGraph' that allows the references
...
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-11-13 18:18:13 +00:00
Eelco Dolstra
e40d4a5604
* Option --reregister' in
nix-store --register-validity'. We need
...
this in the NixOS installer (or in the buildfarm) to ensure that the
cryptographic hash of the path contents still matches the actual
contents.
2006-11-13 16:48:27 +00:00
Eelco Dolstra
7e85a2af5f
* Fix importing of derivation outputs.
2006-11-03 16:17:39 +00:00
Eelco Dolstra
8478cd260f
* readFile: don't overflow the stack on large files.
2006-10-30 11:56:09 +00:00
Eelco Dolstra
ae6fb27f18
* `nix-store --read-log / -l PATH' shows the build log of PATH, if
...
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-28 16:33:54 +00:00
Eelco Dolstra
dd300fb48d
* Some better error messages.
2006-10-23 16:45:19 +00:00
Eelco Dolstra
17f4883bfe
* Better message.
2006-10-19 17:43:58 +00:00
Eelco Dolstra
9bd93f7606
* toFile: maintain the references.
2006-10-19 17:39:02 +00:00
Eelco Dolstra
6a67556f71
* Special derivation attribute `allowedReferences' that causes Nix to
...
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-10-19 16:09:24 +00:00
Eelco Dolstra
daa8f85fcd
* Backwards compatibility hack for user environments made by Nix <= 0.10.
2006-10-17 14:13:15 +00:00
Eelco Dolstra
24737f279e
* Backwards compatibility with old user environment manifests.
2006-10-17 14:01:45 +00:00
Eelco Dolstra
4bd5cdb90b
* Print out the offending path.
2006-10-17 14:01:28 +00:00
Eelco Dolstra
58ff6939f4
* An awful backwards compatibility hack.
2006-10-17 12:58:42 +00:00
Eelco Dolstra
3059df0f1e
* baseNameOf: paths don't have to be absolute.
2006-10-17 12:34:13 +00:00
Eelco Dolstra
822dba2210
* Maintain the references for the user environment properly.
2006-10-17 12:15:15 +00:00
Eelco Dolstra
be1961c9f8
* toPath: should be the identity on paths.
2006-10-17 11:07:11 +00:00
Eelco Dolstra
cba913c521
* dirOf: return a path if the argument is a path.
2006-10-17 11:05:34 +00:00
Eelco Dolstra
cf705eaf78
* toString: don't copy paths. So toString can be used to pass
...
non-store paths to a builder.
2006-10-17 10:58:12 +00:00
Eelco Dolstra
7de5fe2fc2
* Do the path check on the normal form.
2006-10-17 10:57:25 +00:00
Eelco Dolstra
46b631b6c4
* Don't generate an empty drvPath attribute in the manifest.
2006-10-17 10:15:42 +00:00
Eelco Dolstra
d7efd76394
* Big cleanup of the semantics of paths, strings, contexts, string
...
concatenation and string coercion. This was a big mess (see
e.g. NIX-67). Contexts are now folded into strings, so that they
don't cause evaluation errors when they're not expected. The
semantics of paths has been clarified (see nixexpr-ast.def).
toString() and coerceToString() have been merged.
Semantic change: paths are now copied to the store when they're in a
concatenation (and in most other situations - that's the
formalisation of the meaning of a path). So
"foo " + ./bla
evaluates to "foo /nix/store/hash...-bla", not "foo
/path/to/current-dir/bla". This prevents accidental impurities, and
is more consistent with the treatment of derivation outputs, e.g.,
`"foo " + bla' where `bla' is a derivation. (Here `bla' would be
replaced by the output path of `bla'.)
2006-10-16 15:55:34 +00:00
Eelco Dolstra
37c8a664f3
* A helpful message.
2006-10-13 11:49:55 +00:00
Eelco Dolstra
e4af398681
* Don't crash when upgrading the Berkeley DB environment.
2006-10-13 11:15:53 +00:00
Eelco Dolstra
7d4567f2cc
* Removed URIs from the evaluator (NIX-66). They are now just another
...
kind of notation for strings.
2006-10-11 21:59:33 +00:00
Eelco Dolstra
0c4c5c2020
* Quick hack to fix NIX-67: evaluation result differing if the Nix
...
expression resides in the store.
2006-10-10 21:23:35 +00:00
Eelco Dolstra
bd0c40e1e9
* import': unwrap the context. Necessary to make
import (x + y)'
...
work, where x is a store path.
2006-10-10 15:07:23 +00:00
Eelco Dolstra
9e08f5efe1
* Documented nix-store --dump / --restore.
2006-10-05 22:57:07 +00:00
Eelco Dolstra
5fd44654db
* toXML: propagate the context to allow derivations to be used in the
...
argument.
2006-10-03 15:38:59 +00:00
Eelco Dolstra
d20c3011a0
* toFile: added an additional argument to specify the store path
...
suffix, e.g., `builtins.toFile "builder.sh" "..."'.
* toFile: handle references to other files correctly.
2006-10-03 14:55:54 +00:00
Eelco Dolstra
ac19b333b3
* Finally, a real "let" syntax: `let x = ...; ... z = ...; in ...'.
2006-10-02 15:52:44 +00:00
Eelco Dolstra
7581cfdee4
* Hack for Bison 2.3 compatability.
2006-10-02 14:43:15 +00:00
Eelco Dolstra
4ad6fb7ea3
* Fix setuid builds.
2006-09-27 21:04:07 +00:00
Eelco Dolstra
3632019b73
* Quick hack to let nix-install-package set the package name properly
...
(e.g., "java-front-0.9pre15899" instead of "java-front";
particularly important when doing upgrades later on).
2006-09-25 14:00:59 +00:00
Eelco Dolstra
e347033f71
* The result of a concatenation with a derivation on the left-hand
...
side should be a path, I guess.
* Handle paths that are in the store but not direct children of the
store directory.
* Ugh, hack to prevent double context wrapping.
2006-09-24 21:39:57 +00:00
Eelco Dolstra
0e705391db
* Primop `toPath' to convert a string to a path.
...
* Primop `pathExists' to check for path existence.
2006-09-24 18:23:32 +00:00
Eelco Dolstra
e47e0c2dbe
* Builtin function `getEnv' for getting environment variables.
2006-09-24 17:48:41 +00:00
Eelco Dolstra
df8873e14a
* lessThan primitive for integer comparison.
2006-09-24 15:21:48 +00:00
Eelco Dolstra
2ab4bc44c7
* Builtin function `add' to add integers.
...
* Put common test functions in tests/lang/lib.nix.
2006-09-22 15:29:21 +00:00
Eelco Dolstra
d315210612
* Added a builtin function `isList' to test whether a value is a list.
...
With this primitive, a list-flattening function can be implemented
(NIX-55, example is in tests/lang/eval-okay-flatten.nix).
2006-09-22 14:55:19 +00:00
Eelco Dolstra
c02a44183f
* Builtin functions head' and
tail' to return the head and tail of
...
list. Useful for lots of things, such as implementing a fold
function (see NIX-30, example is in tests/lang/eval-okay-list.nix).
2006-09-22 14:46:36 +00:00
Eelco Dolstra
8a1ab709a4
* New builtin functions builtins.{hasAttr, getAttr} to check for
...
attribute existence and to return an attribute from an attribute
set, respectively. Example: `hasAttr "foo" {foo = 1;}'. They
differ from the `?' and `.' operators in that the attribute name is
an arbitrary expression. (NIX-61)
2006-09-22 14:31:55 +00:00
Eelco Dolstra
666babbbfa
* Use a bounded amount of memory in scanForReferences() by not reading
...
regular files into memory all at once.
2006-09-22 13:10:30 +00:00
Eelco Dolstra
d22d7565f3
* Don't allocate the buffer twice.
2006-09-22 11:28:23 +00:00
Eelco Dolstra
b43aeadbc9
* Don't allocate more than SIZE_MAX bytes.
2006-09-22 11:13:35 +00:00
Eelco Dolstra
25df501704
* GC options in nix-store --help (NIX-15).
2006-09-21 19:06:34 +00:00
Eelco Dolstra
4e91d8621f
* Fix comment.
2006-09-21 18:52:05 +00:00
Eelco Dolstra
1bdc152931
* Shut up a warning.
2006-09-20 16:36:29 +00:00
Eelco Dolstra
0623359fbc
* Print a better error message for wrong hashes (NIX-49).
2006-09-20 16:15:32 +00:00
Eelco Dolstra
e0afaf1857
* Wow, that bug has been there since r764.
2006-09-14 22:48:59 +00:00
Eelco Dolstra
86cbd93ec1
* nix-env --switch-generation / --list-generations /
...
--delete-generations: lock the profile to prevent (extremely
unlikely) race conditions.
2006-09-14 22:33:53 +00:00
Eelco Dolstra
5c38c863bd
* Fix a huge gaping hole in nix-env w.r.t. the garbage collector.
...
Nix-env failed to call addPermRoot(), which is necessary to safely
add a new root. So if nix-env started after and finished before the
garbage collector, the user environment (plus all other new stuff)
it built might be garbage collected, leading to a dangling symlink
chain in ~/.nix-profile...
* Be more explicit if we block on the GC lock ("waiting for the big
garbage collector lock...").
* Don't loop trying to create a new generation. It's not necessary
anymore since profiles are locked nowadays.
2006-09-14 22:30:33 +00:00
Eelco Dolstra
01d169f817
* Support `++'.
...
* More follow restrictions on layout.
2006-09-11 13:05:15 +00:00
Eelco Dolstra
feb63da431
* Remove debug message.
2006-09-08 09:31:07 +00:00
Eelco Dolstra
a89a201598
* Missing #include.
2006-09-05 10:32:47 +00:00
Eelco Dolstra
fc195519b5
* Sone missing #includes.
2006-09-05 08:54:48 +00:00
Eelco Dolstra
bafc1690fc
* Move setuid stuff to libutil.
...
* Install libexpr header files.
2006-09-04 22:55:28 +00:00
Eelco Dolstra
e5a6c09b12
* Install header files in /nix/include/nix.
2006-09-04 22:41:36 +00:00
Eelco Dolstra
4be5443882
* Remove unnecessary inclusions of aterm2.h.
2006-09-04 22:08:40 +00:00
Eelco Dolstra
2382a729e0
* Don't need extern "C".
2006-09-04 21:50:39 +00:00
Eelco Dolstra
e3ce954582
* Compile the lexer as C++ code. Remove all the redundant C/C++
...
marshalling code.
2006-09-04 21:36:15 +00:00
Eelco Dolstra
75068e7d75
* Use a proper namespace.
...
* Optimise header file usage a bit.
* Compile the parser as C++.
2006-09-04 21:06:23 +00:00
Eelco Dolstra
aab8812732
* Store the Nix libraries in ${libdir}/nix instead of ${libdir}.
2006-09-04 15:12:24 +00:00
Eelco Dolstra
7974aae81c
* New primop: builtins.toFile, which writes a string into the store
...
and returns its path. This can be used to (for instance) write
builders inside a Nix expression, e.g.,
stdenv.mkDerivation {
builder = "
source $stdenv/setup
...
";
...
}
2006-09-01 12:07:31 +00:00
Eelco Dolstra
de90fdf908
* Allow "$" in strings as long as they are not followed by "{". (Too
...
bad flex doesn't have lexical restrictions, the current solution
isn't quite right...)
2006-09-01 12:04:06 +00:00
Eelco Dolstra
c25f688e23
* Doh! Doh! Doh!
2006-08-31 15:38:43 +00:00
Eelco Dolstra
354d58b3d7
* Better error checking.
2006-08-31 11:40:39 +00:00
Eelco Dolstra
f93f7b75be
* Okay, that's a bit harder than expected.
2006-08-30 13:10:04 +00:00
Eelco Dolstra
3151bdea55
* Uninitialised variable.
2006-08-30 12:00:27 +00:00
Eelco Dolstra
547b119f25
* Support singleton values and nested lists again in `args', but print
...
a warning.
2006-08-29 15:40:49 +00:00
Eelco Dolstra
2132d9ddeb
* Fix the ~ operator.
2006-08-29 15:29:38 +00:00
Eelco Dolstra
1ec9f55741
* In toString, deal with nested lists properly (i.e., flatten them).
2006-08-28 21:47:42 +00:00
Eelco Dolstra
1fca76870b
* Removed processBinding, instead we now apply toString to all
...
derivation attributes to flatten them into strings. This is
possible since string can nowadays be wrapped in contexts that
describe the derivations/sources referenced by the evaluation of the
string.
2006-08-28 13:31:06 +00:00
Eelco Dolstra
8a6080eb14
* Refactoring.
2006-08-26 16:48:01 +00:00
Eelco Dolstra
4b66cebe7b
* Remove those storePath attribute sets, we don't need 'em.
2006-08-25 17:09:55 +00:00
Eelco Dolstra
3e8dccf6ab
* Escape newlines in XML attributes to prevent them from being
...
normalised away.
2006-08-24 15:02:39 +00:00
Eelco Dolstra
215ec2ddc6
* New primop __toXML (or builtins.toXML) to convert an expression to
...
an XML representation stored in a string. This should be useful to
pass structured information to builders.
2006-08-24 14:34:29 +00:00
Eelco Dolstra
f793caf936
* Refactoring.
2006-08-24 14:16:55 +00:00
Eelco Dolstra
da25d80152
* Strict evaluation and XML printing of lists.
2006-08-24 14:03:39 +00:00
Eelco Dolstra
943ab38a0d
* Refactoring: move strictEval to libexpr.
2006-08-24 13:39:22 +00:00
Eelco Dolstra
f41297fdce
* Allow --arg in nix-env as well, example:
...
$ nix-env -qa --system-filter \* --arg system '"powerpc-darwin"'
to override the system from the default value (__currentSystem in
all-packages.nix).
2006-08-23 16:33:21 +00:00
Eelco Dolstra
9638f3f393
* Pass the autoArgs to findAlongAttrPath so that "nix-instantiate
...
foo.nix -A attr --arg name value" will work if (name, value) is
needed in the evaluation leading up to "attr".
2006-08-23 16:20:14 +00:00
Eelco Dolstra
b19cebc513
* Quotes.
2006-08-23 15:46:27 +00:00
Eelco Dolstra
38f18aa6d4
* New primop: abort "error message".
2006-08-23 15:46:00 +00:00
Eelco Dolstra
4a053bfdfd
* A new primop `builtins', which returns an attribute set containing
...
all the primops. This allows Nix expressions to test for new
primops and take appropriate action if they're not available. For
instance, rather than calling a primop `foo' directly, they could
say `if builtins ? foo then builtins.foo ... else ...'.
2006-08-23 14:39:11 +00:00
Eelco Dolstra
24e234a2fa
* Print attributes in sorted order, rather than the arbitrary order
...
produced by ATermMap. Necessary for testing.
* `--strict' should also work on stdin.
2006-08-17 08:53:08 +00:00
Eelco Dolstra
22ba63df16
* More XML output. `--strict' to strictly evaluate attribute sets and
...
so on.
* Removed `--print-args', it's subsumed by `--eval-only --xml'.
2006-08-16 21:59:53 +00:00
Eelco Dolstra
18e4ac0fc6
* `nix-instantiate --{eval|parse}-only --xml': print an XML
...
representation instead of an ATerm.
* Indent XML output.
2006-08-16 10:32:30 +00:00
Eelco Dolstra
2670642733
* Handle carriage returns. Fixes NIX-53.
2006-08-16 10:28:44 +00:00
Martin Bravenboer
3e5b68068b
On cygwin, disable the check that the output is not group or world
...
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-08-15 21:37:48 +00:00
Eelco Dolstra
7455fd8835
* Put the value in an attribute.
2006-08-14 14:24:18 +00:00
Eelco Dolstra
4250b641d8
* `nix-store --gc --print-dead': print the total size of the store
...
objects that would be freed.
2006-08-11 20:26:49 +00:00
Eelco Dolstra
92f7dfa5b7
* Don't assume that paths returned by the runtime root finder are
...
valid.
2006-08-11 20:15:20 +00:00
Eelco Dolstra
d19b6521fc
* New configuration setting `build-max-jobs' which sets the default
...
for the `-j' flag (i.e., the maximum number of jobs to execute in
parallel). Useful on multi-processor machines.
2006-08-10 20:19:13 +00:00
Eelco Dolstra
f1aa71a92f
* Fix the help message wrt --attr.
2006-08-09 15:12:34 +00:00
Eelco Dolstra
a18d02e0b0
* Print a warning that the subpath operator (~) is deprecated.
2006-08-09 15:08:47 +00:00
Eelco Dolstra
a0607be7f4
* Workaround for a bug (?) in GCC 2.95.
2006-08-07 19:48:38 +00:00
Eelco Dolstra
1854f84e83
* Fix a few warnings.
2006-08-04 17:07:13 +00:00
Eelco Dolstra
dcff8cdb76
* Weird issue on Cygwin with the include file order.
2006-08-04 16:01:26 +00:00
Eelco Dolstra
339e6f0e1d
* `nix-env -q --xml': show query result in XML format for easier
...
automated processing.
2006-08-03 15:52:09 +00:00
Eelco Dolstra
0e267e2625
* `nix-instantiate --print-args': produce XML output so that the
...
result can be used more easily by scripts.
2006-08-03 14:49:57 +00:00
Eelco Dolstra
4750f6c5ed
* Simple class for writing XML files.
2006-08-03 13:21:21 +00:00
Eelco Dolstra
6ac237e242
* Show some progress.
2006-08-01 09:43:41 +00:00
Eelco Dolstra
4661282fde
* `nix-instantiate ... --arg NAME VALUE': allow arguments to be passed
...
to functions from the command line.
* nix-build: started removing backticks.
2006-07-28 16:03:28 +00:00
Eelco Dolstra
c11839d7b2
* `nix-instantiate --print-args': print out the valid values for
...
functions arguments that have a domain.
2006-07-28 14:01:29 +00:00
Eelco Dolstra
ca2238cf81
* Refactoring: get the selection path stuff out of getDerivations()
...
and put it into a separate function findAlongAttrPath().
2006-07-26 15:05:15 +00:00
Eelco Dolstra
2317d8f671
* `nix-instantiate --print-args' prints out the arguments of a
...
top-level function.
2006-07-25 21:21:50 +00:00
Eelco Dolstra
0e6dc72a7a
* Applied rbroek's patch from the branch at
...
https://svn.cs.uu.nl:12443/repos/trace/buildfarm-control/trunk/ext/nix/ ,
with some modifications. This allows `nix-env -qa' to show the
attribute path that can be used to unambiguously install a package
using `nix-env -i -A'. Example:
$ nix-env -f top-level/all-packages.nix -qaA subversion xorg-server
subversionWithJava subversion-1.2.3
subversion subversion-1.3.2
subversion14 subversion-1.4.0pre-rc1
xorg.xorgserver xorg-server-1.1.0
2006-07-25 16:40:38 +00:00
Eelco Dolstra
5744dd5480
* Support the --attr / -A flag in nix-env as well. So now we can do,
...
e.g.,
$ nix-env -i -A subversion xorg.xorgserver
The main advantage over using symbolic names is that using attribute
names is unambiguous and much, much faster.
2006-07-25 11:53:22 +00:00
Eelco Dolstra
7a3a5d1608
* When there is a domain check, we have to evaluate the argument.
...
Can't be lazy!
2006-07-24 16:49:28 +00:00
Eelco Dolstra
f4c5531d92
* New language feature: domain checks, which check whether a function
...
argument has a valid value, i.e., is in a certain domain. E.g.,
{ foo : [true false]
, bar : ["a" "b" "c"]
}: ...
This previously could be done using assertions, but domain checks
will allow the buildfarm to automatically extract the configuration
space from functions.
2006-07-24 16:35:34 +00:00
Eelco Dolstra
57751fdb55
* Refactoring to support domain checks.
2006-07-24 15:16:03 +00:00
Eelco Dolstra
a4273156c4
* Use $(libexecdir) to find find-runtime-roots.pl.
2006-07-20 13:21:37 +00:00
Eelco Dolstra
ee2cf45d76
* Use debug().
2006-07-20 12:19:55 +00:00
Eelco Dolstra
c15f544356
* Call find-runtime-roots.pl from the garbage collector to prevent
...
running applications etc. from being garbage collected.
2006-07-20 12:17:25 +00:00
Eelco Dolstra
4f3725b167
* Better error messages (especially wrt types).
2006-07-19 15:36:15 +00:00
Eelco Dolstra
e10b830251
* Doh! Of couse we cannot memoize across scopes.
2006-07-11 10:29:52 +00:00
Eelco Dolstra
d51aede4af
* Allow the canonical system name to be specified at runtime in the
...
Nix config file.
2006-07-06 15:30:37 +00:00
Eelco Dolstra
a945fb7905
* `nix-env --upgrade --eq': only upgrade if the old version is equal
...
to the new version. This is actually useful.
2006-06-27 12:17:25 +00:00
Eelco Dolstra
dbf6d7e783
* Concurrent GC on Cygwin.
2006-06-20 17:48:10 +00:00
Eelco Dolstra
cc51f9c539
* Oops.
2006-06-19 16:35:35 +00:00
Eelco Dolstra
5bb3444032
* _exit() doesn't seem to work right on Cygwin.
2006-06-19 16:24:15 +00:00
Eelco Dolstra
b35735d8b2
* On Windows we cannot delete open (lock) files, so we delete lock
...
files after we've closed them. Since this only succeeds if the lock
is no longer opened by any process, the token trick used on Unix is
not necessary.
2006-06-19 14:43:13 +00:00
Eelco Dolstra
0e783e5579
* Write messages to stderr in a slightly more atomic way. Useful when
...
there are several parallel processes.
2006-06-19 14:37:35 +00:00
Eelco Dolstra
c937b73622
* Show when we're blocked waiting for a lock.
2006-06-16 10:13:03 +00:00
Eelco Dolstra
588cb0eade
* In `nix-env -i|-u|-e', lock the profile to prevent races between
...
concurrent nix-env operations on the same profile. Fixes NIX-7.
2006-06-15 11:56:49 +00:00
Eelco Dolstra
b454977909
* Fix for a problem with BSD's group ownership semantics when the user
...
is not in the "wheel" group.
2006-06-14 11:53:55 +00:00
Eelco Dolstra
23960e92df
* Minor cleanup.
2006-06-01 18:13:33 +00:00
Eelco Dolstra
50fe85f016
* For fixed-output derivations, pass the environment variables listed
...
in the attribute variable `impureEnvVars' from the caller to the
builder.
2006-05-31 09:51:45 +00:00
Eelco Dolstra
1390ce4142
* Not all platforms have sys/select.h.
2006-05-30 11:37:21 +00:00
Eelco Dolstra
b1c63dc362
* Don't use badTerm, it gives awful error messages.
2006-05-30 11:31:33 +00:00
Eelco Dolstra
58b4198ed8
* Disable the concurrent garbage collector on Cygwin for now.
2006-05-29 20:46:51 +00:00
Eelco Dolstra
d764409d97
* Some Cygwin fixes.
2006-05-24 13:23:20 +00:00
Eelco Dolstra
b5988004d6
* Support for srcdir != builddir (NIX-41).
2006-05-12 11:47:45 +00:00
Eelco Dolstra
9d72bf8835
* 64-bit compatibility fixes (for problems revealed by building on an Athlon
...
64 running 64-bit SUSE). A patched ATerm library is required to run Nix
succesfully.
2006-05-11 02:19:43 +00:00
Eelco Dolstra
c54287eafe
* GCC 2.95 compatibility.
2006-05-08 15:15:13 +00:00
Eelco Dolstra
5cabd47394
* Allow function argument default values to refer to other arguments
...
of the function. Implements NIX-45.
2006-05-08 12:52:47 +00:00
Eelco Dolstra
310e605995
* Show evaluation stats when NIX_SHOW_STATS=1.
2006-05-08 10:00:37 +00:00
Eelco Dolstra
0832956089
* Use the new ATermMap.
2006-05-04 12:21:08 +00:00
Eelco Dolstra
d300b4383d
* Optimise null-ary term builders. Also declare all term builder
...
functions as pure, which might improve performance a bit.
2006-05-02 21:58:46 +00:00
Eelco Dolstra
68174bdc7d
* Use a linked list of substitutions. This reduces the amount of
...
copying.
2006-05-02 21:39:02 +00:00
Eelco Dolstra
c791e94aee
* Removed a bunch of ATreverses.
2006-05-02 17:51:50 +00:00
Eelco Dolstra
b52e711910
* Huge reduction in memory use (2/3 or so on large nix-env -qas
...
operations): share ATermMaps between DrvInfos.
2006-05-02 17:12:03 +00:00
Eelco Dolstra
11ae2d1e7a
* Memory reduction: replaced expensive calls to ATmakeApplList by
...
ATmakeApplArray, and got rid of ATreverse in substitute().
2006-05-02 14:07:28 +00:00
Eelco Dolstra
dc719e6ba5
* Some preliminaries towards NIX-45.
2006-05-02 13:39:55 +00:00
Eelco Dolstra
7276e194ee
* Disallow unescaped $ in string literals.
2006-05-01 15:29:46 +00:00
Eelco Dolstra
0064599a27
* String interpolation. Expressions like
...
"--with-freetype2-library=" + freetype + "/lib"
can now be written as
"--with-freetype2-library=${freetype}/lib"
An arbitrary expression can be enclosed within ${...}, not just
identifiers.
* Escaping in string literals: \n, \r, \t interpreted as in C, any
other character following \ is interpreted as-is.
* Newlines are now allowed in string literals.
2006-05-01 14:01:47 +00:00
Eelco Dolstra
6cecad2be0
* Allow string concatenations involving derivations, e.g.,
...
configureFlags = "--with-freetype2-library="
+ freetype + "/lib";
2006-05-01 09:56:56 +00:00
Eelco Dolstra
ef2d4a2da9
* Print a more useful stack trace when an error occurs deep in the
...
derivation dependency graph.
2006-03-24 14:02:44 +00:00
Eelco Dolstra
b69e469328
* In `nix-env', look for derivations inside attribute sets that have
...
the `recurseForDerivations' attribute set to `true'.
2006-03-23 16:43:07 +00:00
Eelco Dolstra
49ce8b57dd
* Hm.
2006-03-23 16:37:49 +00:00
Eelco Dolstra
fdea084c36
* Allow `make check' to work in directories that have symlink
...
components.
2006-03-10 22:27:26 +00:00
Eelco Dolstra
37d1b1cafd
* `nix-env -qa --description' shows human-readable descriptions of
...
packages (provided that they have a `meta.description' attribute).
E.g.,
$ ./src/nix-env/nix-env -qa --description gcc
gcc-4.0.2 GNU Compiler Collection, 4.0.x (cross-compiler for sparc-linux)
gcc-4.0.2 GNU Compiler Collection, 4.0.x (cross-compiler for mips-linux)
gcc-4.0.2 GNU Compiler Collection, 4.0.x (cross-compiler for arm-linux)
gcc-4.0.2 GNU Compiler Collection, 4.0.x
2006-03-10 16:20:42 +00:00
Eelco Dolstra
2b3b6c9b34
* In theory, this should reduce the number of ATermMap
...
re-allocations.
2006-03-10 16:14:13 +00:00
Eelco Dolstra
4ada6db1fc
* `nix-env -q' now accepts arguments that allow specific derivations
...
to be queried, e.g., `nix-env -qa firefox'. This does require the
argument '*' to be passed if one wants information about all
derivations, so the old `nix-env -qa' now is `nix-env -qa "*"'.
2006-03-10 10:24:46 +00:00
Eelco Dolstra
18c321308d
* Ugh, printHash() was very inefficient because it used
...
ostringstreams. Around 11% of execution time was spent here (now
it's 0.5%).
2006-03-09 17:07:25 +00:00
Eelco Dolstra
b90c00e63f
* Regression: semantics of the result of getDerivation() changed.
2006-03-09 15:10:01 +00:00
Eelco Dolstra
922697c8b2
* Big speedup (factor > 2.5) in all nix-env operations that do actual
...
instantiation, e.g. "nix-env -i" and "nix-env -qas" (but not
"nix-env -qa"). It turns out that many redundant calls to
addToStore(path) were made, which reads and hashes the entire path.
For instance, the bash bootstrap binary in Nixpkgs would be read and
hashed many times. As a result nix-env would spend around 92% of
its time in the function sha256_block (according to callgrind).
Some simple memoization fixes this.
2006-03-09 15:09:18 +00:00
Eelco Dolstra
6dca5c9099
* When obtaining derivations from Nix expressions, ignore all
...
expressions that cause an assertion failure (like `assert system ==
"i686-linux"'). This allows all-packages.nix in Nixpkgs to be used
on all platforms, even if some Nix expressions don't work on all
platforms.
Not sure if this is a good idea; it's a bit hacky. In particular,
due to laziness some derivations might appear in `nix-env -qa' but
disappear in `nix-env -qas' or `nix-env -i'.
Commit 5000!
2006-03-08 16:03:58 +00:00
Eelco Dolstra
9088dee9e2
* Some refactoring of the exception handling code so that we can catch
...
Nix expression assertion failures.
2006-03-08 14:11:19 +00:00
Eelco Dolstra
fa72ae1e9c
* GCC 4.1 compatibility.
2006-03-06 14:40:10 +00:00
Eelco Dolstra
c8bfb11b34
* `nix-env (-i|-u) --dry-run' now shows exactly which missing paths
...
will be built or substituted.
2006-03-06 11:21:15 +00:00
Eelco Dolstra
7ba1fd2029
* Regularise help text a bit.
2006-03-06 11:04:39 +00:00
Eelco Dolstra
70dee0f8ca
* Flags --to-base32' and
--to-base16' to convert between hex and
...
base-32 hashes.
2006-03-01 18:05:47 +00:00
Eelco Dolstra
e136532800
* Ouch, parseHash32 was completely broken. All digits >= 4 were
...
parsed as 4.
For a moment I worried that printHash32 was broken, and that would
have been really, *really* bad ;-)
2006-03-01 17:59:08 +00:00
Eelco Dolstra
74166f2f44
* db.hh shouldn't depend on the Berkeley DB headers.
2006-03-01 17:44:28 +00:00
Eelco Dolstra
d822bf32e4
* Close the database before the destructor runs.
2006-03-01 16:36:35 +00:00
Eelco Dolstra
b6780b9e10
* Uninitialised variable. Fixes the --delete test.
2006-03-01 14:39:42 +00:00
Eelco Dolstra
b602d2dfdf
* Wrong delete. Thanks valgrind.
2006-03-01 14:39:10 +00:00