[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