git-subtree-dir: third_party/nix
git-subtree-mainline: cf8cd640c1
git-subtree-split: be66c7a6b24e3c3c6157fd37b86c7203d14acf10
		
	
			
		
			
				
	
	
		
			261 lines
		
	
	
	
		
			11 KiB
		
	
	
	
		
			XML
		
	
	
	
	
	
			
		
		
	
	
			261 lines
		
	
	
	
		
			11 KiB
		
	
	
	
		
			XML
		
	
	
	
	
	
<section xmlns="http://docbook.org/ns/docbook"
 | 
						||
      xmlns:xlink="http://www.w3.org/1999/xlink"
 | 
						||
      xmlns:xi="http://www.w3.org/2001/XInclude"
 | 
						||
      version="5.0"
 | 
						||
      xml:id="ssec-relnotes-0.11">
 | 
						||
 | 
						||
<title>Release 0.11 (2007-12-31)</title>
 | 
						||
 | 
						||
<para>Nix 0.11 has many improvements over the previous stable release.
 | 
						||
The most important improvement is secure multi-user support.  It also
 | 
						||
features many usability enhancements and language extensions, many of
 | 
						||
them prompted by NixOS, the purely functional Linux distribution based
 | 
						||
on Nix.  Here is an (incomplete) list:</para>
 | 
						||
 | 
						||
 | 
						||
