1<section xmlns="http://docbook.org/ns/docbook"
2 xmlns:xlink="http://www.w3.org/1999/xlink"
3 xmlns:xi="http://www.w3.org/2001/XInclude"
4 version="5.0"
5 xml:id="sec-release-18.09">
6 <title>Release 18.09 (“Jellyfish”, 2018/09/??)</title>
7
8 <section xmlns="http://docbook.org/ns/docbook"
9 xmlns:xlink="http://www.w3.org/1999/xlink"
10 xmlns:xi="http://www.w3.org/2001/XInclude"
11 version="5.0"
12 xml:id="sec-release-18.09-highlights">
13 <title>Highlights</title>
14
15 <para>
16 In addition to numerous new and upgraded packages, this release has the
17 following highlights:
18 </para>
19
20 <itemizedlist>
21 <listitem>
22 <para>
23 Support for wrapping binaries using <literal>firejail</literal> has been
24 added through <varname>programs.firejail.wrappedBinaries</varname>.
25 </para>
26 <para>
27 For example
28 </para>
29<programlisting>
30programs.firejail = {
31 enable = true;
32 wrappedBinaries = {
33 firefox = "${lib.getBin pkgs.firefox}/bin/firefox";
34 mpv = "${lib.getBin pkgs.mpv}/bin/mpv";
35 };
36};
37</programlisting>
38 <para>
39 This will place <literal>firefox</literal> and <literal>mpv</literal> binaries in the global path wrapped by firejail.
40 </para>
41 </listitem>
42 <listitem>
43 <para>
44 User channels are now in the default <literal>NIX_PATH</literal>, allowing
45 users to use their personal <command>nix-channel</command> defined
46 channels in <command>nix-build</command> and <command>nix-shell</command>
47 commands, as well as in imports like <code>import
48 <mychannel></code>.
49 </para>
50 <para>
51 For example
52 </para>
53<programlisting>
54$ nix-channel --add https://nixos.org/channels/nixpkgs-unstable nixpkgsunstable
55$ nix-channel --update
56$ nix-build '<nixpkgsunstable>' -A gitFull
57$ nix run -f '<nixpkgsunstable>' gitFull
58$ nix-instantiate -E '(import <nixpkgsunstable> {}).gitFull'
59</programlisting>
60 </listitem>
61 </itemizedlist>
62 </section>
63
64 <section xmlns="http://docbook.org/ns/docbook"
65 xmlns:xlink="http://www.w3.org/1999/xlink"
66 xmlns:xi="http://www.w3.org/2001/XInclude"
67 version="5.0"
68 xml:id="sec-release-18.09-new-services">
69 <title>New Services</title>
70
71 <para>
72 The following new services were added since the last release:
73 </para>
74
75 <itemizedlist>
76 <listitem>
77 <para>
78 The <varname>services.cassandra</varname> module has been reworked and
79 was rewritten from scratch. The service has succeeding tests for
80 the versions 2.1, 2.2, 3.0 and 3.11 of <link
81 xlink:href="https://cassandra.apache.org/">Apache Cassandra</link>.
82 </para>
83 </listitem>
84 <listitem>
85 <para>
86 There is a new <varname>services.foundationdb</varname> module for deploying
87 <link xlink:href="https://www.foundationdb.org">FoundationDB</link> clusters.
88 </para>
89 </listitem>
90 <listitem>
91 <para>
92 When enabled the <literal>iproute2</literal> will copy the files expected
93 by ip route (e.g., <filename>rt_tables</filename>) in
94 <filename>/run/iproute2</filename>. This allows to write aliases for
95 routing tables for instance.
96 </para>
97 </listitem>
98 <listitem>
99 <para>
100 <varname>services.strongswan-swanctl</varname>
101 is a modern replacement for <varname>services.strongswan</varname>.
102 You can use either one of them to setup IPsec VPNs but not both at the same time.
103 </para>
104 <para>
105 <varname>services.strongswan-swanctl</varname> uses the
106 <link xlink:href="https://wiki.strongswan.org/projects/strongswan/wiki/swanctl">swanctl</link>
107 command which uses the modern
108 <link xlink:href="https://github.com/strongswan/strongswan/blob/master/src/libcharon/plugins/vici/README.md">vici</link>
109 <emphasis>Versatile IKE Configuration Interface</emphasis>.
110 The deprecated <literal>ipsec</literal> command used in <varname>services.strongswan</varname> is using the legacy
111 <link xlink:href="https://github.com/strongswan/strongswan/blob/master/README_LEGACY.md">stroke configuration interface</link>.
112 </para>
113 </listitem>
114 <listitem>
115 <para>
116 The new <varname>services.elasticsearch-curator</varname> service
117 periodically curates or manages, your Elasticsearch indices and snapshots.
118 </para>
119 </listitem>
120 </itemizedlist>
121 </section>
122
123 <section xmlns="http://docbook.org/ns/docbook"
124 xmlns:xlink="http://www.w3.org/1999/xlink"
125 xmlns:xi="http://www.w3.org/2001/XInclude"
126 version="5.0"
127 xml:id="sec-release-18.09-incompatibilities">
128 <title>Backward Incompatibilities</title>
129
130 <para>
131 When upgrading from a previous release, please be aware of the following
132 incompatible changes:
133 </para>
134
135 <itemizedlist>
136 <listitem>
137 <para>
138 The deprecated <varname>services.cassandra</varname> module has
139 seen a complete rewrite. (See above.)
140 </para>
141 </listitem>
142 <listitem>
143 <para>
144 The minimum version of Nix required to evaluate Nixpkgs is now 2.0.
145 </para>
146 <itemizedlist>
147 <listitem>
148 <para>
149 For users of NixOS 18.03, NixOS 18.03 defaulted to Nix 2.0, but
150 supported using Nix 1.11 by setting <literal>nix.package =
151 pkgs.nix1;</literal>. If this option is set to a Nix 1.11 package, you
152 will need to either unset the option or upgrade it to Nix 2.0.
153 </para>
154 </listitem>
155 <listitem>
156 <para>
157 For users of NixOS 17.09, you will first need to upgrade Nix by setting
158 <literal>nix.package = pkgs.nixStable2;</literal> and run
159 <command>nixos-rebuild switch</command> as the <literal>root</literal>
160 user.
161 </para>
162 </listitem>
163 <listitem>
164 <para>
165 For users of a daemon-less Nix installation on Linux or macOS, you can
166 upgrade Nix by running <command>curl https://nixos.org/nix/install |
167 sh</command>, or prior to doing a channel update, running
168 <command>nix-env -iA nix</command>.
169 </para>
170 <para>
171 If you have already run a channel update and Nix is no longer able to
172 evaluate Nixpkgs, the error message printed should provide adequate
173 directions for upgrading Nix.
174 </para>
175 </listitem>
176 <listitem>
177 <para>
178 For users of the Nix daemon on macOS, you can upgrade Nix by running
179 <command>sudo -i sh -c 'nix-channel --update && nix-env -iA
180 nixpkgs.nix'; sudo launchctl stop org.nixos.nix-daemon; sudo launchctl
181 start org.nixos.nix-daemon</command>.
182 </para>
183 </listitem>
184 </itemizedlist>
185 </listitem>
186 <listitem>
187 <para>
188 <literal>lib.strict</literal> is removed. Use
189 <literal>builtins.seq</literal> instead.
190 </para>
191 </listitem>
192 <listitem>
193 <para>
194 The <literal>clementine</literal> package points now to the free
195 derivation. <literal>clementineFree</literal> is removed now and
196 <literal>clementineUnfree</literal> points to the package which is bundled
197 with the unfree <literal>libspotify</literal> package.
198 </para>
199 </listitem>
200 <listitem>
201 <para>
202 The <literal>netcat</literal> package is now taken directly from OpenBSD's
203 <literal>libressl</literal>, instead of relying on Debian's fork. The new
204 version should be very close to the old version, but there are some minor
205 differences. Importantly, flags like -b, -q, -C, and -Z are no longer
206 accepted by the nc command.
207 </para>
208 </listitem>
209 <listitem>
210 <para>
211 The <varname>services.docker-registry.extraConfig</varname> object doesn't
212 contain environment variables anymore. Instead it needs to provide an
213 object structure that can be mapped onto the YAML configuration defined in
214 <link xlink:href="https://github.com/docker/distribution/blob/v2.6.2/docs/configuration.md">the
215 <varname>docker/distribution</varname> docs</link>.
216 </para>
217 </listitem>
218 <listitem>
219 <para>
220 <literal>gnucash</literal> has changed from version 2.4 to 3.x. If you've
221 been using <literal>gnucash</literal> (version 2.4) instead of
222 <literal>gnucash26</literal> (version 2.6) you must open your Gnucash data
223 file(s) with <literal>gnucash26</literal> and then save them to upgrade
224 the file format. Then you may use your data file(s) with Gnucash 3.x. See
225 the upgrade
226 <link xlink:href="https://wiki.gnucash.org/wiki/FAQ#Using_Different_Versions.2C_Up_And_Downgrade">documentation</link>.
227 Gnucash 2.4 is still available under the attribute
228 <literal>gnucash24</literal>.
229 </para>
230 </listitem>
231 <listitem>
232 <para>
233 <varname>services.munge</varname> now runs as user (and group) <literal>munge</literal> instead of root.
234 Make sure the key file is accessible to the daemon.
235 </para>
236 </listitem>
237 <listitem>
238 <para>
239 <varname>dockerTools.buildImage</varname> now uses <literal>null</literal> as default value for <varname>tag</varname>,
240 which indicates that the nix output hash will be used as tag.
241 </para>
242 </listitem>
243 <listitem>
244 <para>
245 The ELK stack: <varname>elasticsearch</varname>, <varname>logstash</varname> and <varname>kibana</varname>
246 has been upgraded from 2.* to 6.3.*.
247 The 2.* versions have been <link xlink:href="https://www.elastic.co/support/eol">unsupported since last year</link>
248 so they have been removed. You can still use the 5.* versions under the names
249 <varname>elasticsearch5</varname>, <varname>logstash5</varname> and
250 <varname>kibana5</varname>.
251 </para>
252 <para>
253 The elastic beats:
254 <varname>filebeat</varname>, <varname>heartbeat</varname>,
255 <varname>metricbeat</varname> and <varname>packetbeat</varname>
256 have had the same treatment: they now target 6.3.* as well.
257 The 5.* versions are available under the names:
258 <varname>filebeat5</varname>, <varname>heartbeat5</varname>,
259 <varname>metricbeat5</varname> and <varname>packetbeat5</varname>
260 </para>
261 <para>
262 The ELK-6.3 stack now comes with
263 <link xlink:href="https://www.elastic.co/products/x-pack/open">X-Pack by default</link>.
264 Since X-Pack is licensed under the
265 <link xlink:href="https://github.com/elastic/elasticsearch/blob/master/licenses/ELASTIC-LICENSE.txt">Elastic License</link>
266 the ELK packages now have an unfree license. To use them you need to specify
267 <literal>allowUnfree = true;</literal> in your nixpkgs configuration.
268 </para>
269 <para>
270 Fortunately there is also a free variant of the ELK stack without X-Pack.
271 The packages are available under the names:
272 <varname>elasticsearch-oss</varname>, <varname>logstash-oss</varname> and
273 <varname>kibana-oss</varname>.
274 </para>
275 </listitem>
276 <listitem>
277 <para>
278 Options
279 <literal>boot.initrd.luks.devices.<replaceable>name</replaceable>.yubikey.ramfsMountPoint</literal>
280 <literal>boot.initrd.luks.devices.<replaceable>name</replaceable>.yubikey.storage.mountPoint</literal>
281 were removed. <literal>luksroot.nix</literal> module never supported more than one YubiKey at
282 a time anyway, hence those options never had any effect. You should be able to remove them
283 from your config without any issues.
284 </para>
285 </listitem>
286 </itemizedlist>
287 </section>
288
289 <section xmlns="http://docbook.org/ns/docbook"
290 xmlns:xlink="http://www.w3.org/1999/xlink"
291 xmlns:xi="http://www.w3.org/2001/XInclude"
292 version="5.0"
293 xml:id="sec-release-18.09-notable-changes">
294 <title>Other Notable Changes</title>
295
296 <itemizedlist>
297 <listitem>
298 <para>
299 <literal>dockerTools.pullImage</literal> relies on image digest instead of
300 image tag to download the image. The <literal>sha256</literal> of a pulled
301 image has to be updated.
302 </para>
303 </listitem>
304 <listitem>
305 <para>
306 <literal>lib.attrNamesToStr</literal> has been deprecated. Use more
307 specific concatenation (<literal>lib.concat(Map)StringsSep</literal>)
308 instead.
309 </para>
310 </listitem>
311 <listitem>
312 <para>
313 <literal>lib.addErrorContextToAttrs</literal> has been deprecated. Use
314 <literal>builtins.addErrorContext</literal> directly.
315 </para>
316 </listitem>
317 <listitem>
318 <para>
319 <literal>lib.showVal</literal> has been deprecated. Use
320 <literal>lib.traceSeqN</literal> instead.
321 </para>
322 </listitem>
323 <listitem>
324 <para>
325 <literal>lib.traceXMLVal</literal> has been deprecated. Use
326 <literal>lib.traceValFn builtins.toXml</literal> instead.
327 </para>
328 </listitem>
329 <listitem>
330 <para>
331 <literal>lib.traceXMLValMarked</literal> has been deprecated. Use
332 <literal>lib.traceValFn (x: str + builtins.toXML x)</literal> instead.
333 </para>
334 </listitem>
335 <listitem>
336 <para>
337 The <literal>pkgs</literal> argument to NixOS modules can now be set directly using <literal>nixpkgs.pkgs</literal>. Previously, only the <literal>system</literal>, <literal>config</literal> and <literal>overlays</literal> arguments could be used to influence <literal>pkgs</literal>.
338 </para>
339 </listitem>
340 <listitem>
341 <para>
342 A NixOS system can now be constructed more easily based on a preexisting invocation of Nixpkgs. For example:
343 <programlisting>
344inherit (pkgs.nixos {
345 boot.loader.grub.enable = false;
346 fileSystems."/".device = "/dev/xvda1";
347}) toplevel kernel initialRamdisk manual;
348 </programlisting>
349
350 This benefits evaluation performance, lets you write Nixpkgs packages that depend on NixOS images and is consistent with a deployment architecture that would be centered around Nixpkgs overlays.
351 </para>
352 </listitem>
353 <listitem>
354 <para>
355 <literal>lib.traceValIfNot</literal> has been deprecated. Use
356 <literal>if/then/else</literal> and <literal>lib.traceValSeq</literal> instead.
357 </para>
358 </listitem>
359 <listitem>
360 <para>
361 <literal>lib.traceCallXml</literal> has been deprecated. Please complain
362 if you use the function regularly.
363 </para>
364 </listitem>
365 <listitem>
366 <para>
367 The attribute <literal>lib.nixpkgsVersion</literal> has been deprecated in
368 favor of <literal>lib.version</literal>. Please refer to the discussion in
369 <link xlink:href="https://github.com/NixOS/nixpkgs/pull/39416#discussion_r183845745">NixOS/nixpkgs#39416</link>
370 for further reference.
371 </para>
372 </listitem>
373 <listitem>
374 <para>
375 <literal>lib.recursiveUpdateUntil</literal> was not acting according to its
376 specification. It has been fixed to act according to the docstring, and a
377 test has been added.
378 </para>
379 </listitem>
380 <listitem>
381 <para>
382 The module for <option>security.dhparams</option> has two new options now:
383 </para>
384 <variablelist>
385 <varlistentry>
386 <term>
387 <option>security.dhparams.stateless</option>
388 </term>
389 <listitem>
390 <para>
391 Puts the generated Diffie-Hellman parameters into the Nix store instead
392 of managing them in a stateful manner in
393 <filename class="directory">/var/lib/dhparams</filename>.
394 </para>
395 </listitem>
396 </varlistentry>
397 <varlistentry>
398 <term>
399 <option>security.dhparams.defaultBitSize</option>
400 </term>
401 <listitem>
402 <para>
403 The default bit size to use for the generated Diffie-Hellman
404 parameters.
405 </para>
406 </listitem>
407 </varlistentry>
408 </variablelist>
409 <note>
410 <para>
411 The path to the actual generated parameter files should now be queried
412 using
413 <literal>config.security.dhparams.params.<replaceable>name</replaceable>.path</literal>
414 because it might be either in the Nix store or in a directory configured
415 by <option>security.dhparams.path</option>.
416 </para>
417 </note>
418 <note>
419 <title>For developers:</title>
420 <para>
421 Module implementers should not set a specific bit size in order to let
422 users configure it by themselves if they want to have a different bit
423 size than the default (2048).
424 </para>
425 <para>
426 An example usage of this would be:
427<programlisting>
428{ config, ... }:
429
430{
431 security.dhparams.params.myservice = {};
432 environment.etc."myservice.conf".text = ''
433 dhparams = ${config.security.dhparams.params.myservice.path}
434 '';
435}
436</programlisting>
437 </para>
438 </note>
439 </listitem>
440 <listitem>
441 <para>
442 <literal>networking.networkmanager.useDnsmasq</literal> has been
443 deprecated. Use <literal>networking.networkmanager.dns</literal> instead.
444 </para>
445 </listitem>
446 <listitem>
447 <para>
448 The option
449 <varname>services.kubernetes.apiserver.admissionControl</varname> was
450 renamed to
451 <varname>services.kubernetes.apiserver.enableAdmissionPlugins</varname>.
452 </para>
453 </listitem>
454 <listitem>
455 <para>
456 Recommended way to access the Kubernetes Dashboard is via HTTPS (TLS)
457 Therefore; public service port for the dashboard has changed to 443
458 (container port 8443) and scheme to https.
459 </para>
460 </listitem>
461 <listitem>
462 <para>
463 The option <varname>services.kubernetes.apiserver.address</varname>
464 was renamed to <varname>services.kubernetes.apiserver.bindAddress</varname>.
465 Note that the default value has changed from 127.0.0.1 to 0.0.0.0.
466 </para>
467 </listitem>
468 <listitem>
469 <para>
470 The option <varname>services.kubernetes.apiserver.publicAddress</varname>
471 was not used and thus has been removed.
472 </para>
473 </listitem>
474 <listitem>
475 <para>
476 The option <varname>services.kubernetes.addons.dashboard.enableRBAC</varname>
477 was renamed to <varname>services.kubernetes.addons.dashboard.rbac.enable</varname>.
478 </para>
479 </listitem>
480 <listitem>
481 <para>
482 The Kubernetes Dashboard now has only minimal RBAC permissions by default.
483 If dashboard cluster-admin rights are desired,
484 set <varname>services.kubernetes.addons.dashboard.rbac.clusterAdmin</varname> to true.
485 On existing clusters, in order for the revocation of privileges to take effect,
486 the current ClusterRoleBinding for kubernetes-dashboard must be manually removed:
487 <literal>kubectl delete clusterrolebinding kubernetes-dashboard</literal>
488 </para>
489 </listitem>
490 <listitem>
491 <para>
492 The <varname>programs.screen</varname> module provides allows to configure
493 <literal>/etc/screenrc</literal>, however the module behaved fairly counterintuitive as
494 the config exists, but the package wasn't available. Since 18.09 <literal>pkgs.screen</literal>
495 will be added to <literal>environment.systemPackages</literal>.
496 </para>
497 </listitem>
498 <listitem>
499 <para>
500 The module <option>services.networking.hostapd</option> now uses WPA2 by default.
501 </para>
502 </listitem>
503 <listitem>
504 <para>
505 <varname>s6Dns</varname>, <varname>s6Networking</varname>,
506 <varname>s6LinuxUtils</varname> and <varname>s6PortableUtils</varname>
507 renamed to
508 <varname>s6-dns</varname>, <varname>s6-networking</varname>,
509 <varname>s6-linux-utils</varname> and <varname>s6-portable-utils</varname> respectively.
510 </para>
511 </listitem>
512 <listitem>
513 <para>
514 The module option <option>nix.useSandbox</option> is now defaulted to <literal>true</literal>.
515 </para>
516 </listitem>
517 <listitem>
518 <para>
519 The config activation script of <literal>nixos-rebuild</literal> now
520 <link xlink:href="https://www.freedesktop.org/software/systemd/man/systemctl.html#Manager%20Lifecycle%20Commands">reloads</link>
521 all user units for each authenticated user.
522 </para>
523 </listitem>
524 <listitem>
525 <para>
526 The default display manager is now LightDM.
527 To use SLiM set <literal>services.xserver.displayManager.slim.enable</literal>
528 to <literal>true</literal>.
529 </para>
530 </listitem>
531 </itemizedlist>
532 </section>
533</section>