[Nix-dev] Nix 0.12 released

Marc Weber marco-oweber at gmx.de
Thu Nov 20 23:39:10 CET 2008


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



More information about the nix-dev mailing list