2021-08-06 01:39:56 +02:00
|
|
|
|
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="sec-building-image">
|
|
|
|
|
<title>Building a NixOS (Live) ISO</title>
|
2020-12-23 06:56:46 +01:00
|
|
|
|
<para>
|
2021-08-06 01:39:56 +02:00
|
|
|
|
Default live installer configurations are available inside
|
|
|
|
|
<literal>nixos/modules/installer/cd-dvd</literal>. For building
|
|
|
|
|
other system images,
|
|
|
|
|
<link xlink:href="https://github.com/nix-community/nixos-generators">nixos-generators</link>
|
|
|
|
|
is a good place to start looking at.
|
2020-12-23 06:56:46 +01:00
|
|
|
|
</para>
|
|
|
|
|
<para>
|
2021-08-06 01:39:56 +02:00
|
|
|
|
You have two options:
|
2020-12-23 06:56:46 +01:00
|
|
|
|
</para>
|
2021-08-06 01:39:56 +02:00
|
|
|
|
<itemizedlist spacing="compact">
|
|
|
|
|
<listitem>
|
|
|
|
|
<para>
|
|
|
|
|
Use any of those default configurations as is
|
|
|
|
|
</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
<listitem>
|
|
|
|
|
<para>
|
|
|
|
|
Combine them with (any of) your host config(s)
|
|
|
|
|
</para>
|
|
|
|
|
</listitem>
|
|
|
|
|
</itemizedlist>
|
|
|
|
|
<para>
|
|
|
|
|
System images, such as the live installer ones, know how to enforce
|
|
|
|
|
configuration settings on wich they immediately depend in order to
|
|
|
|
|
work correctly.
|
|
|
|
|
</para>
|
|
|
|
|
<para>
|
|
|
|
|
However, if you are confident, you can opt to override those
|
|
|
|
|
enforced values with <literal>mkForce</literal>.
|
|
|
|
|
</para>
|
|
|
|
|
<section xml:id="sec-building-image-instructions">
|
|
|
|
|
<title>Practical Instructions</title>
|
|
|
|
|
<programlisting>
|
2020-12-23 06:56:46 +01:00
|
|
|
|
$ git clone https://github.com/NixOS/nixpkgs.git
|
|
|
|
|
$ cd nixpkgs/nixos
|
|
|
|
|
$ nix-build -A config.system.build.isoImage -I nixos-config=modules/installer/cd-dvd/installation-cd-minimal.nix default.nix
|
|
|
|
|
</programlisting>
|
2021-08-06 01:39:56 +02:00
|
|
|
|
<para>
|
|
|
|
|
To check the content of an ISO image, mount it like so:
|
|
|
|
|
</para>
|
|
|
|
|
<programlisting>
|
|
|
|
|
# mount -o loop -t iso9660 ./result/iso/cd.iso /mnt/iso
|
2020-12-23 06:56:46 +01:00
|
|
|
|
</programlisting>
|
2021-08-06 01:39:56 +02:00
|
|
|
|
</section>
|
|
|
|
|
<section xml:id="sec-building-image-tech-notes">
|
|
|
|
|
<title>Technical Notes</title>
|
|
|
|
|
<para>
|
|
|
|
|
The config value enforcement is implemented via
|
|
|
|
|
<literal>mkImageMediaOverride = mkOverride 60;</literal> and
|
|
|
|
|
therefore primes over simple value assignments, but also yields to
|
|
|
|
|
<literal>mkForce</literal>.
|
|
|
|
|
</para>
|
|
|
|
|
<para>
|
|
|
|
|
This property allows image designers to implement in semantically
|
|
|
|
|
correct ways those configuration values upon which the correct
|
|
|
|
|
functioning of the image depends.
|
|
|
|
|
</para>
|
|
|
|
|
<para>
|
|
|
|
|
For example, the iso base image overrides those file systems which
|
|
|
|
|
it needs at a minimum for correct functioning, while the installer
|
|
|
|
|
base image overrides the entire file system layout because there
|
|
|
|
|
can’t be any other guarantees on a live medium than those given by
|
|
|
|
|
the live medium itself. The latter is especially true befor
|
|
|
|
|
formatting the target block device(s). On the other hand, the
|
|
|
|
|
netboot iso only overrides its minimum dependencies since netboot
|
|
|
|
|
images are always made-to-target.
|
|
|
|
|
</para>
|
|
|
|
|
</section>
|
2020-12-23 06:56:46 +01:00
|
|
|
|
</chapter>
|