2007-02-06 22:14:02 +01:00
|
|
|
|
<chapter xmlns="http://docbook.org/ns/docbook"
|
2014-02-27 14:56:13 +01:00
|
|
|
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
|
|
|
|
xml:id="installing-nixos">
|
2007-02-06 22:14:02 +01:00
|
|
|
|
|
2013-01-08 02:02:15 +01:00
|
|
|
|
<title>Installing NixOS</title>
|
2007-02-06 22:14:02 +01:00
|
|
|
|
|
|
|
|
|
|
2012-05-14 04:02:45 +02:00
|
|
|
|
<!--===============================================================-->
|
|
|
|
|
|
|
|
|
|
<section>
|
|
|
|
|
|
|
|
|
|
<title>Obtaining NixOS</title>
|
|
|
|
|
|
|
|
|
|
<para>NixOS ISO images can be downloaded from the <link
|
|
|
|
|
xlink:href="http://nixos.org/nixos/download.html">NixOS
|
|
|
|
|
homepage</link>. These can be burned onto a CD. It is also possible
|
|
|
|
|
to copy them onto a USB stick and install NixOS from there. For
|
|
|
|
|
details, see the <link
|
|
|
|
|
xlink:href="https://nixos.org/wiki/Installing_NixOS_from_a_USB_stick">NixOS
|
|
|
|
|
Wiki</link>.</para>
|
2013-10-31 13:46:35 +01:00
|
|
|
|
|
|
|
|
|
<para>As an alternative to installing NixOS yourself, you can get a
|
|
|
|
|
running NixOS system through several other means:
|
|
|
|
|
|
|
|
|
|
<itemizedlist>
|
|
|
|
|
<listitem>
|
|
|
|
|
<para>Using virtual appliances in Open Virtualization Format (OVF)
|
|
|
|
|
that can be imported into VirtualBox. These are available from
|
|
|
|
|
the <link xlink:href="http://nixos.org/nixos/download.html">NixOS
|
|
|
|
|
homepage</link>.</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
<listitem>
|
|
|
|
|
<para>Using AMIs for Amazon’s EC2. To find one for your region
|
|
|
|
|
and instance type, please refer to the <link
|
|
|
|
|
xlink:href="https://github.com/NixOS/nixops/blob/master/nix/ec2-amis.nix">list
|
|
|
|
|
of most recent AMIs</link>.</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
<listitem>
|
|
|
|
|
<para>Using NixOps, the NixOS-based cloud deployment tool, which
|
|
|
|
|
allows you to provision VirtualBox and EC2 NixOS instances from
|
|
|
|
|
declarative specifications. Check out the <link
|
|
|
|
|
xlink:href="https://github.com/NixOS/nixops">NixOps
|
|
|
|
|
homepage</link> for details.</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
</itemizedlist>
|
|
|
|
|
|
|
|
|
|
</para>
|
2012-05-14 04:02:45 +02:00
|
|
|
|
|
|
|
|
|
</section>
|
|
|
|
|
|
|
|
|
|
|
2007-02-06 22:14:02 +01:00
|
|
|
|
<!--===============================================================-->
|
|
|
|
|
|
|
|
|
|
<section>
|
|
|
|
|
|
|
|
|
|
<title>Installation</title>
|
|
|
|
|
|
|
|
|
|
<orderedlist>
|
|
|
|
|
|
|
|
|
|
<listitem><para>Boot from the CD.</para></listitem>
|
|
|
|
|
|
2008-02-08 23:43:59 +01:00
|
|
|
|
<listitem><para>The CD contains a basic NixOS installation. (It
|
2012-04-10 16:12:49 +02:00
|
|
|
|
also contains Memtest86+, useful if you want to test new hardware.)
|
2008-02-08 23:43:59 +01:00
|
|
|
|
When it’s finished booting, it should have detected most of your
|
|
|
|
|
hardware and brought up networking (check
|
|
|
|
|
<command>ifconfig</command>). Networking is necessary for the
|
|
|
|
|
installer, since it will download lots of stuff (such as source
|
|
|
|
|
tarballs or Nixpkgs channel binaries). It’s best if you have a DHCP
|
2012-05-14 04:02:45 +02:00
|
|
|
|
server on your network. Otherwise configure networking manually
|
|
|
|
|
using <command>ifconfig</command>.</para></listitem>
|
2008-02-08 23:43:59 +01:00
|
|
|
|
|
2010-09-26 00:29:58 +02:00
|
|
|
|
<listitem><para>The NixOS manual is available on virtual console 8
|
|
|
|
|
(press Alt+F8 to access).</para></listitem>
|
2007-02-06 22:14:02 +01:00
|
|
|
|
|
2013-10-21 10:46:24 +02:00
|
|
|
|
<listitem><para>Login as <literal>root</literal> and the empty
|
2007-02-06 22:14:02 +01:00
|
|
|
|
password.</para></listitem>
|
|
|
|
|
|
2012-05-14 04:02:45 +02:00
|
|
|
|
<listitem><para>If you downloaded the graphical ISO image, you can
|
2013-03-24 22:07:27 +01:00
|
|
|
|
run <command>start display-manager</command> to start KDE.</para></listitem>
|
2012-05-14 04:02:45 +02:00
|
|
|
|
|
2007-02-06 22:14:02 +01:00
|
|
|
|
<listitem><para>The NixOS installer doesn’t do any partitioning or
|
|
|
|
|
formatting yet, so you need to that yourself. Use the following
|
|
|
|
|
commands:
|
|
|
|
|
|
|
|
|
|
<itemizedlist>
|
|
|
|
|
|
|
|
|
|
<listitem><para>For partitioning:
|
|
|
|
|
<command>fdisk</command>.</para></listitem>
|
2013-01-08 00:35:27 +01:00
|
|
|
|
|
2012-05-14 04:02:45 +02:00
|
|
|
|
<listitem><para>For initialising Ext4 partitions:
|
|
|
|
|
<command>mkfs.ext4</command>. It is recommended that you assign a
|
|
|
|
|
unique symbolic label to the file system using the option
|
2013-10-31 14:38:29 +01:00
|
|
|
|
<option>-L <replaceable>label</replaceable></option>, since this
|
|
|
|
|
makes the file system configuration independent from device
|
|
|
|
|
changes. For example:
|
|
|
|
|
|
|
|
|
|
<screen>
|
|
|
|
|
$ mkfs.ext4 -L nixos /dev/sda1</screen>
|
|
|
|
|
|
|
|
|
|
</para></listitem>
|
2007-02-06 22:14:02 +01:00
|
|
|
|
|
|
|
|
|
<listitem><para>For creating swap partitions:
|
|
|
|
|
<command>mkswap</command>. Again it’s recommended to assign a
|
|
|
|
|
label to the swap partition: <option>-L
|
|
|
|
|
<replaceable>label</replaceable></option>.</para></listitem>
|
2013-01-08 00:35:27 +01:00
|
|
|
|
|
2007-02-06 22:14:02 +01:00
|
|
|
|
<listitem><para>For creating LVM volumes, the LVM commands, e.g.,
|
|
|
|
|
|
|
|
|
|
<screen>
|
|
|
|
|
$ pvcreate /dev/sda1 /dev/sdb1
|
|
|
|
|
$ vgcreate MyVolGroup /dev/sda1 /dev/sdb1
|
2013-01-08 00:35:27 +01:00
|
|
|
|
$ lvcreate --size 2G --name bigdisk MyVolGroup
|
2007-02-06 22:14:02 +01:00
|
|
|
|
$ lvcreate --size 1G --name smalldisk MyVolGroup</screen>
|
|
|
|
|
|
2012-05-14 04:02:45 +02:00
|
|
|
|
</para></listitem>
|
2007-02-06 22:14:02 +01:00
|
|
|
|
|
2012-05-14 04:02:45 +02:00
|
|
|
|
<listitem><para>For creating software RAID devices, use
|
2007-02-06 22:14:02 +01:00
|
|
|
|
<command>mdadm</command>.</para></listitem>
|
|
|
|
|
|
2008-02-08 23:43:59 +01:00
|
|
|
|
</itemizedlist>
|
|
|
|
|
|
|
|
|
|
</para></listitem>
|
2013-01-08 00:35:27 +01:00
|
|
|
|
|
2012-05-14 04:02:45 +02:00
|
|
|
|
<listitem><para>Mount the target file system on which NixOS should
|
2013-10-21 10:46:24 +02:00
|
|
|
|
be installed on <filename>/mnt</filename>, e.g.
|
|
|
|
|
|
|
|
|
|
<screen>
|
|
|
|
|
$ mount /dev/disk/by-label/nixos /mnt
|
|
|
|
|
</screen>
|
|
|
|
|
|
|
|
|
|
</para></listitem>
|
2007-02-06 22:14:02 +01:00
|
|
|
|
|
2013-10-31 14:38:29 +01:00
|
|
|
|
<listitem><para>If your machine has a limited amount of memory, you
|
|
|
|
|
may want to activate swap devices now (<command>swapon
|
|
|
|
|
<replaceable>device</replaceable></command>). The installer (or
|
|
|
|
|
rather, the build actions that it may spawn) may need quite a bit of
|
|
|
|
|
RAM, depending on your configuration.</para></listitem>
|
|
|
|
|
|
2008-02-08 23:43:59 +01:00
|
|
|
|
<listitem>
|
|
|
|
|
|
2012-05-14 04:02:45 +02:00
|
|
|
|
<para>You now need to create a file
|
|
|
|
|
<filename>/mnt/etc/nixos/configuration.nix</filename> that
|
|
|
|
|
specifies the intended configuration of the system. This is
|
|
|
|
|
because NixOS has a <emphasis>declarative</emphasis> configuration
|
2013-10-21 10:46:24 +02:00
|
|
|
|
model: you create or edit a description of the desired
|
|
|
|
|
configuration of your system, and then NixOS takes care of making
|
|
|
|
|
it happen. The syntax of the NixOS configuration file is
|
|
|
|
|
described in <xref linkend="sec-configuration-syntax"/>, while a
|
|
|
|
|
list of available configuration options appears in <xref
|
|
|
|
|
linkend="ch-options"/>. A minimal example is shown in <xref
|
|
|
|
|
linkend="ex-config"/>.</para>
|
2008-02-08 23:43:59 +01:00
|
|
|
|
|
2013-10-21 10:46:24 +02:00
|
|
|
|
<para>The command <command>nixos-generate-config</command> can
|
|
|
|
|
generate an initial configuration file for you:
|
2008-02-08 23:43:59 +01:00
|
|
|
|
|
2013-10-21 10:46:24 +02:00
|
|
|
|
<screen>
|
|
|
|
|
$ nixos-generate-config --root /mnt</screen>
|
2008-02-08 23:43:59 +01:00
|
|
|
|
|
2013-10-21 10:46:24 +02:00
|
|
|
|
You should then edit
|
2012-05-14 04:02:45 +02:00
|
|
|
|
<filename>/mnt/etc/nixos/configuration.nix</filename> to suit your
|
2013-10-21 10:46:24 +02:00
|
|
|
|
needs:
|
|
|
|
|
|
|
|
|
|
<screen>
|
|
|
|
|
$ nano /mnt/etc/nixos/configuration.nix
|
|
|
|
|
</screen>
|
|
|
|
|
|
|
|
|
|
The <command>vim</command> text editor is also available.</para>
|
|
|
|
|
|
|
|
|
|
<para>You <emphasis>must</emphasis> set the option
|
|
|
|
|
<option>boot.loader.grub.device</option> to specify on which disk
|
|
|
|
|
the GRUB boot loader is to be installed. Without it, NixOS cannot
|
|
|
|
|
boot.</para>
|
|
|
|
|
|
|
|
|
|
<para>Another critical option is <option>fileSystems</option>,
|
|
|
|
|
specifying the file systems that need to be mounted by NixOS.
|
|
|
|
|
However, you typically don’t need to set it yourself, because
|
|
|
|
|
<command>nixos-generate-config</command> sets it automatically in
|
|
|
|
|
<filename>/mnt/etc/nixos/hardware-configuration.nix</filename>
|
|
|
|
|
from your currently mounted file systems. (The configuration file
|
|
|
|
|
<filename>hardware-configuration.nix</filename> is included from
|
|
|
|
|
<filename>configuration.nix</filename> and will be overwritten by
|
|
|
|
|
future invocations of <command>nixos-generate-config</command>;
|
|
|
|
|
thus, you generally should not modify it.)</para>
|
|
|
|
|
|
|
|
|
|
<note><para>Depending on your hardware configuration or type of
|
|
|
|
|
file system, you may need to set the option
|
|
|
|
|
<option>boot.initrd.kernelModules</option> to include the kernel
|
|
|
|
|
modules that are necessary for mounting the root file system,
|
|
|
|
|
otherwise the installed system will not be able to boot. (If this
|
|
|
|
|
happens, boot from the CD again, mount the target file system on
|
2008-02-08 23:43:59 +01:00
|
|
|
|
<filename>/mnt</filename>, fix
|
|
|
|
|
<filename>/mnt/etc/nixos/configuration.nix</filename> and rerun
|
2012-05-14 04:02:45 +02:00
|
|
|
|
<filename>nixos-install</filename>.) In most cases,
|
2013-10-21 10:46:24 +02:00
|
|
|
|
<command>nixos-generate-config</command> will figure out the
|
2012-05-14 04:02:45 +02:00
|
|
|
|
required modules.</para></note>
|
2007-02-06 22:14:02 +01:00
|
|
|
|
|
2012-05-14 04:02:45 +02:00
|
|
|
|
<para>Examples of real-world NixOS configuration files can be
|
|
|
|
|
found at <link
|
2011-10-06 13:29:44 +02:00
|
|
|
|
xlink:href="https://nixos.org/repos/nix/configurations/trunk/"/>.</para>
|
2010-09-26 00:30:02 +02:00
|
|
|
|
|
2008-02-08 23:43:59 +01:00
|
|
|
|
</listitem>
|
2013-01-08 00:35:27 +01:00
|
|
|
|
|
2008-02-08 23:43:59 +01:00
|
|
|
|
<listitem><para>Do the installation:
|
2007-02-06 22:14:02 +01:00
|
|
|
|
|
|
|
|
|
<screen>
|
|
|
|
|
$ nixos-install</screen>
|
|
|
|
|
|
2013-10-31 14:38:29 +01:00
|
|
|
|
Cross fingers. If this fails due to a temporary problem (such as
|
|
|
|
|
a network issue while downloading binaries from the NixOS binary
|
|
|
|
|
cache), you can just re-run <command>nixos-install</command>.
|
|
|
|
|
Otherwise, fix your <filename>configuration.nix</filename> and
|
|
|
|
|
then re-run <command>nixos-install</command>.</para></listitem>
|
2007-02-06 22:14:02 +01:00
|
|
|
|
|
2012-05-14 04:02:45 +02:00
|
|
|
|
<listitem><para>If everything went well:
|
2007-02-06 22:14:02 +01:00
|
|
|
|
|
|
|
|
|
<screen>
|
|
|
|
|
$ reboot</screen>
|
|
|
|
|
|
2008-02-08 23:43:59 +01:00
|
|
|
|
</para></listitem>
|
|
|
|
|
|
|
|
|
|
<listitem>
|
|
|
|
|
|
|
|
|
|
<para>You should now be able to boot into the installed NixOS.
|
2013-10-31 14:38:29 +01:00
|
|
|
|
The GRUB boot menu shows a list of <emphasis>available
|
2007-02-06 22:14:02 +01:00
|
|
|
|
configurations</emphasis> (initially just one). Every time you
|
2008-02-08 23:43:59 +01:00
|
|
|
|
change the NixOS configuration (see <xref
|
|
|
|
|
linkend="sec-changing-config" />), a new item appears in the menu.
|
2012-05-14 04:02:45 +02:00
|
|
|
|
This allows you to easily roll back to another configuration if
|
2007-02-06 22:14:02 +01:00
|
|
|
|
something goes wrong.</para>
|
|
|
|
|
|
|
|
|
|
<para>You should log in and change the <literal>root</literal>
|
2008-02-08 23:43:59 +01:00
|
|
|
|
password with <command>passwd</command>.</para>
|
2007-02-06 22:14:02 +01:00
|
|
|
|
|
2008-02-08 23:43:59 +01:00
|
|
|
|
<para>You’ll probably want to create some user accounts as well,
|
|
|
|
|
which can be done with <command>useradd</command>:
|
|
|
|
|
|
|
|
|
|
<screen>
|
|
|
|
|
$ useradd -c 'Eelco Dolstra' -m eelco
|
|
|
|
|
$ passwd eelco</screen>
|
|
|
|
|
|
|
|
|
|
</para>
|
|
|
|
|
|
|
|
|
|
<para>You may also want to install some software. For instance,
|
|
|
|
|
|
|
|
|
|
<screen>
|
|
|
|
|
$ nix-env -qa \*</screen>
|
|
|
|
|
|
|
|
|
|
shows what packages are available, and
|
|
|
|
|
|
2009-07-14 17:47:03 +02:00
|
|
|
|
<screen>
|
2008-02-08 23:43:59 +01:00
|
|
|
|
$ nix-env -i w3m</screen>
|
|
|
|
|
|
|
|
|
|
install the <literal>w3m</literal> browser.</para>
|
|
|
|
|
|
|
|
|
|
</listitem>
|
2007-02-06 22:14:02 +01:00
|
|
|
|
|
|
|
|
|
</orderedlist>
|
|
|
|
|
|
2013-10-31 14:38:29 +01:00
|
|
|
|
<para>To summarise, <xref linkend="ex-install-sequence" /> shows a
|
|
|
|
|
typical sequence of commands for installing NixOS on an empty hard
|
|
|
|
|
drive (here <filename>/dev/sda</filename>). <xref linkend="ex-config"
|
|
|
|
|
/> shows a corresponding configuration Nix expression.</para>
|
2008-02-08 23:43:59 +01:00
|
|
|
|
|
|
|
|
|
<example xml:id='ex-install-sequence'><title>Commands for installing NixOS on <filename>/dev/sda</filename></title>
|
|
|
|
|
<screen>
|
2013-10-31 14:38:29 +01:00
|
|
|
|
$ fdisk /dev/sda # <lineannotation>(or whatever device you want to install on)</lineannotation>
|
|
|
|
|
$ mkfs.ext4 -L nixos /dev/sda1
|
|
|
|
|
$ mkswap -L swap /dev/sda2
|
|
|
|
|
$ swapon /dev/sda2
|
|
|
|
|
$ mount /dev/disk/by-label/nixos /mnt
|
|
|
|
|
$ nixos-generate-config --root /mnt
|
2008-02-08 23:43:59 +01:00
|
|
|
|
$ nano /mnt/etc/nixos/configuration.nix
|
|
|
|
|
$ nixos-install
|
|
|
|
|
$ reboot</screen>
|
|
|
|
|
</example>
|
|
|
|
|
|
|
|
|
|
<example xml:id='ex-config'><title>NixOS configuration</title>
|
|
|
|
|
<screen>
|
2013-10-31 18:10:07 +01:00
|
|
|
|
{ config, pkgs, ... }:
|
|
|
|
|
|
2008-02-08 23:43:59 +01:00
|
|
|
|
{
|
2013-10-21 10:46:24 +02:00
|
|
|
|
imports =
|
|
|
|
|
[ # Include the results of the hardware scan.
|
|
|
|
|
./hardware-configuration.nix
|
|
|
|
|
];
|
|
|
|
|
|
2010-09-26 00:29:58 +02:00
|
|
|
|
boot.loader.grub.device = "/dev/sda";
|
2008-02-08 23:43:59 +01:00
|
|
|
|
|
2013-10-31 14:38:29 +01:00
|
|
|
|
# Note: setting fileSystems is generally not
|
|
|
|
|
# necessary, since nixos-generate-config figures them out
|
|
|
|
|
# automatically in hardware-configuration.nix.
|
|
|
|
|
#fileSystems."/".device = "/dev/disk/by-label/nixos";
|
2013-01-08 00:35:27 +01:00
|
|
|
|
|
2013-10-31 14:38:29 +01:00
|
|
|
|
# Enable the OpenSSH server.
|
2009-12-15 15:05:01 +01:00
|
|
|
|
services.sshd.enable = true;
|
2008-02-08 23:43:59 +01:00
|
|
|
|
}</screen>
|
|
|
|
|
</example>
|
|
|
|
|
|
2014-02-18 17:05:34 +01:00
|
|
|
|
<section xml:id="sec-uefi-installation">
|
2014-02-03 23:05:23 +01:00
|
|
|
|
|
|
|
|
|
<title>UEFI Installation</title>
|
|
|
|
|
|
|
|
|
|
<para>NixOS can also be installed on UEFI systems. The procedure
|
|
|
|
|
is by and large the same as a BIOS installation, with the following
|
|
|
|
|
changes:
|
|
|
|
|
|
|
|
|
|
<itemizedlist>
|
|
|
|
|
<listitem>
|
2014-02-18 17:05:34 +01:00
|
|
|
|
<para>You should boot the live CD in UEFI mode (consult your
|
|
|
|
|
specific hardware's documentation for instructions).</para>
|
2014-02-03 23:05:23 +01:00
|
|
|
|
</listitem>
|
|
|
|
|
<listitem>
|
2014-02-18 17:05:34 +01:00
|
|
|
|
<para>Instead of <command>fdisk</command>, you should use
|
|
|
|
|
<command>gdisk</command> to partition your disks. You will need to
|
|
|
|
|
have a separate partition for <filename>/boot</filename> with
|
|
|
|
|
partition code EF00, and it should be formatted as a
|
|
|
|
|
<literal>vfat</literal> filesystem.</para>
|
2014-02-03 23:05:23 +01:00
|
|
|
|
</listitem>
|
|
|
|
|
<listitem>
|
|
|
|
|
<para>You must set <option>boot.loader.gummiboot.enable</option> to
|
|
|
|
|
<literal>true</literal>, and <option>boot.loader.grub.enable</option>
|
|
|
|
|
to <literal>false</literal>. <command>nixos-generate-config</command>
|
|
|
|
|
should do this automatically for new configurations when booted in
|
|
|
|
|
UEFI mode.</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
<listitem>
|
|
|
|
|
<para>You may want to look at the options starting with
|
|
|
|
|
<option>boot.loader.efi</option> and <option>boot.loader.gummiboot</option>
|
|
|
|
|
as well.</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
<listitem>
|
2014-02-18 17:05:34 +01:00
|
|
|
|
<para>To see console messages during early boot, add <literal>"fbcon"</literal>
|
|
|
|
|
to your <option>boot.initrd.kernelModules</option>.</para>
|
2014-02-03 23:05:23 +01:00
|
|
|
|
</listitem>
|
|
|
|
|
</itemizedlist>
|
|
|
|
|
</para>
|
|
|
|
|
|
|
|
|
|
</section>
|
|
|
|
|
|
|
|
|
|
<section>
|
|
|
|
|
|
|
|
|
|
<title>Booting from a USB stick</title>
|
|
|
|
|
|
|
|
|
|
<para>For systems withoua CD drive, the NixOS livecd can be booted from
|
|
|
|
|
a usb stick. For non-UEFI installations,
|
|
|
|
|
<link xlink:href="http://unetbootin.sourceforge.net/">unetbootin</link>
|
|
|
|
|
will work. For UEFI installations, you should mount the ISO, copy its contents
|
|
|
|
|
verbatim to your drive, then either:
|
|
|
|
|
|
|
|
|
|
<itemizedlist>
|
|
|
|
|
<listitem>
|
|
|
|
|
<para>Change the label of the disk partition to the label of the ISO
|
|
|
|
|
(visible with the blkid command), or</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
<listitem>
|
|
|
|
|
<para>Edit <filename>loader/entries/nixos-livecd.conf</filename> on the drive
|
|
|
|
|
and change the <literal>root=</literal> field in the <literal>options</literal>
|
|
|
|
|
line to point to your drive (see the documentation on <literal>root=</literal>
|
|
|
|
|
in <link xlink:href="https://www.kernel.org/doc/Documentation/kernel-parameters.txt">
|
|
|
|
|
the kernel documentation</link> for more details).</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
</itemizedlist>
|
|
|
|
|
</para>
|
2007-02-06 22:14:02 +01:00
|
|
|
|
</section>
|
|
|
|
|
|
2014-02-03 23:05:23 +01:00
|
|
|
|
</section>
|
2007-02-06 22:14:02 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!--===============================================================-->
|
|
|
|
|
|
2007-02-06 22:25:36 +01:00
|
|
|
|
<section xml:id="sec-changing-config">
|
2007-02-06 22:14:02 +01:00
|
|
|
|
|
|
|
|
|
<title>Changing the configuration</title>
|
|
|
|
|
|
|
|
|
|
<para>The file <filename>/etc/nixos/configuration.nix</filename>
|
|
|
|
|
contains the current configuration of your machine. Whenever you’ve
|
2012-05-14 05:59:38 +02:00
|
|
|
|
changed something to that file, you should do
|
2007-02-06 22:14:02 +01:00
|
|
|
|
|
|
|
|
|
<screen>
|
|
|
|
|
$ nixos-rebuild switch</screen>
|
|
|
|
|
|
|
|
|
|
to build the new configuration, make it the default configuration for
|
2012-05-14 05:59:38 +02:00
|
|
|
|
booting, and try to realise the configuration in the running system
|
2007-02-06 22:14:02 +01:00
|
|
|
|
(e.g., by restarting system services).</para>
|
|
|
|
|
|
2013-10-31 14:38:29 +01:00
|
|
|
|
<warning><para>These commands must be executed as root, so you should
|
|
|
|
|
either run them from a root shell or by prefixing them with
|
|
|
|
|
<literal>sudo -i</literal>.</para></warning>
|
|
|
|
|
|
2013-01-08 00:35:27 +01:00
|
|
|
|
<para>You can also do
|
2007-02-06 22:14:02 +01:00
|
|
|
|
|
|
|
|
|
<screen>
|
|
|
|
|
$ nixos-rebuild test</screen>
|
|
|
|
|
|
|
|
|
|
to build the configuration and switch the running system to it, but
|
|
|
|
|
without making it the boot default. So if (say) the configuration
|
|
|
|
|
locks up your machine, you can just reboot to get back to a working
|
|
|
|
|
configuration.</para>
|
|
|
|
|
|
2013-01-08 00:35:27 +01:00
|
|
|
|
<para>There is also
|
2007-02-06 22:14:02 +01:00
|
|
|
|
|
|
|
|
|
<screen>
|
|
|
|
|
$ nixos-rebuild boot</screen>
|
|
|
|
|
|
|
|
|
|
to build the configuration and make it the boot default, but not
|
|
|
|
|
switch to it now (so it will only take effect after the next
|
|
|
|
|
reboot).</para>
|
|
|
|
|
|
2013-10-31 14:38:29 +01:00
|
|
|
|
<para>You can make your configuration show up in a different submenu
|
|
|
|
|
of the GRUB 2 boot screen by giving it a different <emphasis>profile
|
|
|
|
|
name</emphasis>, e.g.
|
|
|
|
|
|
|
|
|
|
<screen>
|
|
|
|
|
$ nixos-rebuild switch -p test </screen>
|
|
|
|
|
|
|
|
|
|
which causes the new configuration (and previous ones created using
|
|
|
|
|
<literal>-p test</literal>) to show up in the GRUB submenu “NixOS -
|
|
|
|
|
Profile 'test'”. This can be useful to separate test configurations
|
|
|
|
|
from “stable” configurations.</para>
|
|
|
|
|
|
2013-01-08 00:35:27 +01:00
|
|
|
|
<para>Finally, you can do
|
2007-02-06 22:14:02 +01:00
|
|
|
|
|
|
|
|
|
<screen>
|
|
|
|
|
$ nixos-rebuild build</screen>
|
|
|
|
|
|
|
|
|
|
to build the configuration but nothing more. This is useful to see
|
|
|
|
|
whether everything compiles cleanly.</para>
|
|
|
|
|
|
2012-05-14 05:59:38 +02:00
|
|
|
|
<para>If you have a machine that supports hardware virtualisation, you
|
|
|
|
|
can also test the new configuration in a sandbox by building and
|
2013-10-31 14:38:29 +01:00
|
|
|
|
running a QEMU <emphasis>virtual machine</emphasis> that contains the
|
2012-05-14 05:59:38 +02:00
|
|
|
|
desired configuration. Just do
|
|
|
|
|
|
|
|
|
|
<screen>
|
|
|
|
|
$ nixos-rebuild build-vm
|
|
|
|
|
$ ./result/bin/run-*-vm
|
|
|
|
|
</screen>
|
|
|
|
|
|
2013-11-07 12:26:38 +01:00
|
|
|
|
The VM does not have any data from your host system, so your existing
|
|
|
|
|
user accounts and home directories will not be available. You can
|
|
|
|
|
forward ports on the host to the guest. For instance, the following
|
|
|
|
|
will forward host port 2222 to guest port 22 (SSH):
|
|
|
|
|
|
|
|
|
|
<screen>
|
|
|
|
|
$ QEMU_NET_OPTS="hostfwd=tcp::2222-:22" ./result/bin/run-*-vm
|
|
|
|
|
</screen>
|
|
|
|
|
|
|
|
|
|
allowing you to log in via SSH (assuming you have set the appropriate
|
|
|
|
|
passwords or SSH authorized keys):
|
|
|
|
|
|
|
|
|
|
<screen>
|
|
|
|
|
$ ssh -p 2222 localhost
|
|
|
|
|
</screen>
|
|
|
|
|
|
|
|
|
|
</para>
|
2012-05-14 05:59:38 +02:00
|
|
|
|
|
2007-02-06 22:14:02 +01:00
|
|
|
|
</section>
|
|
|
|
|
|
|
|
|
|
|
2007-02-06 22:25:36 +01:00
|
|
|
|
<!--===============================================================-->
|
|
|
|
|
|
2013-08-19 17:42:57 +02:00
|
|
|
|
<section xml:id="sec-upgrading">
|
2007-02-06 22:25:36 +01:00
|
|
|
|
|
2012-05-14 05:59:38 +02:00
|
|
|
|
<title>Upgrading NixOS</title>
|
2007-02-06 22:25:36 +01:00
|
|
|
|
|
2012-05-14 05:59:38 +02:00
|
|
|
|
<para>The best way to keep your NixOS installation up to date is to
|
2013-10-31 14:38:29 +01:00
|
|
|
|
use one of the NixOS <emphasis>channels</emphasis>. A channel is a
|
2012-05-14 05:59:38 +02:00
|
|
|
|
Nix mechanism for distributing Nix expressions and associated
|
2013-10-31 14:38:29 +01:00
|
|
|
|
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:
|
2007-02-06 22:25:36 +01:00
|
|
|
|
|
2013-10-31 14:38:29 +01:00
|
|
|
|
<itemizedlist>
|
|
|
|
|
<listitem>
|
|
|
|
|
<para>Stable channels, such as <literal
|
|
|
|
|
xlink:href="http://nixos.org/channels/nixos-13.10">nixos-13.10</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
|
2013-10-31 18:49:04 +01:00
|
|
|
|
potential to break things). Stable channels are generally
|
|
|
|
|
maintained until the next stable branch is created.</para>
|
2013-10-31 14:38:29 +01:00
|
|
|
|
</listitem>
|
|
|
|
|
<listitem>
|
|
|
|
|
<para>The unstable channel, <literal
|
|
|
|
|
xlink:href="http://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>
|
|
|
|
|
</itemizedlist>
|
|
|
|
|
|
|
|
|
|
To see what channels are available, go to <link
|
|
|
|
|
xlink:href="http://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 13.10 ISO, you will be subscribed to
|
|
|
|
|
the <literal>nixos-13.10</literal> channel. To see which NixOS
|
|
|
|
|
channel you’re subscribed to, run the following as root:
|
2007-02-06 22:25:36 +01:00
|
|
|
|
|
|
|
|
|
<screen>
|
2013-10-31 14:38:29 +01:00
|
|
|
|
$ nix-channel --list | grep nixos
|
|
|
|
|
nixos https://nixos.org/channels/nixos-unstable
|
2012-05-14 05:59:38 +02:00
|
|
|
|
</screen>
|
2007-02-06 22:25:36 +01:00
|
|
|
|
|
2013-10-31 14:38:29 +01:00
|
|
|
|
To switch to a different NixOS channel, do
|
2007-02-06 22:25:36 +01:00
|
|
|
|
|
2012-05-14 05:59:38 +02:00
|
|
|
|
<screen>
|
2013-10-31 14:38:29 +01:00
|
|
|
|
$ nix-channel --add http://nixos.org/channels/<replaceable>channel-name</replaceable> nixos
|
2012-05-14 05:59:38 +02:00
|
|
|
|
</screen>
|
2007-02-06 22:25:36 +01:00
|
|
|
|
|
2013-10-31 14:38:29 +01:00
|
|
|
|
(Be sure to include the <literal>nixos</literal> parameter at the
|
|
|
|
|
end.) For instance, to use the NixOS 13.10 stable channel:
|
|
|
|
|
|
|
|
|
|
<screen>
|
|
|
|
|
$ nix-channel --add http://nixos.org/channels/nixos-13.10 nixos
|
|
|
|
|
</screen>
|
|
|
|
|
|
|
|
|
|
But it you want to live on the bleeding edge:
|
|
|
|
|
|
|
|
|
|
<screen>
|
|
|
|
|
$ nix-channel --add http://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>
|
2007-02-06 22:25:36 +01:00
|
|
|
|
|
2012-05-14 05:59:38 +02:00
|
|
|
|
</section>
|
2007-02-06 22:25:36 +01:00
|
|
|
|
|
2007-11-05 22:17:16 +01:00
|
|
|
|
</chapter>
|