mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-12-25 07:05:13 +00:00
c1295661c4
like `build-vm', but boots using the regular boot loader (i.e. GRUB 1 or 2) rather than booting directly from the kernel/initrd. Thus it allows testing of GRUB. svn path=/nixos/trunk/; revision=23747
339 lines
12 KiB
XML
339 lines
12 KiB
XML
<refentry xmlns="http://docbook.org/ns/docbook"
|
||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||
xmlns:xi="http://www.w3.org/2001/XInclude">
|
||
|
||
<refmeta>
|
||
<refentrytitle><command>nixos-rebuild</command></refentrytitle>
|
||
<manvolnum>8</manvolnum>
|
||
<refmiscinfo class="source">NixOS</refmiscinfo>
|
||
<!-- <refmiscinfo class="version"><xi:include href="version.txt" parse="text"/></refmiscinfo> -->
|
||
</refmeta>
|
||
|
||
<refnamediv>
|
||
<refname><command>nixos-rebuild</command></refname>
|
||
<refpurpose>reconfigure a NixOS machine</refpurpose>
|
||
</refnamediv>
|
||
|
||
<refsynopsisdiv>
|
||
<cmdsynopsis>
|
||
<command>nixos-rebuild</command>
|
||
<group choice='req'>
|
||
<arg choice='plain'><option>switch</option></arg>
|
||
<arg choice='plain'><option>boot</option></arg>
|
||
<arg choice='plain'><option>test</option></arg>
|
||
<arg choice='plain'><option>build</option></arg>
|
||
<arg choice='plain'><option>dry-run</option></arg>
|
||
<arg choice='plain'><option>build-vm</option></arg>
|
||
<arg choice='plain'><option>build-vm-with-bootloader</option></arg>
|
||
<arg choice='plain'><option>pull</option></arg>
|
||
</group>
|
||
<sbr />
|
||
<arg><option>--install-grub</option></arg>
|
||
<arg><option>--no-pull</option></arg>
|
||
<arg><option>--no-build-nix</option></arg>
|
||
<arg><option>--fast</option></arg>
|
||
<arg><option>--rollback</option></arg>
|
||
<sbr />
|
||
<arg><option>--show-trace</option></arg>
|
||
</cmdsynopsis>
|
||
</refsynopsisdiv>
|
||
|
||
|
||
<refsection><title>Description</title>
|
||
|
||
<para>This command updates the system so that it corresponds to the
|
||
configuration specified in
|
||
<filename>/etc/nixos/configuration.nix</filename>. Thus, every time
|
||
you modify <filename>/etc/nixos/configuration.nix</filename> or any
|
||
NixOS module, you must run <command>nixos-rebuild</command> to make
|
||
the changes take effect. It builds the new system in
|
||
<filename>/nix/store</filename>, runs its activation script, and stop
|
||
and (re)starts any system services if needed.</para>
|
||
|
||
<para>This command has one required argument, which specifies the
|
||
desired operation. It must be one of the following:
|
||
|
||
<variablelist>
|
||
|
||
<varlistentry>
|
||
<term><option>switch</option></term>
|
||
<listitem>
|
||
<para>Build and activate the new configuration, and make it the
|
||
boot default. That is, the configuration is added to the GRUB
|
||
boot menu as the default meny entry, so that subsequent reboots
|
||
will boot the system into the new configuration. Previous
|
||
configurations activated with <command>nixos-rebuild
|
||
switch</command> or <command>nixos-rebuild boot</command> remain
|
||
available in the GRUB menu.</para>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry>
|
||
<term><option>boot</option></term>
|
||
<listitem>
|
||
<para>Build the new configuration and make it the boot default
|
||
(as with <command>nixos-rebuild switch</command>), but do not
|
||
activate it. That is, the system continues to run the previous
|
||
configuration until the next reboot.</para>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry>
|
||
<term><option>test</option></term>
|
||
<listitem>
|
||
<para>Build and activate the new configuration, but do not add
|
||
it to the GRUB boot menu. Thus, if you reboot the system (or if
|
||
it crashes), you will automatically revert to the default
|
||
configuration (i.e. the configuration resulting from the last
|
||
call to <command>nixos-rebuild switch</command> or
|
||
<command>nixos-rebuild boot</command>).</para>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry>
|
||
<term><option>build</option></term>
|
||
<listitem>
|
||
<para>Build the new configuration, but neither activate it nor
|
||
add it to the GRUB boot menu. It leaves a symlink named
|
||
<filename>result</filename> in the current directory, which
|
||
points to the output of the top-level “system” derivation. This
|
||
is essentially the same as doing
|
||
<screen>
|
||
$ nix-build /etc/nixos/nixos -A system
|
||
</screen>
|
||
Note that you do not need to be <literal>root</literal> to run
|
||
<command>nixos-rebuild build</command>.</para>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry>
|
||
<term><option>dry-run</option></term>
|
||
<listitem>
|
||
<para>Simply show what store paths would be built or downloaded
|
||
by any of the operations above.</para>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry>
|
||
<term><option>build-vm</option></term>
|
||
<listitem>
|
||
<para>Build a script that starts a NixOS virtual machine with
|
||
the desired configuration. It leaves a symlink
|
||
<filename>result</filename> in the current directory that points
|
||
(under
|
||
<filename>result/bin/run-<replaceable>hostname</replaceable>-vm</filename>)
|
||
at the script that starts the VM. Thus, to test a NixOS
|
||
configuration in a virtual machine, you should do the following:
|
||
<screen>
|
||
$ nixos-rebuild build-vm
|
||
$ ./result/bin/run-*-vm
|
||
</screen></para>
|
||
|
||
<para>The VM is implemented using the
|
||
<literal>qemu-kvm</literal> package. For best performance, you
|
||
should load the <literal>kvm-intel</literal> or
|
||
<literal>kvm-amd</literal> kernel modules.</para>
|
||
|
||
<para>The VM mounts the Nix store of the host through the CIFS
|
||
filesystem. (<literal>qemu-kvm</literal> automatically starts a
|
||
Samba daemon for this purpose.) The host Nix store is
|
||
read-only, so Nix commands that modify the Nix store will not
|
||
work in the VM. This includes commands such as
|
||
<command>nixos-rebuild</command>; to change the VM’s
|
||
configuration, you must halt the VM and re-run the commands
|
||
above.
|
||
</para>
|
||
|
||
<para>The VM has its own <literal>ext3</literal> root
|
||
filesystem, which is automatically created when the VM is first
|
||
started, and is persistent across reboots of the VM. It is
|
||
stored in <literal>./<replaceable>hostname</replaceable>.qcow2</literal>.
|
||
The entire filesystem hierarchy of the host is available in the
|
||
VM under <filename>/hostfs</filename>.</para>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry>
|
||
<term><option>build-vm-with-bootloader</option></term>
|
||
<listitem>
|
||
<para>Like <option>build-vm</option>, but boots using the
|
||
regular boot loader of your configuration (e.g., GRUB 1 or 2),
|
||
rather than booting directly into the kernel and initial ramdisk
|
||
of the system. This allows you to test whether the boot loader
|
||
works correctly. However, it does not guarantee that your NixOS
|
||
configuration will boot successfully on the host hardware (i.e.,
|
||
after running <command>nixos-rebuild switch</command>), because
|
||
the hardware and boot loader configuration in the VM are
|
||
different. The boot loader is installed on an automatically
|
||
generated virtual disk containing a <filename>/boot</filename>
|
||
partition, which is mounted read-only in the VM.</para>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry>
|
||
<term><option>pull</option></term>
|
||
<listitem>
|
||
<para>This operation merely fetches the latest manifest in the
|
||
Nixpkgs channel to speed up subsequent
|
||
<command>nix-env</command> operations. This is useful if you
|
||
are not using <command>nix-channel</command> but still want to
|
||
use pre-built binary packages. It doesn’t reconfigure the
|
||
system at all.</para>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
</variablelist>
|
||
|
||
</para>
|
||
|
||
|
||
</refsection>
|
||
|
||
|
||
<refsection><title>Options</title>
|
||
|
||
<para>This command accepts the following options:</para>
|
||
|
||
<variablelist>
|
||
|
||
<varlistentry>
|
||
<term><option>--install-grub</option></term>
|
||
<listitem>
|
||
<para>Causes the GRUB boot loader to be (re)installed on the
|
||
device specified by the
|
||
<varname>boot.loader.grub.device</varname> configuration
|
||
option.</para>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry>
|
||
<term><option>--no-pull</option></term>
|
||
<listitem>
|
||
<para>Normally, <command>nixos-rebuild</command> calls
|
||
<command>nix-pull</command> to obtain the set of available
|
||
pre-built binaries in the Nixpkgs channel. This option causes
|
||
the call to <command>nix-pull</command> to be skipped. Note
|
||
that the result of previous invocations of
|
||
<command>nix-pull</command> may still be available in
|
||
<filename>/nix/var/nix/manifests</filename>, so to disable the
|
||
use of pre-built binaries, you should clear that directory in
|
||
addition to using <option>--no-pull</option>.</para>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry>
|
||
<term><option>--no-build-nix</option></term>
|
||
<listitem>
|
||
<para>Normally, <command>nixos-rebuild</command> first builds
|
||
the <varname>nixUnstable</varname> attribute in Nixpkgs, and
|
||
uses the resulting instance of the Nix package manager to build
|
||
the new system configuration. This is necessary if the NixOS
|
||
modules use features not provided by the currently installed
|
||
version of Nix. This option disables building a new Nix.</para>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry>
|
||
<term><option>--fast</option></term>
|
||
<listitem>
|
||
<para>Equivalent to <option>--no-pull</option>
|
||
<option>--no-build-nix</option> <option>--show-trace</option>.
|
||
This option is useful if you call
|
||
<command>nixos-rebuild</command> frequently (e.g. if you’re
|
||
hacking on a NixOS module).</para>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry>
|
||
<term><option>--rollback</option></term>
|
||
<listitem>
|
||
<para>Instead of building a new configuration as specified by
|
||
<filename>/etc/nixos/configuration.nix</filename>, roll back to
|
||
the previous configuration. (The previous configuration is
|
||
defined as the one before the “current” generation of the
|
||
profile <filename>/nix/var/nix/profiles/system</filename>.)</para>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
</variablelist>
|
||
|
||
<para>In addition, <command>nixos-rebuild</command> accepts various
|
||
Nix-related flags, including <option>--max-jobs</option> /
|
||
<option>-j</option>, <option>--show-trace</option>,
|
||
<option>--keep-failed</option>, <option>--keep-going</option> and
|
||
<option>--verbose</option> / <option>-v</option>. See
|
||
the Nix manual for details.</para>
|
||
|
||
</refsection>
|
||
|
||
|
||
<refsection><title>Environment</title>
|
||
|
||
<variablelist>
|
||
|
||
<varlistentry>
|
||
<term><envar>NIXOS</envar></term>
|
||
<listitem>
|
||
<para>Path to the NixOS source tree. Defaults to
|
||
<filename>/etc/nixos/nixos</filename>.</para>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry>
|
||
<term><envar>NIXPKGS</envar></term>
|
||
<listitem>
|
||
<para>Path to the Nixpkgs source tree. Defaults to
|
||
<filename>/etc/nixos/nixpkgs</filename>.</para>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry>
|
||
<term><envar>NIXOS_CONFIG</envar></term>
|
||
<listitem>
|
||
<para>Path to the main NixOS configuration module. Defaults to
|
||
<filename>/etc/nixos/configuration.nix</filename>.</para>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
</variablelist>
|
||
|
||
</refsection>
|
||
|
||
|
||
<refsection><title>Files</title>
|
||
|
||
<variablelist>
|
||
|
||
<varlistentry>
|
||
<term><filename>/var/run/current-system</filename></term>
|
||
<listitem>
|
||
<para>A symlink to the currently active system configuration in
|
||
the Nix store.</para>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
<varlistentry>
|
||
<term><filename>/nix/var/nix/profiles/system</filename></term>
|
||
<listitem>
|
||
<para>The Nix profile that contains the current and previous
|
||
system configurations. Used to generate the GRUB boot
|
||
menu.</para>
|
||
</listitem>
|
||
</varlistentry>
|
||
|
||
</variablelist>
|
||
|
||
</refsection>
|
||
|
||
|
||
<refsection><title>Bugs</title>
|
||
|
||
<para>This command should be renamed to something more
|
||
descriptive.</para>
|
||
|
||
</refsection>
|
||
|
||
|
||
|
||
</refentry>
|