Update release notes for 1.7
This commit is contained in:
parent
25386e5edc
commit
e9934bb5ad
1 changed files with 247 additions and 45 deletions
|
@ -9,26 +9,228 @@
|
|||
|
||||
<section xml:id="ssec-relnotes-1.7"><title>Release 1.7 (TBA)</title>
|
||||
|
||||
<para>This release has the following changes:</para>
|
||||
<para>In addition to the usual bug fixes, this release has the
|
||||
following new features:</para>
|
||||
|
||||
<itemizedlist>
|
||||
|
||||
<listitem>
|
||||
<para>Antiquotation is now allowed inside of quoted attribute
|
||||
names (e.g. <literal>set."${foo}"</literal>). In the case where
|
||||
the attribute name is just a single antiquotation, the quotes can
|
||||
be dropped (e.g. the above example can be written
|
||||
<literal>set.${foo}</literal>). If an attribute name inside of a
|
||||
set declaration evaluates to <literal>null</literal> (e.g.
|
||||
<literal>{ ${null} = false; }</literal>), then that attribute is
|
||||
not added to the set.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>Experimental support for cryptographically signed binary
|
||||
caches. See <link
|
||||
xlink:href="https://github.com/NixOS/nix/commit/0fdf4da0e979f992db75cc17376e455ddc5a96d8">the
|
||||
commit for details</link>.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>An experimental new substituter,
|
||||
<command>download-via-ssh</command>, that fetches binaries from
|
||||
remote machines via SSH. Specifying the flags <literal>--option
|
||||
use-ssh-substituter true --option ssh-substituter-hosts
|
||||
<replaceable>user@hostname</replaceable></literal> will cause Nix
|
||||
to download binaries from the specified machine, if it has
|
||||
them.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para><command>nix-store -r</command> and
|
||||
<command>nix-build</command> have a new flag,
|
||||
<option>--check</option>, that builds a previously built
|
||||
derivation again, and prints an error message if the output is not
|
||||
exactly the same. This helps to verify whether a derivation is
|
||||
truly deterministic. For example:
|
||||
|
||||
<screen>
|
||||
$ nix-build '<nixpkgs>' -A patchelf
|
||||
<replaceable>…</replaceable>
|
||||
$ nix-build '<nixpkgs>' -A patchelf --check
|
||||
<replaceable>…</replaceable>
|
||||
error: derivation `/nix/store/1ipvxs…-patchelf-0.6' may not be deterministic:
|
||||
hash mismatch in output `/nix/store/4pc1dm…-patchelf-0.6.drv'
|
||||
</screen>
|
||||
|
||||
</para>
|
||||
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>The <command>nix-instantiate</command> flags
|
||||
<option>--eval-only</option> and <option>--parse-only</option>
|
||||
have been renamed to <option>--eval</option> and
|
||||
<option>--parse</option>, respectively.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para><command>nix-instantiate</command>,
|
||||
<command>nix-build</command> and <command>nix-shell</command> now
|
||||
have a flag <option>--expr</option> (or <option>-E</option>) that
|
||||
allows you to specify the expression to be evaluated as a command
|
||||
line argument. For instance, <literal>nix-instantiate --eval -E
|
||||
'1 + 2'</literal> will print <literal>3</literal>.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para><command>nix-shell</command> improvements:</para>
|
||||
|
||||
<itemizedlist>
|
||||
|
||||
<listitem>
|
||||
<para>It has a new flag, <option>--packages</option> (or
|
||||
<option>-p</option>), that sets up a build environment
|
||||
containing the specified packages from Nixpkgs. For example,
|
||||
the command
|
||||
|
||||
<screen>
|
||||
$ nix-shell -p sqlite xorg.libX11 hello
|
||||
</screen>
|
||||
|
||||
will start a shell in which the given packages are
|
||||
present.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>It now uses <filename>shell.nix</filename> as the
|
||||
default expression, falling back to
|
||||
<filename>default.nix</filename> if the former doesn’t
|
||||
exist. This makes it convenient to have a
|
||||
<filename>shell.nix</filename> in your project to set up a
|
||||
nice development environment.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>It evaluates the derivation attribute
|
||||
<varname>shellHook</varname>, if set. Since
|
||||
<literal>stdenv</literal> does not normally execute this hook,
|
||||
it allows you to do <command>nix-shell</command>-specific
|
||||
setup.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>It preserves the user’s timezone setting.</para>
|
||||
</listitem>
|
||||
|
||||
</itemizedlist>
|
||||
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>In chroots, Nix now sets up a <filename>/dev</filename>
|
||||
containing only a minimal set of devices (such as
|
||||
<filename>/dev/null</filename>). Note that it only does this if
|
||||
you <emphasis>don’t</emphasis> have <filename>/dev</filename>
|
||||
listed in your <option>build-chroot-dirs</option> setting;
|
||||
otherwise, it will bind-mount the <literal>/dev</literal> from
|
||||
outside the chroot.</para>
|
||||
|
||||
<para>Similarly, if you don’t have <filename>/dev/pts</filename> listed
|
||||
in <option>build-chroot-dirs</option>, Nix will mount a private
|
||||
<literal>devpts</literal> filesystem on the chroot’s
|
||||
<filename>/dev/pts</filename>.</para>
|
||||
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>New built-in function: <function>builtins.toJSON</function>,
|
||||
which returns a JSON representation of a value.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem><para><command>nix-setuid-helper</command> is
|
||||
gone.</para></listitem>
|
||||
<listitem>
|
||||
<para><command>nix-env -q</command> has a new flag
|
||||
<option>--json</option> to print a JSON representation of the
|
||||
installed or available packages.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem><para>Now antiquotation is allowed inside of quoted
|
||||
attribute names (e.g. <literal>set."${foo}"</literal>). In the
|
||||
case where the attribute name is just a single antiquotation,
|
||||
the quotes can be dropped (e.g. the above example can be written
|
||||
<literal>set.${foo}</literal>). If an attribute name inside of a
|
||||
set declaration evaluates to <literal>null</literal> (e.g.
|
||||
<literal>{ ${null} = false; }</literal>), then that attribute is not
|
||||
added to the set.</para></listitem>
|
||||
<listitem>
|
||||
<para><command>nix-env</command> now supports meta attributes with
|
||||
more complex values, such as attribute sets.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>The <option>-A</option> flag now allows attribute names with
|
||||
dots in them, e.g.
|
||||
|
||||
<screen>
|
||||
$ nix-instantiate --eval '<nixos>' -A 'config.systemd.units."nscd.service".text'
|
||||
</screen>
|
||||
|
||||
</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>The <option>--max-freed</option> option to
|
||||
<command>nix-store --gc</command> now accepts a unit
|
||||
specifier. For example, <literal>nix-store --gc --max-freed
|
||||
1G</literal> will free up to 1 gigabyte of disk space.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>Nix now heuristically detects whether a build failure was
|
||||
due to a disk-full condition. In that case, the build is not
|
||||
flagged as “permanently failed”. This is mostly useful for Hydra,
|
||||
which needs to distinguish between permanent and transient build
|
||||
failures.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>There is a new symbol <literal>__curPos</literal> that
|
||||
expands to an attribute set containing its file name and line and
|
||||
column numbers, e.g. <literal>{ file = "foo.nix"; line = 10;
|
||||
column = 5; }</literal>. There also is a new builtin function,
|
||||
<varname>unsafeGetAttrPos</varname>, that returns the position of
|
||||
an attribute. This is used by Nixpkgs to provide location
|
||||
information in error messages, e.g.
|
||||
|
||||
<screen>
|
||||
$ nix-build '<nixpkgs>' -A libreoffice --argstr system x86_64-darwin
|
||||
error: the package ‘libreoffice-4.0.5.2’ in ‘.../applications/office/libreoffice/default.nix:263’
|
||||
is not supported on ‘x86_64-darwin’
|
||||
</screen>
|
||||
|
||||
</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>The garbage collector is now more concurrent with other Nix
|
||||
processes because it releases certain locks earlier.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>The binary tarball installer has been improved. You can now
|
||||
install Nix by running:
|
||||
|
||||
<screen>
|
||||
$ bash <(curl https://nixos.org/nix/install)
|
||||
</screen>
|
||||
|
||||
</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>The command <command>nix-setuid-helper</command> is
|
||||
gone.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>Nix no longer uses Automake, but instead has a
|
||||
non-recursive, GNU Make-based build system.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>All installed libraries now have the prefix
|
||||
<literal>libnix</literal>. In particular, this gets rid of
|
||||
<literal>libutil</literal>, which could clash with libraries with
|
||||
the same name from other packages.</para>
|
||||
</listitem>
|
||||
|
||||
</itemizedlist>
|
||||
|
||||
|
|
Loading…
Reference in a new issue