2020-07-23 00:17:48 +03:00
|
|
|
|
# Release 1.2 (2012-12-06)
|
|
|
|
|
|
|
|
|
|
This release has the following improvements and changes:
|
|
|
|
|
|
|
|
|
|
- Nix has a new binary substituter mechanism: the *binary cache*. A
|
|
|
|
|
binary cache contains pre-built binaries of Nix packages. Whenever
|
|
|
|
|
Nix wants to build a missing Nix store path, it will check a set of
|
|
|
|
|
binary caches to see if any of them has a pre-built binary of that
|
|
|
|
|
path. The configuration setting `binary-caches` contains a list of
|
|
|
|
|
URLs of binary caches. For instance, doing
|
|
|
|
|
|
|
|
|
|
$ nix-env -i thunderbird --option binary-caches http://cache.nixos.org
|
|
|
|
|
|
|
|
|
|
will install Thunderbird and its dependencies, using the available
|
|
|
|
|
pre-built binaries in <http://cache.nixos.org>. The main advantage
|
|
|
|
|
over the old “manifest”-based method of getting pre-built binaries
|
|
|
|
|
is that you don’t have to worry about your manifest being in sync
|
|
|
|
|
with the Nix expressions you’re installing from; i.e., you don’t
|
|
|
|
|
need to run `nix-pull` to update your manifest. It’s also more
|
|
|
|
|
scalable because you don’t need to redownload a giant manifest file
|
|
|
|
|
every time.
|
|
|
|
|
|
|
|
|
|
A Nix channel can provide a binary cache URL that will be used
|
|
|
|
|
automatically if you subscribe to that channel. If you use the
|
|
|
|
|
Nixpkgs or NixOS channels (<http://nixos.org/channels>) you
|
|
|
|
|
automatically get the cache <http://cache.nixos.org>.
|
|
|
|
|
|
|
|
|
|
Binary caches are created using `nix-push`. For details on the
|
|
|
|
|
operation and format of binary caches, see the `nix-push` manpage.
|
|
|
|
|
More details are provided in [this nix-dev
|
|
|
|
|
posting](https://nixos.org/nix-dev/2012-September/009826.html).
|
|
|
|
|
|
|
|
|
|
- Multiple output support should now be usable. A derivation can
|
|
|
|
|
declare that it wants to produce multiple store paths by saying
|
|
|
|
|
something like
|
|
|
|
|
|
|
|
|
|
outputs = [ "lib" "headers" "doc" ];
|
|
|
|
|
|
|
|
|
|
This will cause Nix to pass the intended store path of each output
|
|
|
|
|
to the builder through the environment variables `lib`, `headers`
|
|
|
|
|
and `doc`. Other packages can refer to a specific output by
|
|
|
|
|
referring to `pkg.output`, e.g.
|
|
|
|
|
|
|
|
|
|
buildInputs = [ pkg.lib pkg.headers ];
|
|
|
|
|
|
|
|
|
|
If you install a package with multiple outputs using `nix-env`, each
|
|
|
|
|
output path will be symlinked into the user environment.
|
|
|
|
|
|
|
|
|
|
- Dashes are now valid as part of identifiers and attribute names.
|
|
|
|
|
|
|
|
|
|
- The new operation `nix-store --repair-path` allows corrupted or
|
|
|
|
|
missing store paths to be repaired by redownloading them. `nix-store
|
|
|
|
|
--verify --check-contents
|
|
|
|
|
--repair` will scan and repair all paths in the Nix store.
|
|
|
|
|
Similarly, `nix-env`, `nix-build`, `nix-instantiate` and `nix-store
|
|
|
|
|
--realise` have a `--repair` flag to detect and fix bad paths by
|
|
|
|
|
rebuilding or redownloading them.
|
|
|
|
|
|
|
|
|
|
- Nix no longer sets the immutable bit on files in the Nix store.
|
|
|
|
|
Instead, the recommended way to guard the Nix store against
|
|
|
|
|
accidental modification on Linux is to make it a read-only bind
|
|
|
|
|
mount, like this:
|
|
|
|
|
|
|
|
|
|
$ mount --bind /nix/store /nix/store
|
|
|
|
|
$ mount -o remount,ro,bind /nix/store
|
|
|
|
|
|
|
|
|
|
Nix will automatically make `/nix/store` writable as needed (using a
|
|
|
|
|
private mount namespace) to allow modifications.
|
|
|
|
|
|
|
|
|
|
- Store optimisation (replacing identical files in the store with hard
|
|
|
|
|
links) can now be done automatically every time a path is added to
|
|
|
|
|
the store. This is enabled by setting the configuration option
|
|
|
|
|
`auto-optimise-store` to `true` (disabled by default).
|
|
|
|
|
|
|
|
|
|
- Nix now supports `xz` compression for NARs in addition to `bzip2`.
|
|
|
|
|
It compresses about 30% better on typical archives and decompresses
|
|
|
|
|
about twice as fast.
|
|
|
|
|
|
|
|
|
|
- Basic Nix expression evaluation profiling: setting the environment
|
2020-07-23 11:44:54 +03:00
|
|
|
|
variable `NIX_COUNT_CALLS` to `1` will cause Nix to print how many
|
2020-07-23 00:17:48 +03:00
|
|
|
|
times each primop or function was executed.
|
|
|
|
|
|
|
|
|
|
- New primops: `concatLists`, `elem`, `elemAt` and `filter`.
|
|
|
|
|
|
|
|
|
|
- The command `nix-copy-closure` has a new flag `--use-substitutes`
|
|
|
|
|
(`-s`) to download missing paths on the target machine using the
|
|
|
|
|
substitute mechanism.
|
|
|
|
|
|
|
|
|
|
- The command `nix-worker` has been renamed to `nix-daemon`. Support
|
|
|
|
|
for running the Nix worker in “slave” mode has been removed.
|
|
|
|
|
|
|
|
|
|
- The `--help` flag of every Nix command now invokes `man`.
|
|
|
|
|
|
|
|
|
|
- Chroot builds are now supported on systemd machines.
|
|
|
|
|
|
|
|
|
|
This release has contributions from Eelco Dolstra, Florian Friesdorf,
|
|
|
|
|
Mats Erik Andersson and Shea Levy.
|