<itemizedlist>
 | 
						||
 | 
						||
 | 
						||
  <listitem><para>Secure multi-user support.  A single Nix store can
 | 
						||
  now be shared between multiple (possible untrusted) users.  This is
 | 
						||
  an important feature for NixOS, where it allows non-root users to
 | 
						||
  install software.  The old setuid method for sharing a store between
 | 
						||
  multiple users has been removed.  Details for setting up a
 | 
						||
  multi-user store can be found in the manual.</para></listitem>
 | 
						||
 | 
						||
 | 
						||
  <listitem><para>The new command <command>nix-copy-closure</command>
 | 
						||
  gives you an easy and efficient way to exchange software between
 | 
						||
  machines.  It copies the missing parts of the closure of a set of
 | 
						||
  store path to or from a remote machine via
 | 
						||
  <command>ssh</command>.</para></listitem>
 | 
						||
 | 
						||
 | 
						||
  <listitem><para>A new kind of string literal: strings between double
 | 
						||
  single-quotes (<literal>''</literal>) have indentation
 | 
						||
  “intelligently” removed.  This allows large strings (such as shell
 | 
						||
  scripts or configuration file fragments in NixOS) to cleanly follow
 | 
						||
  the indentation of the surrounding expression.  It also requires
 | 
						||
  much less escaping, since <literal>''</literal> is less common in
 | 
						||
  most languages than <literal>"</literal>.</para></listitem>
 | 
						||
 | 
						||
 | 
						||
  <listitem><para><command>nix-env</command> <option>--set</option>
 | 
						||
  modifies the current generation of a profile so that it contains
 | 
						||
  exactly the specified derivation, and nothing else.  For example,
 | 
						||
  <literal>nix-env -p /nix/var/nix/profiles/browser --set
 | 
						||
  firefox</literal> lets the profile named
 | 
						||
  <filename>browser</filename> contain just Firefox.</para></listitem>
 | 
						||
 | 
						||
 | 
						||
  <listitem><para><command>nix-env</command> now maintains
 | 
						||
  meta-information about installed packages in profiles.  The
 | 
						||
  meta-information is the contents of the <varname>meta</varname>
 | 
						||
  attribute of derivations, such as <varname>description</varname> or
 | 
						||
  <varname>homepage</varname>.  The command <literal>nix-env -q --xml
 | 
						||
  --meta</literal> shows all meta-information.</para></listitem>
 | 
						||
 | 
						||
 | 
						||
  <listitem><para><command>nix-env</command> now uses the
 | 
						||
  <varname>meta.priority</varname> attribute of derivations to resolve
 | 
						||
  filename collisions between packages.  Lower priority values denote
 | 
						||
  a higher priority.  For instance, the GCC wrapper package and the
 | 
						||
  Binutils package in Nixpkgs both have a file
 | 
						||
  <filename>bin/ld</filename>, so previously if you tried to install
 | 
						||
  both you would get a collision.  Now, on the other hand, the GCC
 | 
						||
  wrapper declares a higher priority than Binutils, so the former’s
 | 
						||
  <filename>bin/ld</filename> is symlinked in the user
 | 
						||
  environment.</para></listitem>
 | 
						||
 | 
						||
 | 
						||
  <listitem><para><command>nix-env -i / -u</command>: instead of
 | 
						||
  breaking package ties by version, break them by priority and version
 | 
						||
  number.  That is, if there are multiple packages with the same name,
 | 
						||
  then pick the package with the highest priority, and only use the
 | 
						||
  version if there are multiple packages with the same
 | 
						||
  priority.</para>
 | 
						||
 | 
						||
  <para>This makes it possible to mark specific versions/variant in
 | 
						||
  Nixpkgs more or less desirable than others.  A typical example would
 | 
						||
  be a beta version of some package (e.g.,
 | 
						||
  <literal>gcc-4.2.0rc1</literal>) which should not be installed even
 | 
						||
  though it is the highest version, except when it is explicitly
 | 
						||
  selected (e.g., <literal>nix-env -i
 | 
						||
  gcc-4.2.0rc1</literal>).</para></listitem>
 | 
						||
 | 
						||
 | 
						||
  <listitem><para><command>nix-env --set-flag</command> allows meta
 | 
						||
  attributes of installed packages to be modified.  There are several
 | 
						||
  attributes that can be usefully modified, because they affect the
 | 
						||
  behaviour of <command>nix-env</command> or the user environment
 | 
						||
  build script:
 | 
						||
 | 
						||
    <itemizedlist>
 | 
						||
 | 
						||
      <listitem><para><varname>meta.priority</varname> can be changed
 | 
						||
      to resolve filename clashes (see above).</para></listitem>
 | 
						||
 | 
						||
      <listitem><para><varname>meta.keep</varname> can be set to
 | 
						||
      <literal>true</literal> to prevent the package from being
 | 
						||
      upgraded or replaced.  Useful if you want to hang on to an older
 | 
						||
      version of a package.</para></listitem>
 | 
						||
 | 
						||
      <listitem><para><varname>meta.active</varname> can be set to
 | 
						||
      <literal>false</literal> to “disable” the package.  That is, no
 | 
						||
      symlinks will be generated to the files of the package, but it
 | 
						||
      remains part of the profile (so it won’t be garbage-collected).
 | 
						||
      Set it back to <literal>true</literal> to re-enable the
 | 
						||
      package.</para></listitem>
 | 
						||
 | 
						||
    </itemizedlist>
 | 
						||
 | 
						||
  </para></listitem>
 | 
						||
 | 
						||
 | 
						||
  <listitem><para><command>nix-env -q</command> now has a flag
 | 
						||
  <option>--prebuilt-only</option> (<option>-b</option>) that causes
 | 
						||
  <command>nix-env</command> to show only those derivations whose
 | 
						||
  output is already in the Nix store or that can be substituted (i.e.,
 | 
						||
  downloaded from somewhere).  In other words, it shows the packages
 | 
						||
  that can be installed “quickly”, i.e., don’t need to be built from
 | 
						||
  source.  The <option>-b</option> flag is also available in
 | 
						||
  <command>nix-env -i</command> and <command>nix-env -u</command> to
 | 
						||
  filter out derivations for which no pre-built binary is
 | 
						||
  available.</para></listitem>
 | 
						||
 | 
						||
 | 
						||
  <listitem><para>The new option <option>--argstr</option> (in
 | 
						||
  <command>nix-env</command>, <command>nix-instantiate</command> and
 | 
						||
  <command>nix-build</command>) is like <option>--arg</option>, except
 | 
						||
  that the value is a string.  For example, <literal>--argstr system
 | 
						||
  i686-linux</literal> is equivalent to <literal>--arg system
 | 
						||
  \"i686-linux\"</literal> (note that <option>--argstr</option>
 | 
						||
  prevents annoying quoting around shell arguments).</para></listitem>
 | 
						||
 | 
						||
 | 
						||
  <listitem><para><command>nix-store</command> has a new operation
 | 
						||
  <option>--read-log</option> (<option>-l</option>)
 | 
						||
  <parameter>paths</parameter> that shows the build log of the given
 | 
						||
  paths.</para></listitem>
 | 
						||
 | 
						||
 | 
						||
  <!--
 | 
						||
  <listitem><para>TODO: semantic cleanups of string concatenation
 | 
						||
  etc. (mostly in r6740).</para></listitem>
 | 
						||
  -->
 | 
						||
 | 
						||
 | 
						||
  <listitem><para>Nix now uses Berkeley DB 4.5.  The database is
 | 
						||
  upgraded automatically, but you should be careful not to use old
 | 
						||
  versions of Nix that still use Berkeley DB 4.4.</para></listitem>
 | 
						||
 | 
						||
 | 
						||
  <!-- foo
 | 
						||
  <listitem><para>TODO: option <option>- -reregister</option> in
 | 
						||
  <command>nix-store - -register-validity</command>.</para></listitem>
 | 
						||
  -->
 | 
						||
 | 
						||
 | 
						||
  <listitem><para>The option <option>--max-silent-time</option>
 | 
						||
  (corresponding to the configuration setting
 | 
						||
  <literal>build-max-silent-time</literal>) allows you to set a
 | 
						||
  timeout on builds — if a build produces no output on
 | 
						||
  <literal>stdout</literal> or <literal>stderr</literal> for the given
 | 
						||
  number of seconds, it is terminated.  This is useful for recovering
 | 
						||
  automatically from builds that are stuck in an infinite
 | 
						||
  loop.</para></listitem>
 | 
						||
 | 
						||
 | 
						||
  <listitem><para><command>nix-channel</command>: each subscribed
 | 
						||
  channel is its own attribute in the top-level expression generated
 | 
						||
  for the channel.  This allows disambiguation (e.g. <literal>nix-env
 | 
						||
  -i -A nixpkgs_unstable.firefox</literal>).</para></listitem>
 | 
						||
 | 
						||
 | 
						||
  <listitem><para>The substitutes table has been removed from the
 | 
						||
  database.  This makes operations such as <command>nix-pull</command>
 | 
						||
  and <command>nix-channel --update</command> much, much
 | 
						||
  faster.</para></listitem>
 | 
						||
 | 
						||
 | 
						||
  <listitem><para><command>nix-pull</command> now supports
 | 
						||
  bzip2-compressed manifests.  This speeds up
 | 
						||
  channels.</para></listitem>
 | 
						||
 | 
						||
 | 
						||
  <listitem><para><command>nix-prefetch-url</command> now has a
 | 
						||
  limited form of caching.  This is used by
 | 
						||
  <command>nix-channel</command> to prevent unnecessary downloads when
 | 
						||
  the channel hasn’t changed.</para></listitem>
 | 
						||
 | 
						||
 | 
						||
  <listitem><para><command>nix-prefetch-url</command> now by default
 | 
						||
  computes the SHA-256 hash of the file instead of the MD5 hash.  In
 | 
						||
  calls to <function>fetchurl</function> you should pass the
 | 
						||
  <literal>sha256</literal> attribute instead of
 | 
						||
  <literal>md5</literal>.  You can pass either a hexadecimal or a
 | 
						||
  base-32 encoding of the hash.</para></listitem>
 | 
						||
 | 
						||
 | 
						||
  <listitem><para>Nix can now perform builds in an automatically
 | 
						||
  generated “chroot”.  This prevents a builder from accessing stuff
 | 
						||
  outside of the Nix store, and thus helps ensure purity.  This is an
 | 
						||
  experimental feature.</para></listitem>
 | 
						||
 | 
						||
 | 
						||
  <listitem><para>The new command <command>nix-store
 | 
						||
  --optimise</command> reduces Nix store disk space usage by finding
 | 
						||
  identical files in the store and hard-linking them to each other.
 | 
						||
  It typically reduces the size of the store by something like
 | 
						||
  25-35%.</para></listitem>
 | 
						||
 | 
						||
 | 
						||
  <listitem><para><filename>~/.nix-defexpr</filename> can now be a
 | 
						||
  directory, in which case the Nix expressions in that directory are
 | 
						||
  combined into an attribute set, with the file names used as the
 | 
						||
  names of the attributes.  The command <command>nix-env
 | 
						||
  --import</command> (which set the
 | 
						||
  <filename>~/.nix-defexpr</filename> symlink) is
 | 
						||
  removed.</para></listitem>
 | 
						||
 | 
						||
 | 
						||
  <listitem><para>Derivations can specify the new special attribute
 | 
						||
  <varname>allowedReferences</varname> to enforce that the references
 | 
						||
  in the output of a derivation are a subset of a declared set of
 | 
						||
  paths.  For example, if <varname>allowedReferences</varname> is an
 | 
						||
  empty list, then the output must not have any references.  This is
 | 
						||
  used in NixOS to check that generated files such as initial ramdisks
 | 
						||
  for booting Linux don’t have any dependencies.</para></listitem>
 | 
						||
 | 
						||
 | 
						||
  <listitem><para>The new attribute
 | 
						||
  <varname>exportReferencesGraph</varname> allows builders access to
 | 
						||
  the references graph of their inputs.  This is used in NixOS for
 | 
						||
  tasks such as generating ISO-9660 images that contain a Nix store
 | 
						||
  populated with the closure of certain paths.</para></listitem>
 | 
						||
 | 
						||
 | 
						||
  <listitem><para>Fixed-output derivations (like
 | 
						||
  <function>fetchurl</function>) can define the attribute
 | 
						||
  <varname>impureEnvVars</varname> to allow external environment
 | 
						||
  variables to be passed to builders.  This is used in Nixpkgs to
 | 
						||
  support proxy configuration, among other things.</para></listitem>
 | 
						||
 | 
						||
 | 
						||
  <listitem><para>Several new built-in functions:
 | 
						||
  <function>builtins.attrNames</function>,
 | 
						||
  <function>builtins.filterSource</function>,
 | 
						||
  <function>builtins.isAttrs</function>,
 | 
						||
  <function>builtins.isFunction</function>,
 | 
						||
  <function>builtins.listToAttrs</function>,
 | 
						||
  <function>builtins.stringLength</function>,
 | 
						||
  <function>builtins.sub</function>,
 | 
						||
  <function>builtins.substring</function>,
 | 
						||
  <function>throw</function>,
 | 
						||
  <function>builtins.trace</function>,
 | 
						||
  <function>builtins.readFile</function>.</para></listitem>
 | 
						||
 | 
						||
 | 
						||
</itemizedlist>
 | 
						||
 | 
						||
</section>
 |