 5f8d14546b
			
		
	
	
		5f8d14546b
		
	
	
	
	
		
			
			* manual: Mark commands that require root Mark every command that requires to be run as root by prefixing them with '#' instead of '$'. * manual: Add note about commands that require root
		
			
				
	
	
		
			137 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			XML
		
	
	
	
	
	
			
		
		
	
	
			137 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			XML
		
	
	
	
	
	
| <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>
 | ||
|     <para><emphasis>Stable channels</emphasis>, such as <literal
 | ||
|     xlink:href="https://nixos.org/channels/nixos-14.12">nixos-14.12</literal>.
 | ||
|     These only get conservative bug fixes and package upgrades.  For
 | ||
|     instance, a channel update may cause the Linux kernel on your
 | ||
|     system to be upgraded from 3.4.66 to 3.4.67 (a minor bug fix), but
 | ||
|     not from 3.4.<replaceable>x</replaceable> to
 | ||
|     3.11.<replaceable>x</replaceable> (a major change that has the
 | ||
|     potential to break things).  Stable channels are generally
 | ||
|     maintained until the next stable branch is created.</para>
 | ||
|     <para></para>
 | ||
|   </listitem>
 | ||
|   <listitem>
 | ||
|     <para>The <emphasis>unstable channel</emphasis>, <literal
 | ||
|     xlink:href="https://nixos.org/channels/nixos-unstable">nixos-unstable</literal>.
 | ||
|     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>
 | ||
|   <listitem>
 | ||
|     <para><emphasis>Small channels</emphasis>, such as <literal
 | ||
|     xlink:href="https://nixos.org/channels/nixos-14.12-small">nixos-14.12-small</literal>
 | ||
|     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>
 | ||
| </itemizedlist>
 | ||
| 
 | ||
| To see what channels are available, go to <link
 | ||
| xlink:href="https://nixos.org/channels"/>.  (Note that the URIs of the
 | ||
| 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
 | ||
| instance, if you installed from a 14.12 ISO, you will be subscribed to
 | ||
| the <literal>nixos-14.12</literal> channel.  To see which NixOS
 | ||
| channel you’re subscribed to, run the following as root:
 | ||
| 
 | ||
| <screen>
 | ||
| # nix-channel --list | grep nixos
 | ||
| nixos https://nixos.org/channels/nixos-unstable
 | ||
| </screen>
 | ||
| 
 | ||
| To switch to a different NixOS channel, do
 | ||
| 
 | ||
| <screen>
 | ||
| # nix-channel --add https://nixos.org/channels/<replaceable>channel-name</replaceable> nixos
 | ||
| </screen>
 | ||
| 
 | ||
| (Be sure to include the <literal>nixos</literal> parameter at the
 | ||
| end.)  For instance, to use the NixOS 14.12 stable channel:
 | ||
| 
 | ||
| <screen>
 | ||
| # nix-channel --add https://nixos.org/channels/nixos-14.12 nixos
 | ||
| </screen>
 | ||
| 
 | ||
| If you have a server, you may want to use the “small” channel instead:
 | ||
| 
 | ||
| <screen>
 | ||
| # nix-channel --add https://nixos.org/channels/nixos-14.12-small nixos
 | ||
| </screen>
 | ||
| 
 | ||
| And if you want to live on the bleeding edge:
 | ||
| 
 | ||
| <screen>
 | ||
| # nix-channel --add https://nixos.org/channels/nixos-unstable nixos
 | ||
| </screen>
 | ||
| 
 | ||
| </para>
 | ||
| 
 | ||
| <para>You can then upgrade NixOS to the latest version in your chosen
 | ||
| channel by running
 | ||
| 
 | ||
| <screen>
 | ||
| # nixos-rebuild switch --upgrade
 | ||
| </screen>
 | ||
| 
 | ||
| which is equivalent to the more verbose <literal>nix-channel --update
 | ||
| nixos; nixos-rebuild switch</literal>.</para>
 | ||
| 
 | ||
| <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>
 | ||
| 
 | ||
| 
 | ||
| <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>
 | ||
| system.autoUpgrade.channel = https://nixos.org/channels/nixos-15.09;
 | ||
| </programlisting>
 | ||
| 
 | ||
| </para>
 | ||
| 
 | ||
| </section>
 | ||
| 
 | ||
| 
 | ||
| </chapter>
 |