135 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			XML
		
	
	
	
	
	
			
		
		
	
	
			135 lines
		
	
	
		
			5.6 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-19.09">nixos-19.09</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 4.19.34 to 4.19.38 (a minor bug fix), but not from
 | 
						||
     4.19.<replaceable>x</replaceable> to 4.20.<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-19.09-small">nixos-19.09-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.) Please note that
 | 
						||
  during the release process, channels that are not yet released will be
 | 
						||
  present here as well. See the Getting NixOS page
 | 
						||
  <link xlink:href="https://nixos.org/nixos/download.html"/> to find the newest
 | 
						||
  supported stable release.
 | 
						||
 </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 19.09 ISO, you will be subscribed to the
 | 
						||
  <literal>nixos-19.09</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 19.09 stable channel:
 | 
						||
<screen>
 | 
						||
# nix-channel --add https://nixos.org/channels/nixos-19.09 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-19.09-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>
 | 
						||
 <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>
 | 
						||
 <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 xml:id="sec-upgrading-automatic">
 | 
						||
  <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>
 | 
						||
<xref linkend="opt-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>
 | 
						||
<xref linkend="opt-system.autoUpgrade.channel"/> = https://nixos.org/channels/nixos-19.09;
 | 
						||
</programlisting>
 | 
						||
  </para>
 | 
						||
 </section>
 | 
						||
</chapter>
 |