nixos: nixos/doc/manual/installation/changing-config.xml to CommonMark

This commit is contained in:
Bobby Rong 2021-07-04 00:09:43 +08:00
parent e7c482f789
commit b85403368f
4 changed files with 218 additions and 98 deletions

View file

@ -0,0 +1,117 @@
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="sec-changing-config">
<title>Changing the Configuration</title>
<para>
The file <literal>/etc/nixos/configuration.nix</literal> contains
the current configuration of your machine. Whenever youve
<link linkend="ch-configuration">changed something</link> in that
file, you should do
</para>
<programlisting>
# nixos-rebuild switch
</programlisting>
<para>
to build the new configuration, make it the default configuration
for booting, and try to realise the configuration in the running
system (e.g., by restarting system services).
</para>
<warning>
<para>
This command doesn't start/stop
<link xlink:href="options.html#opt-systemd.user.services">user
services</link> automatically. <literal>nixos-rebuild</literal>
only runs a <literal>daemon-reload</literal> for each user with
running user services.
</para>
</warning>
<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>
<para>
You can also do
</para>
<programlisting>
# nixos-rebuild test
</programlisting>
<para>
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>
<para>
There is also
</para>
<programlisting>
# nixos-rebuild boot
</programlisting>
<para>
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>
<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.
</para>
<programlisting>
# nixos-rebuild switch -p test
</programlisting>
<para>
which causes the new configuration (and previous ones created using
<literal>-p test</literal>) to show up in the GRUB submenu
<quote>NixOS - Profile 'test'</quote>. This can be useful to
separate test configurations from <quote>stable</quote>
configurations.
</para>
<para>
Finally, you can do
</para>
<programlisting>
$ nixos-rebuild build
</programlisting>
<para>
to build the configuration but nothing more. This is useful to see
whether everything compiles cleanly.
</para>
<para>
If you have a machine that supports hardware virtualisation, you can
also test the new configuration in a sandbox by building and running
a QEMU <emphasis>virtual machine</emphasis> that contains the
desired configuration. Just do
</para>
<programlisting>
$ nixos-rebuild build-vm
$ ./result/bin/run-*-vm
</programlisting>
<para>
The VM does not have any data from your host system, so your
existing user accounts and home directories will not be available
unless you have set <literal>mutableUsers = false</literal>. Another
way is to temporarily add the following to your configuration:
</para>
<programlisting language="bash">
users.users.your-user.initialHashedPassword = &quot;test&quot;;
</programlisting>
<para>
<emphasis>Important:</emphasis> delete the $hostname.qcow2 file if
you have started the virtual machine at least once without the right
users, otherwise the changes will not get picked up. You can forward
ports on the host to the guest. For instance, the following will
forward host port 2222 to guest port 22 (SSH):
</para>
<programlisting>
$ QEMU_NET_OPTS=&quot;hostfwd=tcp::2222-:22&quot; ./result/bin/run-*-vm
</programlisting>
<para>
allowing you to log in via SSH (assuming you have set the
appropriate passwords or SSH authorized keys):
</para>
<programlisting>
$ ssh -p 2222 localhost
</programlisting>
</chapter>

View file

