| 
									
										
										
										
											2014-08-24 19:18:18 +02:00
										 |  |  |  | <chapter xmlns="http://docbook.org/ns/docbook" | 
					
						
							|  |  |  |  |          xmlns:xlink="http://www.w3.org/1999/xlink" | 
					
						
							|  |  |  |  |          version="5.0" | 
					
						
							|  |  |  |  |          xml:id="sec-upgrading"> | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | <title>Upgrading NixOS</title> | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | <para>The best way to keep your NixOS installation up to date is to | 
					
						
							|  |  |  |  | use one of the NixOS <emphasis>channels</emphasis>.  A channel is a | 
					
						
							|  |  |  |  | Nix mechanism for distributing Nix expressions and associated | 
					
						
							|  |  |  |  | binaries.  The NixOS channels are updated automatically from NixOS’s | 
					
						
							|  |  |  |  | Git repository after certain tests have passed and all packages have | 
					
						
							|  |  |  |  | been built.  These channels are: | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | <itemizedlist> | 
					
						
							|  |  |  |  |   <listitem> | 
					
						
							| 
									
										
										
										
											2014-12-30 22:31:01 +01:00
										 |  |  |  |     <para><emphasis>Stable channels</emphasis>, such as <literal | 
					
						
							| 
									
										
										
										
											2017-03-25 20:14:04 +01:00
										 |  |  |  |     xlink:href="https://nixos.org/channels/nixos-17.03">nixos-17.03</literal>. | 
					
						
							| 
									
										
										
										
											2014-08-24 19:18:18 +02:00
										 |  |  |  |     These only get conservative bug fixes and package upgrades.  For | 
					
						
							|  |  |  |  |     instance, a channel update may cause the Linux kernel on your | 
					
						
							| 
									
										
										
										
											2017-03-25 20:14:04 +01:00
										 |  |  |  |     system to be upgraded from 4.9.16 to 4.9.17 (a minor bug fix), but | 
					
						
							|  |  |  |  |     not from 4.9.<replaceable>x</replaceable> to | 
					
						
							|  |  |  |  |     4.11.<replaceable>x</replaceable> (a major change that has the | 
					
						
							| 
									
										
										
										
											2014-08-24 19:18:18 +02:00
										 |  |  |  |     potential to break things).  Stable channels are generally | 
					
						
							|  |  |  |  |     maintained until the next stable branch is created.</para> | 
					
						
							| 
									
										
										
										
											2014-12-30 22:31:01 +01:00
										 |  |  |  |     <para></para> | 
					
						
							| 
									
										
										
										
											2014-08-24 19:18:18 +02:00
										 |  |  |  |   </listitem> | 
					
						
							|  |  |  |  |   <listitem> | 
					
						
							| 
									
										
										
										
											2014-12-30 22:31:01 +01:00
										 |  |  |  |     <para>The <emphasis>unstable channel</emphasis>, <literal | 
					
						
							| 
									
										
										
										
											2014-12-14 11:26:08 +01:00
										 |  |  |  |     xlink:href="https://nixos.org/channels/nixos-unstable">nixos-unstable</literal>. | 
					
						
							| 
									
										
										
										
											2014-08-24 19:18:18 +02:00
										 |  |  |  |     This corresponds to NixOS’s main development branch, and may thus | 
					
						
							|  |  |  |  |     see radical changes between channel updates.  It’s not recommended | 
					
						
							|  |  |  |  |     for production systems.</para> | 
					
						
							|  |  |  |  |   </listitem> | 
					
						
							| 
									
										
										
										
											2014-12-30 22:31:01 +01:00
										 |  |  |  |   <listitem> | 
					
						
							|  |  |  |  |     <para><emphasis>Small channels</emphasis>, such as <literal | 
					
						
							| 
									
										
										
										
											2017-03-25 20:14:04 +01:00
										 |  |  |  |     xlink:href="https://nixos.org/channels/nixos-17.03-small">nixos-17.03-small</literal> | 
					
						
							| 
									
										
										
										
											2014-12-30 22:31:01 +01:00
										 |  |  |  |     or <literal | 
					
						
							|  |  |  |  |     xlink:href="https://nixos.org/channels/nixos-unstable-small">nixos-unstable-small</literal>. These | 
					
						
							|  |  |  |  |     are identical to the stable and unstable channels described above, | 
					
						
							|  |  |  |  |     except that they contain fewer binary packages. This means they | 
					
						
							|  |  |  |  |     get updated faster than the regular channels (for instance, when a | 
					
						
							|  |  |  |  |     critical security patch is committed to NixOS’s source tree), but | 
					
						
							|  |  |  |  |     may require more packages to be built from source than | 
					
						
							|  |  |  |  |     usual. They’re mostly intended for server environments and as such | 
					
						
							|  |  |  |  |     contain few GUI applications.</para> | 
					
						
							|  |  |  |  |   </listitem> | 
					
						
							| 
									
										
										
										
											2014-08-24 19:18:18 +02:00
										 |  |  |  | </itemizedlist> | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | To see what channels are available, go to <link | 
					
						
							| 
									
										
										
										
											2014-12-14 11:26:08 +01:00
										 |  |  |  | xlink:href="https://nixos.org/channels"/>.  (Note that the URIs of the | 
					
						
							| 
									
										
										
										
											2014-08-24 19:18:18 +02:00
										 |  |  |  | various channels redirect to a directory that contains the channel’s | 
					
						
							|  |  |  |  | latest version and includes ISO images and VirtualBox | 
					
						
							|  |  |  |  | appliances.)</para> | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | <para>When you first install NixOS, you’re automatically subscribed to | 
					
						
							|  |  |  |  | the NixOS channel that corresponds to your installation source.   For | 
					
						
							| 
									
										
										
										
											2017-03-25 20:14:04 +01:00
										 |  |  |  | instance, if you installed from a 17.03 ISO, you will be subscribed to | 
					
						
							|  |  |  |  | the <literal>nixos-17.03</literal> channel.  To see which NixOS | 
					
						
							| 
									
										
										
										
											2014-08-24 19:18:18 +02:00
										 |  |  |  | channel you’re subscribed to, run the following as root: | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | <screen> | 
					
						
							| 
									
										
										
										
											2016-06-01 16:23:32 +02:00
										 |  |  |  | # nix-channel --list | grep nixos | 
					
						
							| 
									
										
										
										
											2014-08-24 19:18:18 +02:00
										 |  |  |  | nixos https://nixos.org/channels/nixos-unstable | 
					
						
							|  |  |  |  | </screen> | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | To switch to a different NixOS channel, do | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | <screen> | 
					
						
							| 
									
										
										
										
											2016-06-01 16:23:32 +02:00
										 |  |  |  | # nix-channel --add https://nixos.org/channels/<replaceable>channel-name</replaceable> nixos | 
					
						
							| 
									
										
										
										
											2014-08-24 19:18:18 +02:00
										 |  |  |  | </screen> | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | (Be sure to include the <literal>nixos</literal> parameter at the | 
					
						
							| 
									
										
										
										
											2017-03-25 20:14:04 +01:00
										 |  |  |  | end.)  For instance, to use the NixOS 17.03 stable channel: | 
					
						
							| 
									
										
										
										
											2014-12-30 22:31:01 +01:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | <screen> | 
					
						
							| 
									
										
										
										
											2017-03-25 20:14:04 +01:00
										 |  |  |  | # nix-channel --add https://nixos.org/channels/nixos-17.03 nixos | 
					
						
							| 
									
										
										
										
											2014-12-30 22:31:01 +01:00
										 |  |  |  | </screen> | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | If you have a server, you may want to use the “small” channel instead: | 
					
						
							| 
									
										
										
										
											2014-08-24 19:18:18 +02:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | <screen> | 
					
						
							| 
									
										
										
										
											2017-03-25 20:14:04 +01:00
										 |  |  |  | # nix-channel --add https://nixos.org/channels/nixos-17.03-small nixos | 
					
						
							| 
									
										
										
										
											2014-08-24 19:18:18 +02:00
										 |  |  |  | </screen> | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-30 22:31:01 +01:00
										 |  |  |  | And if you want to live on the bleeding edge: | 
					
						
							| 
									
										
										
										
											2014-08-24 19:18:18 +02:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | <screen> | 
					
						
							| 
									
										
										
										
											2016-06-01 16:23:32 +02:00
										 |  |  |  | # nix-channel --add https://nixos.org/channels/nixos-unstable nixos | 
					
						
							| 
									
										
										
										
											2014-08-24 19:18:18 +02:00
										 |  |  |  | </screen> | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | </para> | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | <para>You can then upgrade NixOS to the latest version in your chosen | 
					
						
							|  |  |  |  | channel by running | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | <screen> | 
					
						
							| 
									
										
										
										
											2016-06-01 16:23:32 +02:00
										 |  |  |  | # nixos-rebuild switch --upgrade | 
					
						
							| 
									
										
										
										
											2014-08-24 19:18:18 +02:00
										 |  |  |  | </screen> | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | which is equivalent to the more verbose <literal>nix-channel --update | 
					
						
							|  |  |  |  | nixos; nixos-rebuild switch</literal>.</para> | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-07 09:06:25 +01:00
										 |  |  |  | <note><para>Channels are set per user. This means that running <literal> | 
					
						
							|  |  |  |  | nix-channel --add</literal> as a non root user (or without sudo) will not | 
					
						
							|  |  |  |  | affect configuration in <literal>/etc/nixos/configuration.nix</literal> | 
					
						
							|  |  |  |  | </para></note> | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-24 19:18:18 +02:00
										 |  |  |  | <warning><para>It is generally safe to switch back and forth between | 
					
						
							|  |  |  |  | channels.  The only exception is that a newer NixOS may also have a | 
					
						
							|  |  |  |  | newer Nix version, which may involve an upgrade of Nix’s database | 
					
						
							|  |  |  |  | schema.  This cannot be undone easily, so in that case you will not be | 
					
						
							|  |  |  |  | able to go back to your original channel.</para></warning> | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-02 15:38:06 +02:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | <section><title>Automatic Upgrades</title> | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | <para>You can keep a NixOS system up-to-date automatically by adding | 
					
						
							|  |  |  |  | the following to <filename>configuration.nix</filename>: | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | <programlisting> | 
					
						
							|  |  |  |  | system.autoUpgrade.enable = true; | 
					
						
							|  |  |  |  | </programlisting> | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | This enables a periodically executed systemd service named | 
					
						
							|  |  |  |  | <literal>nixos-upgrade.service</literal>. It runs | 
					
						
							|  |  |  |  | <command>nixos-rebuild switch --upgrade</command> to upgrade NixOS to | 
					
						
							|  |  |  |  | the latest version in the current channel. (To see when the service | 
					
						
							|  |  |  |  | runs, see <command>systemctl list-timers</command>.)  You can also | 
					
						
							|  |  |  |  | specify a channel explicitly, e.g. | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | <programlisting> | 
					
						
							| 
									
										
										
										
											2017-03-25 20:14:04 +01:00
										 |  |  |  | system.autoUpgrade.channel = https://nixos.org/channels/nixos-17.03; | 
					
						
							| 
									
										
										
										
											2015-09-02 15:38:06 +02:00
										 |  |  |  | </programlisting> | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | </para> | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | </section> | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-24 19:18:18 +02:00
										 |  |  |  | </chapter> |