On Thu, Nov 20, 2008 at 11:01:29PM +0100, Eelco Dolstra wrote: > Hi, > > I'm pleased to announce the availability of a new stable release of the > Nix package manager. Release 0.12 can be found at > > http://nixos.org/releases/nix/nix-0.12/ > > *** Release notes *** > > The release notes can also be found at > http://nixos.org/releases/nix/nix-0.12/release-notes. > > * Nix no longer uses Berkeley DB to store Nix store metadata. The principal > advantages of the new storage scheme are: it works properly over decent > implementations of NFS (allowing Nix stores to be shared between multiple > machines); no recovery is needed when a Nix process crashes; no write > access is needed for read-only operations; no more running out of Berkeley > DB locks on certain operations. > > You still need to compile Nix with Berkeley DB support if you want Nix to > automatically convert your old Nix store to the new schema. If you don't > need this, you can build Nix with the configure option > --disable-old-db-compat. > > After the automatic conversion to the new schema, you can delete the old > Berkeley DB files: > > $ cd /nix/var/nix/db > $ rm __db* log.* derivers references referrers reserved validpaths > DB_CONFIG > > The new metadata is stored in the directories /nix/var/nix/db/info and > /nix > /var/nix/db/referrer. Though the metadata is stored in human-readable > plain-text files, they are not intended to be human-editable, as Nix is > rather strict about the format. > > The new storage schema may or may not require less disk space than the > Berkeley DB environment, mostly depending on the cluster size of your file > system. With 1 KiB clusters (which seems to be the ext3 default nowadays) > it usually takes up much less space. > > * There is a new substituter that copies paths directly from other (remote) > Nix stores mounted somewhere in the filesystem. For instance, you can > speed > up an installation by mounting some remote Nix store that already has the > packages in question via NFS or sshfs. The environment variable > NIX_OTHER_STORES specifies the locations of the remote Nix directories, > e.g. /mnt/remote-fs/nix. > > * New nix-store operations --dump-db and --load-db to dump and reload the > Nix > database. > > * The garbage collector has a number of new options to allow only some of > the > garbage to be deleted. The option --max-freed N tells the collector to > stop > after at least N bytes have been deleted. The option --max-links N tells > it > to stop after the link count on /nix/store has dropped below N. This is > useful for very large Nix stores on filesystems with a 32000 > subdirectories > limit (like ext3). The option --use-atime causes store paths to be deleted > in order of ascending last access time. This allows non-recently used > stuff > to be deleted. The option --max-atime time specifies an upper limit to the > last accessed time of paths that may be deleted. For instance, > > $ nix-store --gc -v --max-atime $(date +%s -d "2 months ago") > > deletes everything that hasn't been accessed in two months. > > * nix-env now uses optimistic profile locking when performing an operation > like installing or upgrading, instead of setting an exclusive lock on the > profile. This allows multiple nix-env -i / -u / -e operations on the same > profile in parallel. If a nix-env operation sees at the end that the > profile was changed in the meantime by another process, it will just > restart. This is generally cheap because the build results are still in > the > Nix store. > > * The option --dry-run is now supported by nix-store -r and nix-build. > > * The information previously shown by --dry-run (i.e., which derivations > will > be built and which paths will be substituted) is now always shown by > nix-env, nix-store -r and nix-build. The total download size of > substitutable paths is now also shown. For instance, a build will show > something like > > the following derivations will be built: > > /nix/store/129sbxnk5n466zg6r1qmq1xjv9zymyy7-activate-configuration.sh.drv > /nix/store/7mzy971rdm8l566ch8hgxaf89x7lr7ik-upstart-jobs.drv > ... > the following paths will be downloaded/copied (30.02 MiB): > /nix/store/4m8pvgy2dcjgppf5b4cj5l6wyshjhalj-samba-3.2.4 > /nix/store/7h1kwcj29ip8vk26rhmx6bfjraxp0g4l-libunwind-0.98.6 > ... > > * Language features: > > o @-patterns as in Haskell. For instance, in a function definition > > f = args @ {x, y, z}: ...; > > args refers to the argument as a whole, which is further > pattern-matched against the attribute set pattern {x, y, z}. > > o "..." (ellipsis) patterns. An attribute set pattern can now say ... at > the end of the attribute name list to specify that the function takes > at least the listed attributes, while ignoring additional attributes. > For instance, > > {stdenv, fetchurl, fuse, ...}: ... > > defines a function that accepts any attribute set that includes at > least the three listed attributes. > > o New primops: builtins.parseDrvName (split a package name string like > "nix-0.12pre12876" into its name and version components, e.g. "nix" > and > "0.12pre12876"), builtins.compareVersions (compare two version strings > using the same algorithm that nix-env uses), builtins.length > (efficiently compute the length of a list), builtins.mul (integer > multiplication), builtins.div (integer division). > > * nix-prefetch-url now supports mirror:// URLs, provided that the > environment > variable NIXPKGS_ALL points at a Nixpkgs tree. > > * Removed the commands nix-pack-closure and nix-unpack-closure. You can do > almost the same thing but much more efficiently by doing nix-store > --export > $(nix-store -qR paths) > closure and nix-store --import < closure. > > * Lots of bug fixes, including a big performance bug in the handling of > with-expressions. Thanks for the summary, You make some of my scripts obsolete now. Great features - thanks!
Marc Weber _______________________________________________ nix-dev mailing list [email protected] https://mail.cs.uu.nl/mailman/listinfo/nix-dev