@ -0,0 +1,100 @@
# Changing the Configuration {#sec-changing-config}
The file `/etc/nixos/configuration.nix` contains the current
configuration of your machine. Whenever you've [changed
something](#ch-configuration) in that file, you should do
```ShellSession
# nixos-rebuild switch
```
to build the new configuration, make it the default configuration for
booting, and try to realise the configuration in the running system
(e.g., by restarting system services).
::: {.warning}
This command doesn\'t start/stop [user services](options.html#opt-systemd.user.services)
automatically. `nixos-rebuild` only runs a `daemon-reload` for each user with running
user services.
:::
::: {.warning}
These commands must be executed as root, so you should either run them
from a root shell or by prefixing them with `sudo -i`.
:::
You can also do
```ShellSession
# nixos-rebuild test
```
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.
There is also
```ShellSession
# nixos-rebuild boot
```
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).
You can make your configuration show up in a different submenu of the
GRUB 2 boot screen by giving it a different *profile name*, e.g.
```ShellSession
# nixos-rebuild switch -p test
```
which causes the new configuration (and previous ones created using
`-p test`) to show up in the GRUB submenu "NixOS - Profile \'test\'".
This can be useful to separate test configurations from "stable"
configurations.
Finally, you can do
```ShellSession
$ nixos-rebuild build
```
to build the configuration but nothing more. This is useful to see
whether everything compiles cleanly.
If you have a machine that supports hardware virtualisation, you can
also test the new configuration in a sandbox by building and running a
QEMU *virtual machine* that contains the desired configuration. Just do
```ShellSession
$ nixos-rebuild build-vm
$ ./result/bin/run-*-vm
```
The VM does not have any data from your host system, so your existing
user accounts and home directories will not be available unless you have
set `mutableUsers = false`. Another way is to temporarily add the
following to your configuration:
```nix
users.users.your-user.initialHashedPassword = "test";
```
*Important:* delete the \$hostname.qcow2 file if you have started the
virtual machine at least once without the right users, otherwise the
changes will not get picked up. You can forward ports on the host to the
guest. For instance, the following will forward host port 2222 to guest
port 22 (SSH):
```ShellSession
$ QEMU_NET_OPTS="hostfwd=tcp::2222-:22" ./result/bin/run-*-vm
```
allowing you to log in via SSH (assuming you have set the appropriate
passwords or SSH authorized keys):
```ShellSession
$ ssh -p 2222 localhost
```

View file

@ -1,97 +0,0 @@
<chapter xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0"
xml:id="sec-changing-config">
<title>Changing the Configuration</title>
<para>
The file <filename>/etc/nixos/configuration.nix</filename> contains the
current configuration of your machine. Whenever youve
<link linkend="ch-configuration">changed something</link> in that file, you
should do
<screen>
<prompt># </prompt>nixos-rebuild switch
</screen>
to build the new configuration, make it the default configuration for
booting, and try to realise the configuration in the running system (e.g., by
restarting system services).
<warning>
<para>
This command doesn't start/stop <link linkend="opt-systemd.user.services">user
services</link> automatically. <command>nixos-rebuild</command> only runs a
<literal>daemon-reload</literal> for each user with running user services.
</para>
</warning>
</para>
<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>
<para>
You can also do
<screen>
<prompt># </prompt>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>
<para>
There is also
<screen>
<prompt># </prompt>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>
<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>
<prompt># </prompt>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>
<para>
Finally, you can do
<screen>
<prompt>$ </prompt>nixos-rebuild build
</screen>
to build the configuration but nothing more. This is useful to see whether
everything compiles cleanly.
</para>
<para>
If you have a machine that supports hardware virtualisation, you can also
test the new configuration in a sandbox by building and running a QEMU
<emphasis>virtual machine</emphasis> that contains the desired configuration.
Just do
<screen>
<prompt>$ </prompt>nixos-rebuild build-vm
<prompt>$ </prompt>./result/bin/run-*-vm
</screen>
The VM does not have any data from your host system, so your existing user
accounts and home directories will not be available unless you have set
<literal>mutableUsers = false</literal>. Another way is to temporarily add
the following to your configuration:
<screen>
<link linkend="opt-users.users._name_.initialHashedPassword">users.users.your-user.initialHashedPassword</link> = "test";
</screen>
<emphasis>Important:</emphasis> delete the $hostname.qcow2 file if you have
started the virtual machine at least once without the right users, otherwise
the changes will not get picked up. 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>
<prompt>$ </prompt>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>
<prompt>$ </prompt>ssh -p 2222 localhost
</screen>
</para>
</chapter>

View file

@ -12,6 +12,6 @@
</partintro>
<xi:include href="../from_md/installation/obtaining.chapter.xml" />
<xi:include href="installing.xml" />
<xi:include href="changing-config.xml" />
<xi:include href="../from_md/installation/changing-config.chapter.xml" />
<xi:include href="upgrading.xml" />
</part>