Release 16.09 (“Flounder”, 2016/09/30)
In addition to numerous new and upgraded packages, this release has the
following highlights:
Many NixOS configurations and Nix packages now use significantly less disk
space, thanks to the
extensive
work on closure size reduction. For example, the closure size of a
minimal NixOS container went down from ~424 MiB in 16.03 to ~212 MiB in
16.09, while the closure size of Firefox went from ~651 MiB to ~259 MiB.
To improve security, packages are now
built
using various hardening features. See the Nixpkgs manual for more
information.
Support for PXE netboot. See
for documentation.
X.org server 1.18. If you use the ati_unfree driver,
1.17 is still used due to an ABI incompatibility.
This release is based on Glibc 2.24, GCC 5.4.0 and systemd 231. The default
Linux kernel remains 4.4.
The following new services were added since the last release:
(this will get automatically generated at release time)
When upgrading from a previous release, please be aware of the following
incompatible changes:
A large number of packages have been converted to use the multiple outputs
feature of Nix to greatly reduce the amount of required disk space, as
mentioned above. This may require changes to any custom packages to make
them build again; see the relevant chapter in the Nixpkgs manual for more
information. (Additional caveat to packagers: some packaging conventions
related to multiple-output packages
were
changed late (August 2016) in the release cycle and differ from the
initial introduction of multiple outputs.)
Previous versions of Nixpkgs had support for all versions of the LTS
Haskell package set. That support has been dropped. The previously provided
haskell.packages.lts-x_y package sets still exist in
name to aviod breaking user code, but these package sets don't actually
contain the versions mandated by the corresponding LTS release. Instead,
our package set it loosely based on the latest available LTS release, i.e.
LTS 7.x at the time of this writing. New releases of NixOS and Nixpkgs will
drop those old names entirely.
The
motivation for this change has been discussed at length on the
nix-dev mailing list and in
Github
issue #14897. Development strategies for Haskell hackers who want to
rely on Nix and NixOS have been described in
another
nix-dev article.
Shell aliases for systemd sub-commands
were
dropped: start, stop,
restart, status.
Redis now binds to 127.0.0.1 only instead of listening to all network
interfaces. This is the default behavior of Redis 3.2
/var/empty is now immutable. Activation script runs
chattr +i to forbid any modifications inside the folder.
See the
pull request for what bugs this caused.
Gitlab's maintainance script gitlab-runner was removed
and split up into the more clearer gitlab-run and
gitlab-rake scripts, because
gitlab-runner is a component of Gitlab CI.
services.xserver.libinput.accelProfile default changed
from flat to adaptive, as per
official documentation.
fonts.fontconfig.ultimate.rendering was removed because
our presets were obsolete for some time. New presets are hardcoded into
FreeType; you can select a preset via
fonts.fontconfig.ultimate.preset. You can customize
those presets via ordinary environment variables, using
environment.variables.
The audit service is no longer enabled by default. Use
security.audit.enable = true to explicitly enable it.
pkgs.linuxPackages.virtualbox now contains only the
kernel modules instead of the VirtualBox user space binaries. If you want
to reference the user space binaries, you have to use the new
pkgs.virtualbox instead.
goPackages was replaced with separated Go applications
in appropriate nixpkgs categories. Each Go package uses
its own dependency set. There's also a new go2nix tool
introduced to generate a Go package definition from its Go source
automatically.
services.mongodb.extraConfig configuration format was
changed to YAML.
PHP has been upgraded to 7.0
Other notable improvements:
Revamped grsecurity/PaX support. There is now only a single general-purpose
distribution kernel and the configuration interface has been streamlined.
Desktop users should be able to simply set
security.grsecurity.enable = true
to get a reasonably secure system without having to sacrifice too much
functionality.
Special filesystems, like /proc, /run
and others, now have the same mount options as recommended by systemd and
are unified across different places in NixOS. Mount options are updated
during nixos-rebuild switch if possible. One benefit
from this is improved security — most such filesystems are now mounted
with noexec, nodev and/or
nosuid options.
The reverse path filter was interfering with DHCPv4 server operation in the
past. An exception for DHCPv4 and a new option to log packets that were
dropped due to the reverse path filter was added
(networking.firewall.logReversePathDrops) for easier
debugging.
Containers configuration within
containers.<name>.config is
now
properly typed and checked. In particular, partial configurations
are merged correctly.
The directory container setuid wrapper programs,
/var/setuid-wrappers,
is now
updated atomically to prevent failures if the switch to a new configuration
is interrupted.
services.xserver.startGnuPGAgent has been removed due to
GnuPG 2.1.x bump. See
how to achieve similar behavior. You might need to pkill
gpg-agent after the upgrade to prevent a stale agent being in the
way.
Declarative users could share the uid due to the bug in the script handling
conflict resolution.
Gummi boot has been replaced using systemd-boot.
Hydra package and NixOS module were added for convenience.