With the target partitions ready and the target root mounted on /mnt, we’re ready to go. First, run:
herd start cow-store /mnt
This makes /gnu/store copy-on-write, such that packages added to it
during the installation phase are written to the target disk on /mnt
rather than kept in memory. This is necessary because the first phase of
guix system init command (see below) entails downloads or
builds to /gnu/store which, initially, is an in-memory file system.
Next, you have to edit a file and
provide the declaration of the operating system to be installed. To
that end, the installation system comes with three text editors: GNU nano
(see GNU nano Manual), GNU Zile (an Emacs clone), and
nvi (a clone of the original BSD
We strongly recommend storing that file on the target root file system, say,
as /mnt/etc/config.scm. Failing to do that, you will have lost your
configuration file once you have rebooted into the newly-installed system.
See Using the Configuration System, for an overview of the configuration file. The example configurations discussed in that section are available under /etc/configuration in the installation image. Thus, to get started with a system configuration providing a graphical display server (a “desktop” system), you can run something along these lines:
# mkdir /mnt/etc # cp /etc/configuration/desktop.scm /mnt/etc/config.scm # zile /mnt/etc/config.scm
You should pay attention to what your configuration file contains, and in particular:
grub-configurationform refers to the target you want to install GRUB on. It should mention
grub-bootloaderif you are installing GRUB in the legacy way, or
grub-efi-bootloaderfor newer UEFI systems. For legacy systems, the
targetfield names a device, like
/dev/sda; for UEFI systems it names a path to a mounted EFI partition, like
/boot/efi, and do make sure the path is actually mounted.
devicefields in your
file-systemconfiguration, assuming your
file-systemconfiguration sets the value of
mapped-devicesfield to describe them (see Mapped Devices).
Once you are done preparing the configuration file, the new system must be initialized (remember that the target root file system is mounted under /mnt):
guix system init /mnt/etc/config.scm /mnt
This copies all the necessary files and installs GRUB on /dev/sdX, unless you pass the --no-bootloader option. For more information, see Invoking guix system. This command may trigger downloads or builds of missing packages, which can take some time.
Once that command has completed—and hopefully succeeded!—you can run
reboot and boot into the new system. The
in the new system is initially empty; other users’ passwords need to be
initialized by running the
passwd command as
unless your configuration specifies otherwise
(see user account passwords).
From then on, you can update GuixSD whenever you want by running
guix pull as
root (see Invoking guix pull), and
guix system reconfigure to build a new system
generation with the latest packages and services (see Invoking guix system). We recommend doing that regularly so that your system
includes the latest security updates (see Security Updates).
Join us on
#guix on the Freenode IRC network or on
email@example.com to share your experience—good or not so