about summary refs log tree commit diff
path: root/src/nix-env
AgeCommit message (Collapse)AuthorFilesLines
2005-01-19 * Started removing closure store expressions, i.e., the explicitEelco Dolstra3-16/+11
representation of closures as ATerms in the Nix store. Instead, the file system pointer graph is now stored in the Nix database. This has many advantages: - It greatly simplifies the implementation (we can drop the notion of `successors', and so on). - It makes registering roots for the garbage collector much easier. Instead of specifying the closure expression as a root, you can simply specify the store path that must be retained as a root. This could not be done previously, since there was no way to find the closure store expression containing a given store path. - Better traceability: it is now possible to query what paths are referenced by a path, and what paths refer to a path.
2005-01-17 * Removed the `id' attribute hack.Eelco Dolstra1-8/+1
* Formalise the notion of fixed-output derivations, i.e., derivations for which a cryptographic hash of the output is known in advance. Changes to such derivations should not propagate upwards through the dependency graph. Previously this was done by specifying the hash component of the output path through the `id' attribute, but this is insecure since you can lie about it (i.e., you can specify any hash and then produce a completely different output). Now the responsibility for checking the output is moved from the builder to Nix itself. A fixed-output derivation can be created by specifying the `outputHash' and `outputHashAlgo' attributes, the latter taking values `md5', `sha1', and `sha256', and the former specifying the actual hash in hexadecimal or in base-32 (auto-detected by looking at the length of the attribute value). MD5 is included for compatibility but should be considered deprecated. * Removed the `drvPath' pseudo-attribute in derivation results. It's no longer necessary. * Cleaned up the support for multiple output paths in derivation store expressions. Each output now has a unique identifier (e.g., `out', `devel', `docs'). Previously there was no way to tell output paths apart at the store expression level. * `nix-hash' now has a flag `--base32' to specify that the hash should be printed in base-32 notation. * `fetchurl' accepts parameters `sha256' and `sha1' in addition to `md5'. * `nix-prefetch-url' now prints out a SHA-1 hash in base-32. (TODO: a flag to specify the hash.)
2005-01-14 * Shorten SHA-256 hashes used in store path name generation to 160Eelco Dolstra1-6/+2
bits, then encode them in a radix-32 representation (using digits and letters except e, o, u, and t). This produces store paths like /nix/store/4i0zb0z7f88mwghjirkz702a71dcfivn-aterm-2.3.1. The nice thing about this is that the hash part of the file name is still 32 characters, as before with MD5. (Of course, shortening SHA-256 to 160 bits makes it no better than SHA-160 in theory, but hopefully it's a bit more resistant to attacks; it's certainly a lot slower.)
2005-01-14 * Start move towards SHA-256 hashes instead of MD5.Eelco Dolstra1-1/+1
* Start cleaning up unique store path generation (they weren't always unique; in particular the suffix ("-aterm-2.2", "-builder.sh") was not part of the hash, therefore changes to the suffix would cause multiple store objects with the same hash).
2005-01-13 * Refactoring to support SHA-1.Eelco Dolstra1-0/+4
2004-11-12 * Document --delete-generations and other nix-env options.Eelco Dolstra1-0/+4
2004-11-03 * string2ATerm -> overloaded toATerm.Eelco Dolstra1-17/+17
2004-10-29 * Drop ATmake / ATMatcher also in handling store expressions.Eelco Dolstra1-5/+7
2004-10-27 * Turn on read-only mode in queries. This prevents redundant store I/O.Eelco Dolstra1-0/+2
2004-10-26 * Don't use ATmake / ATmatch anymore, nor the ATMatcher class.Eelco Dolstra1-33/+30
Instead we generate data bindings (build and match functions) for the constructors specified in `constructors.def'. In particular this removes the conversions between AFuns and strings, and Nix expression evaluation now seems 3 to 4 times faster.
2004-10-14 * In `nix-env -q', sort derivations by name *without* caseEelco Dolstra1-1/+9
sensitivity.
2004-09-10 * Operation `--delete-generations' to delete generations of aEelco Dolstra4-21/+82
profile. Arguments are either generation number, or `old' to delete all non-current generations. Typical use: $ nix-env --delete-generations old $ nix-collect-garbage * istringstream -> string2Int.
2004-09-09 * A very dirty hack to make setuid installations a bit nicer to use.Eelco Dolstra1-0/+3
Previously there was the problem that all files read by nix-env etc. should be reachable and readable by the Nix user. So for instance building a Nix expression in your home directory meant that the home directory should have at least g+x or o+x permission so that the Nix user could reach the Nix expression. Now we just switch back to the original user just prior to reading sources and the like. The places where this happens are somewhat arbitrary, however. Any scope that has a live SwitchToOriginalUser object in it is executed as the original user. * Back out r1385. setreuid() sets the saved uid to the new real/effective uid, which prevents us from switching back to the original uid. setresuid() doesn't have this problem (although the manpage has a bug: specifying -1 for the saved uid doesn't leave it unchanged; an explicit value must be specified).
2004-08-18 * The default verbosity level of all Nix commands is now lvlInfo.Eelco Dolstra1-3/+0
* Builder output is written to standard error by default. * The option `-B' is gone. * The option `-Q' suppresses builder output. The result of this is that most Nix invocations shouldn't need any flags w.r.t. logging.
2004-07-01 * Nix-env operations now by default filter out any derivations forEelco Dolstra1-9/+28
system types other than the current system. I.e., `nix-env -i' won't install derivations for other system types, and `nix-env -q' won't show them. The flag `--system-filter SYSTEM' can be used to override the system type used for filtering (but not for building!). The value `*' can be used not to filter anything.
2004-07-01 * Align the columns in the output of `nix-env -q'.Eelco Dolstra1-4/+36
2004-07-01 * Allow the system attribute of derivations to be queried inEelco Dolstra1-37/+50
`nix-env -q'. * Queries can now be combined, e.g., `nix-env -q --status --system'.
2004-07-01 * Include some missing headers.Eelco Dolstra1-0/+1
2004-06-28 * By default, `nix-env -i' now deletes previously installedEelco Dolstra1-3/+21
derivations with names matching the derivations being installed. The option `--preserve-installed / -P' overrides this behaviour.
2004-06-28 * `nix-env -u' now allows a specific version to be specified whenEelco Dolstra1-4/+7
upgrading. This fixes a bug reported by Martin: $ nix-env -i foo-1.0 $ nix-env -u foo-1.0 upgrading foo-1.0 to foo-1.1
2004-06-28 * Added a switch `--fallback'. From the manual:Eelco Dolstra1-2/+1
Whenever Nix attempts to realise a derivation for which a closure is already known, but this closure cannot be realised, fall back on normalising the derivation. The most common scenario in which this is useful is when we have registered substitutes in order to perform binary distribution from, say, a network repository. If the repository is down, the realisation of the derivation will fail. When this option is specified, Nix will build the derivation instead. Thus, binary installation falls back on a source installation. This option is not the default since it is generally not desirable for a transient failure in obtaining the substitutes to lead to a full build from source (with the related consumption of resources).
2004-06-20 * Re-enable support for substitutes in the normaliser.Eelco Dolstra1-1/+1
* A better substitute mechanism. Instead of generating a store expression for each store path for which we have a substitute, we can have a single store expression that builds a generic program that is invoked to build the desired store path, which is passed as an argument. This means that operations like `nix-pull' only produce O(1) files instead of O(N) files in the store when registering N substitutes. (It consumes O(N) database storage, of course, but that's not a performance problem). * Added a test for the substitute mechanism. * `nix-store --substitute' reads the substitutes from standard input, instead of from the command line. This prevents us from running into the kernel's limit on command line length.
2004-05-12 * An quick and dirty hack to support distributed builds.Eelco Dolstra1-1/+1
2004-04-22 * Don't create $(localstatedir)/nix/profiles if --disable-init-stateEelco Dolstra1-3/+0
is specified.
2004-04-21 * Recurse into attribute sets and lists when getting derivations fromEelco Dolstra1-0/+4
an expression.
2004-04-05 * When something goes wrong in the evaluation of a Nix expression,Eelco Dolstra1-10/+29
print a nice backtrace of the stack, rather than vomiting a gigantic (and useless) aterm on the screen. Example: error: while evaluating file `.../pkgs/system/test.nix': while evaluating attribute `subversion' at `.../pkgs/system/all-packages-generic.nix', line 533: while evaluating function at `.../pkgs/applications/version-management/subversion/default.nix', line 1: assertion failed at `.../pkgs/applications/version-management/subversion/default.nix', line 13 Since the Nix expression language is lazy, the trace may be misleading. The purpose is to provide a hint as to the location of the problem.
2004-02-16 * Allow linking against an external Berkeley DB / ATerm library.Eelco Dolstra1-3/+2
2004-02-11 * When creating a new generation, also make the normal form of theEelco Dolstra3-6/+10
derivation (i.e., the closure store expression) a root of the garbage collector. This ensures that running `nix-collect-garbage --no-successors' is safe.
2004-02-10 * Print what generation we are switching to; honour --dry-run flag.Eelco Dolstra1-0/+5
2004-02-09 * In `--upgrade': added flags `--lt', `--leq', `--always' to specifyEelco Dolstra4-24/+81
whether we want to upgrade if the current version is less than the available version (default), when it is less or equal, or always. * Added a flag `--dry-run' to show what would happen in `--install', `--uninstall', and `--upgrade', without actually performing the operation.
2004-02-08 * A command `--switch-generation' to switch to a specific generationEelco Dolstra3-0/+71
of the current profile, e.g., $ nix-env --list-generations ... 39 2004-02-02 17:53:53 40 2004-02-02 17:55:18 41 2004-02-02 17:55:41 42 2004-02-02 17:55:50 (current) $ nix-env --switch-generation 39 $ ls -l /nix/var/nix/profiles/default ... default -> default-39-link * Also a command `--rollback' which is just a convenience operation to rollback to the oldest generation younger than the current one. Note that generations properly form a tree. E.g., if after switching to generation 39, we perform an installation action, a generation 43 is created which is a descendant of 39, not 42. So a rollback from 43 ought to go back to 39. This is not currently implemented; generations form a linear sequence.
2004-02-06 * In `--list-generations', show what the current generation is.Eelco Dolstra3-13/+30
2004-02-06 * A command `--list-generations' to show all generations for aEelco Dolstra3-9/+80
profile.
2004-02-06 * More refactoring.Eelco Dolstra4-57/+74
2004-02-06 * Refactoring.Eelco Dolstra4-131/+152
2004-02-06 * Use the profile pointed to by ~/.nix-profile if no --profileEelco Dolstra1-6/+11
argument is specified.
2004-02-06 * Improvements to profiles. Generations are now per-profile, e.g.,Eelco Dolstra3-44/+51
default -> default-94-link default-82-link -> /nix/store/cc4480... default-83-link -> /nix/store/caeec8... ... default-94-link -> /nix/store/2896ca... experimental -> experimental-2-link experimental-1-link -> /nix/store/cc4480... experimental-2-link -> /nix/store/a3148f... * `--profile' / `-p' -> `--switch-profile' / `-S' * `--link' / `-l' -> `--profile' / `-p' * The default profile is stored in $prefix/var/nix/profiles. $prefix/var/nix/links is gone. Profiles can be stored anywhere. * The current profile is now referenced from ~/.nix-profile, not ~/.nix-userenv. * The roots to the garbage collector now have extension `.gcroot', not `.id'.
2004-02-04 * Use a map to lookup primops.Eelco Dolstra2-3/+4
* Various performance improvements in the evaluator. * Do not link against unused (and missing!) libraries (-lsglr, etc.).
2004-02-02 * Sort `nix-env -q' output by derivation name.Eelco Dolstra2-11/+24
* `--version' flag for all commands. * Manual updates.
2004-01-21 * Extra bit `S' in `--query --status' output: show whether there areEelco Dolstra1-1/+3
any substitutes for the derivation.
2004-01-20 * Absolutise the specified path in `--import' and `--profile'.Eelco Dolstra1-2/+2
2004-01-15 * In `nix-env --query --status', determine the `I' bit by looking atEelco Dolstra1-1/+7
the output path of a derivation, not the path of its store expression. This ensures that changes that affect the path of the store expression but not the output path, do not affect the `installed' state of a derivation.
2004-01-05 * Implemented Eelco V.'s `nix-env -I' command to specify the defaultEelco Dolstra2-24/+55
path of the Nix expression to be used with the import, upgrade, and query commands. For instance, $ nix-env -I ~/nixpkgs/pkgs/system/i686-linux.nix $ nix-env --query --available [aka -qa] sylpheed-0.9.7 bison-1.875 pango-1.2.5 subversion-0.35.1 ... $ nix-env -i sylpheed $ nix-env -u subversion There can be only one default at a time. * If the path to a Nix expression is a symlink, follow the symlink prior to resolving relative path references in the expression.
2004-01-05 * Implemented Eelco V.'s `-p' command to switch profiles. It switchesEelco Dolstra2-0/+24
the symlink ~/.nix-userenv to the given argument (which defaults to .../links/current). /etc/profile.d/nix-profile creates this symlink if it doesn't exist yet. Example use: $ nix-env -l my_profile -i foo.nix subversion quake $ nix-env -p my_profile I don't like the term "profile". Let's deprecate it :-)
2003-12-23 * Fixed a bug in the upgrade operation.Eelco Dolstra1-11/+13
2003-12-22 * GCC 2.95 compatibility.Eelco Dolstra1-0/+2
2003-12-22 * Upgrade operation in `nix-env'. For instance, you can sayEelco Dolstra1-23/+163
nix-env -u foo.nix strategoxt to replace the installed `strategoxt' derivation with the one from `foo.nix', if the latter has a higher version number. This is a no-op if `strategoxt' is not installed. Wildcards are also accepted, so nix-env -u foo.nix '*' will replace any installed derivation with newer versions from `foo.nix', if available. The notion of "version number" is somewhat ad hoc, but should be useful in most cases, as evidenced by the following unit tests for the version comparator: TEST("1.0", "2.3", -1); TEST("2.1", "2.3", -1); TEST("2.3", "2.3", 0); TEST("2.5", "2.3", 1); TEST("3.1", "2.3", 1); TEST("2.3.1", "2.3", 1); TEST("2.3.1", "2.3a", 1); TEST("2.3pre1", "2.3", -1); TEST("2.3pre3", "2.3pre12", -1); TEST("2.3a", "2.3c", -1); TEST("2.3pre1", "2.3c", -1); TEST("2.3pre1", "2.3q", -1); (-1 = less, 0 = equal, 1 = greater) * A new verbosity level `lvlInfo', between `lvlError' and `lvlTalkative'. This is the default for `nix-env', so without any `-v' flags users should get useful output, e.g., $ nix-env -u foo.nix strategoxt upgrading `strategoxt-0.9.2' to `strategoxt-0.9.3'
2003-12-21 * Version numbers can be omitted in install/uninstall. E.g.,Eelco Dolstra2-34/+106
nix-env -i foo.nix subversion The version number part of a derivation name is defined as everything following the first dash not followed by a letter.
2003-12-21 * `-u' -> `-e'.Eelco Dolstra2-39/+58
* `--link' / `-l' flag to specify the switch symlink to use (by default, /nix/var/nix/links/current).
2003-12-02 * Add missing files to `make dist'.Eelco Dolstra1-1/+1